2024-04-13
28 篇热帖
2. Lessons after a Half-billion GPT Tokens (kenkantzer.com)
本文总结了某创业公司Truss在消耗超过5亿GPT Token后的七项关键经验,主要基于其B2B文本分析提取场景(85%使用GPT-4,15%使用GPT-3.5)。
1. 提示词设计:少即是多
- 过度详细或列举已知信息的提示词反而会降低模型表现。
- 示例:要求GPT从列表中选择州ID失败率较高,但直接询问“相关州全称或联邦”后准确率显著提升。
- 关键点:GPT具备常识,过度指令化会干扰其泛化能力。
2. 无需依赖Langchain等复杂工具
- 仅使用OpenAI的Chat API即可满足需求,核心代码仅一个40行的函数。
- 简化设计:通过自动截断文本和重试逻辑处理上下文长度问题,未使用JSON模式、函数调用等高级功能。
3. 流式API与打字机效应提升用户体验
- 变速显示生成文本的UX设计获得用户积极反馈,类似AI交互的“鼠标时刻”。
4. GPT难以处理“空结果”场景
- 要求“无内容时返回空白”的指令易导致幻觉或不确定输出(如虚构烘焙店名称)。
- 解决方案:在输入为空时避免调用GPT,但程序化定义“空”仍具挑战。
5. “上下文窗口”存在误导
- GPT-4虽支持128k输入,但输出窗口仅4k。实际生成超过10项列表时失败率高。
- 变通方法需通过多轮对话逐步生成,但会增加复杂性。
6. 向量数据库与RAG技术实用性有限
- 认为RAG仅适用于真正的大规模搜索场景,普通业务应用中:
- 相关性阈值难以设定,易引入噪音或遗漏结果。
- 将向量与业务数据分离损失上下文价值。
- 领域专家用户更倾向精确查询而非语义猜测。
- 替代思路:用LLM将用户搜索转换为结构化查询(如SQL)。
7. 在上下文明确的场景中幻觉极少发生
- 在文本提取/分析任务中,GPT通常能基于给定上下文可靠输出,不会无中生有。
- 幻觉问题更多出现在“无答案时无法明确拒绝”的场景。
展望与评论
- AGI:当前技术路径难以实现。
- GPT实用性:确实有效,是AI普及化的早期阶段,但不会完全替代人力。
- 竞品对比:未进行严格测试,但GPT-4在理解意图等细节上仍显优势。
- 技术更新:认为关注模型重大迭代(如GPT-5)比追逐中间更新更有价值。
- GPT-5预期:改进可能呈对数增长,成本收益比或使GPT-4成为性价比拐点。
3. Show HN: 5 Years Ago I made the Recovery Kit, I just made the RK2 (www.doscher.com)
Recovery Kit 2 (RK2) 构建总结
项目背景: 作者于2019年创建了初代 Recovery Kit,这是一个为树莓派打造的坚固型电脑外壳,旨在替代当时廉价且过于简单的官方外壳。该项目获得了《The Verge》、《树莓派杂志》等媒体的报道,但一直未能登上作者心仪的 Hacker News、Hackaday 等平台。五年来,作者设计了多个改进版本,但均因改进幅度不足而未发布。
RK2 的主要改进与解决的核心问题:
- 电池: 初代电池因疑似安全问题下架。RK2 改用容量更大、更可靠的 Shargeek Storm 2 (25,600mAh, 100W) 移动电源,可为系统(包括NVMe启动盘)提供充足电力。但该电池不支持边充边用。
- 键盘: 初代正交布局键盘占用空间且编程困难。RK2 采用 Drop/OLKB Planck v7 预组装键盘(无焊),并为其设计了可嵌入外壳盖板的定制外壳。
- 内部接线: 初代复杂的线束和通孔焊接导致构建耗时(超过100小时)。RK2 大幅简化,仅保留一处焊接点(电源按钮),GPIO连接器改用压接式,降低了组装难度和成本。
- 手柄: 初代手柄易卡住并损坏屏幕。RK2 采用了改进的设计。
- GPIO: 仍保留,但布局更紧凑,并使用更易压接的连接器。
RK2 的权衡与限制:
- 屏幕尺寸: 仍使用7英寸触屏,更适合终端操作而非桌面使用。
- 电源控制: 没有空间为每个组件设置独立开关,简化为单个电源按钮。
- 无x86支持: 暂未实现。
- DSI排线: 树莓派5使用了新尺寸的DSI接口,必须使用特定的专用排线(非通用型号),目前较难采购。
- USB-C电源“智能”识别问题: 移动电源初次开启时可能无法识别树莓派或网络交换机,需要重新插拔USB-C线缆。
构建概述与亮点:
- 外壳: 使用 Pelican 1300 防水防震箱。
- 打印技术: 利用 Bambu Lab 等CoreXY打印机的高精度,使多个部件(如网络交换机)可通过压入方式固定,无需额外支架。
- 存储: 支持通过 NVMe 适配器 使用 2242mm NVMe固态硬盘 作为系统启动盘。
- 网络: 集成 5口千兆交换机 和面板式以太网接口。
- 连接性: 充分利用 USB-C接口,前面板设有两个面板式USB-C口(映射至树莓派的USB口),并可通过转接器将其中一个变为系统供电口,增加了灵活性。
- 电源按钮: 一个设计精良、手感良好的点击式电源按钮,可快速关机或重接至GPIO。
- 工具要求: 组装需要电动螺丝刀(如Hoto)、压线钳(用于GPIO)等工具。
零件清单概览:
- 核心计算: 树莓派5、散热片、专用DSI排线、NVMe适配器及固态硬盘。
- 显示: 树莓派7英寸触摸屏。
- 网络: 5口千兆交换机、各种以太网线。
- 电源: Shargeek Storm 2 移动电源、多种USB-C线缆及转接头。
- 前面板接口: DC电源口、GPIO压接连接器(公/母)、面板式以太网口、电源按钮、面板式USB-C口。
- 键盘: Planck v7 PCB、键帽、轴体等。
- 结构硬件: Pelican 1300 箱体、多种规格的黑色氧化螺丝(主要来自McMaster-Carr,质量更高)。
- 工具: 电动螺丝刀、压线钳、烙铁等。
数字文件与支持: 构建所需的STL文件和Fusion 360 CAD源文件仅向作者的付费会员提供。会员资格最低为每月5美元,可获取所有项目的设计文件。
总结: Recovery Kit 2 是对初代坚固型树莓派电脑外壳的一次重要升级,重点解决了电池可靠性、键盘易用性和内部组装复杂度等核心痛点。它通过采用现代3D打印技术和现成部件,在保持坚固便携特性的同时,显著降低了构建门槛,并增加了如NVMe启动、灵活供电等现代功能。尽管在屏幕尺寸和某些接口设计上存在妥协,但它代表了一个高度可定制且实用的离网计算平台的进化。
4. Tell HN: Bypass Paywalls repository is gone
5. Google threatens to cut off news after California proposes paying media outlets (www.theverge.com)
6. Tree-shaking, the horticulturally misguided algorithm (2023) (wingolog.org)
文章摘要:Tree-shaking, the horticulturally misguided algorithm (2023)
本文探讨了Tree-shaking算法在WebAssembly (Wasm) 生态,尤其是在Web环境下的关键作用、面临的挑战及其对语言工具链的启示。
WebAssembly在Web的现状与展望
- 成功领域:Wasm在将大型C++程序(如Photoshop)移植到Web方面表现出色,也适用于需要客户端-服务器共享实现的计算密集型或特定库任务(如图像处理)。
- 局限领域:Wasm在DOM密集型Web应用(如前端框架)上未获成功,主要原因是编程模型差异巨大(JavaScript动态类型与内存管理 vs. Wasm 1.0的静态类型与线性内存),且与DOM交互繁琐。
- 未来机遇:随着所有浏览器即将支持Wasm垃圾回收(GC)和引用类型,使用C#、Python、Scheme等高级语言编写Web应用成为可能,有望开启新一轮技术热潮。
代码体积:Web成功的决定性因素
- 文章核心论点是:Wasm在Web上取胜的关键在于编译器能否生成紧凑的代码(理想的大小是网络传输几千字节级别)。
- 当前状况:像Go、Python这类有较重运行时的语言,其默认Wasm输出体积巨大(兆字节级),不适合常规Web开发。
- 解决方案:需要针对Web场景的替代工具链(如Go的TinyGo、Python的MicroPython),它们通常通过实现更精简的tree-shaking算法和优化的标准库来大幅缩减输出体积。
Tree-shaking的挑战与算法复杂性
- 概念:Tree-shaking旨在移除程序中未使用的代码。尽管其植物学比喻并不准确,但该术语已被广泛采用。
- Hoot Scheme编译器的实践:作者以其工作的Hoot编译器为例,说明为支持GC的Wasm生成小代码所采用的多种优化技术,包括部分求值、修复
letrec、CPS遍历、显式死代码消除,以及按需链接标准库。 - 核心难题:
- 非过程定义:记录类型等非函数定义会通过虚表(vtable)引入隐式引用,可能导致大量未使用代码被保留。
- 多态与高阶编程:像
display这样的多态函数会根据参数类型拉入大量分支代码;而面向对象编程本质上是高阶编程,使得静态分析(流分析)变得极为复杂,因为需要精确追踪对象类型。 - 模块系统:Python等语言的模块化结构使得tree-shaking对象是一系列模块,而非单一的词法作用域,增加了分析难度。
结论与展望
- Wasm GC为Web平台引入非JavaScript语言打开了大门,但大规模应用的可行性完全取决于输出模块的体积。
- 这要求各语言社区在工具链上进行重大投资,开发高效的tree-shaking算法和适配Web平台的标准库,这通常意味着构建实验性的替代工具链。
- 最终,能成功将编译产物控制在极小体积的语言和工具链,才能在Web开发中获得真正广泛的采用。
7. Japanese police arrest man for tampering with Pokémon Violet save data (www.ign.com)
日本警方逮捕非法修改《宝可梦 紫》存档数据男子
事件核心
日本警方于2024年4月9日逮捕一名36岁男子,涉嫌使用特殊工具非法修改《宝可梦 紫》游戏存档数据,并通过在线游戏资产交易平台销售这些修改后的数据。此举违反了日本2019年《反不正当竞争法》。
作案细节
- 修改内容:嫌疑人针对客户定制需求,修改宝可梦的招式组以创建稀有宝可梦。
- 销售时间与价格:在2022年12月至2023年3月期间销售,单只宝可梦数据价格高达13,000日元(约84美元),或提供6只宝可梦套餐约合30美元。
- 发现过程:警方通过“网络巡逻”发现证据并实施逮捕。
法律后果
嫌疑人已承认犯罪,但以谋生为由进行辩护。根据日本法律,他可能面临最高5年监禁和/或500万日元(约合32,600美元)罚款。
相关背景
宝可梦系列频繁引发犯罪事件:
- 2021年:一名男子企图从东京六层建筑下降盗窃宝可梦卡牌。
- 2022年:东京发生多起宝可梦卡牌盗窃案,其中一起涉及价值超过6万美元的卡牌。
- 2022年1月:两名洛杉矶警察因在《宝可梦 GO》游戏中追捕宝可梦而忽视报警电话被解雇。
总结
此次逮捕突显了针对热门游戏IP的非法活动,以及日本法律对游戏数据篡改行为的严格监管。
8. I continue to no longer attend vintage computer festivals (ascii.textfiles.com)
这篇博客文章是对作者先前关于不再参加Vintage Computer Festival(VCF)帖子的回应说明,主要澄清了以下几点:
- 回应质疑:作者确认博客中描述的事件属实,并指出自己被告知相关物品已被处置。尽管外界说法矛盾,但这反而证实了其叙述的可信度。
- VCF结构问题:作者批评VCF复杂的命名、地理品牌和内部实体结构,指出外界难以区分不同VCF组织,且其内部人员也交叉使用相同术语。
- 活动参与态度:作者澄清并非永不参加任何计算机历史活动,但由于VCF East曾是最易参与的活动,且出席曾被视为一种背书,现在其参与可能性已极低。
- 个人反思与结语:作者表示此事虽引发愤怒,但已视为生活教训。公开声明是为了结束内心纠结,同时未来在资料移交等合作中将采取更谨慎的策略。整体而言,此事件仅为个人工作中的一个次要插曲,作者已从中吸取经验并向前看。
9. Identical twins both grew up with autism, but took different paths (www.npr.org)
一对同卵双胞胎Sam和John Fetters,虽共享几乎完全相同的基因组,却在自闭症谱系上表现出截然不同的轨迹,这引发了科学界对自闭症成因的深入探讨。
基本背景 19岁的Sam就读于阿默斯特学院,计划攻读历史和政治学双学位,并热衷于跑马拉松。他的双胞胎兄弟John则在一所特殊学校就读,在语言表达和社交沟通上存在显著困难,日常生活需要更多支持。
早期发展与干预 两兄弟在幼年时期表现极为相似,均未出现挥手、回应名字等行为,并有大量重复动作。两岁时均无语言能力。母亲Kim Leaird让他们参加早期干预学前班。干预对Sam效果显著,他迅速开始说话并持续发展;而John则进展缓慢,直到4岁才开始使用词汇。随着年龄增长,两人在兴趣和发展路径上的差异逐渐明朗。
科学研究的启示 这对双胞胎参与了一项同卵双胞胎自闭症研究。历史上,双胞胎研究帮助推翻了自闭症由“冷漠的育儿方式”导致的错误理论,确立了其遗传基础。然而,2019年一项涉及366对同卵双胞胎的研究发现:若一个双胞胎患有自闭症,另一个患病的概率高达90%,但症状的严重程度却可能天差地别。这表明,除遗传因素外,受孕后发生的事件——如胎儿细胞分裂中的基因突变、基因表达的开关变化,或妊娠期及生命最初几个月的独特经历(如感染)——可能对自闭症的表现程度产生重大影响。
可能的差异因素 两兄弟幼年时均因解剖异常需要手术。Sam的疝气手术可择期进行;而John在婴儿期因心脏上的孔洞需立即手术,术后感染了耐药性葡萄球菌,在静脉注射抗生素一个月后才康复。其母亲后来思考,这次感染及其幼年经历可能与John自闭症症状的严重程度有关。
兄弟间的特殊纽带 尽管存在巨大差异,这对双胞胎之间有着深厚的情感联结和相互理解。John表现出极强的共情能力,常在Sam与母亲争执时给予安慰。Sam长期扮演着弟弟的“翻译者”和保护者角色。例如,在小学时,当John因情绪崩溃发出噪音时,Sam会立即跑过去帮助和安抚他。如今Sam在大学就读,他仍担心弟弟因有限的言语和特殊行为可能受到欺凌,并希望自己能继续代替弟弟表达他的想法。
Sam认为,自闭症让他们都以独特的方式感知世界。尽管为弟弟无法像自己一样流利说话而感到不公,但他肯定John内心充满创造力。这对基因相同但境遇迥异的兄弟的故事,生动展现了自闭症的复杂性,以及基因、早期经历与家庭支持之间错综复杂的相互作用。
10. Old CSS, new CSS (2020) (eev.ee)
11. I accidentally built a meme search engine (harper.blog)
项目概述
作者出于学习和探索的目的,构建了一个基于向量嵌入技术的梗图/图片搜索引擎。该项目使用CLIP/SigLIP模型将图像和文本转换为数值向量,并利用向量数据库实现相似性搜索,最终创建了一个可通过Web界面交互的本地化应用。
核心技术栈
- 图像与文本编码:使用OpenAI的CLIP或其开源版本OpenCLIP(也尝试了SigLIP)将图像和文本转换为高维向量嵌入。作者优化了在Mac上的运行效率,利用了Apple的MLX框架,创建了易于使用的本地封装库
mlx_clip。 - 向量存储与检索:采用了轻量级、易部署的ChromaDB作为向量数据库,用于存储和高效检索图像向量。
- 爬虫与数据处理:构建了一个具备容错和断点续传能力的Python爬虫,用于遍历图片目录,提取元数据,并使用编码模型生成向量,最终存入SQLite和ChromaDB。
- 前端界面:使用Flask作为后端Web框架,Tailwind CSS构建简单的前端界面,实现图片上传和相似图片展示。
构建过程与关键步骤
- 数据源准备:最初使用作者私人梗图聊天群组的图片(约1.2万张)作为测试数据集,后扩展至约14万张个人Google Photos照片库。
- 爬虫流程:
- 扫描目标目录,将文件列表存入
msgpack文件以确保进程可中断、可恢复。 - 将图片元数据(哈希、大小、路径)存入SQLite数据库。
- 遍历数据库,使用CLIP模型为每张图片生成向量编码。
- 将向量及图片路径批量存入ChromaDB向量数据库。
- 扫描目标目录,将文件列表存入
- 模型推理优化:为实现在本地Mac上高效运行,作者将Apple MLX示例脚本改造为
mlx_clipPython类,使得在Apple Silicon芯片上运行CLIP模型的速度甚至超越了外部GPU服务器。 - 功能实现:
- 以图搜图:上传或选择一张图片,查询其向量在ChromaDB中的最近邻,返回相似图片。
- 文本搜图:将搜索文本(如“money”、“AI”)通过CLIP编码为向量,查询与之在语义上最相似的图片。作者认为这种多模态搜索能力是项目中“魔法般”的亮点。
应用效果与发现
- 在梗图库和照片库上的测试均取得了出色效果,能够根据视觉和语义相似性找到相关图片。
- 成功用于检索特定主题(如“富士山”、“博克效果”、“低底盘汽车”)、情绪(如“惊讶”)或难以用关键词描述的图像内容。
- 作者的朋友Ivan利用该工具,通过从Lightroom预览文件中提取缩略图,成功恢复并搜索了其个人照片库。
项目产出与资源
- 项目代码已开源:harperreed/photo-similarity-search。
- 配套工具:用于从Lightroom预览文件提取JPEG的脚本LR Preview JPEG Extractor。
- 封装库:mlx_clip,简化在Apple Silicon上使用CLIP模型的过程。
作者观点与展望
- 作者惊叹于向量嵌入和多模态搜索技术带来的“魔法”般体验,并认为此类功能将很快成为照片管理应用的标配。
- 强调了该技术方案在本地化、低成本(免费开源)和易用性方面的优势。
- 作者向社区发出挑战,希望有人能开发一个本地化的Mac原生应用,集成自动标注、关键词生成、向量搜索等功能,以智能管理和重新发现个人照片库。
12. Show HN: Mazelit - My wife and I released our first game
这篇文章是开发者社区 Hacker News 上关于独立游戏《Mazelit》的讨论。游戏由一对奥地利夫妇开发,是他们发布的第一款游戏。
核心信息:
- 游戏概况:《Mazelit》是一款基于上帝视角的迷宫生存游戏,风格类似现代版的《吃豆人》或《贪吃蛇》的变体。玩家需要收集能量并躲避敌人,拥有可升级的超能力。游戏使用 Godot 引擎开发,耗时约一年。
- 发布与定价:游戏在 Steam 上以 3 美元(或区域等价物)的低价发布。开发者选择此价格是基于约 4 小时的通关时长(约 1 美元/小时),旨在让经济能力有限的玩家也能购买。此外,他们提供了额外的源代码 DLC,允许玩家在支付更多费用后查看游戏代码。
- 开发经验与技术栈:
- 开发者使用 Godot 引擎(主要是 GDScript),认为它适合小型游戏,但面临一些挑战,如场景数据丢失、与 Git 的冲突处理不佳,以及编辑器中处理大量节点时性能低下。
- 他们基于 spaCy 使用了自然语言处理技术来生成迷宫布局,并计划未来用 Rust 编写自定义的 NLP 库。他们还发表过一篇相关的学术论文。
- 社区反馈与讨论:
- 定价争议:有用户认为 3 美元定价过低,会让人对游戏质量产生怀疑,建议提高到 9.99 美元左右。但开发者及其他用户指出,低价更容易促成冲动购买,且考虑到不同地区的购买力,低价更显包容。也有人指出 Steam 平台支持按地区调价,且促销活动通常依赖于原价。
- 平台支持:游戏目前支持 Windows、Linux 和 Steam Deck,但不支持 macOS。开发者解释因为没有 Mac 设备进行测试,且数据显示 Mac 用户在 Steam 上占比很小(约 1.38%),开发成本可能无法收回。有 Mac 用户购买后遇到下载源代码 DLC 的问题,开发者正与 Steam 沟通寻求解决方案。
- 源代码作为 DLC:这种做法受到部分社区用户的称赞,认为它像 90 年代的分享软件模式,有利于学习。开发者强调其代码受版权保护,不允许未经许可重新发布整个游戏。
- 其他:讨论中也出现了关于欧盟 GDPR 隐私法规与 Cookie 横幅要求的争论,以及对 GitHub 归属微软后的评价,这些与游戏本身关系不大。
总结:这是一对独立开发者夫妻的首次游戏发布分享,核心围绕其创新的定价策略(低价+源代码 DLC)、使用 Godot 引擎的开发心得,以及由此引发的关于游戏定价心理学、跨平台支持可行性和软件分发模式的社区广泛讨论。
13. Show HN: Using Google Sheets as the back end/APIs of your app (www.zerosheets.com)
Zero Sheets 概述
Zero Sheets 是一个工具,旨在将 Google Sheets 电子表格转换为功能强大的 API,从而支持快速开发原型、网站、应用等。
核心功能
- API 生成:将 Google Sheets 表格直接转化为可用的 API 端点。
- 加速开发:简化后端搭建过程,提高项目开发速度。
- 应用广泛:适用于原型设计、网站开发、移动应用构建等多种场景。
使用场景
通过 Zero Sheets,用户可以利用 Google Sheets 管理数据,并通过 API 集成到前端应用中,降低开发门槛和时间成本。
14. Ubisoft is stripping people's licences for The Crew weeks after its shutdown (www.pcgamer.com)
育碧在《飙酷车神》停服后撤销玩家许可证事件总结
事件核心
育碧在2024年4月关闭《飙酷车神》服务器后,进一步撤销了通过Ubisoft Connect购买该游戏的玩家许可证。玩家发现游戏库中显示“您已无法访问此游戏”,游戏被归类至“非活跃”区域。若从安装目录直接启动,游戏将进入限制性的演示模式。
玩家与社区反应
- 强烈不满:玩家在Reddit等平台批评此举为“游戏史上最无情的决定”,呼吁立法保障数字购买产品的终身访问权。
- 质疑动机:玩家认为服务器关闭后,保留下载权限对育碧无实质损害,撤销许可缺乏合理理由。
- 数字所有权问题:事件凸显了数字产品的脆弱性——用户实际上并不拥有购买的内容,厂商可单方面收回许可。
粉丝社区行动
- “飙酷车神无限”项目:一个粉丝团队正在开发离线/在线服务器模拟器,旨在通过社区服务器复活游戏。他们在停服前已捕获网络通信数据,为模拟器提供基础。
- 技术挑战:尽管许可证被撤销,项目团队表示能绕过限制,但育碧的强力数字版权管理(DRM)阻碍了更多修复工作。
- 呼吁游戏保存:项目成员支持“停止扼杀游戏”运动,要求厂商在停止支持后确保游戏可玩性。
背景与更广泛讨论
- 游戏保存危机:研究显示约87%的游戏因服务器关闭等原因变得无法游玩,物理媒介衰落加剧了这一问题。
- 法律与行业关注:“停止扼杀游戏”运动以《飙酷车神》为例,推动立法要求发行商在停止服务后以某种形式(如发布私人服务器工具)保持游戏可运行。
- 可能的许可限制:育碧撤销许可可能与游戏内授权音乐、汽车品牌等版权协议有关,彻底移除文件可避免法律风险。
影响与意义
该事件成为数字时代所有权争议的标志性案例,引发对游戏发行商责任、玩家权益及数字文化遗产保存的持续讨论。
15. Ray Tracer in a Boot Sector (github.com)
这篇文章介绍了作者 Oscar Toledo G. 将一个光线追踪程序移植到仅有483字节的引导扇区中的项目。该程序最初基于 D. Scott Williamson 在 Atari 8-bit BASIC 上实现的版本,而后者又源于更早的 BBC Micro 版本。
主要要点:
- 项目本质: 这是一个极度精简的光线追踪器,被压缩到仅 483 字节的引导扇区(boot sector)大小。
- 技术挑战与优化: 作者通过将重复计算重构为子程序、调整常量、合并代码等方式大幅缩减体积。他还利用了 VGA 调色板来节省空间。
- 运行要求: 在真实硬件上运行至少需要 Pentium Pro 处理器。现代模拟器通常可以运行。
- 性能与实时性: 现代计算机运行速度很快,因此在虚拟机(如 VirtualBox 中的 Windows XP)中运行时,该光线追踪动画近乎实时。
- 构建与使用:
- 使用 Netwide Assembler (NASM) 汇编源代码。
- 可生成两种格式:COM 文件(
ray.com)或引导扇区镜像(ray.img)。 - 文章提供了在 VirtualBox、QEMU(推荐使用 KVM 或 Hyper-V 加速)以及 DOSBox-X 等环境中运行的指导。
- 致谢与资源: 感谢了帮助精简代码(节省23字节)、贡献GIF动图和提供QEMU加速建议的参与者。作者还推荐了其关于 8086/8088 汇编语言和引导扇区游戏编程的书籍。
16. The Arc Product-Market Fit Framework (www.sequoiacap.com)
Arc产品市场契合框架(Product-Market Fit Framework)旨在帮助初创公司定位产品在市场中的角色,并根据客户的需求与问题选择运营策略。该框架不只是判断是否达成产品市场匹配,而是定义三种产品市场契合的原型(Archetypes),以指导企业运营决策:
- 三种产品市场契合原型
Hair on Fire(燃眉之急型)
解决客户迫切、明确需求的问题,市场需求显著,竞争激烈。客户主动寻找解决方案,对比市面产品。成功关键在于提供真正差异化、卓越的客户体验,不仅仅是更快或更便宜,更是独特。典型案例:- Wiz在云安全拥挤市场通过“无代理”方式,快速突出竞争,18个月内达到1亿美元ARR。
- Rippling进入HR软件红海市场,凭借数据库统一、覆盖员工体验,快速获得市场份额和定价权。
Hard Fact(现实困境型)
针对客户普遍接受的“无法改变”的现状,通过产品重新定义问题,并提供解决方案。客户通常已习惯现有流程,不主动寻求改变。需要通过教育市场,促使客户认识到有新方式值得改变。成功关键在于问题重要、解决办法新颖。典型案例:- Square把智能手机变为移动刷卡终端,打破“只能收现金”的困境,激发客户采用新方案。
- HubSpot用“入站营销”理念教育市场,替代高成本传统营销,推动小企业采用互联网营销工具。
Future Vision(未来愿景型)
通过前瞻创新,创造新现实。客户对该类产品要么无感要么觉得不可实现,主要障碍是客户的怀疑。需建立“新范式”,创造全新生态,让客户不可抗拒。路径漫长,需在转型过程中找到商业落点。典型案例:- Nvidia早期GPU产品领先时代,六年后在游戏领域找到市场,后转型为AI计算核心。
- OpenAI以实现AGI为愿景,从非盈利到盈利模式转变,凭借ChatGPT找到商业“中转站”,支持长期目标。
- 各路径的运营重点
- Hair on Fire:需快速迭代产品及市场策略,结合产品优势和销售速度,领先竞争对手,重点在于产品差异化和市场扩张。
- Hard Fact:以教育市场为核心,促使客户重新审视现状并接受新方案,往往面临较少竞争,需克服客户惯性并建立新标准。
- Future Vision:耐心和坚持最重要,需吸引和保留顶尖人才,同时在愿景实现路上找到商业阶段性“落脚点”,应对高风险和不确定性。
- 案例分析与路径演变
- 公司可能随着产品线调整或客户态度变化,跨越不同路径。例如,苹果公司最初是未来愿景,后来变为现实困境,再到燃眉之急,通过一系列产品创新持续实现产品市场契合。
- 框架应用与实践
- 创业公司可根据客户与问题的关系,确定自身路径和运营优先级。如需速度与规模、教育市场、或规划中转站。
- 产品市场关系是动态的,企业可随市场环境及产品创新不断切换或叠加多个路径。
- 成功企业通常将多个产品线串联,在不同路径之间演变,持续扩展产品市场契合。
此框架为创业团队提供思考产品定位、客户关系及运营策略的结构化视角,强调持续不断的产品市场契合追求。
17. Research into why some people have a better sense of direction (knowablemagazine.org)
18. A disgruntled federal employee's 1980s desk calendar (2018) (internationaltimes.it)
文章概述
本文介绍了1980年代一位不满的联邦雇员使用政府发放的桌历,通过每日添加精心设计的文字和绘画,记录了十年的个人情感与历史事件。这份桌历现被视作非传统的“照明手稿”,在罕见书籍市场上出售。
关键细节
- 发现背景:在罕见书籍贸易中,一份非中世纪的“照明手稿”引起关注,实为一名联邦雇员在1980年代使用的桌历。
- 作者身份:匿名员工是美国陆军联合作战中心的中层分析员(GS-11/GS-12),工作地点在堪萨斯州利文沃思堡。
- 桌历演变:政府发放的桌历时,他历时九年,每日添加精心制作的信件和绘画,将其转变为详细的十年编年史。
- 内容主题:
- 对政府高级官员的愤怒表达。
- 堪萨斯大学篮球队胜利带来的欢乐时刻。
- 记录重大事件,如伊朗人质危机结束、挑战者号灾难、冷战紧张局势变化。
- 温柔回忆,如朋友纪念或特殊夜晚。
- 涉及波兰骚乱、中国示威等全球事件,反映民众对政府压制的反抗。
- 精神意义:匿名员工在“深层国家”中找到秘密表达方式,创造了不被上级批准的个人宝藏,体现了不可抑制的创造精神。
- 当前状态:整套桌历正在波士顿罕见地图商店出售,标价5500美元。
- 来源:由Ted Widmer撰写,发表于《巴黎评论》。
19. Ford's battery flagship socked by mold sickness, workers say (labornotes.org)
文章摘要
福特汽车与韩国SK On公司在肯塔基州格伦代尔建设的BlueOval电池工厂是拜登政府《通胀削减法案》下的旗舰项目,旨在为电动汽车生产电池,获得高达92亿美元的联邦低息贷款和2.5亿美元的州政府贷款。然而,该项目自2022年开工以来,建筑工人指控现场存在严重的霉菌问题和健康危机。
核心问题:
- 霉菌暴露与疾病:工人们报告,从海外运抵的大型木质设备箱上出现黑色霉斑并散发强烈气味。在2023年秋季关闭厂房大门以应对寒冷天气后,通风情况恶化,工人开始出现反复的呼吸道疾病,症状包括呼吸困难、咳出异物等。部分工人自费进行的霉菌检测呈阳性。
- 管理层应对迟缓:尽管工人早在秋季就提出担忧,但总承包商阿贝尔(Abel)和分包商莱斯科(Lesco)持续将木箱运入室内并拆解,延误了基本防护措施。2023年12月进行的环境检测报告证实木箱内存在七种霉菌,其中三种浓度“高”,并建议“不要放入室内”,但直至2024年2月媒体曝光后,管理层才开始分发防护装备并承诺将拆箱工作移至室外。
- 健康与安全顾虑:除了霉菌,工人此前还就卫生设施匮乏、建筑结构安全性等提出过投诉。由于工期紧张,工人被迫每周工作7天,每天12小时,且远离家乡,难以获得医疗。工人们担忧霉菌可能通过衣物带给家人。
- 监管与工会角色:联邦职业安全与健康管理局(OSHA)没有针对霉菌的具体标准。肯塔基州自行管理职业安全,但被批评执法宽松、倾向企业。州劳工部门已就此事展开调查。工会方面,现场工会代表帮助反映了问题,但有工人称地方和国际工会官员轻视其关切。
背景与影响:
- 该项目是联邦政府自2009年金融危机以来对汽车制造商提供的最大一笔财政支持,也是肯塔基州历史上最大的经济发展交易。
- 公共补贴鼓励使用工会劳动力,但未强制要求,福特也未承诺将未来工厂制造工人纳入其与全美汽车工人联合会的总合同。
- 事件凸显了在推动绿色能源转型和建设新工厂的狂热中,传统职业健康风险可能被忽视,引发对“生产压倒一切”和工人权益的担忧。
- 部分工人因健康问题已自愿离岗,预计项目在2024年3月可能因霉菌清理而部分停工。
20. "Strong focus on aesthetics" contributed to collapse of Norway timber bridge (www.dezeen.com)
21. Swift for C++ Practitioners, Part 1: Intro and Value Types (www.douggregor.net)
本文是专门为C++开发者编写的Swift入门系列文章的第一篇,旨在通过对比两种语言的特性和设计哲学,帮助C++程序员快速、正确地理解Swift。核心观点是:虽然两者语法相似,但底层理念有显著差异,直接套用C++模式可能导致问题。
1. 值类型是Swift的基石
- 与C++的相似性:Swift拥有强大的值类型支持,如
String、Array、Dictionary,这与C++的std::string、std::vector、std::map对应。复制这些类型会产生完全独立的副本,支持局部推理(即能孤立地理解代码行为)。 - 结构体是值类型:在Swift中,
struct用于聚合数据并始终是值类型(栈上分配),这与C++中struct和class仅有默认访问权限的差异截然不同。Swift的class才是引用语义类型。 - 明确的初始化规则:Swift统一使用初始化器(类似构造函数)来创建实例,并强制执行确定性初始化:所有存储属性必须在读取前通过所有执行路径完成初始化。这消除了C++中未初始化变量的未定义行为。
- 没有隐式拷贝构造函数:Swift的结构体始终遵循“零规则”,拷贝、移动和销毁操作由编译器隐式管理,无法自定义。这简化了设计并允许编译器进行优化。
2. 不可变性是核心理念
let与var:let声明不可变变量(强于C++的const),var声明可变变量。Swift鼓励尽可能使用let以增强代码的可靠性和可读性。- 参数和方法:默认情况下,函数参数和
self都是不可变的。要修改它们,需要显式使用mutating方法或inout参数(通过&传递)。 - 无别名的
inout:Swift的排他性法则确保inout参数不会发生别名。编译器会进行静态检查(对局部变量)或动态检查(对全局变量/类属性),彻底杜绝了C++中因意外别名导致的复杂赋值运算符问题。
3. 枚举是功能强大的类型安全联合
- 超越C++枚举:Swift的
enum可以携带关联值(成为有标签的联合体),本质上整合了C++的enum、union和std::variant的功能,但更安全、更简洁。 - 消除样板代码:使用
enum可以轻松实现C++中需要大量样板代码才能构建的类型安全联合体。 - 模式匹配与穷举检查:配合
switch语句时,Swift强制要求穷尽性检查,并通过模式匹配安全地提取关联值,避免了C++中的运行时类型判断和断言。
4. 其他重要特性
- 标签参数与默认值:函数调用时强制使用标签参数(如
x:、label:),结合默认值能极大地提升代码的可读性。 - 标准集合是值类型:
Array、Dictionary、Set等在存储值类型元素时,本身也表现为值类型。 - 协议(Protocols)类似C++概念:Swift通过协议(如
Equatable、Hashable)来约束类型行为,编译器可以自动合成符合协议的方法,这比C++的概念更早引入且更易用。 - 内存安全:通过排他性法则和严格的初始化检查,Swift在语言层面保证了内存安全,消除了C++中的一整类未定义行为。
总结:对于C++开发者,学习Swift的关键在于拥抱其值语义、不可变性以及更严格的编译时和运行时安全检查。虽然初期可能会感到一些限制(如无法控制传递方式、无默认构造函数),但这些设计共同提升了代码的可靠性、可读性和可维护性。下一篇将介绍引用类型(类)和面向对象编程。
22. Shape typing in Python (jameshfisher.com)
Python 中的形状类型
Python 近来引入了高级静态类型功能,能够更精确地描述数据形状和类型。例如,在矩阵乘法操作中,可以同时指定输入张量的形状和输出张量的形状。
具体实现中,使用 NumPy 的 np.ndarray 类型,它接受两个参数来定义形状和数据类型(dtype)。例如,一个包含整数的 2×3 矩阵可描述为 np.ndarray[Tuple[2, 3], int]。
然而,当前 NumPy 的大部分 API 尚未应用这些类型参数。像 np.array(...) 这样的函数通常返回类型为 np.ndarray[Any, Any] 的对象,缺乏形状和 dtype 的具体信息。因此,开发者需要自行构建类型安全的包装器来弥补这一不足。
23. Htmx and the Rule of Least Power (blog.gypsydave5.com)
Htmx 与最小能力原则
核心原则
最小能力原则 建议:为特定目的选择能力最弱的合适编程语言。该原则由蒂姆·伯纳斯-李(Tim Berners-Lee)在W3C文章中阐述。他认为,像HTML、CSS和语义网这类技术正是因为有意被设计得“能力有限”,才使得文档更灵活、易于被多种软件分析、重用和以各种方式呈现。
对当前前端框架的批评
作者认为,React等前端框架鼓励开发者几乎完全依赖前端技术栈中最强大的部分——JavaScript。这导致HTML和CSS的作用被削弱,所有逻辑都涌入JavaScript,违背了最小能力原则。
作者将HTML、CSS与JavaScript的能力差异比作:
- 刀具:黄油刀、奶酪刀 → 光剑
- 武器:木棍、石头 → 氢弹
- 书籍:《晚安,月亮》、《小玻》 → 《尤利西斯》
这种能力上的巨大“跃升”导致一个常见困境:为了实现相对简单的功能(如加载HTML、显示加载动画、发送DELETE请求),开发者不得不动用功能过于强大、远超实际需求的JavaScript。
Htmx 的解决方案
Htmx 的出现旨在解决这一问题。它作为一种中等能力的工具,被插入到技术栈中,位于HTML/CSS与JavaScript之间。
其关键特性在于:
- 扩展HTML而非JavaScript:它通过向HTML添加新属性来扩展其功能,而不是嵌入一个强大的JavaScript框架。
- 避免不必要地使用JavaScript:对于点击编辑、懒加载、无限滚动、实时搜索等常见交互,开发者可以使用HTMX,通过编写HTML属性来实现,而无需编写JavaScript代码。
- 遵循最小能力原则:它提供了一个能力略高于原生HTML、但远低于JavaScript的工具,帮助开发者避免在简单任务中动用“JavaScript大炮”。
结论
Htmx通过在技术栈中引入一个中等能力的工具,允许开发者用接近原生HTML的方式完成大部分现代Web开发任务,从而不必总是求助于能力过强的JavaScript。这使得前端开发者能够更好地遵循最小能力原则,在完成所需功能的同时,选择更合适、能力更弱的工具。
24. Show HN: CTRL-F for YouTube Videos (github.com)
YouTube视频字幕搜索工具(CTRL-F)
核心功能
这是一个通过音频转文字实现在YouTube视频中搜索特定单词/短语的工具,功能类似于文本编辑器中的"Ctrl+F"。
技术实现
- 使用OpenAI的Whisper模型进行音频转文字,底层采用faster-whisper以提高处理速度
- 本地运行Flask API服务,利用GPU加速模型推理
- 将搜索结果存储为JSON格式,便于对同一URL进行后续快速搜索
- 提供发音相似性匹配选项(但实际效果有限)
使用方法
- 将文件夹作为Chrome扩展加载(使用开发者模式的"加载已解压的扩展程序")
- 在Python文件夹中运行
python app.py启动本地API服务 - 访问YouTube视频页面,点击扩展图标
- 输入要搜索的单词/短语/子词,点击"标记视频"按钮
搜索结果标记
- 绿色标记:直接匹配结果
- 紫色标记:基于Levenshtein距离/音素距离的相似结果(准确性有限)
- 橙色标记:发音完全相同的匹配(偶尔准确)
- "显示全部":同时显示绿色和紫色标记
- "移除标记":清除时间轴上的所有标记(有时标记会残留到其他页面)
性能表现
- RTX 3090 GPU处理5分钟视频约需16秒
- 首次搜索时如果离开页面,时间轴可能不会立即显示标记(重新搜索即可使用缓存结果)
当前限制
- 目前仅支持YouTube平台
- 首次搜索需要本地模型运行,后续相同URL搜索可使用缓存
- 发音相似性匹配功能实用性有限,因Whisper模型本身已相当准确
项目说明
开发者表示这是一个小型副项目,欢迎他人使用和修改代码。项目重点在于利用Whisper模型实现高效准确的语音转文字搜索,虽然前期版本需要更多相似度搜索优化,但现有Whisper模型已大幅提升准确性。
25. How to Determine the Error of an Air Quality Sensor? (www.airgradient.com)
空气质量传感器误差确定方法摘要
平均误差概念
平均误差用于描述传感器测量值与真实值(参考测量值)之间的偏差,是评估传感器准确性的关键指标。误差越低,传感器性能越好。常用参数包括平均绝对误差(MAE)和均方根误差(RMSE)。
平均绝对误差(MAE)
MAE是传感器测量值与真实值之间绝对差值的平均值。其计算公式为:MAE = (1/n) * Σ|c_sens - c_ref|,其中c_sens为传感器测量浓度,c_ref为参考测量浓度,n为测量次数。使用绝对值可确保差值始终为正,避免因正负抵消导致误差被低估。例如,若传感器测量值有时高于或低于真实值,直接平均差值可能很小(如0.2 µg/m³),但MAE更能反映实际误差(如9 µg/m³)。
均方根误差(RMSE)
RMSE通过平方误差、平均后取平方根得到:RMSE = √[ (1/n) * Σ(c_sens - c_ref)^2 ]。与MAE类似,RMSE提供传感器的平均误差信息,但平方操作使其对异常值更敏感。当存在异常值时,RMSE通常大于MAE;若无异常值,两者相近。因此,RMSE是更严格的评估标准,常用于传感器性能表征,如美国环境保护署(US EPA)指南推荐。
归一化均方根误差(nRMSE)
nRMSE用于比较不同污染水平环境下传感器的性能,计算公式为nRMSE = (RMSE / 真实测量平均值) * 100%。通过归一化,nRMSE表示相对误差百分比,适用于PM2.5等污染物传感器,但对温度、湿度传感器实用性较低。例如,在低污染环境中,RMSE为7 µg/m³可能导致nRMSE高达66%,而在高污染环境中nRMSE仅6%,从而更准确反映相对准确性。
可接受误差标准
根据US EPA测试指南,对于PM2.5传感器,24小时平均数据的误差目标为RMSE ≤ 7 µg/m³或nRMSE ≤ 30%(满足任一即可)。所有测量方法,包括参考级仪器,均存在不确定性;例如,参考仪器间在特定浓度范围内差异可能超过25%。低成本传感器虽准确性略低,但具有尺寸小、易设置、成本低等优势。
总结要点
- MAE、RMSE和nRMSE均量化传感器的平均误差,值越接近0表示性能越好。
- RMSE对异常值更敏感,是更严格的指标。
- nRMSE适用于跨环境性能比较,US EPA推荐使用RMSE和nRMSE表征误差。
- 可接受误差标准基于应用需求,参考仪器也有固有不确定性。
26. Green's Dictionary of Slang (greensdictofslang.com)
Green's Dictionary of Slang 是一部历史性的英语俚语词典,涵盖了五百年的英语俚语。
该词典被《英语语言与语言学杂志》誉为“有史以来最好的英语俚语历史字典”。
此外,它提供高级搜索功能,方便用户进行检索。
27. Defeated CEOs are now conceding hybrid working is here to stay (fortune.com)
根据KPMG对营收超5亿美元的美国CEO的调查,CEO们对混合办公的态度已发生根本性转变,承认其将成为常态。
- 态度转变:仅三分之一的CEO预期员工会在未来三年内全面返回办公室,而去年持此观点的CEO占62%。近半数CEO现在认为工作的未来是混合模式,较去年(34%)大幅增加。甚至有三分之一的CEO正在探索每周四天工作制的可行性。
- 转变原因:强制性重返办公室命令遭遇了员工的强烈抵制和广泛阻力。
- 实例:德意志银行限制居家办公的决定引发员工内部批评;亚马逊约3万名员工联署抗议强制到岗规定,超1800人誓言罢工。
- 数据:研究表明,执行返岗命令的公司中,近半数遭遇了高于预期的员工流失率,29%在招聘上遇到困难。
- 未来影响:业内人士指出,CEO们已意识到不能长期强求员工回归办公室。随着Z世代进入职场,坚持到岗要求将影响公司对人才的吸引力。招聘市场已出现转变,近六个月全球范围内要求每周五天到岗的职位搜索需求已消失,混合办公模式作为吸引和留住顶尖人才的关键因素已逐渐固化。
28. The One Billion Row Challenge in CUDA (tspeterkim.github.io)
文章标题:The One Billion Row Challenge in CUDA
文章总结:
作者在学习CUDA过程中,尝试用CUDA解决“十亿行挑战”。该挑战要求处理包含十亿行的测量数据文件,计算每个气象站的最小、最大和平均温度。作者在V100 GPU上实现了16.8秒的解决方案(纯C++基准为16.5分钟),并详细阐述了实现过程与技术难点。
1. 基准实现与目标
作者首先用纯C++建立了基准:逐行读取文件,解析城市和温度,使用STL map累积统计。运行时间为16.5分钟。CUDA实现的目标是大幅超越此基准。
2. 工作分区策略
- 避免一亿线程:直接为每行分配一个线程需预先准备行缓冲区,复制基准工作量,不现实。
- 使用字节偏移:将文件按总大小分割为若干部分(作者使用100万部分),通过迭代寻找换行符边界,快速确定每个CUDA线程负责的文件块。此步骤耗时2.6秒。
3. CUDA内核实现挑战
每个线程解析其负责的文件块,更新城市温度统计。主要挑战包括:
- 浮点原子操作:CUDA内置原子操作仅支持整数。作者通过
atomicCAS实现了自定义的atomicMin和atomicMax(浮点版)。 - 字符串处理:CUDA无
std::string。作者自行实现了字符数组解析、字符串转浮点(cuda_atof)和字符串比较(cuda_strcmp)。 - 城市查找表:CUDA无
std::map。作者利用已知的所有城市列表(用于生成数据),将其排序后传递给内核,通过二分查找实现O(log n)的城市索引定位,替代哈希表。
4. 核心操作
内核最终对每个解析出的城市和温度执行:
- 二分查找获取城市索引。
- 字符串转浮点。
- 原子更新对应城市统计的最小值、最大值、总和(用于均值)及计数。
5. 性能分析与优化思考
- 在V100上运行16.8秒,比C++基准快约60倍。
- 性能分析显示T4比V100慢约1.5倍,且平均分歧分支数更高,原因待研究。
- 作者指出统计结构(16字节/城市,总约66KB)可放入共享内存,通过块内私有副本减少原子操作竞争,可能进一步优化。
6. 结论与反思
- 挑战表明CUDA并非所有并行工作负载的理想选择,特别是涉及字符串和动态哈希表时。
- 作者通过静态查找表(已知城市列表)解决了CUDA在动态数据结构上的局限。
- 尽管存在限制,此次实践让作者深入了解了CUDA的特性与边界。
文章最后附有Hacker News讨论链接和完整代码仓库。