2024-05-25

26 篇热帖

1. ICQ will stop working from June 26 (icq.com)

ICQ 服务将于 2024年6月26日 正式停止运营。

用户可转而使用以下替代产品:

  • VK Messenger:用于与朋友聊天。
  • VK WorkSpace:用于与同事沟通。
2. Abusing Go's Infrastructure (reverse.put.as)

摘要: 本文探讨了Go语言基础设施(模块校验数据库和代理)可能被滥用存储非Go代码的问题。

  • 问题发现:作者在查询Go的校验数据库(sum.golang.org)时,发现大量来自非Go项目(如Homebrew的Ruby项目、Rust项目)的记录。经调查,这些项目本身不包含Go代码,但仍出现在数据库中。
  • 机制原理:Go的模块系统设计上,当go命令查询一个尚未记录在日志中的模块时,校验数据库会自动尝试从源头服务器(如GitHub)获取该模块。通过向/lookup端点(例如 sum.golang.org/lookup/module@version)发起请求,即可触发此机制,使Go基础设施下载并索引任意指定的Git仓库(或其他支持的版本控制系统仓库),无论其是否为Go项目。
  • 验证实验:作者通过创建自己的仓库(包含和不包含Go代码)并请求校验数据库查询,成功验证了:
    1. 非Go项目也能被添加到校验数据库和Go代理(proxy.golang.org)。
    2. 随后可以通过代理查询(/@latest)获取版本信息并下载其压缩包。数据被永久存储在Go的公共基础设施中。
  • 滥用风险:此机制可能被用于:
    • 恶意软件分发:作为payload的托管和检索渠道,绕过部分下载限制。
    • 命令与控制(C2):轻松实现基于Go模块代理的C2通信,通过简单查询获取最新指令。
    • 潜在拒绝服务(DoS):理论上,大量伪造查询可能对代理服务或上游源仓库造成压力,但文章指出Go已有限制(如模块zip最大500MB)。
  • 现状与结论:作者认为这不是一个严重安全漏洞,但确实是一个可被滥用的设计特性。数据显示,校验数据库中约95%的唯一路径托管于GitHub,显示了生态系统对GitHub的高度依赖。作者推测可能存在文档未说明的原因允许非Go代码进入,或已有人在滥用此机制,并提出了关于某些非Go项目为何存在的疑问。
4. Mp3tag – The Universal Tag Editor (www.mp3tag.de)

Mp3tag – 通用标签编辑器

核心定位 Mp3tag 是一款功能强大且易于使用的音频文件元数据编辑工具。它支持对多种格式的音频文件进行批量的标签编辑。

主要功能

  • 批量标签编辑:支持一次性为多个文件写入 ID3v1.1、ID3v2.3、ID3v2.4、MP4、WMA、APEv2 标签和 Vorbis Comments。
  • 封面艺术管理:支持下载并添加专辑封面,美化音乐库。可通过“管理封面...”功能集中添加、删除、替换、调整和排序封面。
  • 在线数据库导入:支持从 Discogs、freedb、MusicBrainz 等在线数据库自动获取标签信息,节省手动输入。
  • 批量文件处理:支持基于标签信息重命名文件,也支持从文件名导入标签;支持在标签和文件名中进行字符串替换(支持正则表达式)。
  • 自动化与报告:可在编辑时自动创建和管理播放列表;支持将音乐库信息导出为 HTML、RTF、CSV 等格式的报告。
  • 全面兼容:用户界面和标签处理完全支持 Unicode。
  • 高级功能:还包括批量导出内嵌封面、支持 iTunes 特定标签(如媒体类型)、将多个操作组合成可一键执行的批处理组等。

支持的格式 涵盖众多主流音频格式,包括但不限于:MP3、FLAC、AAC、ALAC、AIFF、DSF、APE、OGG Vorbis、Opus、WMA、WAV、WebM 以及 MPEG-4 系列容器(如 M4A、M4B、MP4)。

近期版本动态 该软件持续更新,近期主要版本包括:

  • v3.34.1 (2026-05-07):包含问题修复和改进。
  • v3.34 (2026-04-10):引入了现代化图标、高达200%的界面缩放支持、可自定义工具栏等多项改进。
  • v3.33.1 (2026-02-06):问题修复和改进。
  • v3.33 (2026-01-22):新增了封面缩放至正方形、裁剪等选项,并解决了Windows更新导致的问题。
  • v3.32 (2025-11-14):新增了通过排序标准选择相似文件块、自定义列表值自动完成等功能。
  • v3.31 (2025-08-15):新增了集中的“管理封面”对话框,支持单独删除MP3的特定标签类型。
7. Diffusion Models (andrewkchan.dev)

扩散模型

扩散模型是一类强大的生成模型,其核心思想是通过一个逐步向数据中添加噪声的前向过程,以及一个学习逐步去除噪声的反向过程,来从复杂分布中生成新样本。

1. 基础:生成建模与DDPM

生成建模的目标是学习数据分布 $p(\mathbf{x})$ 并从中采样。与难以训练且易发生模式崩溃的生成对抗网络(GAN)以及受限于可逆映射要求的标准化流不同,扩散模型通过随机地将数据映射到噪声分布(如高斯分布)来工作。

去噪扩散概率模型(DDPM) 是经典范式:

  • 前向过程:通过一个马尔可夫链,逐步向数据 $\mathbf{x}_0$ 添加高斯噪声,在 $T$ 步后将其转化为纯噪声 $\mathbf{x}_T$。这个过程有封闭形式,可直接从 $\mathbf{x}_0$ 得到 $\mathbf{x}_t$。
  • 反向过程:理论上,给定 $\mathbf{x}t$,其前一步的分布 $q(\mathbf{x}{t-1}|\mathbf{x}_t)$ 在小噪声下近似高斯分布。通过贝叶斯规则,可以推导出在已知原始图像 $\mathbf{x}0$ 时的精确条件分布 $q(\mathbf{x}{t-1}|\mathbf{x}_t, \mathbf{x}_0)$。
  • 训练目标:训练一个神经网络 $\epsilon_\theta$ 来预测在任意时间步 $t$ 加入的噪声。损失函数被简化为预测噪声 $\epsilon_\theta$ 与真实噪声 $\epsilon$ 之间的均方误差。
  • 采样过程:从纯噪声 $\mathbf{x}_T$ 开始,迭代地使用训练好的模型预测噪声并逐步去噪,最终生成样本 $\mathbf{x}_0$。

2. 进展:加速与条件生成

2.1 加速采样

DDPM 需要数百至数千步采样,速度慢。研究发现了扩散模型与微分方程的深刻联系:

  • 得分匹配:模型预测的噪声方向等价于数据对数概率的梯度(得分函数)。
  • 随机微分方程(SDE):前向扩散过程可描述为 SDE,且存在一个对应的常微分方程(ODE),其确定性轨迹的分布与原随机过程相同。这使得使用数值 ODE 求解器(如 Euler 法)进行快速采样成为可能,仅需 10-20 步即可生成高质量样本。
  • 蒸馏:通过渐进蒸馏,可将教师模型(如需 1000 步)的知识逐步蒸馏到只需更少步数的学生模型中,甚至实现单步生成(如 Stable Diffusion XL Turbo)。

2.2 条件生成与控制

为了生成特定类别的内容(如“猫”),可引入条件 $y$(如文本嵌入):

  • 分类器引导:训练一个在带噪图像上工作的分类器,其梯度可用于引导生成过程朝着目标类别优化。
  • 无分类器引导:更常用的方法。模型在训练时同时以条件和无条件(使用空标签)为目标。采样时,条件与无条件预测的差值被用来放大条件引导效果。
  • 图像条件控制
    • 图像到图像:对输入图像加噪后去噪,可保留其整体结构。
    • ControlNet:一种高效的方法,通过微调一个控制网络副本,将边缘图、姿态等条件精确注入预训练模型,而不会损害原始模型权重。
    • 修复:通过仅对被掩码区域加噪并在每步替换回原始图像的清晰部分来实现。

3. 高分辨率与更广泛应用

3.1 生成高分辨率图像

  • 级联扩散:先在低分辨率生成,再通过一系列超分辨率模型逐步放大。
  • 潜在扩散Stable Diffusion 的核心。先使用自编码器将图像压缩到潜在空间,再在紧凑的潜在表示上进行扩散训练和采样,最后解码回图像空间。这大幅降低了计算成本。

3.2 超越图像:音视频、3D与科学

扩散模型已扩展到多个领域:

  • 音视频:音乐模型(如 Sonauto)通过扩散生成频谱图;视频模型(如 Sora)将视频视为“时空斑块”进行去噪,展现出强大的 scaling 能力。
  • 3D 生成:利用 2D 扩散模型蕴含的 3D 先验,结合神经辐射场(NeRF)或高斯溅射(Gaussian Splatting)等表示,从文本生成 3D 模型(如 DreamFusion, Stable Video 3D)。
  • 生命科学:在医学影像重建(如从部分扫描重建完整图像)和蛋白质结构预测(如 AlphaFold 3 使用扩散架构)中取得突破。
  • 机器人学:扩散模型作为策略生成器,能从演示中学习处理复杂的、多模态的机器人操作任务。

4. 数据与伦理

模型的训练依赖于大规模数据集(如 LAION-5B)。其合法性及对艺术家生计的影响引发了广泛伦理讨论。一些模型(如 Adobe Firefly)开始使用授权数据或允许艺术家退出训练。同时,也出现了针对图像模型的“数据投毒”攻击方法(如 Nightshade)。

8. Publishing AI Slop Is a Choice (daringfireball.net)

文章批评谷歌为追赶竞争对手而仓促推出AI搜索功能,导致出现错误并损害用户体验。文章指出,分析师认为谷歌必须快速行动,即使牺牲短期用户体验;但作者反驳称,谷歌搜索质量此前已下滑,此举进一步破坏了其25年来积累的用户信任。作者强调,谷歌本有选择权,却选择以牺牲产品信誉为代价,避免被视作“落后”。文章认为,在竞争对手发布不可靠内容时,保持落后反而是明智之举。

9. Why is x & -x equal to the largest power of 2 that divides x? (arunmani.in)
11. Ask HN: What is your ChatGPT customization prompt?
12. JetBrains releases RustRover IDE for Rust development (www.infoworld.com)

JetBrains发布了专为Rust编程语言设计的IDE——RustRover。该产品集成了Rust工具链,并提供可选的AI辅助功能(需通过插件和订阅)。

RustRover旨在简化Rust开发体验并释放其全部潜力,提供实时反馈、代码建议、简化的工具链管理和团队协作等功能。该IDE于5月21日公布。

JetBrains为此推出了新的许可模式:商业付费许可和面向个人非商业用途的免费许可

此前,JetBrains通过开源的IntelliJ Rust插件支持Rust开发。RustRover作为专属产品,旨在为日益增长的Rust开发者社区提供更强大的功能。此外,JetBrains也在测试支持Rust的多语言编辑器JetBrains Fleet。

RustRover的关键功能包括:

  • 完整的Rust工具链支持,涵盖编译器。
  • 版本控制系统集成,支持GitHub和Git,便于团队协作与控制。
  • 错误检测与实时反馈,辅助调试。
  • 对前端技术和数据库的支持
  • 智能的代码补全与解析,即使在非常规上下文中也能提供建议。
  • 单元测试集成,支持运行、重新运行失败测试及解决错误。

RustRover在功能和定位上与JetBrains的其他语言特定IDE(如PyCharm、GoLand、RubyMine)相似。所有这些IDE均支持JetBrains AI Assistant插件,该插件通过订阅提供AI驱动的代码建议、代码解释和代码对话功能。

13. Mistral Fine-Tune (github.com)

Mistral Fine-Tune 工具总结

概述

mistral-finetune 是一个轻量级代码库,用于对 Mistral 模型进行高效且低内存消耗的微调。它基于 LoRA(低秩适配) 技术,仅训练模型中约 1-2% 的附加权重(以低秩矩阵扰动形式),其余大部分权重保持冻结。

主要特点

  • 硬件要求:推荐使用 A100 或 H100 GPU 以获得最佳效率。
  • 训练配置:针对多 GPU 单节点设置优化;对于较小的模型(如 7B),单个 GPU 即可运行。
  • 设计目标:提供简单、引导式的 Mistral 模型微调入口,对数据格式有严格要求,不追求跨多种架构或硬件的全面支持。

最新更新(兼容性)

  • Mistral Large v2 (123B Instruct):现已兼容。微调时需注意:
    • 因模型较大,内存需求显著增加,建议 seq_len 设置为 ≤ 8192。
    • 推荐使用较低学习率,例如 lr=1e-6
  • Mistral Nemo (12B):现已兼容。微调时需注意:
    • 因词汇量较大导致峰值内存需求增加,建议 seq_len 设置为 ≤ 16384。
    • 需将 mistral-common 升级至 ≥ 1.3.1 版本。
    • 推荐使用与 7B v3 模型相同的超参数。

安装与设置

  1. 克隆仓库
    git clone https://github.com/mistralai/mistral-finetune.git
    
  2. 安装依赖
    pip install -r requirements.txt
    
  3. 下载模型:从官方链接下载所需模型(如 7B Base/Instruct, 8x7B, 12B (Nemo), 123B (Large v2) 等),并在配置文件中将 model_id_or_path 设置为下载目录的路径。
    • 注意:对于旧版 8x7B 模型,微调前必须使用 v3 分词器并将词汇表大小扩展至 32768。

数据集准备

数据必须为 JSONL 格式,并严格遵循以下两种类型之一:

  1. 预训练数据:每行包含一个 text 字段。
    {"text": "文档中的文本内容"}
    
  2. 指令数据
    • 普通对话:每行包含 messages 列表,每个消息含 roleuser, assistant, system)和 content。损失计算仅针对 assistant 角色的内容。
    • 函数调用:格式类似,但消息可包含 tool_callstool 角色。需确保 tool_calls 中的 idtool_call_id 为恰好 9 个字符的随机字符串。

重要:数据格式错误(如对话以 user 角色结尾)会导致训练效率下降。可使用提供的工具(如 ./utils/reformat_data.py)进行校正。

验证与训练

  1. 验证数据集
    python -m utils.validate_data --train_yaml <你的yaml配置文件路径>
    
    此脚本会检查数据格式并估算训练时间。
  2. 启动训练
    torchrun --nproc-per-node <GPU数量> --master_port $RANDOM -m train <你的yaml配置文件路径>
    

关键训练配置参数(在 YAML 文件中设置)

  • model_id_or_path:基础模型路径。
  • seq_len:序列长度,影响训练效率和内存。
  • batch_size:每个 GPU 的批处理大小。
  • max_steps:最大训练步数。
  • optim.lr:学习率。
  • lora.rank:LoRA 适配器的秩(推荐 ≤ 64)。
  • data.instruct_data:训练数据路径,支持多数据源及权重设置。
  • data.eval_instruct_data:评估数据路径。
  • wandb.project:用于 Weights & Biases 日志记录的项目名称。

推理

训练完成后,可使用 mistral-inference 库进行推理:

pip install mistral_inference
mistral-chat <模型目录> --lora_path <LoRA权重文件路径> --instruct

注意事项

  • LoRA 微调:仅保存/合并训练的 LoRA 权重,或选择将 LoRA 合并回基础模型(后者需更多内存)。
  • MoE 模型:微调性能方差较大,建议多次运行并选择最佳结果。
  • 内存不足:可尝试减小 batch_sizeseq_len
  • 许可证:该库在 Apache 2.0 许可下授权。
14. Lapis: A Web Framework for Lua (leafo.net)

Lapis:一个用于Lua的Web框架

概述

Lapis 是一个使用 Lua(或 MoonScript)构建 Web 应用程序的框架,主要面向 OpenResty(一个运行在定制化 Nginx 上的高性能 Web 平台)。它同时也兼容任何现代版本的 Lua 环境。

工作原理

  • 高性能基础:依托 OpenResty,Lua 代码通过 LuaJIT 直接在 Nginx 工作进程中运行,极大降低了 Web 服务器与应用代码之间的延迟。
  • 简洁的异步模型:利用 Lua 的协程特性,开发者可以编写看似同步、清晰易读的代码。框架能自动处理网络操作(如数据库查询、HTTP 请求)的异步让步,从而在不阻塞的情况下实现高并发吞吐量,避免了其他异步平台中的回调地狱。

核心功能

Lapis 开箱即用,提供了构建网站所需的全面功能:

  • URL 路由
  • HTML 模板
  • CSRF 防护Session 支持
  • 数据库模型:支持 PostgreSQL、MySQL、SQLite。
  • 数据库迁移:自动生成数据库表结构。
  • 其他实用工具函数。

主要特性

1. 路由与视图

使用简洁的语法定义 URL 模式和处理函数,并可通过命名路由生成链接。

-- Lua 示例
app:match("/", function(self)
  return "Hello world!"
end)

2. 数据库模型(ORM)

通过继承 Model 类,为数据库表提供强大的抽象层,简化增删改查操作。

-- 定义模型并操作数据
local Users = Model:extend("users")
local user = Users:create({ name = "Leaf", age = 6 })
user:update({ age = 10 })
user:delete()

3. 模板系统

支持两种模板编写方式:

  • etlua 模板:类似 ERB 的语法。
  • Widget 类:使用纯 Lua/MoonScript 编写模板。Widget 类支持继承、混入,并通过 HTML 构建器语法安全地生成 HTML(自动转义,防止 XSS 攻击)。

4. 安全特性

  • 内置 CSRF 令牌生成与验证机制,轻松为表单提供安全保护。
  • 模板中的 HTML 构建器自动对用户输入进行转义。

完整示例

文章提供了一个综合示例,展示了如何将路由、模型查询、CSRF 防护和表单处理集成在一起,构建一个完整的用户管理功能。

学习与资源

  • 文档:参考手册兼具指南和教程功能。
  • 源码:项目托管于 GitHub。
  • 实际应用:LuaRocks.org(一个用 Lapis 编写并开源的项目)是框架能力的证明。

生态系统

Lapis 兼容大多数现有的 Lua 库,并有一些官方或推荐的配套库,例如:

  • lapis-eswidget:前端资源聚合。
  • lapis-console:浏览器内的交互式控制台。
  • lapis-exceptions:异常跟踪。
  • web_sanitize:HTML 净化。
  • magick:图像处理。
  • cloud_storage:云存储支持。

依赖与许可

Lapis 的运行依赖于 LuaLPegOpenResty 项目。它以 MIT 许可证 发布。

15. People spend more when prices end in .99 (2018) (kenthendricks.com)

.99结尾价格对消费行为的影响

实验研究证据

1. 增加消费金额

  • 邮件订单实验:对比99结尾价格、更高价格(多5美元)和更低价格(少5美元)三组。99结尾价格组的收入比更高价格组多48%,比更低价格组多53%,且购买数量更多。
  • 大规模目录实验:向两组各4.5万人发送商品目录,分别标注.00结尾和.99结尾价格。.99结尾价格组的消费金额平均高出8%。

2. 提升购买意愿

  • 法国超市实验:观察消费者购买奶酪行为。价格为.99结尾时,购买比例为51.2%,而.00结尾时为44.1%。同时,.99结尾价格下的平均消费金额(€6.53)高于.00结尾(€5.08)。

3. 削弱预算控制能力

  • 分组购物实验:一组面对.00结尾价格(如3.00美元),另一组面对.99结尾价格(如2.99美元)。后者购买物品数量增加5.1%,且总消费超出预算。.99结尾价格导致消费者难以准确计算总花费。

心理机制解释

1. 史蒂文斯幂律(感知尺度扭曲)

  • 大脑对数字的感知并非线性客观。例如,要使房间亮度感知加倍,需要四倍于原来的瓦特数。这种感知扭曲同样适用于数字比较。

2. 锚定效应

  • 定义:人们在判断时过度依赖最初接触的信息(“锚点”),即使该信息无关或错误。
  • 应用:价格本身(如$2.99中的“2”)或相邻商品价格都会成为锚点,影响对商品价值的判断。
  • 特点:效应强大,即使知道锚点不准确也难以避免。

3. 左位数效应

  • 阅读习惯(从左到右)使得左侧数字最先被处理,并作为整个数字的锚点。$2.99的左位数是“2”,导致大脑在潜意识中将该价格感知为更接近2美元而非3美元,尽管实际只差1美分。

4. 认知捷径偏好

  • 大脑倾向于处理小数字整数,以减少认知负荷。面对$2.99时,大脑会快速映射到“2”或“3”等易处理数字,并受左位数效应影响,将其感知为低于实际值的价格。

结论

.99结尾定价策略通过扭曲数字感知、利用锚定效应和左位数效应,使消费者低估实际价格,从而增加购买可能性消费总额,同时削弱预算控制。这些心理机制运作于潜意识层面,即使消费者了解该策略,也难以完全抵抗其影响。

16. The Cognitive Design of Tools of Thought (2014) [pdf] (gjgreenberg.bol.ucla.edu)

思维工具的认知设计摘要

本文探讨了人类如何将思维外部化到各种认知工具中,以及这些工具如何通过空间和视觉元素组织与传达思想。

核心观点

  • 当思维超出心智负荷时,人们会将其放入外部世界,形成图表和手势等认知工具。
  • 这些工具使用空间、元素排列和视觉特征来表征具体与抽象概念,并揭示关系与结构。

外部表示的特征

  • 选择性:简化、夸张并选择性呈现信息(如地图简化海岸线)。
  • 对应性:与所表征的世界存在结构或关系上的对应(如地图中的点代表地点)。
  • 设计性:其排列方式通常不同于自然世界,是人为设计的(如百科全书式图表)。
  • 功能性:服务于理解、推理、沟通或规划等特定目的。

历史实例分析

  1. 地图:古代巴比伦地图和现代地图均使用点和线表示地点与路径,省略或扭曲细节以服务于导航和规划。
  2. 岩石艺术:史前岩画和洞穴壁画常以标准化视角呈现理想化原型(如动物、人形),并按类型分组排列,体现分类思维。
  3. 图表类型
    • 事物图:如《百科全书》中的工具图,通过分组、对齐和框架将事物从情境中提取并按类别组织。
    • 事件图:如墓室壁画和时间序列照片,通过线性排列和关键瞬间分段来表征时间过程。

图表的视觉语法

图表依赖一组基本图形元素及其空间排列来构建意义:

  • 点与线:代表地点、路径或变量关系。
  • 框与箭头:箭头表示方向性因果关系;框用于分组或对比。
  • 空间映射
    • 距离映射时间、数量等抽象维度。
    • 方向映射价值或数量增加(如“向上”代表更多或更好)。
    • 阅读顺序赋予水平方向性。

图表的语义、语法与语用

  • 不同图表类型(如路线图、线图、柱状图)对基本元素有不同组合规则和解释惯例。
  • 图表格式影响解读:线图暗示趋势,柱状图暗示离散比较。
  • 图表在特定语境中使用,缺失或扭曲的信息由环境补充(如路线图在导航中由实际环境消歧)。

草图与手势的作用

  • 草图:模糊、试探性的草图促进探索和创造,通过重新配置元素产生新发现(即“构建性知觉”)。
  • 手势:作为“无纸图表”,手势通过手部动作在虚拟空间创建元素和关系,尤其擅长表征行动和过程。观看行动手势能深化对机械运作的理解。
  • 手势与图表共同根植于手部在空间中的行动,两者紧密交织。

核心概念:空间行动(Spraction)

  • 思维在空间中通过行动得到表达和塑造,形成抽象表征。这一过程融合了感知、行动和认知。
  • 人类不仅通过图表外部化思维,也通过设计物理环境(如厨房布局、图书馆分类)来体现并支持分类、部分-整体和主题等抽象关系。
  • 空间安排既反映也影响社会、政治和经济组织。

结论

认知工具(图表、手势、环境设计)通过有组织的空间排列和视觉元素,将抽象思维具象化。它们简化复杂性,揭示关系,支持推理与沟通,并深深根植于空间中的行动之中。

18. You are lucky, full moon tonight (twitter.com)

文章内容显示在访问x.com时出现了错误。系统提示用户无需担忧,可以再次尝试访问。同时指出,隐私相关扩展可能是导致问题的原因,并建议用户禁用这些扩展后重试。

19. Guys what is wrong with ACATS (www.bitsaboutmoney.com)

ACATS系统概述与问题分析

什么是ACATS?

ACATS(自动化客户账户转移服务)是一个技术-法律系统,用于协调经纪公司之间的客户账户资产转移。它是金融基础设施的关键部分,通过标准化流程减少操作风险,简化了原本复杂的多机构账本更新过程。在转移中,资产本质上是电子记录(如电子表格条目),ACATS通过集中化网络统一操作,替代了传统的手动对接方式。

监管背景与设计目的

经纪公司由FINRA(金融行业监管局)监管,FINRA作为自律组织(SRO),制定了规则以保障客户资产转移的顺利进行。核心规则是FINRA Rule 11870,要求经纪公司必须快速配合客户的转移请求,不能无故阻挠。ACATS在此基础上运作,旨在解决小经纪公司拖延或拒绝转移资产的历史问题。

ACATS的运作流程

  1. 客户授权:客户在新经纪公司开户,提供身份验证(KYC)和旧账户信息,授权转移。授权通常通过标准化表格完成,签名可以是电子形式(如/s/ John Q. Public),甚至由经纪公司员工代签。
  2. 系统处理:新经纪公司通过ACATS提交转移请求。旧经纪公司有三个工作日内响应,要么验证同意,要么提出异常(需基于12个特定理由之一)。
  3. 资产更新:验证后,双方协调更新电子账本,完成转移。过程高度自动化,但依赖机构间的信任和合同关系。

主要问题:验证不足与欺诈漏洞

ACATS的设计为追求效率,导致安全措施薄弱:

  • 验证缺失:旧经纪公司通常不直接联系客户确认转移请求,因时间紧迫(三个工作日)且系统默认信任网络内请求。这使得诈骗者可利用盗窃的身份信息发起转移。
  • 签名灵活性:电子签名无严格加密要求,代签被允许,进一步降低欺诈门槛。
  • 欺诈模式:诈骗者获取客户个人信息(如从暗网购买),在新经纪公司开户,模拟客户请求转移资产。资产到账后(通常5-7个工作日),迅速通过电汇、借记卡或交易转移资金。许多客户因不常查看账户而延迟发现。

FINRA的应对与行业实践

FINRA发布监管通知,建议经纪公司加强异常检测(如追踪频繁失败的转移请求)。然而,系统性问题难以根治:

  • 风险管理:经纪公司有预算处理欺诈损失,会补偿客户,但过程可能冗长且需要客户主动维权(如法律途径)。
  • Medallion保证:作为可选控制,高价值转移可能需其他金融机构担保,以转移风险。但这不是强制要求,且多数客户不会遇到。
  • 能力不均:部分经纪公司资源有限,监控不力,而FINRA的规则在所有规模机构中同等适用。

总结

ACATS是金融系统的重要支柱,通过自动化提升转移效率,但其信任模型和时间压力创造了欺诈机会。尽管系统设计如此运作,且资产最终会得到保障,但客户体验可能受损。当前缓解措施依赖机构自律和逐步改进,但核心漏洞依然存在。

20. Show HN: Spot – Simple, cross-platform, reactive desktop GUI toolkit for Go (github.com)

Spot 是一个为 Go 语言设计的、简单、跨平台、响应式的桌面 GUI 工具包,旨在使用原生控件并提供一致的跨平台 API。它的核心理念是引入类似 Web 领域中“虚拟 DOM”或 React 的响应式模型到桌面应用开发中。

核心特性

  • 简单易用:作为项目依赖引入即可开始构建 GUI,无需额外工具或代码生成步骤,最终编译为单一二进制文件。
  • 跨平台:在编译时自动选择适合当前平台的最佳后端。目前提供基于 go-fltk 的 FLTK 后端(用于非 macOS 系统)和基于 gocoa 的 Cocoa 后端(用于 macOS),未来计划改进 Windows 支持。
  • 响应式:当应用状态变化时,UI 会自动更新。开发者只需编写无副作用的渲染函数,并使用 UseState 等钩子管理状态,无需手动操作 UI 更新。
  • 丰富的控件:提供按钮、复选框、下拉菜单、文本框、进度条、滑块等常用开箱即用的 UI 控件。

基本用法 通过一个简单的“计数器”示例展示了其用法:使用 spot.MountFn 定义一个渲染函数,在其中利用 spot.UseState 管理状态,并返回一个包含 ui.Windowui.Button 的组件树。按钮点击通过 setCounter 函数更新状态,触发 UI 重新渲染。

关键概念

  • 响应式原理:状态改变时重建一个不可变的组件树,并与前一状态快速对比,以确定需要更新的 UI 部分。
  • 组件 vs 控件:组件是包含业务逻辑和状态的逻辑单元;控件是代表屏幕上视觉元素的特殊组件,通常由原生后端支持。
  • 生命周期术语Make(创建组件实例)、Render(渲染组件)、Build(构建虚拟 UI 树)、Mount(将虚拟树挂载为真实控件)、Update(更新已挂载的控件树)。

扩展性 开发者可以:

  1. 实现自定义钩子(函数名以 Use 开头)。
  2. 通过实现 spot.Component 接口来编写自定义组件。
  3. 创建新的控件包来适配不同于 Cocoa 或 FLTK 的其他原生控件库。

支持与不支持的功能

  • 已支持的 UI 控件(共 14 个):ButtonCheckboxDropdownImageLabelListBoxProgressBarSliderSpinnerTextFieldTextEditorWindow 等,大部分状态为“已完成”或“部分实现”。
  • 当前缺失的功能:自动布局、多窗口、模态对话框、可调大小窗口、菜单栏、自定义小部件、原生控件直接访问、拖放和国际化等。
21. Email.ml – Minimalist Temporary Email (email.ml)

Email.ml – 极简临时邮箱

一、什么是临时邮箱?

临时一次性邮箱旨在保护您的真实收件箱免受垃圾邮件侵扰并保障隐私安全。

  • 防垃圾邮件:使用临时邮箱地址注册网站,可有效隔离垃圾邮件与网络钓鱼邮件,确保主收件箱洁净。
  • 保护隐私:防止您的真实邮箱地址被泄露,避免个人信息滥用。
  • 使用便捷:邮件仅保留一小时,方便用户收取验证码或确认邮件,到期后自动销毁。

二、为何使用临时邮箱?

  • 保持数据私密:避免注册时用真实邮箱导致后续被营销邮件和垃圾信息淹没。
  • 保护在线匿名性:阻止网站通过邮箱追踪您的浏览行为,尤其在进行旅行等搜索时可减少定向广告。
  • 获取注册福利:可用于获取新用户专属优惠、折扣码及促销代码。

三、常见问题

  1. 能否用临时邮箱发送邮件?

    • 不能,临时邮箱仅支持接收邮件。
  2. 提供的邮箱地址是伪造的吗?

    • 并非伪造,都是真实存在的邮箱地址,但功能有限且存在时间短暂。
  3. 未收到预期邮件怎么办?

    • 可能因临时邮箱域名被误判为垃圾邮件。若遇到问题,可通过页面底部的“联系我们”链接获得协助。
  4. 邮件保留多久?

    • 在任何情况下,邮件最长保留一小时。页面关闭一小时后,临时邮箱及其中邮件将被彻底删除。若用户获取新地址,旧地址及其邮件会立即清除。

四、博客

平台提供关于临时邮箱的最新动态与使用技巧。

22. My Hour of Memoryless Lucidity (ericneyman.wordpress.com)

文章摘要:无记忆的清醒时刻

背景与核心体验

作者在接受智齿牙冠切除术后,经历了一小时的麻醉恢复期。在此期间,作者意识完全清醒,但短期记忆几乎丧失,接收的信息在几分钟内便会遗忘。作者利用这一特殊状态进行了一系列自我认知与行为测试。

“确定性”与认知能力测试

  • 行为确定性:受计算机科学中“确定性算法”概念启发,作者测试了自己在记忆不断重置状态下的行为。结果表明他具有高度的“确定性”,每约两分钟便循环向女友询问相同的问题(如手术情况、时间等),这同时也测算出了他当时的短期记忆保留时长约为两分钟。
  • 认知能力未受损:作者进行了两位数心算和《纽约时报》拼字游戏(Spelling Bee)。结果显示,除了短期记忆受损外,他的计算能力、逻辑思维和词汇联想能力并未因麻醉药物而下降,表现与平时相当甚至更好。

未来实验计划

尽管术后发现的异常液体最终确诊为无需二次手术的含牙囊肿,作者仍构思了若有机会进行第二次手术时将尝试的进一步实验:

  • 随机数与一致性测试:反复生成1到100的随机数,对比自身与AI(如ChatGPT)的随机分布情况;重复回答无预设答案的开放式问题,观察答案是否保持一致。
  • 流处理算法挑战:尝试解决计算机科学中受内存限制的流处理问题(如count-distinct),探索如何用巧妙的算法克服人类短期记忆的缺陷。
  • 长期记忆写入机制验证:借鉴朋友Drake在拔牙时通过预先构建“未完成的长期记忆场景”来绕过短期记忆丧失的经验,作者计划通过严格控制提示次数,验证该记忆覆写机制是否真正有效。

后续更新

作者在文末补充确认,智齿处的异常液体为含牙囊肿,属于最佳结果,因此不需要进行第二次手术。

23. A simple core.async job system in Clojure (blog.janetacarr.com)

本文介绍了在Clojure中基于core.async构建的一个简易作业系统,旨在处理如域名验证等异步任务,同时规避引入RabbitMQ等外部消息队列带来的复杂性。

背景与动机 作者在开发Scinamalink(一个提供魔法登录链接的服务)时,为解决垃圾信息问题,需要实施域名验证。这要求进行异步DNS查询。作者认为,引入RabbitMQ等消息队列会显著增加系统架构的复杂性(包括额外的进程、部署配置和集成代码),不利于快速推向市场。因此,他选择在单个进程内,利用Clojure的core.async库构建一个"足够可靠"的轻量级作业系统。

核心设计:有限状态机与函数式作业 作业系统的核心是将每个作业建模为一个有限状态机(FSM),其生命周期包含五个状态:created(创建)、starting(启动)、working(工作)、finished(完成)和crashed(崩溃)。这些状态在PostgreSQL数据库表worker_jobs中定义和存储。

关键实现思路是函数返回函数。系统将作业的每个状态实现为一个函数,该函数执行具体逻辑后,返回表示下一个状态的函数(实现状态转移),或返回nil(作业结束)。例如,一个域名验证作业的job-work函数在验证未完成时会返回自身的引用以实现重试,验证完成后则返回finished函数。

基于core.async的工作器与队列 作业系统使用core.async通道作为作业队列。工作器(worker)通过go-loop从队列中取出作业函数,并在core.async/thread(支持阻塞IO)中执行。如果作业函数返回了另一个函数,该函数将被重新放回队列等待执行,从而形成异步的递归处理流程。这避免了工作器饥饿,并允许作业在阻塞操作时释放线程。

作业持久化与加载 作业的详细信息(如作业类型、客户ID、域名ID等)以JSON格式存储在数据库的context列中。系统通过一个多方法->job-fn,根据数据库记录中的job-typecurrent_state,分派到对应的作业构造函数(如start-job),从而恢复作业状态并生成可执行的函数。

系统引入了一个loader组件,它定期(如每10分钟)从数据库查询所有待处理(createdstartingworking)的作业。为避免重复加载正在运行的作业,系统使用一个原子registry来跟踪当前正在处理的作业ID。加载器会过滤掉已在registry中的作业,然后将新作业的函数放入工作队列。当进程启动时,也会执行一次加载操作以恢复中断的作业。

可靠性考量 作者承认单进程方案在进程崩溃时会丢失内存中的作业状态,但通过将关键状态持久化到数据库来缓解。作业在每个状态转换时都会更新数据库记录。如果作业执行失败(如抛出异常),作业函数会捕获异常,将作业状态设置为crashedfailed,并记录错误信息到数据库,确保了作业状态的可观测性。

24. Google just updated its algorithm. The Internet will never be the same (www.bbc.com)
25. Essays on programming I think about a lot (www.benkuhn.net)

我经常想起的编程文章精选

作者整理了一份经常回顾并引用的编程文章清单,每篇都深刻影响了其工程思维与实践。以下为各文章的核心观点摘要:

1. 《计算机可以被理解》- Nelson Elhage

该文主张工程师应坚信计算机和软件系统是可以被深入理解的。尽管现代系统极其复杂,但不应将其视为不可知的“黑箱”。虽然不可能掌握每一层的所有细节,但可以理解各层到所需抽象程度,并针对特定目的深入任意层次。这种信念显著提升了工程师的有效性。

2. 《选择无聊技术》- Dan McKinley

该文为技术选型提供了关键指导:每个公司只有有限的“创新代币”(例如三个)。在开发网站、选择数据库或服务发现技术时,每采用一项新颖或实验性技术就消耗一枚代币。因此应优先选择经过验证的“无聊”技术(如成熟稳定的数据库),将创新代币留给真正的业务差异化领域,以避免技术债务和未来的悔恨。

3. 《错误的抽象》- Sandy Metz

该文反思了“不要重复自己”(DRY)原则。指出若在消除重复时选择了错误的接口边界,创建的抽象可能迅速变得难以维护。随着新需求出现,程序员可能被迫不断修改该抽象以适配各种情况,导致代码逐渐变得晦涩难懂。核心教训是:糟糕的抽象比适度的重复更可怕。

4. 《程序员对姓名的错误假设》- Patrick McKenzie

该文是关于“不变量”(即我们假设始终成立的特性)的重要提醒。它以姓名为例,逐条列举了那些看似理所当然的假设(如姓名在出生时确定、不会改变等)实际上经常被现实打破。这警示程序员在处理任何数据时,都应质疑那些“显然”的假设,为现实世界的边缘情况做好准备。

5. 《招聘文章》- Thomas Ptacek

该文强烈倡导基于工作样本的招聘方式。作者通过一个例子说明,仅凭简历和面试难以发现真正的人才(如一位看似普通的.NET开发者却能发现Rails核心漏洞)。有效的招聘应设计实际编码或问题解决任务,以便从背景各异的候选人中识别出具备实际工程能力的人才,而非依赖传统简历筛选。

6. 《产品导向的工程师》- Gergely Orosz

该文描绘了能在初创公司获得成功的工程师特质,即“产品导向”。这类工程师不仅关注技术实现,还主动参与产品思考,理解业务目标、用户行为和数据,善于与非工程师沟通,能提出产品与工程权衡方案,并以务实态度处理边缘案例,对产品特性进行端到端负责。

7. 《编写易于删除的代码,而非易于扩展的代码》- tef

该文挑战了创建可重用软件的传统思维,提倡设计“可弃置”的代码。核心观点是:代码行数应被视为“维护成本”。降低维护成本的方法不是通过精心设计来扩展代码,而是确保代码易于整体删除和替换。商业逻辑本质上是边缘情况和临时解决方案的集合,有时删除一个大的错误设计比修补多个交织的小错误更有效率。

8. 《泄漏抽象法则》- Joel Spolsky

该文是经典之作,提出了“所有非平凡的抽象都会在一定程度上泄漏”的法则。以TCP协议为例,它抽象了底层不可靠的网络,但网络问题(如线缆损坏)仍会“泄漏”出来。该法则提醒工程师,任何抽象层都可能在某些情况下失效,设计时必须考虑抽象之下的现实细节。

9. 《关于软件性能的思考》- Nelson Elhage

该文指出,软件工具的速度不仅关乎任务完成快慢,更会改变用户的使用方式。更快的工具会让用户更频繁地使用它,甚至能促成全新类型的任务和工作方式。因此,工具性能的提升能带来质变而非仅仅是量变。

10. 《用数据库确保系统健壮性》系列 - Brandur Leach

该系列文章阐述了如何利用关系型数据库(特别是Postgres)的ACID特性(原子性、一致性、隔离性、持久性)来构建健壮系统。通过原子事务、幂等API设计、事务性任务调度等技术,可以确保数据在边缘情况下的正确性和一致性,这是大型生产系统中保证可维护性的关键工具。

11. 《给年轻血液的分布式系统笔记》- Jeff Hodges

该文为构建分布式系统提供了实用指南。关键点包括:承认分布式系统故障是常态;实施背压机制;设计部分可用性;使用百分位数而非平均值衡量指标;合理规划容量;使用特性标志进行基础设施部署;谨慎选择ID空间;避免将缓存数据写回持久存储;适时提取服务。

12. 《系统设计中的端到端论点》- J.H. Saltzer, D.P. Reed, D.D. Clark

该经典论文提出了端到端设计原则。指出将某些功能(如错误恢复、加密安全、去重)置于系统底层可能是冗余或低效的,更好的做法是将这些逻辑放在通信的端点实现,底层机制仅作为性能优化的辅助。该原则有助于简化许多分布式系统的设计。

13. 《以原则进行创造》- Bret Victor

该演讲(及附带文章)核心观点是:创造者需要与所创造之物有即时的连接与反馈。作者通过编程工具的演示,展现了工具如何通过实时可视化等手段极大提升创造效率和理解深度。该演讲重新设定了人们对编程工具潜力和交互性的期望标准。