2024-07-28

28 篇热帖

1. An experiment in UI density created with Svelte (cybernetic.dev)

文章摘要:基于Svelte的UI密度实验

核心实验

  • Grid 实验:一个可定制UI密度的实验项目,目前新版本正在开发中。
  • Matrix 实验:在此基础上进一步探索UI密度,构建了一个大型S&P 500与NASDAQ-100的相关性矩阵。

Matrix 实验关键数据

  • 当数据集选择为标普500成分股时,矩阵包含超过25万个单元格,并关联超过3000万个数据点
  • 预览版本位于页面底部,但部分功能仅在全屏UI中可用。

其他信息

  • 实验的“关于”页面提供更多技术细节。
  • 主页展示了所有可用的数据可视化实验概览。
  • 联系方式:helloworld[at]。
  • 免责声明:网站内容仅用于信息目的,不构成投资建议或任何证券的买卖推荐。
2. How did Facebook intercept their competitor's encrypted mobile app traffic? (doubleagent.net)

Facebook 如何拦截竞争对手的加密移动应用流量

法律背景

目前针对 Meta 的一起集体诉讼案中,法院文件显示该公司可能违反了《窃听法》。该案最初是基于反垄断法(《谢尔曼法》)提起的,窃听法相关证据是在证据发现过程中附带发现的。此次分析基于法庭文件和对存档的 Onavo Protect 应用程序包的逆向工程。

核心技术手段:中间人攻击(MITM)

Facebook 被指通过一种被称为 “ssl bump” 的技术(得名于 Squid 缓存代理软件的透明代理功能)拦截用户的加密 HTTPS 流量。其目的是解密特定域名(如属于 Snapchat、YouTube 和 Amazon 的域名)的流量,以获取竞争对手的应用使用数据。

技术实现步骤

  1. 诱导用户安装信任证书:拥有超过1000万安装量的 Onavo Protect Android 应用,会提示用户在设备的信任证书存储区安装一个由 “Facebook Research” 颁发的自定义 CA(证书颁发机构)证书。这是解密 TLS 流量的关键。
  2. 建立流量拦截管道:该应用以提供“保护”和显示应用数据使用量为名,申请“显示在其他应用上层”和“访问过去和已删除的应用使用情况”等敏感权限。所有设备流量通过 VPN 传输至 Facebook 控制的基础设施,随后被重定向到一个配置了“ssl bump”功能的 Squid 透明代理。
  3. 拦截特定域名流量:在设备安装了 Facebook 的 CA 证书后,针对 Snapchat 分析域名 sc-analytics.appspot.com 等未实施证书固定的目标域名,该 MITM 技术能够成功解密并检查其中的加密流量,获取竞争情报。

技术局限性与系统升级影响

  • Android 系统安全加固:从 Android 7(2016年8月发布)开始,系统默认不再信任用户添加的 CA 证书用于其他应用,且使得通过应用安装证书变得更加困难。Android 11(2020年9月)则完全阻止了该应用使用的证书安装提示机制。因此,此技术仅在旧版 Android 系统上有效。
  • 竞争对手的安全措施:如果目标应用全面实施了证书固定,该 MITM 技术将失效。在当时,Snapchat 的分析域名并未实施此安全措施,这使 Facebook 的方法得以成功。
  • 证书演变:分析发现应用内嵌了两个 CA 证书。第一个证书(2016年9月签发,有效期1年)后被第二个证书(2017年6月签发,有效期至2027年)取代。法庭文件指出证书是“在服务器上生成并发送到设备”的。

其他数据收集行为

除了拦截加密流量,该应用还尝试通过 READ_PHONE_STATE 权限收集极其敏感的用户IMSI(国际移动用户识别码)信息。其主要功能还包括通过 PACKAGE_USAGE_STATS 权限收集其他应用的使用统计和流量数据。

Facebook 的动机

根据法庭文件中的邮件,其创始人马克·扎克伯格明确表达了获取关于竞争对手(特别是 Snapchat)的“可靠分析”和“应用内行为”数据的需求。收购 Onavo 的1.2亿美元代价,也体现了 Facebook 对通过此类技术获取竞争情报的重视程度。在 Android 系统安全升级和证书固定普及导致该技术效用下降后,Facebook 甚至考虑过滥用 Android 无障碍 API 作为替代方案。

结论

此事件从技术角度揭示了大型科技公司如何利用移动操作系统权限模型和用户信任,通过中间人攻击等高级手段获取竞争对手的加密数据,以达到商业竞争目的。随着移动操作系统安全性的不断增强,此类技术的可行性已大大降低,但其中涉及的法律和伦理问题仍具有警示意义。

3. Intel N100 Radxa X4 First Thoughts (bret.dk)

Radxa X4 初体验摘要

产品概述

Radxa X4是一款基于Intel N100处理器的单板计算机,外形尺寸与树莓派5相近,采用x86架构,支持直接安装Windows 11或Debian等常见操作系统,打破了传统ARM SBC在软件兼容性上的限制。

主要规格

  • 处理器:Intel N100(4核Alderlake,最高3.4GHz)
  • 内存:4/8/12/16GB LPDDR5
  • 网络:2.5G以太网(支持PoE HAT),WiFi 5/6和蓝牙5.x
  • 存储:M.2 NVMe SSD插槽,可选eMMC
  • 接口:3个USB 3.2、1个USB 2.0、2个Micro HDMI(4K60)、3.5mm音频口
  • GPIO控制:集成树莓派RP2040芯片管理40-pin GPIO,兼顾了x86性能与硬件扩展性
  • 供电:12V USB-C PD输入

开箱与初始设置

  • 产品包含主板、专用散热外壳/风扇和PoE+ HAT
  • 初次启动BIOS为2024年4月的American Megatrends版本,提供丰富的调节选项,远超常见迷你主机BIOS
  • 系统安装流程与传统PC一致,但Windows 11安装时默认缺少网络驱动,需通过命令行绕过网络检查并手动安装驱动

初步性能测试

  • CPU性能:Geekbench 6单核约1007-1171分,多核约2295-2389分(受BIOS电源设置影响,未达到最高频率)
  • 网络:2.5G以太网通过iperf3测试可跑满带宽;WiFi在Ubuntu下可用,Windows下需手动安装驱动
  • 功耗:待机约8瓦(含外设),空载约6.8瓦;高负载下功耗可达27瓦以上,但受限于电源适配器功率
  • 散热:CPU裸片运行时温度很高,必须使用散热器;随附的散热器热垫可能存在接触不良问题,影响散热效果
  • PoE供电:使用专用HAT时,高负载可能导致重启,与电源管理设置(PL2)和交换机质量有关

主要优点

  1. x86架构带来出色的软件兼容性
  2. 通过RP2040实现了GPIO扩展功能
  3. 接口丰富,包括2.5G网口、多个高速USB口和NVMe支持
  4. BIOS功能相对完善

待改进问题

  1. 散热方案需要优化,热垫可能存在装配或材料问题
  2. PoE供电在高负载下稳定性不足,对交换机和电源设置敏感
  3. 部分操作系统(如Windows)需要额外步骤处理驱动
  4. 高负载下内存与HAT之间空间拥挤

总结

Radxa X4是一款有潜力的产品,它成功融合了x86平台的通用性与树莓派式的硬件扩展能力。尽管在散热和PoE供电方面存在初期问题,但其提供的计算性能和扩展灵活性使其成为对树莓派生态系统的一个值得关注的补充。后续需要更多软件优化和文档支持来完善用户体验。

5. The irrational hungry judge effect revisited (2023) (www.cambridge.org)

重新审视“非理性饥饿法官效应”

本文是对Dan ziger等人(2011年)关于以色列假释委员会裁决顺序效应研究的批判性再分析。原研究发现,在每次裁决会议中,第一个案件获得有利裁决的概率约为65%,而随着会议推进,该概率急剧下降,至最后一个案件时接近于0%;但在包含休息(用餐)的会议后,有利裁决的概率又恢复至65%。原作者认为这一现象支持了外部无关因素(如精神耗竭)影响司法裁决的假设。

本文通过模拟分析指出,原观察到的顺序效应可能是一种统计伪相关,而非必然表明法官非理性或受到外部因素(如饥饿)的影响。其关键机制在于选择性退出理性时间管理

  1. 数据特征与选择性退出:原数据显示,作出有利裁决所花费的平均时间长于不利裁决。因此,如果法官计划在固定时间段内完成案件,那么随着会议剩余时间减少,能够被纳入后续审理的、耗时较长的有利案件在剩余案件池中的比例就会系统性下降。这导致观察到的后续案件有利裁决概率下降。
  2. 理性法官模拟:模拟一个仅遵循简单时间管理规则(即避免在会议结束前开始一个预计会超时的案件)的完全理性法官,也能产生与原研究观察到的形态和幅度相似的有利裁决概率下降曲线。下降的主要原因是上述选择性退出。
  3. 数据处理加剧效应:原研究删除了每个会议最后5%的案件数据以排除样本量过小的观察。本文模拟显示,这种删截做法会进一步放大选择性退出造成的伪相关效应,甚至在假设法官无前瞻规划(即纯粹在超时后才结束会议)的情况下,也能人为制造出下降趋势。
  4. 其他影响因素:本文也讨论了案件排序可能非随机(如有律师代理的案件更早审理)以及裁决之间可能存在自相关性等因素,但认为这些因素与理性时间管理及删截数据的解释力相比,其作用可能较小或难以从现有数据中分离。

结论与意义:本文认为,原研究中所谓的“非理性饥饿法官效应”(即顺序与休息对裁决的重大影响)在很大程度上可能由统计伪相关所解释。一个寻求避免超时工作的理性法官的行为,在不当的数据处理(删截)下,就会呈现出类似非理性的模式。这提示,对于看似显示巨大非理性行为的发现,研究者应更早、更频繁地运用计算机模拟形式化数学分析来识别其背后可能存在的、不明显的理性基础或方法论伪相关,而非急于下结论认为行为者本身是非理性的。

局限性:本文的模拟无法完全复制原研究的所有细节(如会议起始时更高的批准率、更平滑的下降曲线),因此不能排除顺序效应和精神耗竭在某种程度上确实存在的可能。但分析表明,原研究可能高估了这些外部因素的影响幅度。未来研究需要更精细的数据和方法来厘清这些效应的真实大小。

6. How simultaneous multithreading works under the hood (blog.codingconfessions.com)

同时多线程(SMT)底层工作原理

同时多线程(SMT)是一种允许处理器在同一时钟周期内处理来自两个不同线程指令的技术。本文主要基于英特尔的超线程(Hyper-Threading)实现,深入解析其工作原理、硬件实现及性能影响。

1. 为何引入SMT

现代处理器采用流水线、超标量架构和乱序执行等技术提升指令级并行性(ILP)。然而,实际中常因缺乏足够独立指令而导致资源浪费:

  • 横向浪费:无法找到足够独立指令填满处理器的发射宽度。
  • 纵向浪费:因指令依赖关系,某些时钟周期无法发射任何指令。

传统多线程通过线程间上下文切换改善利用率,但仍存在横向浪费和切换开销。SMT则允许在同周期内发射多个线程的指令,无需上下文切换开销,从而更充分利用执行资源。

2. SMT的硬件实现

SMT的核心是复制线程的架构状态(如寄存器、程序计数器),使单个物理核在操作系统看来是两个逻辑处理器。资源分配策略基于功耗、芯片面积等因素,部分复制、部分共享。

2.1 微架构组成

处理器微架构分为三部分:

  • 前端:负责取指和解码。
  • 后端:包含执行资源,负责乱序执行。
  • 退休单元:按程序顺序提交结果。

2.2 前端工作流程

前端包含以下关键组件,均按SMT需求进行调整:

  • 指令指针:每个逻辑处理器拥有独立副本,跟踪各自的下一条指令。
  • 跟踪缓存:动态共享,存放近期解码的指令迹线。通过线程标签区分指令,并按需仲裁访问。
  • L1指令缓存:共享,但缺失时的取指逻辑保留至少一个请求槽给每个逻辑处理器,保证公平。
  • 指令翻译后备缓冲区:每个逻辑处理器独有副本。
  • 流缓冲区:复制,暂存从内存取回的指令。
  • 微指令队列静态均分给两个逻辑处理器,作为前后端边界。

2.3 后端执行机制

后端以乱序方式执行微指令:

  • 分配器:为微指令分配物理寄存器、加载/存储缓冲区等资源。资源均分给两个逻辑处理器,分配器在逻辑处理器间交替工作周期。
  • 寄存器别名表:每个逻辑处理器独有副本,支持寄存器重命名。
  • 指令就绪队列:分为内存操作队列和其他队列,均分资源。队列在逻辑处理器间交替发射指令。
  • 调度器:不区分逻辑处理器,只要资源就绪即发射指令。但通过限制活跃条目数确保公平性。
  • 重排序缓冲区:均分,确保按程序顺序提交结果。

2.4 退休与缓存访问

  • 退休单元:交替处理两个逻辑处理器的指令,若一方无指令则专注于另一方。
  • 缓存访问:L1和L2缓存私有于物理核,包含两个逻辑处理器的数据。转换后备缓冲区动态共享,通过线程标签区分。

3. 性能影响与权衡

3.1 性能考量

  • 资源竞争:当仅一个线程运行时,资源仍按SMT设计被分割或保留,可能降低该线程性能。闲置逻辑处理器运行的空闲循环也会浪费资源。
  • 缓存冲突与合作:若两个线程激烈竞争缓存,会导致数据驱逐和性能下降;若协作共享数据,可提升性能。
  • 单线程性能:对极致性能需求,禁用SMT可避免资源竞争。

3.2 安全问题

SMT因共享资源和推测执行引入安全漏洞,可能导致敏感数据泄露。因此,在安全关键系统中常建议禁用SMT。

4. 结论

SMT通过复制架构状态、共享和分割微架构资源,实现线程级并行,提升处理器资源利用率和整体吞吐量。但其效果取决于工作负载:可改善一般并行任务性能,但可能引发资源竞争和缓存冲突,并存在安全风险。用户需根据具体场景权衡是否启用SMT。

参考资料

  • Intel Technology Journal, 2002, Vol 06, Issue 1
  • Intel Technology Journal, 2010, Vol 14, Issue 3
7. How to Debug Your Battery (github.com)

这篇文章探讨了电池设计中面临的两大核心挑战——“和”问题与“维度诅咒”,并介绍了如何通过计算模拟(特别是开源工具PyBaMM)来高效地“调试”和优化电池设计。

电池设计的两大挑战

  1. “和”问题

    • 电池性能指标(如高能量密度与高功率、长寿命、安全性、低成本等)往往相互制约,难以同时满足。
    • 例如,高能量电池通常功率不足,高负荷下易过热,导致需要更复杂的冷却系统并加速老化。电动车要求长续航(需高能量)与强加速(需高功率)的结合,对电池设计提出了“和”问题。电动飞机对此挑战更为严峻。
  2. “维度诅咒”

    • 电池设计涉及大量可调参数(如正负极材料、电解液配方、厚度、孔隙率、粒子尺寸、外形尺寸等),组合方式极多。
    • 仅保守估计有20个变量,每个取3个值进行测试,理论组合将高达约34.8亿种。通过实验测试所有组合在成本(每种设计约1000美元)和时间(含老化测试需数月)上完全不可行。这极大地阻碍了创新材料(如硅基负极)的快速评估和优化。

计算模拟作为解决方案

  • 原理:利用物理和电化学模型,在计算机中模拟电池行为,可以快速、低成本地探索庞大的设计空间,理解内部物理过程。
  • 以PyBaMM为例
    • 分析内部过程:通过模拟充放电过程,可以将电压分解为开路电位、反应过电位、欧姆过电位、浓度过电位等组成部分,直观揭示各物理过程(如锂离子扩散、电解质传输)对整体性能的贡献。
    • 快速参数研究:例如,通过模拟发现减小正极颗粒尺寸可以显著缩短放电后的电压弛豫时间,因为这加速了锂离子在固体颗粒内的扩散。这种参数敏感性研究在几秒内即可完成。
    • 克服“维度诅咒”:单个模拟案例耗时极短(毫秒至秒级),使得对数千个设计点进行快速扫描成为可能(例如生成6500个数据点的Ragone图仅需数小时),相比传统实验(数周至数月)效率提升巨大。
  • 应用前景:模拟方法尤其有助于研究新兴材料(如硅基负极)带来的特殊挑战,如电压滞后和膨胀/开裂问题,从而指导材料设计和优化。

总结

文章指出,面对电池设计中固有的多目标权衡和庞大的参数空间,基于物理模型的计算模拟(如PyBaMM)提供了一种强大的“调试”工具。它不仅能深入揭示电池内部机理,还能大幅加速设计迭代和优化进程,是应对电池开发中“和”问题与“维度诅咒”的关键途径。

8. CalcGPT (calcgpt.io)

CalcGPT 概述

CalcGPT 是由艺术家兼工程师 Calvin Liang 创作的一个项目。它本质上是一个由 GPT 语言模型驱动的计算器,但其核心目的并非提供高效的计算工具,而是一件具有讽刺意味的艺术作品。

该项目旨在通过幽默而尖锐的方式,对当前社会过度追捧和依赖人工智能(AI)解决方案的现象进行评论。CalcGPT 以其典型的“低效”和“容易出错”的计算特点,故意背离了人们对先进技术“快速且精准”的期待。

作品寓意深刻,提醒人们不应盲目追逐技术潮流,有时传统、可靠的方法更为可取。它将先进的技术应用于一个看似平凡却充满讽刺的场景,促使观众反思:AI 在生活中的应用是真正必要的,还是只是一种营销噱头或时尚追求。

总之,CalcGPT 通过一种轻松而发人深省的方式,对技术狂热提出了温和的批评,并倡导在技术创新与传统价值之间寻求平衡。

^ 以上内容由 ChatGPT 撰写

9. My mental model of setf was wrong (simondobson.org)

本文主要探讨了作者对 Lisp 语言中 setf 宏的错误心智模型,并通过分析其工作原理进行了纠正和澄清。

核心观点

作者原先认为 setf 是通过表达式(如 (a-var instance))获取一个内存位置,然后将新值写入该位置。这是一种基于“位置”的理解。

正确的心智模型是:setf 是一个,在编译时分析其第一个参数(定位器表达式)的结构,然后将操作分派(dispatch)给一个特定的通用函数(generic function)的方法(method)。这个方法的名称由定位器表达式中的选择器符号(如 a-varcar)决定,其特化(specialisation)则基于参数的类型。

setf 的关键特性

基于上述正确理解,文章揭示了 setf 的几个重要特性:

  1. 选择器是任意的:用于 setf 的选择器(如 a-varcar)不必是一个已定义的函数。只需是一个符号,就可以通过定义相应的 (setf selector) 方法来使用。例如,可以定义 (setf head) 方法,即使 head 不是标准函数。

  2. 可以接受多个参数:定位器表达式可以像函数调用一样包含多个参数(例如 (aref array index))。setf 宏会将这些参数连同新值一起传递给对应的方法。为了可靠地传递新值,它被放在方法参数列表的首位

  3. 可以对值进行特化:由于底层是通用函数,可以定义特化于新值类型的方法。例如,可以为 (setf assign-head) 分别定义当新值为整数和字符串时的不同行为。

  4. 没有特殊机制setf 的整个功能完全由 Lisp 的宏和通用函数系统构建而成,没有额外的特殊机制。它是宏与通用函数强大组合的典范。

实现原理

文章进一步解释了如何构建一个类似 setf 的宏(如 our-setf),其核心步骤是:

  1. 从定位器表达式中提取选择器符号。
  2. 基于该选择器构造一个代表对应方法的符号(如 (our-setf head))。
  3. 生成代码,调用以该符号命名的通用函数,并将新值和定位器的其余部分作为参数传递。

这个过程揭示了 setf 的本质:一个在编译时进行结构模式匹配并分派到通用函数的宏。

结论

通过修正对 setf 的理解,作者认识到其设计巧妙地利用了宏和通用函数,体现了 Lisp 语言的高度灵活性和表达能力。通用函数虽常与 CLOS 关联,但其机制已深度集成于 Lisp,用于构建各种灵活的代码结构。

10. Apple has reached its first-ever union contract with store employees in Maryland (apnews.com)

苹果公司与马里兰州一家工会化门店的员工达成了首份集体谈判协议。代表该门店员工的国际机械师和航空航天工人联合会下属有组织零售雇员工会(Coalition of Organized Retail Employees)于周五晚间宣布,已与公司达成一项为期三年的初步协议。

协议主要内容

  • 薪资提升:员工薪资平均增加10%。
  • 其他福利:协议还包括为员工提供其他福利。
  • 表决程序:该协议需获得位于陶森(马里兰州巴尔的摩郊区)门店约85名员工的批准。投票定于8月6日举行。

谈判背景与进展

  • 此次协议达成前,该门店员工曾于5月投票授权罢工,理由是与管理层的谈判持续一年多以来未取得“令人满意的结果”。
  • 该门店是美国仅有的两家工会化苹果门店之一。员工于2022年6月投票支持成立工会,几个月后,俄克拉荷马州俄克拉荷马城的第二家苹果门店也通过通信工人联合会实现了工会化。
  • 目前,第二家工会化门店尚未与这家科技公司签订合同。

工会表态与行业背景

  • 工会谈判委员会在声明中表示:“通过与苹果达成初步协议,我们为成员争取到了对其未来的话语权,并朝着进一步争取权益迈出了坚实的一步。我们可以将这一成功推广到一家又一家门店。”
  • 近年来,包括纽约市一家亚马逊仓库、密歇根州一家Chipotle门店以及全美数百家星巴克门店在内,工会在选举中取得了引人注目的胜利。但其中许多工会组织尚未与资方签订合同。

苹果公司未对此事立即作出评论。

11. Show HN: Semantic Grep – A Word2Vec-powered search tool (github.com)

w2vgrep:基于词向量的语义搜索工具

核心功能

w2vgrep 是一款命令行工具,使用词向量(如 Word2Vec)对文本执行语义搜索。它能查找与查询词语义相似的匹配,超越了传统 grep 的简单字符串匹配。工具支持多语言,使用体验设计得与 grep 类似。

主要特性

  • 语义搜索:利用词嵌入模型,根据词语的向量相似度进行匹配。
  • 可配置阈值:通过 --threshold 参数设置相似度阈值,控制匹配精度。
  • 上下文显示:可像 grep 一样显示匹配行前后的若干行上下文(-C, -A, -B)。
  • 格式化输出:支持彩色高亮匹配词、显示行号(-n)以及仅输出匹配词或匹配行等选项。
  • 多语言支持:可配合 Facebook fastText 等发布的 157 种语言词向量模型使用。
  • 灵活输入:可从文件或标准输入(stdin)读取文本,并支持从文件读取多个搜索模式(-f)。

安装与模型

安装

安装需要两个核心组件:

  1. w2vgrep 二进制文件。
  2. 一个词向量模型文件(.bin 格式)。

可通过以下方式安装:

  • 使用安装脚本:克隆仓库后运行 install.sh,脚本会编译程序、下载默认模型并生成配置文件。
  • 下载二进制文件:直接下载对应平台的发布版本。
  • 从源码编译:克隆仓库后使用 go build 命令自行编译。

词向量模型

工具需要加载一个二进制格式的词嵌入模型。

  • 快速开始:仓库的 models/ 目录提供了一些兼容模型。使用 git lfs 克隆或手动下载 .bin 文件后,在 config.json 中配置路径即可。
  • 多语言模型:可使用工具提供的 fasttext-to-bin 程序,将 Facebook fastText 的文本格式词向量(.vec.gz)转换为 w2vgrep 兼容的二进制模型。
  • 自定义模型:支持使用预训练模型(如 Google Word2Vec)或自行训练的模型。注意不同工具生成的二进制格式可能不同。
  • 减小模型体积:提供了 reduce-pca 等工具,可通过降低向量维度(如从 300 维降至 100 维)来显著减小模型文件大小,同时可能保持甚至略微提升性能。

使用示例

# 从标准输入读取文本,搜索与 “death” 语义相似(阈值 0.55)的词,显示行号和上下文
curl -s 'https://gutenberg.ca/ebooks/hemingwaye-oldmanandthesea/...' \
    | w2vgrep -C 2 -n --threshold=0.55 death

# 使用自定义模型(如法语模型)搜索
curl -s 'https://www.gutenberg.org/cache/epub/17989/pg17989.txt' \
    | w2vgrep -C 2 -n -t 0.55 -m model_processing_utils/cc.fr.300.bin 'château'

命令行选项

常用选项包括:

  • -m, --model_path:指定模型文件路径。
  • -t, --threshold:设置相似度阈值(默认 0.7)。
  • -n, --line-number:显示行号。
  • -C, --context:显示匹配行前后的上下文行数。
  • -i, --ignore-case:忽略大小写。
  • -l, --only-lines:仅输出匹配行,不显示相似度分数。

配置

程序支持通过 JSON 配置文件(如 config.json)进行配置,可设置默认模型路径等。配置文件会在多个位置查找。

性能与模型差异

文章指出,不同的预训练模型(Word2Vec, GloVe, fastText)对“相似性”的定义可能略有不同,但在实际应用中效果大致相当。工具作者为优化加载大模型的性能,选择了简洁的二进制格式。

许可证

  • 项目代码本身使用 MIT 许可证
  • 项目中使用的特定模型和依赖包(如 go-flags、Google Word2Vec-SLIM、GloVe、fastText)有各自的许可证要求(包括 BSD-3-Clause、Apache 2.0、公共领域、CC-BY-SA 3.0 等),使用时需注意遵守相关条款。
12. A skeptic's first contact with Kubernetes (blog.davidv.dev)

A Skeptic's First Contact with Kubernetes 学习笔记

本文作者是一名系统工程师,出于工作原因长期避免使用Kubernetes,并对其抱有“复杂且不必要”的偏见。本文是他决定基于事实而非传闻来了解Kubernetes后的学习总结,旨在从个人实用角度剖析核心概念,而非提供全面教程。

核心价值所在

作者认为Kubernetes的价值主要源于两个核心概念:

  1. 控制循环 (Control Loops)

    • 工作负载由一系列控制器管理,这些控制器持续运行,通过传感器观测变量,并通过控制元件执行操作,以达成并维持一个期望状态
    • 例如:根据队列深度自动调整处理服务器数量;根据延迟指标自动扩容Pod;自动移除不健康的节点。
    • 关键点在于,控制器的目标是收敛到期望状态,而非维持集群绝对稳定。
  2. 服务 (Services)

    • 提供稳定的网络访问点,将流量分发到一组Pod。它提供了稳定的虚拟IP和DNS记录、负载均衡以及服务发现能力。
    • 工作原理:为每个Service分配虚拟IP;每个节点的kube-proxy会监听Service变化,并更新本机的netfilter规则,将发往Service虚拟IP的流量转发到后端Pod。
    • 特性与影响:所有节点都充当负载均衡器,消除了单点故障,转发容量随集群规模扩展。但所有节点都需要知道所有Service的规则,在某些实现(如iptables)下可能产生较多规则。Pod迁移期间流量可能被双重转发,以保证高可用性。

工作负载与存储管理

  • 工作负载管理
    • Pod:基本工作单元,可手动创建,但不具备自愈和自动伸缩能力。
    • ReplicaSet:控制器,确保指定数量的Pod副本始终运行,解决了Pod因节点故障被删除的问题。但仅支持副本数调整,不支持应用配置更新。
    • Deployment:更高级的控制器,在ReplicaSet基础上支持声明式更新(如更改容器镜像),并能管理滚动更新过程,通过创建新ReplicaSet并逐步扩容、缩容旧ReplicaSet来实现。
    • 存储管理
    • 临时卷 (Ephemeral Volume):生命周期与Pod绑定,Pod终止后数据删除。适用于Pod内容器间共享数据(如日志收集)。
    • 持久卷声明 (PersistentVolumeClaim, PVC):声明对持久存储的请求。持久卷的生命周期与Pod解耦,可由多种后端(如NFS)支持。多个Pod可共享同一PVC,但存在写冲突风险。
    • 有状态集 (StatefulSet):用于需要稳定标识和持久化存储的有状态应用。特点包括:稳定的Pod主机名(如web-0)、按序创建/删除Pod、以及为每个Pod实例提供独立存储的卷声明模板。作者对更新顺序(从高序号到低序号)的“稳定性”解释存疑。

总结与开放性问题

作者认为Kubernetes的核心概念设计合理,尤其赞赏服务及其网络模型,以及基于控制循环的资源管理模式。然而,他也提出了一些疑问和批评:

  • 为什么集群可以永远不达到稳定状态被视为正常?
  • 控制器模式为何未能更好地支持“云原生”架构(如基于队列深度的自定义弹性伸缩)?
  • 存储和网络实现(CNI/CSI)为何是“外部”的,却又对特定云厂商有显式支持?
  • 强烈批评:社区工具链(如Helm)过度依赖字符串模板处理来生成结构化配置(YAML),导致需要手动处理缩进等格式问题,增加了不必要的复杂性和出错可能。作者认为这违背了用计算机生成结构化语言的最佳实践。
13. Plan 9 is a uniquely complete operating system (posixcafe.org)

Plan 9:一个设计完整且独特的操作系统

操作系统的“体验”在很大程度上取决于其默认包含的软件。许多 Linux 发行版仅通过预装软件的差异来区分彼此,因为内核之外的选择通常非常丰富。Linux 仅作为一个内核,这在一定程度上鼓励了这种多样性,但这对开发者而言既是福音也是挑战——要确保软件在所有可能的软件组合下都能正常工作,需要应对一个复杂的测试矩阵。

BSD 系统则不同,它们通常默认包含内核之外的更多组件,例如一个指定的 C 库、编译器、库和程序。这使得在 BSD 上进行软件开发相对容易,因为开发者可以假定系统中存在一个更大的软件集合。然而,即使是 BSD,其系统中的许多代码(如 C 编译器)也并非完全由其核心团队控制,而是共享自其他项目(如 GNU、LLVM)。这样做有利有弊:好处是可以借助其他项目的成果,坏处是可能带来设计上的不一致。

Plan 9 在这方面是独一无二的。系统所需的一切都包含在基础安装中,包括编译器、图形环境、窗口管理器、文本编辑器、SSH 客户端、BT 客户端、Web 服务器等等。用户开箱即用,几乎可以完成所有操作。作者认为这一点至关重要,原因如下:

  1. 单体代码库:整个内核和用户空间的状态可以用一个单一的提交哈希来标识。
  2. 设计一致性:系统中所有代码的设计是连贯统一的。
  3. 无配置矩阵:软件开发者无需为多种软件组合进行测试。
  4. 可假设的软件集合:程序可以假定系统中存在一个相当大的软件集合。
  5. 鼓励原生开发:这种设计鼓励开发者编写符合 Plan 9 风格的新软件,而不是简单地导入现有软件。

当然,这种设计也有其缺点

  1. 功能相对有限:Plan 9 中的实现通常不如其对应的上游版本(如 OpenSSH、Git)功能丰富。
  2. 较高的入门门槛:向系统添加新程序或功能的门槛更高。
  3. 生态相对隔离:系统在一定程度上与外部更广泛的软件发展流隔离。

作者认为优点大于缺点,但也承认这种设计是 Plan 9 通常仅被视为爱好者好奇心产物的部分原因。需要强调的是,正是由于这种设计,9front 分支实现了大量独立的软件实现,例如 SSH、Git、BT 客户端、日文/韩文/中文输入法、SMB 服务器、Tinc VPN 等。没有其他系统能提供如此多、且本身就有用的、遵循其自身接口的示例程序。

因此,Plan 9 成为了一个绝佳的学习资源实验沙盒,适合任何想了解操作系统相关主题的人。从这个意义上讲,它是一套真正独特的软件集合。

最后,文章作者鼓励对此感兴趣的读者下载 9front ISO(写文时仅 467MB)并亲自尝试。

14. Aphex Twin gave us a peek inside a 90s classic (2017) (cdm.link)

90年代电子音乐的神秘感与Aphex Twin

在90年代,由于缺乏现代教程和标准化软件,电子音乐制作充满神秘感。Aphex Twin(Richard D. James)凭借其复杂的音乐序列,以及关于个人作息、硬件改造和海量未发布曲目的传闻,成为这种神秘文化的代表人物。

经典曲目制作过程揭秘

2014年后,James开始大量公开其未发布作品。近期发布的一段视频展示了其经典曲目“Vordhosbn”(收录于专辑《Drukqs》)在复古Tracker软件PlayerPro中的实际制作过程。该视频揭示了以下技术细节:

  • 多轨和弦:由于PlayerPro的音轨是单音的,曲目中的和弦必须通过多个音轨叠加来实现。
  • 采样驱动:与典型的Tracker工作流一致,曲目主要由采样构建,这些采样可能来自James丰富的硬件收藏。
  • 可视化工具:视频中展示了示波器和频谱显示等界面工具。

这一揭秘打破了以往的神秘感,表明其经典作品的创作方式与其他电子音乐家并无本质区别,核心依然是纯粹的音乐制作。

Tracker软件的历史与现状

  • 历史地位:在钢琴卷帘(Piano Rolls)普及之前,Tracker(如90年代中期的OctaMed)是利用计算机制作复杂序列的最佳工具。
  • 现代发展:Renoise是目前极具代表性的现代Tracker软件。尽管需要记忆大量快捷键导致学习曲线陡峭,但它成功将Tracker工作流带入21世纪,在微编辑和复杂序列制作方面极具灵活性,是Breakcore制作人的首选工具之一。

软件资源

文章中提到的PlayerPro是一款免费开源软件,支持Mac、Windows、Linux以及FreeBSD等多个操作系统平台。

15. Back to our roots (honnibal.dev)

公司回归独立经营之路:Explosion 的反思与重启

公司背景与早期发展

  • Explosion 由 spaCy 创始人于 2016 年创立,最初是一家小型、自筹资金的公司。
  • 2021 年接受风险投资后,公司规模扩大,但未能适应依赖融资的发展模式。
  • 现已决定回归独立经营,停止寻求风投,并继续维护 spaCy 和 Prodigy 项目。

产品与商业模式

  • spaCy:自 2014 年开发的 Python NLP 工具库,定位为实用工具,以高性能和 Python API 为核心优势。
  • Prodigy:首个商业产品,灵活的标注工具,采用一次性授权模式(个人版 $390,企业版 $2450),与 spaCy 深度集成。
  • Prodigy Teams:后续计划中的协作版产品,旨在弥补 Prodigy 在团队管理和基础设施方面的不足。

融资与扩张挑战

  • 2021 年为推进 Prodigy Teams 和 spaCy 发展,从 SignalFire 筹集 600 万美元(后追加 300 万)。
  • 主要问题
    • 项目分散:多项目并行导致创始团队注意力分散。
    • 技术传承困难:spaCy 的 Cython 架构和独特设计难以完全移交给新团队。
    • 团队管理:跨时区协作(柏林、澳大利亚、美国)影响团队凝聚力,且缺乏有效的分布式决策机制。
    • 进度延误:Prodigy Teams 因历史包袱和团队磨合问题进展缓慢。

回归独立的原因

  • 2023 年风投市场转冷,Prodigy Teams 未完成开发,无法获得后续投资。
  • 公司未能通过风投资金实现预期增长,决定重回自主经营。
  • 获得 Hugging Face 25 万美元资助及德国研发补贴(最高 150 万欧元)以维持开源工作。

反思与未来

  • 创始人承认在团队管理和项目传承上存在不足,对未能充分利用投资资金负责。
  • 当前正逐步恢复运营,并承诺在公司官网发布后续项目规划。
  • 公司文化将坚持小团队、自主经营的模式,聚焦产品与社区价值。
16. StreamPot: Run FFmpeg as an API with fluent-FFmpeg compatibility, queues and S3 (github.com)

StreamPot 是一个仍处于早期开发阶段的项目,旨在提供一个用于在应用中转换媒体文件(例如裁剪视频、提取音频、转码格式)的脚手架,它将 FFmpeg 作为 API 来运行,并兼容 fluent-ffmpeg,同时支持任务队列和 S3 存储。该项目的诞生是为了满足越来越多应用在工作流中对媒体处理的需求。

该工具提供两种使用方式:

  1. 本地自托管:用户可按照官方文档的指引,在本地服务器上安装和运行。
  2. 托管服务:用户也可以注册并使用其提供的托管版本。

要在应用中提交媒体处理任务,需要在服务器端完成以下步骤:

  1. 安装客户端库 @streampot/client
  2. 初始化客户端并提交作业。通过链式调用(如 .input().setStartTime().setDuration().output())配置任务,然后调用 .run() 来提交。
  3. 提交后会返回一个作业 ID,由于生产环境应采用轮询机制,代码示例展示了在一段时间后(如10秒)使用 client.checkStatus(jobId) 来检查作业状态,当状态为 completed 时即可获取输出文件的 URL。

该项目高度依赖于 FFmpeg 和 fluent-ffmpeg 团队的工作。开发者鼓励用户试用并提供反馈,以帮助项目改进。

18. Tritone Substitutions (johncarlosbaez.wordpress.com)

三全音替代(Tritone Substitutions)

核心概念 三全音替代是一种用于提升音乐复杂度和精致感的流行和声技巧,广泛应用于古典和爵士乐中。

乐理基础与原理

  • 属七和弦:以大调音阶的第五音(属音)为根音,隔音构成的四音和弦(如C大调中的G-B-D-F)。
  • 三全音(Tritone):属七和弦中包含两个相距“三全音”的音(如B和F)。三全音极具不协和性,促使和弦倾向于“解决”到更协和的状态,这是推动音乐发展的核心动力。
  • 替代原理:将原属七和弦在音高圆圈上旋转180度,即可得到其三全音替代和弦(如G7的替代为C#7)。替代和弦中的每个音都比原和弦对应音高一个三全音。
  • 共享音符:原属七和弦中相距三全音的两个音在旋转后位置不变,因此同时存在于原和弦与替代和弦中。这使得替代和弦在听感上与原和弦高度相似。此外,这些相关音符构成了音乐家喜爱的减七和弦(diminished seventh chords)。

实际应用与效果

  • 听觉效果:在歌曲(如《The Girl from Ipanema》)中使用三全音替代,能创造出圆滑、优雅的听觉效果;若不使用,音乐则会显得平淡乏味。
  • 进阶用法:除了在大调第五音的自然位置上使用,还可以对“副属和弦”(secondary dominant,即经过移调的属七和弦)进行三全音替代,以丰富和声走向。
  • 术语习惯:音乐人通常将其简称为“tritone sub”。

学习资源 文章推荐了两位视频博主的讲解:

  1. David Bennett:通过大量知名歌曲实例展示三全音替代的应用及对比效果,涵盖了自然属和弦与副属和弦的多种替代可能性。
  2. Michael Keithson:以友好且具分析性的风格,从基础原则推导和声理论。视频从基础概念逐步深入到复杂应用,并强调了理解属和弦对于掌握三全音替代的重要性。
19. Managarm: Pragmatic microkernel-based OS with asynchronous I/O (github.com)

Managarm:基于微内核的务实异步I/O操作系统

Managarm 是一个基于微内核的操作系统,其主要特点包括:

  1. 内核架构:采用微内核设计,而非 Linux/Windows 等桌面系统常见的单内核。
  2. I/O 模型:为所有 I/O 操作提供了完全异步的 API
  3. 用户空间兼容性:尽管内核设计不同,但在用户空间层面与 Linux 保持良好兼容

针对微内核通常存在的性能劣势,Managarm 通过在驱动和系统调用层面提供良好的抽象,来优化常见用户空间功能(如 POSIX 接口)的实现效率。

Managarm 不是一个 Linux 发行版,它运行自有的内核,不与 Linux 内核共享任何源代码或二进制文件。其用户空间 API 支持多种 Linux API(如 epolltimerfdsignalfd)及伪文件系统(如 /sys/proc)。

主要功能特性

  • 支持 64 位、对称多处理器(SMP)及 ACPI。
  • 完全异步的微内核与服务器设计。
  • 支持多种现代硬件,包括 USB 3.x 控制器。
  • 具备网络功能。
  • 兼容 POSIX 和 Linux API。

支持的软件:包括 Weston(Wayland 参考合成器)、kmscon、GNU Coreutils、Bash、nano 等。

支持的硬件

  • 通用串行总线:UHCI, EHCI, XHCI。
  • 图形:通用 VBE、Intel G45、virtio GPU、Bochs VBE、VMWare SVGA、nVidia (Turing+)。
  • 输入设备:USB HID、PS/2 键盘鼠标。
  • 存储:USB 大容量存储、NVMe、AHCI、ATA、virtio 块设备。
  • 网络:USB CDC ECM/NCM、USB MBIM 蜂窝调制解调器、RTL8168 系列、Intel 千兆以太网。
  • 串口:UART、CP2102、FTDI FT232。

体验方式:可下载自动构建的 xz 压缩镜像,并使用推荐的 QEMU 参数运行。

构建说明:本仓库包含内核、驱动及核心功能,但不足以构建完整的 Managarm 发行版,详细构建指引请参考《Managarm 手册》。

20. Virtual Apollo Guidance Computer (github.com)

虚拟阿波罗制导计算机

历史背景与硬件概述

阿波罗飞船的登月任务涉及两艘独立的飞船:指令舱登月舱。两者均需自主导航,其核心制导系统由麻省理工学院仪表实验室(今德雷珀实验室)开发。该系统的关键组成部分是阿波罗制导计算机。每次任务配备两台完全相同的AGC(指令舱和登月舱各一台),但运行不同的软件以适应各自任务,且软件在后续任务(如阿波罗17号)中不断演进。

以现代标准衡量,AGC的性能极其有限:

  • 内存:2048字(约3840字节)的RAM,36864字(约69120字节)的只读内存。
  • 处理速度:每秒最多执行约85,000条指令。
  • 物理参数:尺寸24.250" x 12.433" x 5.974",重70.1磅。

尽管如此,它并非简单的计算器,而是一个支持多任务处理的复杂系统。与之配套的是显示键盘单元,为宇航员提供操作界面。登月舱配有一个DSKY,指令舱则有两个。另一重要组件是惯性测量单元,它持续监测飞船的加速度与旋转状态,并将数据反馈给AGC,从而实时确定飞船的姿态与位置。

虚拟AGC项目

本代码库是虚拟AGC项目的核心部分,该项目旨在创建一个模拟AGC、DSKY及其他制导系统部件的虚拟机。其目标是让这个被称为yaAGC的模拟器,在接收与真实AGC相同的输入信号时,能够执行原始的阿波罗软件并产生相同的行为。

项目内容

本项目提供开源代码,包含:

  1. 原始AGC汇编语言源代码(尽可能收集了所有任务的版本)。
  2. 处理AGC代码的软件工具,包括汇编器CPU模拟器
  3. 模拟外围设备(如DSKY)的软件。
  4. 用于登月舱中中止制导系统的类似源代码与工具。
  5. 关于土星火箭的发射数字计算机或双子座飞船计算机的少量材料。

项目还提供多种部署方式,推荐使用Docker来简化运行,无需在宿主系统安装依赖。通过Docker Compose可快速启动,并通过Web浏览器(noVNC,端口6080)或VNC客户端(端口5900)访问模拟界面。

项目定位与兼容性

虚拟AGC并非飞行模拟器或登月模拟器,也非飞船控制面板的行为模拟。它是一个专注于模拟AGC内部工作原理的精密计算机模型/模拟器,可作为更复杂模拟系统的一个组件。

软件兼容多种操作系统,包括:

  • Linux(多数发行版)
  • Windows(XP及以后版本,可能需要特定配置)
  • Mac OS X(10.3或更高版本)
  • 以及FreeBSD、OpenSolaris和WebAssembly(通过wasi-sdk)。

构建说明

在不同平台上构建源代码的通用步骤是解压开发快照包并运行make命令,但具体环境要求和参数各不相同:

  • Linux:需要安装一系列开发库(如SDL、ncurses、wxWidgets等),然后执行make
  • Windows:需在MinGW/MSYS环境中预先安装SDL、wxWidgets、pthread等依赖库,然后使用特定参数(如WIN32=yes)构建。
  • Mac OS X:需要预先准备好Terminator应用,然后使用MACOSX=yes参数构建。
  • FreeBSD:使用FREEBSD=yes参数构建。
  • WebAssembly:使用WASI=yes参数,目前仅能编译yaAGC组件。

构建完成后,生成的可执行文件及相关资源位于临时目录中,通常可移动至用户目录(如~/VirtualAGC)以便使用。

21. Fish in remote tank made into fractals with Video Feedback Device [video] (www.youtube.com)
22. Show HN: CeLLama – Single cell annotation with local LLMs (github.com)

CeLLama 是一个展示如何使用本地大型语言模型进行单细胞RNA测序数据中细胞簇类型注释的项目。该项目通过详细的推理链,展示了人工智能分析基因表达数据、识别细胞特异性标记并逐步推理出细胞类型的过程。

核心分析流程

系统对每个细胞簇的分析遵循一套结构化流程:

  1. 问题分解:明确任务是基于提供的上调和下调基因列表来识别细胞类型。
  2. 基因分析:分析上调和下调基因的生物学功能,如涉及细胞生长、增殖、免疫反应或抗原呈递等过程。
  3. 结果整合:结合上调和下调基因的模式,进行初步的细胞类型推断。
  4. 最终分析:综合所有证据,确定最可能的细胞类型注释,并给出置信度。

关键功能与特点

  • 模式识别:系统通过识别特定基因组合来关联细胞功能与类型。例如,核糖体蛋白(如RPS3A, RPL9)的上调常与细胞快速生长相关;而特定表面标记(如CD3D, CD8A)则直接指示T细胞身份。
  • 假设生成与验证:在分析过程中,系统会考虑多种可能的细胞类型,并通过后续的基因证据进行验证或排除。
  • 处理复杂数据:系统能够处理PBMC(外周血单个核细胞)数据集,该数据集包含多种免疫细胞类型,对注释的准确性要求高。

注释结果示例

演示中包含了对多个细胞簇的注释结果,均通过上述推理流程得出:

  • 簇0:根据特定的上调和下调基因组合,最终注释为 T细胞
  • 簇2:分析表明含有中性粒细胞相关基因,最终注释为 单核细胞
  • 簇3:识别出B细胞特异性受体相关基因(如CD79A),最终注释为 成熟B淋巴细胞
  • 簇4:基因表达谱指示了细胞毒性功能,最终注释为 CD8+ T细胞
  • 簇5:具有显著的细胞毒性和趋化因子基因,最终注释为 NK细胞
  • 簇6:显示与吞噬作用和细胞因子产生相关的基因,最终注释为 巨噬细胞
  • 簇7:存在明显的细胞毒性T细胞标志物,最终注释为 CD8+ T细胞
  • 簇8:上调的基因主要与抗原呈递相关,但下调的T细胞基因使其结论为 单核细胞或树突状细胞(需进一步验证)。
  • 簇9:上调基因与抗原呈递和免疫激活相关,最终注释为 树突状细胞

输出格式

系统的最终输出以JSON格式呈现,包含标题、内容(即细胞类型注释)、置信度和下一步动作等字段。该演示清晰地展示了本地LLM在生物信息学任务中,如何将复杂的基因数据转化为可解释的、结构化的细胞类型注释推理链。

24. Roguecraft Devs on Developing for Amiga in 2024 (www.timeextension.com)

文章介绍了《Roguecraft》——一款备受期待的Amiga平台新作。该游戏由挪威独立工作室Badger Punch Games开发,是2022年发行的Commodore 64游戏《Rogue 64》的增强版。

游戏概况 《Roguecraft》是一款受H.P.洛夫克拉夫特作品启发的 roguelike 游戏。玩家可从战士、游荡者或法师三个职业中选择其一,在迷宫般的地下城中探索,寻找宝藏,应对秘密、物品和敌人,最终目标是击败关底的触手怪物。

开发团队与历程 Badger Punch Games由程序员Ricki Sickenger和艺术家Henning Ludvigsen于2010年代初成立,最初作为副业项目。两人在90年代初通过Amiga演示场景相识,后曾共同参与开发网络游戏《Darkfall Online》。游戏于2022年9月首次预告,预计2024年9月发行,由Thalamus Digital负责发行。

开发Amiga的考量 两位开发者均拥有深厚的Amiga硬件个人经历。Sickenger在1990年左右获得Amiga 500并自学68k汇编,认为Amiga在性能和作为业余项目的可实现性上达到了理想平衡。Ludvigsen则从借用哥哥的Amiga 1000开始,后拥有CDTV和A1200。

技术挑战与优势

  • 优势:相比C64,Amiga速度更快,拥有减轻CPU负担的专用协处理器(如Blitter和Copper),便于实现出色的图形效果和自定义32色调色板。
  • 挑战:容易因过度追求功能而导致开发周期延长。本作原计划6个月完成,实际耗时2年。协处理器也增加了编码的复杂性。

从《Rogue 64》到《Roguecraft》的升级 团队希望在保留核心玩法的基础上,充分利用Amiga更强的硬件性能。主要改进包括采用等距视角图形,这使得地下城和怪物能呈现更多细节与视觉深度。洛夫克拉夫特宇宙是主要的美学灵感来源。

开发工具与关卡设计

  • 工具:使用 Tiled 地图编辑器设计房间,支持等距瓷砖并通过脚本转换为汇编数据。像素艺术使用 Photoshop 完成,并采用特定工作流以适配Amiga的32色限制。
  • 关卡生成:地下城采用5x5房间网格,通过算法随机移除房间,同时确保所有剩余房间始终连通(避免区域割裂),以保证可玩性。游戏包含超过100种房间变体,并随着进程呈现更暗沉、粗砺的风格以避免重复感。

现状与发售 游戏开发已全部完成,且早期反馈积极。开发团队专注于最终调试,避免陷入功能膨胀。物理版已于2024年7月1日开启预购,预计2024年9月正式发货。游戏兼容多款Amiga机型,包括A500、A1200、CD32等。

26. An Interview with Robert Caro and Kurt Vonnegut (1999) (www.robertcaro.org)

采访摘要:罗伯特·卡罗与库尔特·冯内古特(1999)

采访背景

采访于1999年夏季在库尔特·冯内古特位于萨加波纳克的家中进行,由丹尼尔·斯特恩和芭芭拉·斯通主持。采访自然演变为两位作家之间的对话,涵盖写作生涯、方法、政治权力和社会观察。

写作生涯与方法比较

  • 罗伯特·卡罗:专注于非虚构传记,作品如《权力掮客》和林登·约翰逊系列。他的书很长,旨在通过个人生平揭示时代和政治权力的本质。他强调深入研究、叙事技巧和准确性,从不使用虚构对话。
  • 库尔特·冯内古特:作为小说家,作品简洁,依赖想象力但注重研究准确性。他讨论了虚构作品中的科学和事实基础,以及小说作为艺术形式的挑战(读者需主动参与)。

卡罗对传记的见解

  • 传记不应仅是生平故事,而应作为揭示政治权力如何运作的工具。通过罗伯特·摩西的例子,他展示了未选举官员如何长期掌权,挑战传统民主理论。
  • 对林登·约翰逊的研究:卡罗迁居德州,实地采访以理解约翰逊的童年(如贫困、孤独)如何塑造其性格,导致他对权力既渴望又复杂。约翰逊既有对穷人的同情,也有无情野心。
  • 研究方法:强调第一手资料和亲身体验。例如,通过约翰逊兄弟的访谈和旧居重现,挖掘被神话掩盖的真相。

冯内古特对写作的看法

  • 从人类学背景出发,认为作家应理解文化并推动改进。他的作品如《第五号屠宰场》结合历史与主题。
  • 讨论小说与现实的交集:作家需确保事实准确性以维持可信度,同时保持叙事吸引力。
  • 反思美国社会:对国家现状失望,认为媒体应关注实质问题而非表面事件(如O.J.案)。

共同主题与讨论

  • 叙事的重要性:两人都认为无论非虚构或虚构,优秀写作依赖引人入胜的叙事。卡罗以吉本和托尔斯泰为例,强调节奏和情感表达。
  • 政治与权力:卡罗的作品深入探讨权力对个人和社会的影响,如摩西的公共权威和约翰逊的总统任期。冯内古特补充了权力与心理健康的观点。
  • 社会观察:对美国政治、媒体和选举表示批评,认为电视和短期注意力损害深度思考。
  • 写作与生活:两人都提到写作生涯的孤独和挑战,但坚持完成长期项目。卡罗担心时间不足完成约翰逊系列,冯内古特讨论作家作为表演者的角色。

写作习惯与个人反思

  • 卡罗:研究阶段时间灵活,写作时每天约5小时(通常早上)。他区分研究和写作人格,强调早期起床和专注。
  • 冯内古特:每天写作4小时(早上6-10点),其余时间处理杂务。他认为小说家需持续集中注意力,可能影响人际关系。
  • 两人都依赖传统工具:卡罗仍用打字机和复写纸,冯内古特转向电脑以方便编辑。

结论

采访以对写作艺术的讨论结束,强调非虚构与虚构的重叠:都需要真实性和叙事力。卡罗和冯内古特代表了不同但互补的路径,共同致力于通过文字揭示人性与社会真相。