2024-10-14

32 篇热帖

1. Busy Status Bar (busy.bar)

BUSY Bar 产品摘要

BUSY Bar 是一款生产力多工具设备,配备 LED 像素屏幕用于显示自定义状态,内置番茄钟计时器和应用,支持完全自定义、开源和开发者友好设计。以下为其主要功能和特性概述:

核心功能

  • 生产力工具:包括干扰拦截器、自定义 BUSY 消息、焦点计时器(如番茄钟)以及跨平台同步,帮助用户保持专注。
  • 应用和集成:拥有应用库,支持连接第三方软件,并与日历事件和电话等集成。
  • 智能家庭支持:通过 Matter 协议连接到 Google Home 和 Apple Home,支持 Home Assistant 集成,实现自动化控制(如暂停音乐或开灯)。
  • 开发者友好:提供开放 HTTP API、开源 SDK(支持 Python、Go、JavaScript)、MQTT 协议,无供应商锁定,便于自定义开发。

焦点与状态管理

  • BUSY 焦点计时器:基于番茄钟技术,将工作分为 25 分钟工作和 5 分钟休息间隔,结合干扰拦截器阻止通知和应用(如 Instagram、TikTok)。
  • 自定义状态:用户可设计自己的 BUSY 状态消息,通过 LED 屏幕显示,支持从库中选择或创建自定义显示,并可添加定时器。
  • 自动激活:集成桌面软件,当用户通话、直播、录音或使用特定程序时,自动激活 BUSY 状态(如检测麦克风活动显示“ON CALL”状态)。
  • 远程控制:通过 Wi-Fi 远程控制设备,适用于墙壁或门上安装,并通过桌面应用自动管理状态。

控制方式

  • 手动控制:物理按钮(包括开始/暂停按钮、5 位置选择器和返回按钮)允许直接操作设备,无需连接 PC 或移动应用。
  • 模式选项
    • 干扰拦截模式:显示状态和定时器,静音通知,并触发智能家居自动化。
    • 活跃 BUSY 状态:可配置自定义消息,适应不同工作流程。
    • 应用支持:内置时钟、天气、社交媒体统计(如 YouTube、Instagram),并支持第三方应用。
    • 设置管理:包括 Wi-Fi/蓝牙连接、屏幕亮度、音量和省电模式调整。

硬件与技术规格

  • 显示屏幕:主屏为 72x16 RGB LED 矩阵(60Hz 刷新率,400 尼特亮度),背屏为单色 OLED(160x80 像素),支持自适应亮度。
  • 电池与电源:3250 mAh 锂电池,待机 2 周,活跃状态 8 小时,1 小时充满(15W USB-C 充电)。
  • 连接性:支持 Wi-Fi 6、蓝牙低能耗 5.4、USB 虚拟以太网和 Matter 协议,提供云、LAN 和 USB 多种网络连接方式。
  • 处理器与存储:中央处理器为 STM32U5M(低功耗 MCU),无线处理器为 Silicon Labs SiWG917,附带 16 GB eMMC 存储。
  • 其他硬件:包括扬声器(用于声音通知)、光传感器(自动亮度)、机械开关(Kailh Choc Switch V2)和状态指示灯。

安装与使用

  • 设备可安装在桌面显示器上,包装内含 BUSY Bar 和 2 米 USB-C 电缆。
  • 通过 BUSY 应用(免费)集成,实现跨设备干扰拦截,如静音手机和 PC 通知,支持在专注模式下全面管理 distractions。
2. Huly – Open-source project management platform (github.com)

Huly 开源项目管理平台

Huly 平台是一个为加速开发 CRM 等商业应用程序而设计的强大框架。该仓库包含多个应用,如聊天、项目管理、CRM、人力资源管理和 ATS(申请人跟踪系统)。Huly 和 TraceX 等团队正在此基础上构建产品。

核心功能与使用

  • 自托管:主要兴趣在于自托管而非开发贡献的用户,应使用 huly-selfhost 项目。它通过 Docker 提供便捷的安装方式。
  • API 客户端:用户可通过其 API 客户端以编程方式与 Huly 交互,用于构建集成和自定义应用。相关文档和示例可在专门的仓库中找到。
  • 版本管理:平台使用两种版本标签:
    • 生产版本 (v)*:稳定发布版,适用于生产环境和自托管。
    • 开发版本 (s)*:预发布版,用于开发和测试,可能包含实验性功能。
  • 更新日志:每个版本的详细更改、改进和错误修复信息可在更新日志中查阅。

开发环境设置与构建

  • 前置要求:系统需安装 Node.js (v20.11.0)、Docker 和 Docker Compose。
  • 认证:项目使用 GitHub Packages 管理依赖,需生成 GitHub 个人访问令牌并登录 npm 以下载依赖。
  • 快速启动:可执行 sh ./scripts/fast-start.sh 脚本。
  • 构建与运行
    1. 全局安装 Microsoft 的 @microsoft/rush
    2. 在仓库根目录运行初始化命令。
    3. 进入 dev/ 目录,使用 Rush 命令执行 buildbundlepackagevalidatedocker:build 等步骤。
    4. 最后运行 rush docker:up 启动所有容器。
    5. 对于资源有限的机器,可使用 docker:mindocker:up:min 命令构建和运行精简版服务。
    6. 默认会为 MongoDB、Elasticsearch 和 MinIO 创建 Docker 卷。需在 hosts 文件中添加 127.0.0.1 huly.local 条目,然后访问 http://huly.local:8087
  • 开发模式:使用 rushx dev-server 命令,访问 http://localhost:8080 进行开发调试。

测试与发布

  • 单元测试:使用 rush test 或在包目录内使用 rushx test 执行。
  • UI 测试:需要准备测试环境,包括构建 Docker 容器和设置测试数据库,然后运行测试脚本。
  • 包发布:使用 node ./common/scripts/bump.js -p projectName 命令进行版本升级。

WSL 构建指南

对于在 WSL 环境中从 Windows NTFS 驱动器上的源代码进行构建和运行,指南说明了注意事项:

  • 磁盘空间:确保有充足空间(完全部署约需 35 GB,构建后约需 4.5 GB)。
  • Docker 集成:需在 Docker 设置中启用 WSL 集成。
  • 常见问题
    • Git 行尾:建议在 WSL 中检出代码或配置 Git 禁用自动替换。
    • 权限:某些命令可能需要 sudo 提权。
    • WSL 配置:建议编辑 /etc/wsl.conf 以优化 NTFS 驱动器挂载,但更推荐将仓库存储在 WSL 磁盘上。
    • 端口冲突:启动应用时若 Windows 端口被占用,需修改 docker-compose.yaml 中的端口映射。
3. CRLF is obsolete and should be abolished (fossil-scm.org)

文章摘要:CRLF已过时,应予废除

本文由SQLite创始人D. Richard Hipp撰写,主张废除过时的CRLF(回车换行)行尾符。尽管提议在最新更新中因现实阻力而被撤回,但文章核心观点清晰。

核心论点与观察

  1. 定义与无用性:作者明确定义了回车、换行和换行符。关键观察是:换行符(LF, U+000a)在实际应用中毫无用处。没有人希望在一行中间向下移动并从下一列的同一位置继续书写。真正的实用操作是“换行符”(NL),即移动到下一行行首。
  2. 历史起源:CRLF行尾源于1950年代的机械电传打字机。由于打印头返回左侧需要时间,系统被设计为先发送“回车”(CR)启动归位动作,随后在打印头仍在移动时发送“换行”(LF)以升高纸张。这为打印头归位争取了时间。CRLF是硬件限制渗透到软件接口的典型例子。
  3. 现代现状
    • 自Unix系统开始,单个U+000a字符已被广泛用作“换行符”(NL)。
    • 现代编程语言中\n通常表示换行符(NL)。
    • 几乎所有现代软件和设备都将U+000a理解为换行符(NL),而非真正的换行符(LF)。寻找一个实际将U+000a解释为LF的设备或应用极为困难。
    • 尽管如此,官方Unicode名称仍是“LF”,HTTP、SMTP等协议仍“要求”CRLF,少数系统仍在发送CRLF。

作者的行动呼吁(提议已撤回)

基于以上分析,作者原提出以下倡议:

  1. 更名:停止将U+000a称为“linefeed”(换行符),应称其为“newline”(换行符),以符合近几十年来的普遍实践。
  2. 停止发送无用CR:除非明确需要覆写当前行,否则仅发送U+000a(NL)。在CRLF前添加无用的CR是带宽的浪费。
  3. 不遵从过时协议:即使HTTP、SMTP等协议在技术上要求CRLF,也应只发送NL。绝大多数实现都能接受裸NL作为行尾。
  4. 修复缺陷软件:应修复那些收到不含前导CR的NL时出错或行为异常的软件。所有现代软件都应接受裸U+000a作为有效的行尾标记。

提议的结局

在2024年10月14日的更新中,作者宣布撤回此提议。原因有两点:

  1. 依赖CRLF的软件数量超出预期。
  2. 许多人并不认同创建无CRLF世界的热情。 作者已将自己的系统全部恢复为按规范要求生成CRLF。但他指出,此次实验带来了一个意外收获:发现并修复了Fossil和althttpd中错误要求CRLF、不允许使用裸NL替代的问题。

结论:尽管提议因生态兼容性而被撤回,但文章系统性地论证了CRLF在技术上的过时本质及其带来的无谓复杂性,并曾尝试推动其废除。

4. Zero-latency SQLite storage in every Durable Object (simonwillison.net)

Cloudflare Durable Objects 升级为 SQLite 存储系统概述

核心升级:Cloudflare 的 Durable Objects 平台已从键值存储升级为基于 SQLite 的完整关系数据库系统。

设计理念:关键思路是将应用逻辑与其操作的数据共同部署。Durable Object 的代码与其使用的 SQLite 数据库运行在同一物理主机上,从而实现极快的读写性能。

扩展机制:单个对象因运行在单线程单机器上,吞吐量有限。处理更多流量的方式是创建更多对象,这适用于不同逻辑状态单元(如不同文档、用户或数据库分片),只要每个单元的流量足够低,可由单个对象处理。

示例应用:在航班预订系统中,每个航班可映射到一个专用的 Durable Object 及其 SQLite 数据库,每天可为每家航空公司创建数千个新数据库。

对象寻址:每个 Durable Object 有唯一名称,Cloudflare 网络会根据对象在网络中的位置路由请求。

数据持久性与可靠性设计

  • 受 Litestream 启发,每个对象持续将 WAL 日志条目流式传输到对象存储,每 16MB 或每 10 秒批处理一次,支持通过重放日志实现长达 30 天的时间点恢复。
  • 为确保 10 秒窗口内的持久性,写入在提交后也会立即转发到附近 5 个独立数据中心的副本,并在其中 3 个确认后才确认写入。

API 设计:采用阻塞式而非异步 API,以适配单线程快速持久化操作的设计目标。示例展示了 SQLite 的 N+1 查询模式,这正是 SQLite 所擅长的场景。

底层系统:Durable Objects 的底层系统称为 Storage Relay Service,已为 Cloudflare 的 D1 SQLite 系统提供支持超过一年。

对象位置与管理

  • 创建后,Durable Objects 当前不改变位置。默认情况下,对象在初始 get() 请求附近的激活数据中心实例化。
  • 可通过 get()locationHint 参数手动在其他位置创建对象。
  • 未来计划支持现有 Durable Objects 的动态迁移。
  • where.durableobjects.live 网站可追踪对象在网络中的创建位置。
5. Show HN: X11 tool to share a screen area in any video meeting (github.com)

clipscreen:用于视频会议分享屏幕局部的X11工具

概述

clipscreen 是一个简单的应用程序,能创建一个虚拟显示器来镜像您屏幕的特定区域,并用一个绿色矩形高亮显示该区域。其核心用途是:在各类视频会议(如 Google Meet、Microsoft Teams、Jitsi Meet 等)中,您可以选择共享这个虚拟显示器,而非整个屏幕。这样就无需在共享单个窗口和频繁切换之间烦恼,只需将您希望展示的窗口移动到绿色边框内即可。

该项目由 Recall.ai 赞助,后者是一个桌面录制API,支持录制 Zoom、Google Meet、Microsoft Teams 以及线下会议等内容。

功能与用途

  • 创建虚拟显示器:镜像屏幕的一个自定义区域。
  • 区域高亮:以绿色矩形清晰标示共享区域。
  • 灵活共享:兼容任何屏幕共享工具,简化会议演示流程。

编译说明

系统要求

仅在 Linux 和 Xorg 环境下测试过,其他系统兼容性未知。

依赖库

编译前需安装以下开发库:

  • X11 开发库
  • Cairo 图形库
  • C 编译器(如 gcc)

安装示例(Ubuntu 24.04)

apt-get install libx11-dev xserver-xorg-dev xorg-dev libcairo2-dev gcc

编译命令

安装依赖后,运行标准的编译命令即可(具体命令未在文中明确列出,但通常为 makegcc 编译相关源文件)。

使用方法

基本用法

通过命令行参数指定共享区域的尺寸和位置:

./clipscreen <width>x<height>+<x>+<y>
  • <width>x<height>:叠加层及虚拟显示器的宽度和高度。
  • <x>+<y>:叠加层及虚拟显示器左上角的屏幕坐标。

示例

./clipscreen 800x600+100+100

这会创建一个从屏幕坐标 (100, 100) 开始,尺寸为 800x600 的叠加窗口。

交互式选择区域

可通过运行特定命令(文中未给出具体命令,但提到“交互式选择”功能)以交互方式框选屏幕区域。

终止程序

在运行 clipscreen 的终端中按 Ctrl+C 即可结束程序。

相关项目

文中提到了两个相关的项目:

  • hacksaw
  • slop

许可证

本项目采用 MIT 许可证(版权声明:Copyright 2024 Andreas Gohr)。许可证允许无限制地使用、修改和分发软件,但要求保留版权声明和许可声明。

6. Inkscape 1.4 Released (inkscape.org)

Inkscape 1.4 发布总结

Inkscape 1.4(极客版)于2024年10月13日发布,重点关注可访问性自定义功能,为高级用户带来多项优化。

主要新功能与改进

1. 滤镜画廊对话框

  • 通过“滤镜”菜单访问,支持按类别或关键词搜索预览。
  • 可自定义预览缩略图大小,包含用户添加的自定义滤镜(位于“个人”类别)。

2. 模块化网格

  • 提供更直观的网格选择按钮,支持独立调整网格的宽高、间距等参数。
  • 在“文档属性”中启用。

3. 色板对话框重构

  • 新增下拉菜单与调色板预览,支持列表/网格显示及自定义色块大小。
  • 可导入调色板(包括Adobe Color Book的CIELAB格式),优化了CMYK到RGB的转换。

4. SVG字体编辑器

  • 简化字形排序和字偶对删除操作,提升字体自定义效率。

5. 统一字体浏览器

  • 在首选项中激活后,可预览字体并输入示例文本,支持按集合类型筛选。

6. 可自定义画布手柄

  • 手柄的大小、颜色、描边宽度等可通过CSS文件实时调整。

7. 形状构建工具

  • 支持对光栅图像进行快速裁剪,可隔离图像部分区域(需释放剪切并取消克隆链接后编辑)。

8. 对象属性对话框整合

  • 合并“对象属性”和“对象属性”对话框,集中修改旋转、圆角等属性。

9. 导入导出更新

  • PDF支持添加页面内链接(如目录)。
  • 新增支持打开Affinity Designer文件。

10. 新图标集

  • 新增“Dash”图标集(含500+图标),兼容明暗主题与可缩放光标。

其他信息

  • 适用于Linux、Windows和macOS系统。
  • 完整更新详见官方发行说明。

此版本通过强化自定义工具和界面优化,显著提升了工作流程的灵活性与效率。

8. Use Prolog to improve LLM's reasoning (shchegrikovich.substack.com)

用Prolog提升大型语言模型的推理能力

大型语言模型(LLM)虽展现出非凡的推理潜力,但其推理能力并非完美。问题主要源于LLM的工作方式:基于Transformer的自回归架构使其只能单次顺序生成答案,无法使用循环或条件语句。此外,当涉及训练数据之外的主题时,其推理容易出错。

现有提升LLM推理能力的方法包括:生成多个候选答案并择优选择、使用链式思考(CoT)等特殊提示技术,以及利用编程语言作为中间媒介辅助思考(如用Python解方程)。近期,Prolog作为一种中间语言被用于提升推理能力。

Prolog的优势在于其声明式编程特性,擅长符号推理、基于规则的任务(如自然语言处理、定理证明)。对于LLM而言,生成Prolog代码相对容易,因为声明式语言无需精确控制流程,更符合LLM的生成模式。

主要研究方案与实验效果:

  1. “超越自然语言的可靠推理”方法

    • 核心思路:将用户问题转换为Prolog代码并执行,获取答案。
    • 关键步骤:使用链式思考(CoT)生成Prolog代码,并采用多次尝试推理——若首次生成的代码无法运行,则重试。
    • 效果:在数学应用题中,GPT-4结合CoT仅解决12.5%的问题,而GPT-4结合Prolog则解决了全部问题;在GSM8k数据集上,Prolog使GPT-4的准确率提升了3%。
  2. ProSLM方法

    • 核心思路:构建一个Prolog知识库,利用其事实规则进行可解释的知识推理。
    • 关键步骤:将用户问题转化为Prolog查询目标,并使用反向链推理寻找支持目标的事实,实现可解释的上下文收集和事实验证。

评估基准:为衡量Prolog的改进效果,研究者构建了非线性推理数据集,包含约束问题、数学应用题和算法指令遵循任务。实验结果证实,Prolog能显著提升LLM在复杂、结构化推理任务上的表现。

参考文献

  1. 可靠推理方法:[arxiv.org/abs/2407.11373]
  2. ProSLM方法:[arxiv.org/abs/2409.11589]
  3. Prolog生成与排列用于算术推理:[arxiv.org/abs/2405.17893]
  4. Thought-Like-Pro:[arxiv.org/abs/2407.14562v1]
10. Python client for the $20 Colmi R02 smart ring (tahnok.github.io)

Colmi R02 智能戒指 Python 客户端摘要

项目概述

这是一个100%开源、完全离线的 Python 客户端,用于从 Colmi R02 系列智能戒指读取数据。源代码托管在 GitHub 上。

设备功能

Colmi R02 是一款廉价(约20美元)的智能戒指/健身可穿戴设备,包含以下传感器:

  • 加速度计:用于步数追踪、睡眠追踪和手势识别(可能)。
  • 心率(HR)监测
  • 血氧(SPO2)监测

兼容性

完全兼容的设备包括:

  • Colmi R02
  • Colmi R06
  • Colmi R10 通用规则是:如果产品说明建议使用 QRing 应用,则该戒指与此客户端兼容。

购买方式

可在 AliExpress 上购买,建议搜索“COLMI R02”。作者购自“Colmi official store”,含运费约22加元。

逆向工程状态与计划功能

已实现功能

  • 实时心率和血氧监测
  • 步数日志、心率日志(定期测量)
  • 设置戒指时间、心率记录频率
  • 血氧日志、睡眠追踪、“压力”测量

计划中功能

  • 增强命令行界面功能
  • 美化心率和步数数据输出
  • 简单的 Web 界面

使用方法

命令行界面

推荐使用 pipx 安装:

pipx install git+https://github.com/tahnok/colmi_r02_client

安装后,可执行以下操作:

  1. 查找附近戒指

    colmi_r02_client --help
    

    输出示例显示设备名称和蓝牙地址。

  2. 获取实时心率

    colmi_r02_client --address=<蓝牙地址> get-real-time heart-rate
    
  3. 同步数据到 SQLite

    colmi_r02_client --address=<蓝牙地址> sync
    

    数据将写入 ring_data.sqlite 文件。

命令行选项

  • --debug/--no-debug:调试模式。
  • --record/--no-record:将收到的数据包写入文件。
  • --address:指定蓝牙地址。
  • --name:通过蓝牙名称连接(兼容 macOS,但较慢)。

可用命令

  • get-heart-rate-log:获取指定日期的心率日志。
  • get-real-time-heart-rate:获取实时心率。
  • get-steps:获取步数数据。
  • sync:同步所有数据到 SQLite。
  • set-time:设置戒指时间。
  • raw:发送原始命令给戒指。
  • reboot:重启戒指。

作为 Python 库/SDK 使用

可通过 colmi_r02_client.client 类以编程方式操作,详细文档可在文档站点查看。

通信协议细节

连接方式

通过蓝牙低功耗(BLE)通信,无需配对或安全密钥。通信基于一个 BLE GATT 服务(UUID: 6E40FFF0-B5A3-F393-E0A9-E50E24DCCA9E),包含两个特征:

  • RX 特征(UUID: 6E400002-...):用于向戒指写入数据。
  • TX 特征(UUID: 6E400003-...):用于订阅戒指的响应数据。 这类似于 Nordic UART 服务。

数据包结构

通信使用 16 字节数据包

  • 第1字节:命令/类型标识(例如 0x03 表示请求电池电量)。
  • 第14-16字节:中间14字节为“子数据”或有效载荷。
  • 第16字节:校验和(前15字节之和模255)。
  • 部分请求可能需要多个响应包组合才能获得完整数据(例如步数数据)。

具体功能的请求/响应数据包结构可在源代码中查看,项目还提供了相关测试用例以供参考。

其他资源

  • 作者的逆向工程笔记:https://notes.tahnok.ca/(从 2024-07-07 开始记录)。
  • 相关项目:gadgetbridge(开源 Android 客户端)的兼容性 PR 和 Puxtril/colmi-docs
11. Counterintuitive Properties of High Dimensional Space (2018) (people.eecs.berkeley.edu)

高维空间的反直觉特性

高维空间中的几何性质与我们基于三维世界形成的直觉常相悖。即使是简单物体(如高维立方体和球体)的许多性质也极为反常。

1. 空间术语的歧义

在高维语境下,“球体”通常指 (d)-球面((d)-sphere),其局部维度为 (d),但存在于 (d+1) 维空间中。例如,圆是 1-球面,普通三维球面是 2-球面。同样,“立方体”也泛指高维正多面体。

2. 球体从立方体角落“逃脱”

  • 在二维和三维中,位于单位正方形(或立方体)角落、半径为 (1/2) 的球体内切于中心的球体完全位于正方形内部。
  • 但在高维情况下,中心球体的半径为 (\sqrt{d}/2 - 1/2),随维度 (d) 增加而增大。
  • 在四维时,中心球体半径恰好为 (1/2),开始接触立方体表面。
  • 五维及以上,半径超过 (1/2),球体明显突出于立方体之外。

3. 高维体积的反直觉变化

  • 单位 (d)-球体的体积近似为 (\frac{\pi^{d/2}}{(d/2+1)!} r^d)。
  • 当 (r=1) 时,体积随维度增加先升后降:在五维达到峰值后迅速趋于零。
  • 这意味着高维单位球体所包围的体积几乎为零,类似于一个“几乎空心”的物体。

4. 测度集中现象

  • 在高维球面上,若要在赤道附近环绕一条带子以包含 (99%) 的表面积,所需带宽随维度增加急剧减小。
  • 这是因为高维球体表面上绝大多数点的坐标都非常接近零(即靠近任何选定的“赤道”)。
  • 由于球体的对称性,任意方向的赤道都满足这一特性。

5. 吻数问题的维度依赖性

  • 吻数是指能够同时与一个单位球相切(不重叠)的同等大小球的最大数量。
  • 在二维中吻数为 (6),三维中为 (12)。
  • 随着维度增加,球体之间的空隙变大,问题变得极其复杂。
  • 目前仅知道少数维度(1-4、8、24)的精确吻数。例如,八维中吻数为 (240)((E_8) 格子),二十四维中为 (196560)(Leech 格子)。
  • 在大多数维度中,我们只有上下界,且这些界限可以相差数千。

这些性质共同描绘出高维空间奇异而反直觉的图景,挑战了我们基于低维经验的几何想象。

12. Introducing Our New Name (blog.minetest.net)

Minetest 项目正式更名为 Luanti,标志着其身份的根本性转变。

更名原因:长久以来,“Minetest”这个名字让人们联想到它是“Minecraft的克隆品”。尽管项目最初确实受Minecraft启发,但经过社区十年的发展,它已从一个实验性游戏演变为一个功能丰富的游戏平台,支持易于使用的API、社区创建的游戏和模组、内容库等。旧名称已无法准确描述其当前定位和未来潜力。

新名称“Luanti”的由来:该名称是芬兰语单词“luonti”(意为“创造”)与编程语言“Lua”的文字游戏。它融合了创始人celeron55的芬兰国籍以及平台对内容创作的核心聚焦。项目方刻意避免了使用“free”或“libre”等词,因为虽然Luanti永远是自由软件,但这并非其全部,其名称旨在凸显更广阔的创造力和平台性。

未来变化

  1. 品牌更新:官方网站、代码仓库、社交媒体等将采用新名称和链接(如 luanti.org, github.com/luanti-org)。原有链接将被重定向。项目Logo保持不变。
  2. 对开发者的影响:引擎核心将采用通用的 core 命名空间,而非全部更改为 luantiminetest 命名空间将保留以确保向后兼容。这一决定更简洁且对分支及未来可能的变动更友好。
  3. 核心理念:Luanti 的定位是一个开放的创造平台,旨在支持任何形式的创作和体验,超越了单纯的体素游戏引擎限制。项目希望借此新起点,彻底摆脱过去的影子,独立发展。
13. Restic: Backups done right (restic.net)

Restic 备份软件概述

Restic 是一款现代备份工具,旨在提供正确可靠的备份解决方案。其主要特点与设计目标包括:

  • 跨平台支持:可在 Linux、BSD、Mac 和 Windows 系统上运行。
  • 多样化的存储后端:支持备份到多种存储类型,涵盖自托管服务和在线云服务。
  • 易于使用:作为单个可执行文件,无需服务器或复杂配置即可运行。
  • 高效备份:仅传输文件中实际变更的部分,减少数据传输量。
  • 安全性:在备份过程的每个环节均谨慎使用加密技术。
  • 可验证性:允许用户验证备份文件在需要时能否成功恢复。
  • 完全免费与开源:遵循 BSD 2-Clause 许可证,用户可自由使用。

安装与入门

用户可通过官方手册中的安装指南或从 GitHub 发布页面下载原生二进制文件进行安装。手册分为稳定版和最新开发版,提供了详细的使用说明。官方还提供了一个简短的演示视频帮助用户快速入门。

兼容性策略

Restic 非常重视备份的向后兼容性,遵循语义化版本控制规范。仓库及其数据结构被视为“公共 API”。在 1.0.0 正式版发布后,项目保证在同一个主版本号内保持向后兼容,确保数据始终可读取和恢复。在初始开发阶段(1.0.0 版本之前),开发团队也会尽力保持兼容性和稳定性,尽管可能存在破坏性变更。

社区与贡献

Restic 欢迎社区贡献。用户可以通过以下渠道参与和联系:

  • 使用与支持问题:在官方论坛提问。
  • 错误报告与功能建议:在 GitHub 上提交 Issue。
  • 实时交流:通过 IRC 频道 #restic 进行聊天(支持问题建议在论坛提出)。
  • 项目咨询:可发送邮件联系。

重要提示:如发现潜在的严重安全问题,请勿公开提交 Issue,而应直接通过加密邮件联系指定维护者。

项目活动与资源

项目定期通过博客发布版本更新等信息。有关 restic 的开发设计和数据结构,可参考官方设计文档。此外,社区曾多次在技术会议上介绍 restic,相关的演讲和播客链接也已列出。

许可证

Restic 采用 BSD 2-Clause 开源许可证。

14. Making the Tibetan language a first-class citizen in the digital world (www.bdrc.io)

BDRC致力于推动藏语在数字世界成为一等公民,近期实现了重大突破:开源办公软件LibreOffice现已支持藏语“超长段落”这一重要特性。藏文自八世纪佛教传入西藏以来,与书写、创新和技术息息相关,14世纪普及木版印刷推动了大量佛典文本的传播。现代转折点之一是藏文被纳入Unicode全球标准,促进了其数字化。

藏文的书写方式与西方语言显著不同:段落极长,几乎没有强制换行或大量空格,常见连续文本达上百甚至上千页。传统的英文为中心的文字处理软件(如Word、InDesign)对段落长度有限制,处理藏文超长段落时性能极差,严重影响出版与编辑。LibreOffice作为免费开放的成熟办公软件,对藏学和藏族群体尤为重要,既因其免费,也因其在亚洲广泛可用。但此前LibreOffice无法高效处理藏文超长段落,几乎没有免费的藏文排版工具。

2015年,BDRC技术总监Elie Roux向LibreOffice报告了这一问题,但因改动工程巨大一直未有进展。直到最近,开发者Jonathan Clark修复了该缺陷。例如长文本《如意宝藏论》全为一个段落,约153页,过去转换RDF文件到PDF需45分钟,如今仅需13秒,效率提升数百倍,极罕见于软件优化领域。

这一新功能已于2024年9月27日随LibreOffice 24.8.2版发布。BDRC自认只是播下种子,真正的进步归功于Jonathan Clark。该突破极大提升了藏文在开源出版工具中的地位。BDRC鼓励用户测试新版LibreOffice,反馈藏文编辑工具的使用体验与缺陷,共同推动藏文与其他语言在数字技术领域同步发展。

15. Gosub – An open-source browser engine (github.com)

Gosub 浏览器引擎总结

项目简介

Gosub 是一款使用 Rust 语言编写的、模块化且可嵌入的开源异步浏览器引擎。其主要入口点是 gosub_engine crate 中的 GosubEngine。开发者需提供渲染后端和合成器,而引擎本身负责管理多区域/标签模型、异步网络栈、基于区域的 Cookie 与存储隔离,以及一个事件总线。用户代理(UA)通过 TabCommand 驱动引擎,并通过 EngineEvent 做出反应。

核心组件

引擎由多个专门的 crate 组成,各司其职:

  • gosub_engine:统一的引擎入口。
  • gosub_html5:HTML5 词法分析器和解析器。
  • gosub_css3:CSS3 词法分析器和解析器。
  • gosub_net:异步、流式、按区域隔离的网络栈。
  • gosub_taffy:基于 Taffy 的布局引擎。
  • gosub_cairo:基于 Cairo / GTK4 的渲染后端。
  • gosub_vello:基于 Vello / wgpu 的渲染后端。
  • gosub_jsapi:浏览器 Web API(如 console、fetch、DOM)的实现。
  • gosub_v8:V8 JavaScript 引擎的绑定。
  • gosub_config:配置存储。

当前状态

已实现功能:

  1. 多区域/多标签模型:区域用于隔离 Cookie 和存储,标签通过 TabCommand 控制。
  2. 异步网络:具备优先级队列、请求合并、重定向处理和按区域 Cookie 隔离的流式 HTTP 获取器。
  3. 事件驱动的 UA 接口:引擎输出 EngineEvent(导航、资源、重绘),接收 TabCommand / EngineCommand
  4. HTML5 和 CSS3 解析:符合规范的解析器。
  5. 可插拔渲染后端:支持无界面(Null)、Cairo(GTK4)、Vello(wgpu)。

进行中功能:

  1. 完整的页面布局和渲染流水线(像素级精确输出尚未完成)。
  2. JavaScript 执行集成。
  3. 无障碍树。

快速开始与示例

  1. 集成:在 Cargo.toml 中添加 gosub_engine 依赖,并配合 tokio 使用。
  2. 代码示例:提供了完整的异步代码示例,演示了如何初始化引擎、创建区域和标签、导航到指定 URL 并监听引擎事件。
  3. 运行示例
    • 环境准备:需要安装 Rust 工具链。运行 GUI 示例(如 GTK4)还需安装特定的系统库。
    • 构建:克隆仓库后运行 cargo build
    • 引擎示例:包括单标签导航、多标签压力测试等无需 GUI 的示例。
    • GUI 示例:支持 GTK4/Cairo 窗口和 egui/Vello/wgpu 窗口。
    • 组件工具:提供了多个独立 crate 的测试工具,如 HTML5/CSS3 解析器、文本渲染等。

测试与 WebAssembly

  • 使用 make test 进行测试,cargo bench 运行基准测试。
  • 引擎可通过 wasm-pack 编译为 WebAssembly。运行演示需要一个开启了 WebGPU 功能的 Chromium 浏览器。

参与贡献

项目处于积极开发阶段,欢迎贡献。由于引擎仍在成型,许多工作是探索性的(如概念验证、阅读规范、架构决策)。建议在贡献前先加入项目的 Zulip 或 Discord 社区进行协调。

16. Why does FM sound better than AM? (www.johndcook.com)

为什么调频(FM)听起来比调幅(AM)更好?

基本原理

  • 调幅(AM)广播:最早的无线电广播形式,通过载波的振幅变化来传输信号。
  • 调频(FM)广播:后来出现,通过载波的频率变化来传输信号。

噪声影响与FM优势

  • 噪声特性:随机噪声主要对载波产生振幅调制(即改变振幅),而不会持续导致频率偏移。换句话说,噪声本质上是不受欢迎的振幅调制,而非频率调制。
  • FM的发明者预测:Edwin Howard Armstrong 正确预见了FM广播受噪声影响较小,因为FM通过频率变化传输信号,而噪声主要影响振幅。
  • 噪声减少:FM广播能实现显著的噪声降低,这在AM时代被认为是不可可能的。FM接收器使用限幅器来消除振幅变化(包括噪声),从而大幅改善音质,而不会丢失消息信号。

历史观点与纠正

  • J. R. Carson的错误观点:他曾认为噪声问题(如静电)无法彻底解决,但FM的实际表现证明这一观点不正确。
  • Pinter的观察:Philip F. Pinter 指出,FM接收器通过限幅器减少噪声是惊人的发现,与AM系统行为相反——AM中无法在不部分消除消息的情况下去除噪声。

参考来源

  • 基于Philip F. Pinter的著作《Modulation, Noise, and Spectral Analysis》(1965年),其中提供了详细解释。
17. Why pay for a search engine (help.kagi.com)

文章摘要

核心观点

文章指出,所有搜索引擎都有代价。区别在于你是用注意力、时间和隐私数据来支付,还是用金钱来支付。传统“免费”搜索引擎的商业模式从根本上扭曲了其目标,导致搜索质量下降和用户隐私受损。而付费搜索引擎(以Kagi为例)提供了另一种选择,旨在重建一个以用户利益为中心的搜索体验。

传统免费搜索引擎的代价

  1. 商业模式驱动:2022年广告商在搜索广告上花费1853.5亿美元,预计到2028年将达2610亿美元。这导致搜索结果被广告严重干扰,变得更难导航、答案更慢、且更具隐私侵入性。
  2. 历史预言成真:谷歌联合创始人在1998年的论文中曾警告,由广告资助的搜索引擎会偏向广告商而非消费者的需求。文章认为,谷歌随后确实从“组织世界信息”转向了“组织世界广告”,导致了网络和搜索质量的恶化。
  3. 真实成本高昂:以谷歌为例,2023年其美国广告收入达760亿美元,相当于美国每位用户每年为其贡献277美元(约每月23美元)。用户的注意力正在被拍卖给出价最高者。
  4. 隐私与法律风险:在美国宾夕法尼亚州的一起判例中,法院裁定警方无需搜查令即可访问用户的谷歌搜索记录,理由是用户对隐私没有期待,因为“网站收集并出售用户数据是常识”。这体现了“免费”模式的真实含义——将搜索历史转化为可被第三方获取的详细资料。
  5. 质量与安全隐忧:“免费”搜索不仅带来不便,还可能导致财务损失和欺诈风险。用户已对优质软件的口感变得麻木,并被“免费”的观念所催眠。

Kagi的解决方案

  1. 付费模式:用户直接向Kagi付费(例如每月5美元的基础计划或10美元的无限搜索计划),从而消除利益冲突。公司只为用户服务,不妥协于质量。
  2. 隐私保护:Kagi的隐私政策声明,其不将搜索查询与用户账户关联,不加载分析或追踪数据,也不跟踪用户点击了哪个搜索结果,从而确保搜索的私密性和匿名性。
  3. 用户导向:工具和功能专为用户而非广告商设计。Kagi致力于打造真正服务于用户的工具,重视产品工艺和用户反馈。
  4. 价值主张:选择Kagi不仅是购买一项服务,更是投资一个更美好、更道德的网络环境——一个重视隐私、珍惜时间、搜索结果只为用户服务而非为广告商服务的未来。

结论

文章最后提出,支付搜索费用的本质问题不是“为什么要付费”,而是“为什么要接受更差的服务”。通过支付金钱,用户可以夺回对自己搜索体验和数据的控制权。

19. Show HN: A VSCode Extension to edit HTML visually in real-time (github.com)

VSCode实时可视化HTML编辑扩展

核心功能

  • 可视化编辑:在WebView中直接编辑HTML元素。
  • 实时预览:源代码编辑器中的更改在每次击键时实时反映;WebView中的编辑会立即写回源代码。
  • 深度集成:与VSCode主题无缝集成,无需额外进程或窗口。
  • 元素选择:轻松选择HTML元素,可视化选择与文本选择实时双向同步。
  • 剪贴板操作:支持复制、剪切选中元素,并可粘贴文本或HTML。
  • 删除与撤销:可删除选中元素;所有通过WebView进行的编辑均支持撤销/重做。
  • 视图控制:支持页面缩放;拖拽移动元素以重新排列位置。
  • 资源更新:自动跟踪CSS、图片等相对路径引用的资源,保存时WebView自动刷新。

配置设置(settings.json

  • webVisualEditor.enableMovingElements:启用拖拽移动和键盘微调已定位元素(默认:false)。
  • webVisualEditor.allowScript:允许在WebView中运行<script>标签和on*事件属性(默认:false)。

提示:启用移动元素功能时,移动元素会使用VSCode的HTML格式化重写标签。为避免缩进不一致,建议在开始可视化编辑前先格式化整个文档(Shift+Alt+F)。

多选操作

  • Ctrl+单击:添加或移除元素选择。
  • 源代码编辑器中的选择(包括多个范围)也会在WebView中同步反映。

可移动元素条件(需启用enableMovingElements

元素可拖拽需同时满足:

  1. position不是staticsticky
  2. left/right未同时设置(top/bottom同理)。
  3. 任何显式设置的position值使用px单位——其他单位(如%emrem等)会使元素不可移动。

剪贴板操作细节

  • 复制/剪切:将选中元素的源代码文本复制到剪贴板(与源代码编辑器中高亮范围相同)。剪切会同时从源中移除元素。
  • 粘贴:将剪贴板内容插入到最后一个选中元素的闭合标签前(若无选中则插入<body>内)。若剪贴板包含有效HTML则原样插入;纯文本会先进行HTML转义。插入后的内容将由VSCode的HTML格式化器重新格式化。

替代方案对比

该扩展类似microsoft/vscode-livepreview,主要区别在于:

  • 支持代码选择与预览中的视觉选择同步。
  • 功能精简,代码库小,便于未来扩展。
  • 设计上侧重于将预览中的更改反映回代码,未来可增强预览内编辑能力(目前支持复制、剪切、粘贴和删除元素)。

许可证与赞助

  • 采用MIT许可证。
  • 开发者欢迎通过“请喝咖啡”提供赞助以鼓励持续开发。
20. Scientists successfully breed corals to improve their heat tolerance (phys.org)
22. The Stallman Report (stallman-report.org)

《斯托曼报告》主要内容摘要

1. 报告背景与目的

本报告旨在系统梳理理查德·斯托曼(Richard Stallman,RMS)作为自由软件基金会(FSF)创始人及GNU项目领导者的长期不当言行。报告认为,斯托曼在自由软件运动中有重大贡献,但其推行的一项正常化性侵犯、为施害者辩护、并试图颠覆社会与法律对性行为认知的政治议程,对社区(尤其是女性)造成了严重伤害。报告核心主张是:鉴于斯托曼未对其不当行为表示理解、未道歉、并持续发布有害观点,应将其从FSF董事会中除名。

2. 对斯托曼主要政治观点的指控与驳斥

报告详细列举并引用了斯托曼自2003年至2024年间在其个人网站上发布的数百条政治笔记,将其归类为有害观点。主要类别包括:

  • 正常化成年人与未成年人的性关系:斯托曼长期主张12或13岁以上的青少年可以与成年人发生合意性关系。他于2019年曾发表一份“撤回声明”,但该声明仅针对“儿童”(根据其自定义术语,指12或13岁以下者),而其后续言论(截至2024年6月)仍在持续区分“儿童”与“青少年”,为后者的性关系正常化辩护。报告引用大量数据反驳了其观点,指出这种关系存在剥削性,会显著增加意外怀孕、性传播感染和性暴力的风险。
  • 为性不端行为辩护:报告收录了37例斯托曼淡化性侵犯、性骚扰和强奸严重性的言论。他常通过质疑指控的用语、强调缺乏“暴力胁迫”或质疑受害者证词等方式,为被指控或被定罪者辩护。报告指出,这种言论会对受害者造成二次伤害,加剧创伤后应激障碍等症状。
  • 否定性侵犯与性骚扰的法律规范:斯托曼试图瓦解“性侵犯”和“性骚扰”这些法律概念的有效性。他声称这些术语过于宽泛,并将其问题简化为用语是否“精确”。报告指出,这背离了保护受害者隐私和维护司法程序的正常做法,并助长了不安全的环境。
  • 支持持有儿童性虐待材料(CSAM):斯托曼有55条言论主张CSAM的持有和分发不应是犯罪,理由基于其反审查原则或其对青少年与儿童的错误区分。报告反驳称,CSAM的传播会对受害者、观看者、执法人员和内容审核员造成严重且持久的伤害。
  • 倡导人兽交(Bestiality)与恋尸癖(Necrophilia)的合法化:报告分别收录了12条和3条相关言论。斯托曼认为,只要动物未受“物理伤害”,相关行为就应被允许,并质疑禁止此类图像或行为的法律。报告指出,动物无法表示同意,此类行为及影像的制作与传播会造成严重伤害。
  • 其他有害立场:包括对“窃吻”等行为的辩护,以及使用贬损性语言(如将警察称为“暴徒”)。

3. 对斯托曼个人不当行为的指控

报告收录了多起经过核实或由斯托曼本人部分确认的指控:

  • 贝茜·S的证词:回忆在1980年代初,斯托曼曾以自杀相威胁,要求当时是大学新生的她与之约会。斯托曼2020年的回应将责任归咎于对方“误解”。
  • “EMACS处女”表演事件:斯托曼在多次会议中表演“圣·IGNUcius”角色,其环节包含性暗示内容。2008年的一段录像显示,他将一名13岁女孩带上舞台并发表性暗示言论。
  • “愉悦名片”事件:有女性证人称,在专业活动场合收到斯托曼带有性挑逗意味的名片,并感受到其利用权力差距进行不当追求。
  • 前FSF员工的证词:多名前FSF员工(包括工会创始人)证实,斯托曼的行为(包括性别歧视言论、对象化女性)是导致FSF工作人员成立工会以保护自身权益的主要原因。有前董事会成员也因斯托曼包庇施害者而辞职。

4. 对FSF董事会失职的指控

报告指控FSF董事会在斯托曼事件上存在系统性失误:

  • 治理缺乏透明度:斯托曼在2019年辞去所有治理职务的公开声明与实际情况可能不符。报告指出,他可能一直是“投票会员”,并在2021年重返董事会前一直参与决策,这构成了一种“影子政府”。
  • 事先知情但未作为:据前执行董事布拉德利·库恩(Bradley Kuhn)称,FSF领导层至少在2019年公众抗议爆发两年前就已知晓斯托曼的行为。库恩因要求斯托曼道歉而被投票除名,报告认为此举旨在为斯托曼复职扫清障碍。
  • 未能履行防止性骚扰的法律责任:报告认为,FSF保留了解性骚扰定义并持续发表相关不当言论的斯托曼担任领导职务,这本身已构成敌意工作环境。同时,将提出异议的库恩开除可能构成非法报复。报告还指出FSF在实施相关培训和政策方面存在不足。

5. 社区反应与建议

  • 社区反应:2021年斯托曼复职后,超过60个机构和3000名个人签署公开信要求其离任。多个主要机构(如红帽、Fedora项目、自由软件基金会欧洲分会等)因此撤回资金支持或采取不合作政策。
  • 建议
    • 致斯托曼:彻底撤回并道歉;撤下相关有害言论;辞去FSF及GNU项目所有职务。
    • 致FSF领导层:若斯托曼不自行辞职,应召开会议将其罢免;谴责其有害言论;涉事的老资格董事会/投票会员应辞职;完善伦理准则和培训体系。
    • 致社区:若FSF领导层不作为,建议抵制FSF,呼吁取消会费并支持上述行动。

报告最后强调,斯托曼的贡献无法抵消其造成的伤害,自由软件社区必须正视并解决这一问题,以营造一个安全、包容的环境。

23. DeepSeek: Advancing theorem proving in LLMs through large-scale synthetic data (arxiv.org)

文章摘要

本文介绍了DeepSeek团队针对大语言模型在形式化定理证明领域面临的数据短缺问题,所提出的一种创新解决方案及其显著成果。

核心问题 形式化证明助手(如Lean)极大提升了数学证明验证的可靠性,但大语言模型在该领域的进展受限于高质量训练数据的匮乏。

解决方案 研究团队提出了一种从高中及本科数学竞赛题出发,大规模生成Lean 4证明合成数据的方法。该流程主要包括三个步骤:

  1. 将自然语言数学问题翻译为形式化声明。
  2. 过滤掉低质量的形式化声明。
  3. 为这些声明生成对应的证明,从而构建合成数据集。

关键实验与成果

  • 数据规模:构建了一个包含800万个带证明的形式化声明的大型合成数据集。
  • 模型训练:在该数据集上对DeepSeekMath 7B模型进行微调。
  • 性能表现
    • 在Lean 4的miniF2F测试基准上,模型采用单次生成证明的准确率达到46.3%(使用64个样本),累计准确率达到52%
    • 这一结果显著超越了基线模型GPT-4(23.0%)以及采用树搜索强化学习的方法(41.0%)。
    • 在更具挑战性的Lean 4形式化国际数学奥林匹克问题(FIMO)基准上,模型成功证明了148个问题中的5个,而GPT-4未能证明任何问题。

结论与贡献 研究证明了利用大规模合成数据能够有效提升大语言模型的形式化定理证明能力。为促进该领域的后续研究,团队承诺将公开合成数据集及训练好的模型。

24. Faster convergence for diffusion models (sihyun.me)

更快收敛的扩散模型

核心问题

基于去噪的生成模型(如扩散模型)在生成高维视觉数据方面具有可扩展性,但其训练的主要挑战在于学习高质量的内部表示。现有扩散模型虽然能学到有意义的判别性表示,但远逊于顶尖的自监督视觉编码器(如DINOv2)所产生的表示。

解决方案:表征对齐

论文提出了一种名为REPA的简单正则化技术,旨在将预训练的自监督视觉表示(针对干净图像)与扩散Transformer模型对含噪声输入的学习表示进行对齐。

  • 核心机制:在扩散Transformer的前几层进行表征蒸馏对齐。这使得模型早期层能快速获得高质量、对齐的语义表示,从而让后续层可以专注于捕捉高频细节,提升生成质量。
  • 关键发现:仅需对齐前几个Transformer块即可实现充分的表征对齐。

主要成果

  1. 训练效率飞跃:相比原始模型,实现了 >17.5倍 的更快收敛速度。
  2. 生成质量先进:在最终生成质量上达到了先进水平,使用带引导间隔的无分类器引导时,FID分数达到 1.42
  3. 可扩展性强:该方法在更大的模型和更好的视觉编码器上效果更显著,同时展现了出色的视觉缩放能力。
  4. 实验结果:在400K次迭代内,使用REPA的模型(FID=7.9)已超过原始模型训练700万次迭代后的性能。

总结

该研究通过一种名为REPA的轻量级正则化方法,将高质量的自监督表示引入扩散Transformer的训练过程,极大地加速了收敛并提升了最终生成效果,证明了有效的表征对齐是提升扩散模型训练效率的关键。

25. Show HN: I made a git rebase TUI editor (github.com)

项目概述

作者在Show HN上展示了一个用OCaml开发的git rebase TUI(文本用户界面)编辑器。该项目是OCaml CLI Mini-framework的一部分,旨在提供一个交互式git rebase编辑器,作为git rebase -i命令的替代品。

核心组件

  • rebase_edit: 交互式git rebase编辑器,由git在rebase过程中调用,用于编辑rebase文件。
  • newbase: 一个bash包装器,用于调用git rebase并指定使用rebase_edit作为编辑器,简化使用流程,提供便捷功能。

安装方法

用户可以通过两种方式安装:

  1. 从源代码构建:需要Linux、opam和支持termios的终端。构建步骤包括运行opam install . --deps-only --with-testdune build。安装根目录可通过INSTALL_ROOT变量自定义,默认为$HOME/bin,使用命令make install-newbase INSTALL_ROOT=/somewhere/in/your/path
  2. 下载预编译二进制:从GitHub发布页面下载newbaserebase_edit,例如通过wget命令,赋予执行权限(chmod +x)后移动到PATH目录中(如~/bin)。

开发环境和库

项目基于OCaml开发,提供了以下库和工具:

  • Core libraries:
    • tea: 受Elm启发的应用程序结构。
    • tty: 封装OCaml Stdlib termios函数和ANSI终端控制序列的包装器。
    • components: 可组合的ANSI小部件。
  • Miscellaneous:
    • ppx_cross_match: 一个PPX,用于从模式元组的笛卡尔积生成单一模式。
    • qol: 各种质量生活辅助工具。

演示和测试

项目包含演示程序用于验证功能:

  • demo_tty: 展示所有实现的ANSI功能,用于检查框架在特定终端上的行为。
  • demo_boiling: ASCII动画的持续沙盒。 测试套件可通过make test运行,验收测试可使用相应命令更新当前输出。开发要求包括Linux、opam和termios支持的终端。
27. Blocking the "Sign in with Google" Prompt (2023) (superuser.com)

阻止“使用Google登录”提示(2023)

问题描述

  • 许多需要登录的网站会显示烦人的“使用Google登录”弹出提示,例如“登录以解锁优惠和折扣!”等类似内容。
  • 这些提示对用户造成干扰,影响浏览体验。

现有解决方案与问题

  • 互联网上存在一些教程来阻止此类提示,例如How-To Geek上的指南
  • 这些教程建议在Google账户设置中禁用“允许Google在支持的第三方网站上提供更快的Google账户登录方式”选项。
  • 然而,该解决方案对作者无效,因为作者的Google账户中从未启用过此选项(相关设置已关闭)。

浏览器行为差异

  • 问题仅出现在特定浏览器中:
    • Firefox浏览器(版本110.0.1,安装AdBlocker Ultimate v3.7.21):会显示Google登录提示。
    • Brave浏览器(版本1.49.120,基于Chromium 111.0.5563.64):不显示提示,因为Brave默认屏蔽广告。
  • 这表明浏览器特性或广告屏蔽功能可能影响提示的出现。

系统环境信息

  • 作者的操作系统:Ubuntu 22.04.2 LTS(Jammy Jellyfish),Linux内核5.19.0-35-generic x86_64。
  • 浏览器版本:Firefox 110.0.1和Brave 1.49.120。

总结

  • Google登录提示在网站中常见,但阻止方法可能因浏览器和账户设置而异。
  • 作者的经历显示,禁用Google账户选项并不总是有效,而使用默认屏蔽广告的浏览器(如Brave)可以避免提示。
  • 该问题突出了浏览器兼容性和广告屏蔽功能对用户体验的影响。
28. The Optimus robots at Tesla's Cybercab event were humans in disguise (www.theverge.com)

特斯拉在其Cybercab活动中大力展示Optimus机器人,但其在活动中展现的“能力”主要是一场表演。

活动表现: Optimus机器人在活动中穿梭于人群中,为客人提供饮料、玩游戏并在亭内跳舞。最引人注目的是它们甚至能进行对话。

表演真相: 视频和与会者消息表明,这些机器人并非完全自主运行。多名人士透露,机器人的行动和对话受到“人类远程协助”或“遥控操作”支持。一些迹象包括:机器人拥有不同的声音、能即时回应并配合手势。其中一台机器人甚至用合成声音告诉与会者“今天我由人类协助”,并承认自己“并非完全自主”。

背景与分析: 特斯拉首席执行官埃隆·马斯克曾在2021年的AI日上以“明显是人类穿着机器人套装”的方式发布特斯拉机器人。本次活动的夸张展示延续了这一风格。尽管观众似乎并未感到受骗,但此次活动并不能真实反映特斯拉在类人机器人研发方面的实际进展。

29. Ask HN: Solopreneurs, how did you come up with your idea?
30. Sound Lab – A Simple Analogue Synthesiser (www.technoblogy.com)

Sound Lab – 简单模拟合成器概述

Sound Lab 是一款模拟合成器,其核心设计目标是简化构建过程。它采用单块印刷电路板设计,该电路板同时充当前面板和布线基础,所有元件均采用表面贴装技术,并直接焊接在电路板上,从而最大限度地减少了手动接线需求。

核心特性与设计

  • 结构:由六个可灵活组合的模块构成,实现广泛的音效生成。
  • 尺寸:158 x 96 x 27毫米,可单手持握操作。
  • 设计理念:完全模拟电路,不含微控制器或数字逻辑。使用表面贴装电阻、电容、二极管和集成电路。
  • 灵感来源:受1980年代左右的WP-20经典合成器启发。
  • 成本:在精心采购元件的情况下,构建成本约为60英镑/60美元。

模块功能

  1. 振荡器:核心信号源,生成频率受电压控制的方波或三角波(频率范围:6Hz至4kHz)。可产生固定音调或频率变化的调制音。
  2. 噪声源:白噪声发生器,经过滤波和门控后可模拟风声、铙钹、枪声等自然或机械声音。
  3. 低频振荡器:生成低频波形(范围:2.4Hz至1280Hz),用于调制振荡器、滤波器和放大器,产生颤音或震音等效果。
  4. 包络发生器:产生具有可独立调整的“起音”和“衰减”部分的电压包络。同样可用于调制其他模块,产生如警笛般的升降音调。
  5. 滤波器:电压控制的低通滤波器,其截止频率和共振特性可调,用于塑造音色。
  6. 放大器:电压控制放大器,用于调制声音的振幅,可产生震音效果。

技术细节与组件

  • 电路:基于运算放大器(如LM3900、LM324)、555定时器等经典模拟集成电路设计。
  • 关键组件:包括12个规格为9mm、200kΩ线性的电位器,10个微型SPDT拨动开关,以及一个0805尺寸的表面贴装元件。
  • 电源:设计使用单9V电源,平均消耗电流约100mA。可使用9V电池(如可充电NiMH电池)或外部9V直流电源(中心正极)供电。
  • 音频输出:驱动板载扬声器或通过音频输出接口连接外部设备。

构建与使用

  • 装配:建议先焊接SOIC封装的集成电路,然后焊接被动元件,最后安装电位器、开关和连接器。
  • 测试:通电后建议监测电流以检查短路,并验证噪声输出及各模块功能。
  • 操作指南:文章提供了从产生纯净音调开始,逐步学习如何使用LFO和包络发生器进行调制的详细步骤。
  • 常见问题
    • 无法保存声音预设,可通过拍照记录旋钮位置。
    • 可作为乐器进行实时演奏,也支持通过外部电压控制频率或触发信号。
    • 不支持MIDI接口

资源

项目相关的PCB设计文件(Eagle格式)和完整电路图可在指定的GitHub仓库中获取。

31. Rama on Clojure's terms, and the magic of continuation-passing style (blog.redplanetlabs.com)

Rama 是一个高度通用的平台,能够表达任意规模后端的所有计算和存储。其核心是基于延续传递风格(CPS)的数据流语言,该语言既是 Clojure 库,也是一种完备的语言。Rama 通过简洁优雅的方式表达 CPS 程序,并编译为与 Clojure 同样高效的字节码。

核心概念:Rama 操作与 CPS

在 Rama 中,基本构建块是 Rama 操作deframaop)。与 Clojure 函数不同,Rama 操作不通过 return 返回值,而是通过 发射(emit)将值传递给其延续(continuation)。发射使用 :> 关键字,且可以:

  • 发射零次或多次:操作可以不发射、发射一次或多次值。
  • 发射多个值:单次发射可传递多个值。
  • 异步发射:可在不同线程或节点上发射,实现分布式计算。
  • 发射到多个输出流:除了默认流 :>,可定义如 :a>:b> 等输出流。

这使得 Rama 操作比函数更通用,为并行和异步编程提供了极大灵活性。

与 Clojure CPS 的对比

在手动编写的 Clojure CPS 代码中,每个操作需显式传递延续函数,导致深层嵌套、可读性差且可能栈溢出。Rama 通过隐式延续和编译器优化解决了这些问题:

  • 简洁性:Rama 代码线性排列,无需回调嵌套。
  • 效率:编译器优化确保数据流代码性能与地道 Clojure 代码相当。

分布式编程与分区器

Rama 支持集群部署,通过分区器(如 |hash)将计算重定向到特定任务(线程/节点)。分区器可像普通操作一样组合使用,控制数据在分布式存储中的位置。例如:

  • |hash:基于哈希选择任务。
  • |all:并行广播到所有任务。
  • |global:固定到单个任务。

计算与存储协同,允许细粒度数据分区控制。分布式循环可轻松表达图遍历等算法。

高级特性

  • 匿名操作与闭包:使用 <<ramaop 定义匿名操作,可捕获词法作用域。
  • 多输出流处理:通过锚点和分支(<<branch:>>)处理不同输出流的逻辑。
  • 统一设施unify>):合并多个计算分支,共享后续代码。
  • 条件与循环if> 是标准操作(非特殊形式),可动态传递;循环使用 loop<-continue>

编译器优化

Rama 区分两种操作以优化性能:

  • deframafn:必须恰好发射一次到 :> 流(类似函数),可进行栈展开优化。
  • deframaop:无发射限制,提供最大灵活性。

多数代码可使用 deframafn,确保高效执行。

总结

Rama 将 CPS 提升为优雅高效的通用编程范式,适用于后端开发、分布式系统及通用编程。其数据流语言统一了函数式编程、分布式计算和异步编程,通过发射语义、分区器和编译器优化,在保持高性能的同时提供了极大的表达能力。

32. Australian coal plant in 'extraordinary' survival experiment (www.abc.net.au)

澳大利亚燃煤电厂的“非凡”生存实验

技术突破:燃煤机组首次实现“双班制”运行

在经历多年挫折与阻碍后,澳大利亚燃煤发电行业迎来了一项被认为不可能的成就。能源巨头AGL公司在其位于猎人谷的贝斯沃特电站成功完成了一项试验:在白天关闭一台燃煤发电机组,并在五小时后重新启动。这一过程被称为“双班制”,此前被认为是技术上不可行且经济上不可持续的。

燃煤电厂历来被设计为“基准负荷”电源,即需要全天候、全年近乎满负荷运行。然而,随着屋顶太阳能等可再生能源的大量涌入,批发电价在白天经常跌至负值。传统观点认为,燃煤机组无法灵活调节以适应这种电价波动。

AGL的试验表明,燃煤电厂可以更灵活地运行,从而在电价高峰(如傍晚)发电,并在电价低谷(如白天太阳能充裕时)停机。能源分析师戴维·利奇指出,这项技术突破意义重大,理论上可以使燃煤机组的最低运行水平降至零,从而为可再生能源腾出更多空间,同时减少碳排放。

融资困境:银行因环保顾虑拒绝对煤炭业提供担保

就在AGL宣布好消息的几天后,运营着老旧瓦莱斯角电厂的捷克公司Delta却揭示了行业的另一面。该公司表示,由于环境、社会和治理方面的顾虑,它接触的15家主要银行均拒绝为其提供必要的银行担保。

根据澳大利亚能源市场运营商的规定,发电厂需要提供银行担保作为信用支持,以覆盖可能的亏损。Delta声称,尽管公司本身是盈利且有偿付能力的,但无法从2024年底起满足AEMO的审慎要求。公司警告,如果规则不修改(允许用现金替代银行担保),可能会导致关键发电资产被迫退出市场,从而威胁电力供应安全与可靠性。

行业前景:过渡期的挣扎与必然的退出

分析师利奇认为,Delta的困境部分源于其自身对减排目标的漠视和完全支持煤炭的立场,这使得面临脱碳压力的银行难以继续支持。尽管Delta短期内可能通过规则修改获得喘息之机,但来自金融机构的压力正在持续加大。

更广泛的背景是,澳大利亚屋顶太阳能的爆炸式增长正在不断挤压燃煤发电的市场空间,迫使电价下跌,并浪费着大量的廉价太阳能发电。

尽管“双班制”等技术可能延长部分燃煤电厂的寿命,甚至使其在退役后作为备用电源,但行业共识认为,燃煤发电在澳大利亚的终结已不可避免。利奇总结道:“燃煤发电将在未来10年内退出澳大利亚市场……这已成定局,正如全球范围内正在发生的那样。”