2024-05-10

29 篇热帖

1. Jim Simons has died (www.simonsfoundation.org)

2024年5月10日,西蒙斯基金会联合创始人兼名誉主席詹姆斯·哈里斯·西蒙斯(James Harris Simons)在纽约去世,享年86岁。

西蒙斯是杰出的数学家、量化投资领域的传奇人物,同时也是一位富有远见且慷慨的慈善家。他与妻子、现任基金会主席玛丽莲·西蒙斯共同向数百项慈善事业捐赠数十亿美元,重点支持数学与基础科学研究及教育。1994年,他们创立了西蒙斯基金会,致力于资助全球科学家和组织推进数学与基础科学的前沿研究。

西蒙斯一生将职业经历概括为三个阶段:数学家、投资者和慈善家。他曾担任纽约石溪大学数学系主任,其在该时期的数学突破对弦理论、拓扑学和凝聚态物理等领域产生了重要影响。1978年,他创立了后来成为文艺复兴科技公司的对冲基金,该公司开创了量化交易模式,成为历史上最成功的投资机构之一。

此后,西蒙斯将重心转向通过西蒙斯基金会、国际西蒙斯基金会、“为美国而教”数学项目等慈善事业推动社会变革。在基金会成立三十年的历程中,其资助的工作已在自闭症研究、宇宙起源、细胞生物学和计算科学等领域取得重大突破。

西蒙斯直至生命尽头仍积极参与基金会工作,其好奇心与对数学及基础科学的热情持续激励着周围的人。他致力于显著提升美国对数学与基础科学的支持水平,特别关注那些重要却难以获得其他资助的项目。

基金会总裁戴维·斯珀格尔评价称,西蒙斯是杰出的领导者,在数学领域完成了开创性工作,并建立了世界领先的投资公司。他与玛丽莲·西蒙斯共同创立的基金会已对数学、基础科学和自闭症研究产生深远影响,作为永久性基金会将持续承载他们的慈善愿景。

西蒙斯身后留下妻子、三个子女、五名孙辈、一名曾孙以及无数同事、亲友。追悼活动信息将在西蒙斯基金会网站公布。

2. Show HN: A web debugger an ex-Cloudflare team has been working on for 4 years
5. Leaked deck reveals how OpenAI is pitching publisher partnerships (www.adweek.com)

根据ADWEEK获取的泄露演示文稿及相关行业高管采访,OpenAI通过名为“Preferred Publishers Program”(优先出版商计划)的倡议向新闻出版商推销合作机会。自2023年7月与Associated Press(美联社)达成许可协议以来,OpenAI一直在积极寻求与高端出版商的合作。目前,已公开的合作方包括Axel Springer、The Financial Times(金融时报)、Le Monde(世界报)、Prisa和Dotdash Meredith,但OpenAI未分享任何合作的具体细节。该演示文稿已超过三个月,OpenAI代表对其信息的准确性提出异议。

6. Superfile – A fancy, pretty terminal file manager (github.com)

Superfile 概述

Superfile 是一个功能丰富、界面美观的终端文件管理器。

主要功能与特性

  • 演示:项目提供了演示内容,展示常见文件操作。
  • 安装:支持多种操作系统和安装方式:
    • macOS/Linux:通过运行特定安装脚本。
    • Windows:支持通过 PowerShell、Winget 或 Scoop 安装。
    • 也支持从源码自行构建。
  • 构建:需要 Go 语言环境。步骤包括克隆仓库并使用提供的构建脚本或手动编译,最后将可执行文件添加到系统 PATH。
  • 启动:安装后通过 spf 命令启动。
  • 支持的系统:Linux、macOS 和 Windows(Windows 支持尚不完整)。
  • 教程:提供入门使用教程。
  • 插件、主题与热键:支持通过插件扩展功能,提供主题自定义和可配置的快捷键(特别提示 Vim 用户可切换到 Vim 风格键位)。
  • 自动更新:默认每24小时检查一次 GitHub 上的最新版本并提示用户。此功能可在配置文件中关闭。
  • 故障排除:提供常见问题的解决方案。
  • 卸载:提供了针对不同安装方式的卸载指南。

社区与贡献

  • 项目欢迎社区贡献,并提供贡献指南。
  • 列出了核心维护者和贡献者,并致谢所有支持者。
  • 项目由 JetBrains 提供的开源许可证支持开发。
  • 作者鼓励用户通过 Star 项目或提供赞助来表示支持。
8. Life-like particle system (ventrella.com)

Clusters 是一个具有涌现模式不对称粒子系统

该系统的主要特点包括:

  • 交互式生态系统:用户可选择不同的预设生态系统。
  • 可调节参数:能够实时调整粒子数量、物种数量以及粒子轨迹等核心参数,以观察系统行为变化。
  • 启发性:该项目是 Tom Mohr 的 Particle Life 以及 ciphrd 的 Atomic Clusters 的灵感来源。

资源与链接

  • 源码:提供了一个包含源代码的压缩包(ventrella.com/Clusters/Clusters.code.Dec.27.2025.zip)。
  • 说明:提供了视频和文本形式的解释,以及一个展示粒子与交互的旧视频链接。
  • 相关项目:列出了与Leap Motion技术相关的视频以及其他相关资源的链接。

开发状态

  • 截至2025年2月,多项功能仍在开发中。开发者 Jeffrey Ventrella 提供了联系邮箱(jeffrey@ventrella.com)以接收状态更新、建议或贡献。
11. So We've Got a Memory Leak (stevenharman.net)

内存泄漏排查案例总结

问题背景

一个运行了十年的生产级Rails应用(每秒处理400-500个请求,峰值达数千次),在常规部署后突然出现持续的内存尖峰。初步判断为内存泄漏而非内存膨胀。

初步应急与排查

  1. 临时缓解:通过定期重启Heroku Dynos来控制内存增长。
  2. 代码审查:回滚近期所有代码变更(包括疑似导致Redis过度调用、N+1查询及引入开发模式内存泄漏的提交),但内存泄漏依然存在。
  3. 寻找模式:观察发现泄漏仅发生在Web Dynos中,且同一Dynos内的Puma Worker进程中,通常只有少数几个Worker内存使用异常,而Sidekiq等后台作业进程正常。这暗示泄漏可能与特定类型的请求流量相关。

使用堆转储进行深入分析

由于无明显代码线索,团队决定使用rbtrace工具生成和分析运行中进程的Ruby堆转储。

  1. 在Heroku上操作:通过heroku ps:exec进入泄漏的Dynos,使用ps命令找到内存占用最高的Puma Worker进程。
  2. 生成堆转储:使用rbtrace启动对象分配跟踪,并生成堆转储JSON文件(单个文件可达数GB)。通过heapysheap工具初步分析,但未发现明显异常。
  3. 可视化分析:使用reap工具生成火焰图。火焰图明确显示一个Thread对象持有高达1.9GB内存,其根源是一个持有超过3.2万个子对象的Array。

追踪问题根源

利用sheap工具深入探索堆转储的引用图:

  1. 定位线程:确认泄漏的Thread是Puma的工作线程。
  2. 追踪数据结构:发现问题的核心是一个ActiveSupport::SubscriberQueueRegistry对象,它内部的哈希表和数组存储了ActiveSupport::Notifications::Event对象。
  3. 发现异常事件:一个Event对象通过其@children数组持有了一个子事件链,该链最终持有上述包含3.2万个对象的大数组。进一步检查发现,子事件关联的正是触发错误的HTTP请求数据。

根本原因与修复

  1. 直接触发点:Bugsnag gem的一个版本升级(v6.26.0 -> v6.26.1)引入了对无效URI进行清理的功能。当处理包含恶意或非法参数的扫描器请求时,该功能会抛出URI::InvalidURIError错误。
  2. 结合框架缺陷:在Rails 6.1中,ActiveSupport::Subscriber的事件栈管理存在缺陷。当在事件通知订阅块中抛出异常时,父事件无法从事件栈中正确弹出,导致事件对象及其关联的所有子对象(包括整个请求对象)被意外地持续引用,从而造成内存泄漏。
  3. 解决方案
    • 短期:升级Bugsnag gem到已修复“对无效URI清理不抛出异常”的版本。
    • 长期:计划升级至已修复事件子系统问题的Rails 7.1或更高版本。

结论

此次内存泄漏是应用依赖(Bugsnag gem)的特定行为框架(Rails)底层设计缺陷共同作用的结果。排查过程展示了从现象观察、模式识别,到利用专业内存分析工具(堆转储、火焰图、引用图分析)进行根本原因定位的系统性方法。

14. ESP32 Drum Synth Machine (github.com)

项目概述

这是一个基于ESP32(Lolin S2 Mini)的鼓合成器/节奏机(Drum Synth Machine),设计为Lofi风格,集成了合成引擎、音序器和完整的硬件控制界面。

核心功能

  1. 合成引擎

    • 基于DZL Arduino库的波表合成器
    • 支持16复音
    • 可调参数包括:波表(Table)、长度(Length)、包络(Envelope)、音高(Pitch)、调制(Modulation)、音量、声像(Pan)和滤波器(Filter)。
    • 滤波器(低通滤波器)源自Mozzi库
  2. 音序器

    • 内置16步/模式编辑器
    • 支持随机生成(模式、声音参数和音符)。

硬件组成

  • 主控:Lolin S2 Mini (ESP32-S2)
  • 音频输出:PCM5102A I2S DAC(需焊接特定焊盘以配置)
  • 输入控制:24个按钮(8x3矩阵)、旋转编码器
  • 显示:I2C OLED显示屏
  • 灯光:32个 WS2812B RGB LED

软件与开发

  • 开发环境:Arduino IDE(1.8.19 或 2.3.2)
  • 开发板支持包:Expressif Systems 2.0.16(测试兼容至2.0.17),选择“Lolin S2 Mini”。
  • 依赖库
    • uClock(音序器定时)
    • Adafruit Neopixel(RGB LED控制)
    • u8g2(OLED显示)
    • Keypad(矩阵按键输入)

制作与配置

  • 项目提供了原理图STL 3D模型文件速查表PDF
  • 关键配置:需对PCM5102A模块背面的焊盘进行设置(H1L, H2L, H3L, H4L)以达到最佳工作状态。
  • 项目资料包含原型演示视频。

扩展与展示

  • 完整的PCB项目、原理图和最终外观可在提供的OshwlabEasyEDA链接中查看。
  • 展示了成品与原型的尺寸对比。
  • 支持两台机器同步工作。
  • 提供了替代外壳/机箱的设计方案。
15. Leaked FBI Email Reportedly Shows Desperation to Justify Warrantless Wiretaps (gizmodo.com)
16. 100k Stars (stars.chromeexperiments.com)

太阳的基本特征

太阳是太阳系中心的恒星,几乎呈完美球形,由热等离子体和磁场交织构成。其直径约为1,392,684公里,相当于地球直径的109倍;质量约为2×10³⁰公斤,是地球质量的330,000倍,占太阳系总质量的99.86%。

化学成分方面,太阳质量约四分之三为氢,其余主要为氦。剩余部分(1.69%,相当于地球质量的5,628倍)包括氧、碳、氖、铁等较重元素。

此摘要基于维基百科摘录,概括了太阳的主要物理属性和化学成分。

18. CS388: Natural Language Processing (www.cs.utexas.edu)

CS388: 自然语言处理课程概要

本课程是面向在线硕士项目的自然语言处理(NLP)课程。课程材料以YouTube视频为主,提供幻灯片下载。

课程基本信息

  • 课程性质:为UT Austin的特定在线硕士项目(“Option III”)开设。校内学生(修读CS388/CS371N)不得注册本课程,但可参考其资料。
  • 主要资源:所有讲座均为视频,另提供幻灯片下载。

课程结构与内容

课程按周组织,从基础模型逐步过渡到现代大型语言模型,涵盖核心概念、关键技术及伦理问题。

  1. 基础与线性分类:介绍感知机、逻辑回归、梯度下降及情感分析的基本特征提取。
  2. 多类分类与神经网络:探讨多类分类、前馈神经网络、反向传播以及网络训练技巧(如Dropout、优化器)。
  3. 词嵌入:学习Skip-gram、GloVe等词嵌入方法,并讨论嵌入中的偏见及公平性。
  4. 语言模型与注意力机制:从n-gram语言模型、平滑技术,过渡到神经网络语言模型、RNN及其局限性,进而引入注意力机制和自注意力。
  5. Transformer与解码:详细讲解Transformer架构及其在语言建模中的应用,介绍波束搜索、核采样等解码策略。
  6. 预训练与序列到序列模型:学习BERT的掩码语言模型及其应用,了解BART、T5等序列到序列预训练模型,以及子词分词(如BPE)。
  7. 结构化预测:包括词性标注(涉及隐马尔可夫模型、Viterbi算法)和句法分析(涵盖上下文无关文法、CKY算法、依存句法分析)。
  8. 现代大型语言模型:重点介绍GPT-3、LLaMA 2等模型,探讨零样本/少样本提示、上下文学习、指令微调和基于人类反馈的强化学习(RLHF),并关注LLM的事实性问题。
  9. 可解释性:讨论模型可解释性,包括局部解释(如LIME)、模型探测、标注伪影以及思维链提示等。
  10. 应用主题
    • 问答与对话:涵盖阅读理解、开放域问答、多跳问答、聊天机器人及任务导向对话。
    • 机器翻译与摘要:介绍统计与神经机器翻译,以及抽取式和摘要式文本摘要,并强调摘要的事实一致性。
    • 多语言、接地与伦理:涉及跨语言预训练、语言与视觉的接地学习,并深入探讨NLP中的伦理问题,如偏见、排斥、自动化风险及数据集透明度。

作业与考核

  • 作业:共5个,涵盖线性情感分类、前馈神经网络与词嵌入、Transformer语言建模、事实性检查以及基于数据集伪影的终期项目。
  • 期中考试:提供往年试题及解答供学习参考。
19. Show HN: A WireGuard Powered Remote Shell (github.com)

Noisy Sockets 是一个基于 WireGuard 构建的边缘第三层服务网格。其核心设计理念是探讨“如果端点可以是进程而不是机器,会怎样?”。

主要特性:

  • 与 WireGuard 线兼容。
  • 在用户空间运行,无需特权。
  • 集成了服务发现功能。
  • 对 IPv6 提供一流支持。
  • 具备跨平台能力。

组成部分: 项目主要由以下组件构成:

  • 配置
  • DNS 服务器
  • 路由器

应用示例: 其中一个典型用例是作为 Docker VPN 服务器。

数据遥测: Noisy Sockets 命令行工具默认会收集匿名的崩溃和使用统计数据。这些匿名数据在欧盟境内的服务器上处理,且不会与第三方共享。用户可以通过设置环境变量 DO_NOT_TRACK=1 来选择退出数据收集。

致谢: Noisy Sockets 基于 Jason A. Donenfeld 开发的 wireguard-go 项目中的代码。WireGuard 是 Jason A. Donenfeld 的注册商标。

20. Nasa’s Roman Mission Will Hunt for Primordial Black Holes (www.nasa.gov)

NASA的Nancy Grace Roman太空望远镜任务旨在探测一类特殊的“原初黑洞”,这些黑洞质量可能与地球相当,在早期宇宙中形成。当前黑洞通常由大质量恒星坍塌或重物体合并产生,但原初黑洞可能在宇宙诞生初期的暴胀阶段形成,密度高于周围的区域坍塌而成,质量远低于传统黑洞下限。探测地球质量的原初黑洞将对天文学和粒子物理学产生革命性影响,因为它无法用已知物理过程解释,可能挑战现有理论。

原初黑洞的形成与宇宙早期暴胀相关:空间以超光速膨胀时,密度扰动可能导致低质量黑洞形成。尽管更小的黑洞会蒸发,但地球质量的黑洞可能存活至今。发现它们将提供早期宇宙的关键信息,支持暴胀理论,并可能解释部分暗物质,暗物质被认为是宇宙质量的主要组成部分。

观测线索来自微引力透镜效应:MOA和OGLE项目通过观测背景星光被质量物体弯曲的现象,发现了异常多的孤立地球质量物体。这些物体可能是原初黑洞或流浪行星,但当前技术无法逐一区分。Roman望远镜将利用其高灵敏度,比地面望远镜多探测10倍的此类物体,通过统计方法区分两者。

Roman望远镜将收集已计划的数据,以搜索行星和系外世界,同时专门分析以识别原初黑洞。无论是否找到证据,这都将深化对宇宙演化的理解。望远镜由NASA的Goddard太空飞行中心管理,与多个科研机构和工业伙伴合作,包括喷气推进实验室、空间望远镜科学研究所等。任务预计推动天体物理学和宇宙学的前沿研究。

21. Food labels and the lies they tell us about ‘best before’ expiration dates (2021) (www.vox.com)

文章主要探讨了美国食品标签上“最佳食用日期”(Best Before)的误导性及其引发的食物浪费问题。作者指出,人们普遍认为过期食品会危害健康,但实际上这些日期与食品安全无关,主要关乎风味和品质。由于标签缺乏统一标准且各州法规不一,消费者常常混淆术语,导致大量仍可安全食用的食物被丢弃。

文章揭示了食物浪费的严重性:美国约40%的食物被浪费,每个家庭每年因此损失约1365至2275美元,同时环境负担加重,且有4200万人面临粮食不安全。浪费根源包括标签体系混乱、超市过度进货以营造“丰盛”假象、消费者对食品外观的苛求,以及捐赠过期食品的法律限制。

生产商通常根据风味而非安全设定日期,部分原因是为了维护品牌形象。但公众教育缺失和“消费主义”文化加剧了浪费。一些企业尝试通过销售外观不完美的食品来减少浪费,但系统性改变仍需政府推动标准化标签立法,并配合公众教育运动(如英国“看、闻、尝,别浪费”)和改革食品捐赠政策。

文章最后呼吁消费者信任自身感官判断食品是否变质,并倡导改变购物习惯、支持政策改革,以从根本上减少浪费并缓解粮食不安全问题。

22. Unix and Multics (2019) (www.multicians.org)

文章摘要:Unix与Multics

本文回顾了贝尔实验室(BTL)参与Multics操作系统项目及其后续催生Unix的历史。

贝尔实验室的早期计算与Multics参与
1960年代,贝尔实验室是著名的科研机构。1964年,在Edward E. David Jr.的推动下,贝尔实验室与MIT的MAC项目以及通用电气(GE)的计算机部门合作,加入了Multics项目。贝尔实验室投入了众多顶尖程序员,团队分布在马萨诸塞州和新泽西州,通过终端、电话和文档进行远程协作开发。

Multics开发过程与挑战
开发过程面临多项延误,包括GE硬件交付延迟、PL/I编译器首次尝试失败迫使贝尔实验室快速开发EPL编译器,以及系统性能优化问题。1967年,Multics首次在GE-645上集成运行;又经过一年,才实现用Multics自身进行开发。

贝尔实验室退出Multics项目
由于认为Multics开发进度缓慢、成本过高且目标过于复杂(“试图同时攀爬太多树木”),贝尔实验室于1969年3月退出项目。硬件资源闲置、预算压力是主要因素。这一决定对贝尔实验室计算方向及Unix的诞生影响深远。

Unix的诞生与与Multics的关联
退出Multics后,肯·汤普森和丹尼斯·里奇等人基于Multics经验,于1969年在内部启动了一个操作系统项目,其名称“Unix”由布莱恩·柯林汉所取,暗含对Multics的戏仿(意为“单一体”而非“多体”)。1973年,他们在操作系统原理研讨会上发表了介绍Unix的论文,获得高度评价。

技术相似性与影响
Unix在许多方面借鉴了Multics和CTSS,例如命令(ls, cp, mail, if)、工具(shell, roff)和概念(如将命令处理程序作为非特权用户程序)。同时,Multics也吸收了Unix的一些理念(如挂载点)。作者强调,两者技术上存在双向借鉴。

对常见误解的澄清
作者指出,常见的“Multics失败、Unix成功”的叙述过于简化。贝尔实验室的退出并非Multics项目的终结:Multics继续发展并实现了大多数既定目标,成为成功的高端系统直至16年后。Unix则在不同目标领域取得了巨大成功。两者均为计算机发展史做出了重要贡献。

本文基于历史文档、访谈及作者亲身经历,梳理了从Multics到Unix的技术传承与历史转折。

23. Making Sense of Acquire-Release Semantics (davekilian.com)

本文探讨了多处理器编程中 acquire(获取)和 release(释放)语义的核心概念。作者通过一个存在缺陷的单生产者-单消费者无锁环形队列示例,揭示了现代CPU为优化性能而重排内存操作指令的行为,这会导致程序出现难以复现的错误(例如消费者线程看到队列项已就绪,但读取到的数据为空)。这种现象的根本原因在于内存操作并非如调试器中所见的线性执行。

为解决此问题,文章首先引入了内存屏障的概念,它作为一种指令,能限制CPU对屏障前后内存操作的重排序。通过在队列的put(生产)和poll(消费)函数中添加适当的屏障,可以强制保证“先写入数据,再更新尾指针”以及“先检查尾指针,再读取数据”的顺序,从而修复了队列的缺陷。

然而,全功能的内存屏障可能过于严格,会限制CPU的优化潜力。文章进一步抽象出多线程间共享内存所有权传递的常见模式:一个线程通过执行释放(release) 操作(如更新一个标志变量)来放弃对内存的控制权;另一个线程随后通过执行获取(acquire) 操作(如读取该标志)来确认并取得控制权。

基于此模式,文章正式定义了acquire-release语义

  • release语义(通常附加在写操作上):保证该操作之前的所有内存访问(包括代码和调用上下文中的操作)在本次写操作对其他线程可见之前完成。
  • acquire语义(通常附加在读操作上):保证该操作之后的所有内存访问在本次读操作获得最新值之后才能开始执行。

通过在队列代码中将对尾指针tail的更新操作标记为memory_order::release,将读取操作标记为memory_order::acquire,即可在确保程序正确性的前提下,提供比全屏障更灵活、高效的同步机制。

文章最后补充了几点重要说明:

  1. 编译器优化同样可能重排代码,但通常会尊重显式的内存顺序语义。
  2. x86架构的CPU本身具有较强的内存顺序保证,但为了代码的可移植性和正确性,仍应使用标准的内存顺序语义。
  3. Java语言中的volatile关键字提供了更强的顺序一致性保证。
  4. acquirerelease语义确保了内存操作的相对顺序,但并非立即持久化到主存;若需要立即可见性,需使用更强的seq_cst(顺序一致性)语义。

总之,acquirerelease语义是多处理器同步中用于安全传递共享内存所有权的关键机制,它们在保证正确性的前提下,为CPU和编译器的优化提供了必要的灵活性。

24. Cubic millimetre of brain mapped in spectacular detail (www.nature.com)

研究人员对人类大脑皮层一个极小片段(约一立方毫米)进行了前所未有的详细绘制,成果已发表于《科学》杂志并公开在线。

主要内容:

  • 研究对象: 人类大脑皮层的一个微小片段。
  • 技术方法: 基于电子显微镜数据。
  • 主要成果: 创建了一个高分辨率的细胞图谱(细胞图集)。
  • 关键发现:
    1. 揭示了神经元(脑细胞)之间新的连接模式
    2. 观察到一些细胞会自我缠绕形成结状结构
    3. 发现了成对的神经元,其结构几乎互为镜像
  • 数据公开: 完整的图谱数据已在线发布。
  • 研究意义: 以惊人的细节展示了大脑微观结构,有助于深入理解神经连接方式。

示意图:基于电子显微镜数据渲染的神经元位置,颜色代表神经元大小。 示意图

25. Wprs – rootless remote desktop for Wayland (and X11, via XWayland) applications (github.com)
# Wprs:面向Wayland(及X11通过XWayland)的无根远程桌面工具

Wprs是一个用Rust编写的、类似xpra的工具,用于为远程Wayland(以及通过XWayland运行的X11)应用程序提供**无根远程桌面访问**。

## 构建与依赖
- 支持 **x86-64**(SSE2至AVX2)和 **aarch64**(NEON)架构。
- 使用 `cargo build --profile=release-lto` 构建(调试模式性能极差)。
- **依赖项**:
    - `wprsc`、`wprsd`、`xwayland-xdg-shell` 需要 `libxkbcommon` 和 `libwayland`(Debian系需-dev包)。
    - 启动器 `wprs` 需要 `python3`、`psutil` 和 `ssh` 客户端。

## 使用方式
1.  **远程主机**:
    - 安装 `wprsd.service` 到 `~/.config/systemd/user/`。
    - 启用并启动服务:`loginctl enable-linger`,然后 `systemctl --user enable/start wprsd.service`。
2.  **本地主机**:
    - **启动远程应用**:`wprs <remote_host> run <application>`
    - **分离会话**(保留远程会话):`wprs <remote_host> detach`
    - **附加到会话**:`wprs <remote_host> attach`

## 架构与工作原理
- **服务端(wprsd)**:使用Smithay实现一个**Wayland合成器**。它不合成渲染,而是**序列化Wayland会话状态**并通过自定义协议发送给客户端。
- **客户端(wprsc)**:使用Smithay客户端工具包实现一个**Wayland客户端**,在本地创建对应的Wayland对象(如窗口)。本地合成器的输入事件等被序列化后发回服务端,再由服务端转发给对应应用。
- **会话恢复**:支持wprsc断开、重连或重启。wprsd存储所有必要状态(如表面缓冲区内容),因此新连接的wprsc可正确重建对象。但wprsd重启会终止所有应用程序。
- **通信**:默认通过Unix域套接字,使用**SSH进行端口转发**。也可替换为socat或自定义代理。

## 自定义协议与性能优化
- 协议是Wayland协议的简化版,使用**rkyv**进行序列化,力求**幂等**(例如,用单次提交消息包含完整的表面状态)。
- **帧回调**由wprsd本地调度(避免网络延迟)。
- **缓冲区压缩**:采用多线程、SIMD加速的无损压缩算法:
    1.  将图像从**结构体数组转置为数组结构体**(利于SIMD)。
    2.  对每个颜色通道应用**相邻差分(DPCM)**。
    3.  转换为类YUV色彩空间(利用跨通道相关性)。
    4.  使用**zstd**压缩。该算法旨在实现**极快速度**(每帧个位数毫秒级)和不错的压缩比。
- **协议不兼容**:当前版本间无兼容性保证。

## 当前限制
- 仅实现Core和XDG shell协议,**未实现硬件渲染/DMABuf**。
- **不支持触摸事件**。
- 拖放功能可能不稳定,XWayland的拖放未实现。
- 浏览器中的WebAuthn安全密钥无法工作。

## 与Waypipe的对比
- **Waypipe**:类似X转发,客户端有状态,仅能通过网络重连恢复会话,但能自动支持新协议(可能因共享资源而失效)。
- **Wprs**:类似Xpra,客户端无状态,支持会话恢复(通过客户端重启),但需要为每个Wayland协议显式实现。

## XWayland支持
- 通过独立的 `xwayland-xdg-shell` 二进制文件实现,它是一个集成了Wayland合成器和客户端的单体程序(跳过序列化/反序列化),其模式与 `xwayland-proxy-virtwl` 相同。
- 优势:共享wprs的代码基础,专用于XWayland支持,可作为外部XWayland方案,避免在每个合成器中重复实现,有时还能获得更好的缩放效果。

## 安全性
- wprsd作为合成器,可访问其所有应用表面并注入输入。
- 套接字创建于 `$XDG_RUNTIME_DIR`,仅限当前用户读写。**无自身认证机制**,完全依赖传输层(如SSH)。
- 同用户下的恶意进程可访问套接字,但这属于更严重的系统安全问题。

## 致谢
项目得益于Smithay、rkyv、tracing、Tracy等项目,并感谢Waypipe和xwayland-proxy-virtwl在该领域的开创性工作。
26. Sioyek is a PDF viewer with a focus on textbooks and research papers (github.com)

Sioyek PDF阅读器概述

Sioyek 是一款专注于教科书和研究论文阅读的PDF查看器,旨在通过一系列高级功能提升学术阅读体验。

主要功能

  • 快速打开:可快速搜索并打开之前使用过的文件。
  • 目录:支持搜索并跳转到目录条目。
  • 智能跳转:即使PDF文件本身没有提供链接,也能跳转到引用的图表、参考文献等位置。中键点击参考文献名称可在谷歌学术/Libgen中进行搜索。
  • 概览:右键点击图表、参考文献、表格等可快速打开一个概览窗口,此功能同样不依赖于文档自身的链接。
  • 标记:可在PDF中创建带单字符名称的标记(类似vim的标记),用于快速跳转。小写标记为文档局部,大写标记为全局。
  • 书签:功能类似于标记,但以文本字符串命名,且全部为全局书签。
  • 高亮:支持使用不同种类的高亮进行标注,并可搜索所有高亮内容。
  • 门户:此功能对多显示器用户尤为有用。可以将文档中的一处位置(如段落)链接到另一处位置(如图表)。Sioyek会在单独的窗口中(通常放在第二个显示器上)显示当前最近的门户目标,并随用户在文档中的导航自动更新。
  • 配置:所有快捷键和部分UI元素均可通过编辑keys_user.configprefs_user.config文件进行自定义。

安装方式

官方安装包

提供适用于Windows、macOS和Linux的安装程序,可在项目发布页获取。

包管理器

  • Homebrew Cask:可通过brew install --cask sioyek安装。
  • Linux第三方包:在Flathub、Alpine、Arch (AUR)、Debian、NixOS、openSUSE、Ubuntu等多个发行版中有第三方维护的软件包可供选择,但使用风险自负。

构建说明

Sioyek支持从源代码构建,适用于不同平台:

  • Linux

    • Fedora:需安装Qt5和libharfbuzz等依赖项,然后克隆development分支并运行./build_linux.sh脚本。
    • 通用发行版:步骤类似,需确保PATH中有使用Qt5的qmake。
  • Windows

    • 需要Visual Studio和Qt5。克隆仓库后,在64位Visual Studio Developer Command Prompt中运行build_windows.bat
  • macOS

    • 需要Xcode和Qt6(6.8.2版本)。通过aqtinstall工具安装Qt后,需设置多个环境变量(如Qt6_DIRQT_PLUGIN_PATH等),然后运行build_mac.sh脚本进行构建,最后可能需要对应用进行签名。

注意:构建开发分支需要Qt 6.7或6.8,使用Qt 5.*可能会出错。在macOS上若遇到“sioyek is damaged”提示,通常与系统安全机制有关。

支持项目

如果用户喜欢Sioyek,可以考虑通过捐赠支持其开发。

27. Show HN: Ellipsis – Automated PR reviews and bug fixes (www.ellipsis.dev)

Ellipsis:自动化PR审查与错误修复工具

核心功能

  • 自动化代码审查:在每个Pull Request的每次提交中自动运行,检测逻辑错误、风格指南违规和反模式。
  • AI队友能力:可回答问题、生成发布说明、协助功能开发及修复构建问题。
  • 高使用量:已安装于超过67,000个GitHub仓库,每天审查约3,900次提交。

安全与信任措施

  • SOC 2 Type 1认证:符合安全标准,可申请查看认证报告。
  • 零数据保留:代码仅在AWS私有VPC中处理,不会持久化存储。
  • 明确不确定性:当无法确定时会明确告知,避免提供错误但自信的答案。
  • 无自动提交:未经明确许可不会提交代码,支持通过侧PR(side-PR)清晰展示更改。

定价与使用

  • 按席位计费:每月购买固定数量的席位,分配给开发者后,可在所有仓库中无限使用。
  • 公共仓库免费:GitHub公共仓库可免费安装并使用。
28. Tine Text Editor (github.com)

Tine 文本编辑器是一个轻量级、面向键盘的代码编辑器,专注于简洁和高效的文本编辑。

核心信息

设计理念

Tine 最初作为作者的个人工具开发,只实现了必需的功能。其核心目标是避免UI干扰(如按钮、标签、菜单和动画),保持对文本编辑的专注。编辑器严格为键盘操作设计,以提高效率(作者将Ctrl键映射到Caps Lock键以提高人体工学)。鼠标支持有限,主要用于演示等场景。

支持的语言与功能

  • 语法高亮支持:BL, C, C++, Markdown, GLSL, C#。
  • LSP支持(实验性):C/C++ (通过clangd), C# (通过Roslyn)。
  • 功能亮点
    • 单个轻量级可执行文件。
    • 基于键盘的快速导航。
    • 项目结构内的文件搜索。
    • 简洁的用户界面。
    • 与RemedyBG和RAD调试器的简单集成。
    • 宏系统。
    • 相对行号。

主要使用模式

  1. 运行命令 (Ctrl+X):所有命令的入口,可通过模糊搜索调用。
  2. 打开文件 (Ctrl+O):从磁盘打开文件。
  3. 打开项目 (Ctrl+Shift+O):从项目目录打开项目。
  4. 快速打开 (Ctrl+P):递归列出项目目录中的文件(基于项目配置),支持模糊搜索。
  5. 跳转到行 (Alt+G):移动光标到指定行号。
  6. 搜索 (Ctrl+S):在当前文件中搜索,动态高亮匹配结果。
  7. 项目内搜索 (Ctrl+Alt+S):在项目所有文件中递归搜索。
  8. 重复模式 (Ctrl+数字):重复执行后续命令N次。
  9. Shell命令 (Alt+C):在项目目录执行简单的Shell命令,输出在单独缓冲区显示,并可解析错误跳转。
  10. 宏录制 (Alt+R 开始/停止, F11 重放):录制并重放命令序列,可与重复模式结合。

项目与配置

  • 项目文件:要启用高级功能(如项目搜索),需在projects目录下创建.proj项目配置文件,至少包含项目根目录和文件扩展名。
  • 配置文件:默认配置文件default.proj在首次运行时自动生成,位于可执行文件旁(Windows)或~/.tine目录(Linux/macOS)。
  • 缓冲区:每个打开的文件对应一个缓冲区,还有MessagesShell等特殊缓冲区。

集成工具

  • clang-format:集成clang格式化工具,需将其加入系统PATH。
  • RemedyBG:集成RemedyBG调试器,用于设置断点和定位文件。

开发信息

编辑器使用自定义语言Biscuit编写,需要最新版本的编译器进行编译。macOS版本(Apple Silicon)功能完整但测试较少。