2024-11-18

38 篇热帖

2. I was banned from the hCaptcha accessibility account for not being blind (2023) (michaels.world)

文章摘要:因“非盲人”被hCaptcha无障碍账户封禁(2023)

核心事件

作者Michael是一名盲人用户,依赖hCaptcha提供的无障碍账户绕过其图像验证码。该账户通过设置特定Cookie,允许用户免去视觉挑战。然而,作者在使用Brave浏览器时,Cookie始终无法正常设置。

问题经过

  1. 技术排查:作者尝试所有常规步骤后,向hCaptcha支持发送邮件。在调试过程中,他提到浏览器控制台显示设置Cookie的API端点返回401未授权错误。
  2. 账户封禁:在沟通期间,另一名支持人员突然回复,声明非盲人不得使用无障碍账户,并宣布封禁该账户,禁止重新注册。尽管作者反复澄清自己确实是盲人,但账户仍被永久封禁。
  3. 讽刺结局:由于被合法渠道拒之门外,作者只能违反服务条款,使用自动化程序解决验证码。

作者核心警告

  1. 信任风险:公司若故意使其产品存在无障碍障碍,则依赖其提供的“变通方案”(如无障碍账户)极不可靠。这本质上是将可访问性建立在不稳定、可随时撤销的例外之上。
  2. 根本矛盾:此类设计将残障用户的需求与公司的技术决策(如为防机器人而放弃音频验证码)捆绑,使无障碍访问成为一种可被随意剥夺的特权。
  3. 呼吁行动:作者建议用户和网站管理员警惕此类模式,并分享此经历,促使相关方(如曾使用hCaptcha的Cloudflare)反思并选择更包容的验证方案。

现状补充

作者在文末更新指出,hCaptcha现已推出文本验证码选项,这可能是对此类问题的改进,但文章所述的根本性信任危机与设计哲学问题仍然存在。


总结:本文通过一个具体的封禁案例,揭示了依赖有缺陷的无障碍“后门”方案的风险,批判了hCaptcha在无障碍设计上的根本矛盾,并呼吁重视真正包容的数字产品设计。

3. Reactive HTML Notebooks (maxbo.me)

Reactive HTML Notebooks 概述

本文探讨了将 HTML 作为科学出版全流程平台的潜力,旨在整合数据探索、分析可视化、排版和分发三个阶段,避免在 Jupyter、LaTeX 等多个工具间切换的繁琐过程。

核心思想与动机

作者认为,当前科学工作流程通常依赖多个工具:使用 Jupyter、RStudio 等进行数据分析和可视化,再用 Typst、LaTeX 等排版,最后导出 PDF。而一个 HTML 文件可以完成所有这些阶段,减少手动操作、CLI 工具和第三方平台的依赖。HTML 的排版能力已被广泛认知,但其作为交互式数据平台的潜力尚未充分发掘。

技术实现:Reactive Cell 系统

文章通过构建一个 反应式单元格系统 来演示 HTML 的能力。关键特性包括:

  • 可编辑脚本单元格:HTML 中的 <script> 元素可设置为 contenteditable,失去焦点时自动重新执行。使用克隆脚本而非 eval,以支持 import 语句。
  • 依赖跟踪与更新:单元格通过 ID 标识,可声明依赖关系。当某个单元格(如 counter)的值变化时,依赖它的其他单元格会自动更新。
  • 输出隐藏与类型:可以通过不添加 echo 类来隐藏单元格定义,仅显示输出;单元格还可完全隐藏输出,用于存储中间值。
  • 无序声明:单元格的声明顺序不影响依赖解析。

功能演示

  • 数据可视化:集成 Observable Plot,基于单元格值动态生成图表。
  • 多语言支持:通过 Pyodide 运行 Python(含 NumPy、Pandas、Matplotlib 等),通过 WebR 支持 R 语言,实现浏览器内计算和绘图。
  • 富内容输出:单元格可返回 DOM 元素,支持 TeX、Markdown、Graphviz(生成 SVG)等多种格式。
  • 状态管理
    • 单元格状态:返回 Promise 显示“运行中”样式,抛出 Error 显示错误样式。
    • 输入组件:通过 viewof 单元格类型集成 Observable Inputs,实现输入控件的反应式绑定。
    • 可变状态:引入 mutable 函数创建可变状态,支持生成器模式,在函数式数据流中实现必要的状态变更。

库发布与演示

作者已将相关功能封装为库 @celine/celine,提供更友好的 API。此外,文章展示了如何将同一份 HTML 文章转换为幻灯片(通过 Shift+N/B/E 快捷键控制),体现了 HTML 作为多功能文档格式的灵活性。

总结

本文展示了利用 HTML 的反应式脚本系统,构建一个集成数据探索、分析、可视化、排版和交互演示的统一平台,替代传统多工具工作流的可能性。技术核心在于将 HTML 元素转化为可编辑、可依赖跟踪的交互式单元格,并支持广泛的输出格式和编程环境。

4. Good Software Development Habits (zarar.dev)

文章摘要:良好的软件开发习惯

本文作者分享了个人实践中有效的10条软件开发习惯,旨在提升开发速度并保持产品质量。核心观点包括:

  1. 保持提交小而精:提交应小到近乎“过度”的程度,以便于精准定位和回滚错误。目标是让每次提交后的软件至少可以编译。
  2. 持续进行微重构:践行Kent Beck的名言:“使改变易于进行,然后进行简单的改变”。目标是让至少一半的提交为重构,且每次重构应在10分钟内完成。避免大型重构,小幅持续的改进能为后续更大需求铺平道路。
  3. 快速部署以验证:所有代码都是负债,未部署的代码是“致命的负债”。通过频繁部署到生产环境来验证代码是否工作且不破坏现有功能。工作的、可部署的软件是衡量进度的首要标准。
  4. 信任框架,测试业务逻辑:避免测试框架本身已被充分测试过的能力(如React的useState)。通过保持组件小而专注,减少对复杂测试的依赖。复杂组件需要更多测试。
  5. 为无处安放的功能创建新模块:当某个函数不适合放入现有模块时,应创建新的独立模块(或类、组件)。独立的、位置不当的模块总好过强行塞入逻辑不匹配的地方。
  6. 先写测试以定义API:当不确定API设计时,先写测试可以帮助你从“使用者”角度思考,发现意外情况。TDD不必过于严格,允许在失败状态下编写稍大的代码块。
  7. 适时抽象,避免重复:代码可以复制粘贴一次。当出现第三次相同实现时,应进行抽象和整合。维护多个几乎相同的实现风险很高。
  8. 接受设计的过时:设计会变得陈旧,重构可减缓但无法阻止。软件开发的核心就是改变,不要为过去的优秀设计需要改变而自责。善于应对变化体现了开发能力。
  9. 理性管理技术债务:将技术债务分为三类:1)阻碍当前工作的;2)阻碍未来工作的;3)可能阻碍未来工作的。应着重解决第二类,减少第一类,忽略第三类。
  10. 测试困难暗示设计问题:难以测试的代码通常意味着设计需要改进。这可能涉及业务代码的设计,也可能是测试代码本身的设计(例如,需要为难以mock的依赖创建测试工具或封装函数)。

作者总结认为,以上习惯帮助自己在产品开发中提升了效率与质量。

5. Bhutan, after prioritizing happiness, now faces an existential crisis (www.cbsnews.com)

不丹:在“国民幸福总值”后面临存亡危机

背景与独特之处

不丹,一个推崇“国民幸福总值”概念的喜马拉雅小王国,正面临严重的人口外流危机。该国拥有免费医疗、教育、不断上升的人均寿命及经济增长,却有大量年轻人离开。总理策林·托杰认为,讽刺的是,“国民幸福总值”的成功使不丹青年在国际上备受追捧,从而导致了人才流失。

不丹曾长期与世隔绝,直至1970年代才开放旅游,1999年才引入电视。佛教是其国教,传统文化氛围浓厚。其独特的发展道路源于第四任国王在1970年代提出的“国民幸福总值”理念,将人民幸福置于比经济增长更重要的位置,并将其作为政府施政的核心。政府每五年进行一次全国幸福度调查,并据此制定政策。该政策强调经济增长需可持续,并与文化保护相平衡。不丹也以环保著称,法律规定至少60%的国土需保持森林覆盖,且为全球少数碳负值国家之一。

当前的危机:人口外流

不丹正经历严重的“外迁危机”。新冠疫情重创了其旅游业,经济复苏缓慢。许多英语流利的不丹人在澳大利亚等地找到了更高薪的工作。社交媒体迅速传播了海外机会的信息,导致目前全国人口中高达9%(主要为年轻人)已离开祖国。

应对方案:“正念之城”

为吸引人口回流并促进发展,不丹国王提出了一个大胆计划:在南部低地的格勒普建造一座全新的“正念之城”。该项目旨在探索一种既推动强劲经济发展、又坚守不丹价值观的新模式。城市由丹麦建筑师比亚克·英格斯设计,规划以河流为界划分社区,通过多功能的桥梁连接(桥梁兼具公共建筑功能,如佛教中心、医疗设施等)。城市将使用本地材料建设,不设摩天大楼,不引入污染性工业,并为野生动物设置迁徙走廊。

该城市将采用独立的法律框架(以新加坡为参考),完全依靠清洁水电运行,希望能吸引科技公司(尤其是人工智能领域)。项目预计分阶段在20年内建成,耗资可能达数十亿美元。国王表示,该项目的成功将塑造不丹的未来。

展望与反应

国王向全国公布了该计划,并呼吁民众参与。他的呼吁打动了包括记者南杰·赞在内的许多不丹人,使其放弃了移民计划。国王还前往澳大利亚向当地不丹社群宣传这一愿景,试图吸引他们回国。建筑师英格斯认为,该项目旨在证明,可以在不破坏自然、扎根本土文化的同时实现增长与繁荣,这为世界许多地方面临的难题提供了一个可能的答案。

6. Show HN: Nova JavaScript Engine (github.com)

Nova JavaScript 引擎总结

核心定位 Nova 是一款专注于轻量、模块化和易于嵌入的 JavaScript 引擎。其架构紧密遵循 ECMAScript 规范,并采用惯用的 Rust 语言和面向数据的设计(Data-Oriented Design)实现,而非传统 JavaScript 引擎的构建策略。当前阶段,解释器性能是目标之一,但并非最高优先级。

主要特点

  1. 轻量:引擎的堆设计旨在最小化内存分配。在常见情况下以牺牲不常见结构的速度为代价,换取更小的内存占用。其目标是让使用严格 TypeScript 类型编写的现代 JavaScript 代码运行得轻快,而使用 anyunknown 类型的对象则可能导致速度变慢和内存占用高于预期。
  2. 易于嵌入:引擎以库的形式提供 API,可在 Rust 项目中使用,由宿主项目作为 JavaScript 代码的运行时。其设置简单,适用于一次性脚本或简单的调用返回场景。内部使用 WTF-8 编码存储字符串。
  3. 架构设计
    • 公开 API 采用惯用 Rust 风格,而非传统的 NaN-boxing 等技巧。Value 等类型使用标准 Rust 枚举,包含栈上数据或指向堆分配数据的 32 位句柄。
    • 内部实现遵循 ECMAScript 规范,但采用面向数据的设计。堆数据分配在同质(homogeneous)区域中,热数据与冷数据分离,可选数据通过句柄键进行间接存储以节省内存。垃圾回收时会对区域进行压缩,以提升运行时缓存局部性。
    • 灵感来源于 Kiesel 和 LibJS 引擎的执行模型。

当前局限与不足

  • 性能虽可接受,但并非快速引擎。
  • Array 内部不支持稀疏存储(例如,new Array(10 ** 9) 会请求分配 10 亿个 JavaScript 值的空间)。
  • RegExp 实现不支持前瞻、后顾或反向引用,总是处于 UTF-8/Unicode 集模式,不支持包含未配对代理项的模式,且捕获组的定义与规范略有差异,因此不合规。
  • 不支持 Promise 子类化。
  • 不支持执行 WebAssembly。

项目相关信息

  • 官网:trynova.dev,用于发布博客进展并跟踪 Test262 测试通过率。
  • 开发讨论:正在迁移至 Zulip,旧 Discord 服务器仍可用。
  • 技术演讲:团队进行过多次技术分享,主题涵盖数据导向设计在引擎中的应用、基于借用检查的安全点垃圾收集器设计等。
  • 资金支持:项目通过 NLnet 基金会的 NGI Zero Core 计划获得资助,该计划由欧盟委员会“下一代互联网”项目提供财政支持。
  • 贡献:欢迎社区参与,指南详见项目仓库的 CONTRIBUTING.md 文件。
7. We are shutting down Ondsel (ondsel.com)

Ondsel 停止运营总结

核心决定

Ondsel 在运营近两年后,决定停止运营并关闭。公司对 FreeCAD 社区及更广泛的工程 CAD 社区的支持表示感谢。

关闭原因

  • 商业模式未能确立:尽管团队进行了大量调研(访谈了近百名各类用户),但未能找到可扩展、可重复的商业模式
  • 市场匹配失败:虽然获得了独立用户和爱好者支持,但未能获得足以支撑风险投资的商业采用率
  • 竞争环境艰难:闭源 CAD 软件在学校教学和行业中根深蒂固,与之竞争非常困难。
  • 资金耗尽:最终因找不到产品市场契合点而耗尽运营资金。

主要成就与贡献

对 FreeCAD 的改进

  • 集成装配工作台:为 FreeCAD 带来了关键的装配功能。
  • 3D 约束求解器:装配工作台所依赖的基础设施。
  • 可用性提升:显著改进了SketcherTechDraw 的易用性。
  • VarSets:引入了全新的自定义属性系统。
  • 其他工作台:改进了 TechDraw 和 CAM 工作台的功能。
  • 上游贡献:仅 2024 年 5 月版本后,就有 145 个拉取请求被合并到上游代码库,助力了更完善的 FreeCAD 1.0 发布。
  • 第三方插件:为 SheetMetal 等插件做出了贡献。

Lens 服务与理念展示

  • 展示了基于开源的连接式 CAD 体验
  • 构建了支持团队进行硬件产品迭代开发的服务。
  • 提供了公开或私密共享模型的方式(含 PIN 保护)。
  • 实现了在线发布可修改的参数化模型
  • 推动 FreeCAD 项目建立了设计工作组CAD 咨询组,优化了贡献与合并流程。

Ondsel ES 的后续

  • Ondsel ES 是其定制版 FreeCAD,旨在提供更好的用户体验/界面、频繁更新和增值功能。
  • 其所有增值功能均已作为自由开源代码发布,并将大部分融入 FreeCAD 主线。
  • 不再计划发布 v2024.3 版本
  • 部分前团队成员将继续贡献:Brad 继续开发 CAM 工作台;Pierre 继续从事装配和 Sketcher 工作;Pieter 继续开发 varsets 和变体零件(均通过 FreeCAD 项目协会资助)。
  • 剩余改进(如可重载对象功能)将以拉取请求形式提交给上游项目。

对现有用户的影响

  • 通知:将通知客户和用户关于关闭的消息。
  • 数据迁移:服务器将继续运行合理时间,供用户下载其数据。强烈建议用户尽快备份 Lens 上的任何项目。
  • 退款付费客户将获得剩余订阅时间的退款
  • 联系:如有问题或意见,可发送邮件至指定地址。

总结

Ondsel 的关闭标志着一个致力于改进开源 CAD 的商业尝试的结束。尽管其自身商业模式未能成功,但它为 FreeCAD 社区留下了显著的技术遗产和改进的协作流程,并展示了商业实体可以作为开源项目的资产。

8. A BBC navigation bar component broke depending on the external monitor (www.joshtumath.uk)

文章总结

核心事件:BBC英国网站的一个导航栏组件(“更多”按钮)出现了一个极其怪异且难以复现的bug。该bug仅在一名团队成员于家中使用外部显示器时发生,而在办公室使用同一台笔记本电脑则正常。浏览器方面,该问题在Chrome和Firefox中出现,但在Safari中不发生。

问题表现: 当用户在特定条件下点击“更多”按钮时,JavaScript的点击事件未正确执行其预定逻辑(打开菜单),反而触发了页面的无JavaScript备用行为

根本原因

  1. 多显示器坐标系统差异:当外部显示器在操作系统中被设置为位于主笔记本屏幕的左上方时,Chrome和Firefox浏览器的click事件对象中的screenXscreenY属性(代表点击的屏幕坐标)会返回负数值。而Safari浏览器在处理多显示器时,坐标始终为正数。
  2. 代码中的错误假设:团队代码中用于判断点击事件来源的函数 isInvokedByMouse 通过检查 event.screenX > 0 || event.screenY > 0 来认定该点击是鼠标或触控输入(而非键盘)。这个假设是错误的,因为屏幕坐标可以为负。因此,在坐标为负的显示器上点击时,该函数返回false,导致程序错误地认为这是键盘事件,从而跳过了应执行的菜单打开逻辑。

调查过程

  1. 复现:通过模拟该成员将外部显示器配置在笔记本上方的多显示器布局,团队成功复现了bug。
  2. 线索:确认问题仅在Chrome/Firefox上出现,且与screenX/screenY为负值强相关。
  3. 根源定位:找到事件处理函数中的逻辑判断,发现了对屏幕坐标必须为正的隐性假设,这与浏览器在处理多显示器时坐标系的差异冲突。

修复方案: 问题复杂,但解决方案简单。将 isInvokedByMouse 函数的判断条件从 event.screenX > 0 || event.screenY > 0 修改为 event.screenX !== 0 || event.screenY !== 0。这样,无论坐标是正数还是负数(只要不是0),都会被正确识别为指针设备(鼠标/触控)事件。

后续与反思: 作者承认代码设计本身存在缺陷(混合处理点击和键盘事件,且依赖screenX/Y这种不可靠的属性)。尽管团队进行了充分的单元测试、Puppeteer测试及多浏览器手动测试,此bug仍未被发现。这个案例深刻提醒开发者:在使用API时,必须审慎验证关于数据范围和边界的所有假设,即使官方规范也可能描述不清。

9. Teen behind hundreds of swatting attacks pleads guilty to federal charges (www.wired.com)

事件概述: 一名来自加州兰开斯特的18岁少年艾伦·温斯顿·菲林,就其参与的大规模“swatting”(恶作剧报警)攻击案认罪。该案被认为是美国历史上受起诉的最大规模swatting案件之一。

核心事实:

  • 指控与认罪: 菲林在联邦法院承认四项跨州威胁罪,每项最高可判处五年监禁。
  • 犯罪时间与规模: 根据认罪协议,在约2022年8月至2024年1月期间,菲林制造了超过375通swatting电话。
  • 攻击目标: 他谎称在目标地点放置了炸弹或威胁要进行大规模枪击,目标包括宗教场所、高中、传统黑人学院与大学(HBCU)、执法官员、政要及法官的住所。
  • 知名受害者: 2023年12月至2024年1月期间,菲林参与了一个国际swatting团伙,其目标包括美国国土安全部长、网络安全与基础设施安全局局长、一名美国众议员、一名参议员以及一位未具名的前总统。
  • 犯罪手法: 菲林据信以“Torswats”为网名活动。在其中一通电话中,他冒充他人向警方谎称自己在一所清真寺内持有武器和炸弹,意图杀人。
  • 同伙与调查: 两名欧洲男子因参与该计划被起诉,并指认菲林为策划者,负责提供目标信息。该团伙的行动导致至少一起交通事故和人员受伤。
  • 当局表态: 美国司法部副部长强调,此认罪表明了司法部严惩通过swatting和虚假威胁危害社区行为的决心。

现状: 菲林此前因佛罗里达州的一起相关事件已被关押近一年,并对州级指控不认罪。现联邦指控的认罪,将使其面临更广泛的法律后果。

10. Against Best Practices (www.arp242.net)

文章《反对最佳实践》批判了盲目遵循“最佳实践”的做法。作者认为,“最佳实践”往往被两类人滥用:一是将其作为权威论据的狂热者或教条主义者,二是缺乏判断能力的初级程序员。真正的讨论应当基于具体情境下的论据(如“X更好,因为Y”),而非简单地引用“最佳实践”作为万能理由。

作者指出,“最佳实践”本身可能有价值,但许多被奉为圭臬的准则(如Postel定律、DRY原则、SOLID等)实际上只是个人观点或特定背景下的建议,不应被绝对化。例如:

  • Postel定律(在协议中保持宽松)在1980年TCP标准化初期可能适用,但如今已不具普遍意义。
  • “不使用全局变量” 在简单工具中过于严苛。
  • “不重复自己”(DRY) 有时直接复制代码更务实。
  • SOLID原则 可能导致过度设计,增加理解与维护成本。

文章进一步指出,盲目套用“最佳实践”会导致两种问题:一是实际讨论被权威引用打断(如“这不符合最佳实践X!”);二是产生类似“安全悖论”的“气灯效应”——质疑既定准则易被污名化为不负责或不专业,类似讨论安全法规时“你难道不在乎安全吗?”的指责。

总结而言,作者反对的是对“最佳实践”的教条式推崇,强调应根据具体情境进行批判性思考,以实际论据而非权威引用来指导实践。

11. Show HN: Tips.io – A Tailwind playground with AI, page management, and theming (tips.io)

标题: Show HN: Tips.io – 一个集成AI、页面管理和主题功能的Tailwind CSS游乐场

内容摘要:

所提供的HTML内容并非文章正文,而是网站 tips.io 在访问时遇到的Cloudflare安全验证页面。该页面的主要功能和结构如下:

  1. 目的:作为访问 tips.io 网站前的安全检查和身份验证中间页,旨在防御自动化爬虫和恶意流量。
  2. 结构
    • 元数据:包含标准的HTML头信息、安全策略(Content-Security-Policy)和页面刷新指令。
    • 样式:内联CSS定义了基本的页面布局和错误提示样式。
    • 主体内容:仅包含一个提示信息区域,显示“Enable JavaScript and cookies to continue”,要求用户启用JavaScript和Cookies以继续访问。
    • 核心脚本:包含一个由Cloudflare生成的加密脚本,用于执行实际的验证挑战(challenge-platform)。该脚本是验证流程的核心,负责与Cloudflare服务器通信并处理验证结果。
  3. 关键功能
    • 安全挑战:通过JavaScript脚本动态执行验证,区分真实用户与机器人。
    • 状态保持:在验证过程中修改浏览器历史记录状态(replaceState),以便验证完成后能正确恢复原始访问路径。
    • 依赖项:完全依赖启用JavaScript的浏览器环境及来自 challenges.cloudflare.com 的资源。

注意:由于原文内容被Cloudflare验证页面拦截,无法获取关于“Tips.io”这一Tailwind CSS游乐场工具(其AI、页面管理和主题功能)的实际介绍和详细信息。以上摘要仅针对当前显示的HTML验证页面本身进行技术说明。

13. Museum of Bad Art (museumofbadart.org)

博物馆概览

Museum of Bad Art (MOBA) 是世界上唯一一个专门收集、展览和庆祝不良艺术的博物馆。这些艺术作品在传统博物馆中通常不被接纳,但它们是真诚创作的,尽管在创作过程中出现了某种错误,却产生了引人注目、有趣的图像。MOBA 在美国波士顿和加拿大魁北克市设有画廊。

画廊信息

波士顿画廊

  • 地址:Dorchester Brewing Co, 1250 Mass Ave, Boston MA 02125
  • 开放时间:每天上午11:30开门。周日和周一晚上9点关闭,周二至周四晚上10点,周五和周六晚上11点。
  • 特别规定:周五和周六下午6点后,21岁以下人士不得入内。
  • 入场费:免费。

魁北克画廊

  • 状态:暂时关闭,将于2026年6月6日重新开放。
  • 地址:Aire Publique, 29 rue Notre Dame, Quebec City, PQ
  • 开放时间:周一至周三上午10点至下午5点,周四至周日上午10点至下午7点。
  • 入场费:免费。

工作人员

博物馆工作人员包括:

  • 馆长(Curator-in-chief):Michael Frank(昵称Mike)
  • 临时执行董事(Permanent Interim Acting Executive Director):Louise Reilly Sacco(昵称Louise)

视频介绍

WSBE RI PBS(罗德岛公共广播系统)制作了一个7分钟的视频,介绍了MOBA的人员、历史和艺术作品。该视频曾在其每周节目《Art, Inc.》中播出,现在可在YouTube上观看。

捐赠支持

MOBA是一个非营利博物馆,捐赠在美国可以免税。捐赠方式包括:

  • 通过PayPal链接捐赠。
  • 通过Venmo(账户:@MuseumOF-BadArt)捐赠。

新闻通讯

有兴趣者可以注册MOBA新闻通讯以获取更多信息。

14. Japanese workers turn to resignation agencies (metropolisjapan.com)

日本辞职代理机构兴起现象总结

背景与问题

日本传统职场文化强调终身雇佣与忠诚度,员工辞职常被视为对雇主的不尊重。尽管法律保障辞职权利,但许多企业仍会拒绝批准辞职申请,甚至对申请辞职的员工施加压力。部分极端案例中,员工需下跪道歉、道歉信被撕毁,或被要求拜访寺庙“治愈”辞职念头。

辞职代理机构的服务模式

以Momuri为代表的辞职代理机构提供全套服务:代替客户与雇主沟通、谈判辞职事宜,必要时推荐法律支持。服务费用约22,000日元。自2022年以来,仅Momuri一家机构就收到超过3.5万件求助请求。目前日本全国已有超过100家类似机构运营。

使用数据与用户特征

  • 年龄分布:根据Mynavi公司2023-2024年的调查,20多岁辞职者中18.6%使用过代理服务,30多岁和40多岁群体比例分别为17.6%和17.3%,50岁以上仅4.4%。
  • 行业特征:使用代理服务的员工主要来自中小企业,常见于金融、保险和IT行业。
  • 使用原因:40.7%的用户因公司拒绝批准辞职,其余原因包括害怕独自辞职引发的冲突或工作环境阻碍自主离职。

社会文化与心理健康因素

  • 职场压力:日本企业普遍存在高强度工作文化,部分企业被列为“黑公司”(恶劣工作环境企业),厚生劳动省已公布名单警示求职者。
  • 心理健康危机:职场心理问题(如权力骚扰、工作量剧变)导致的自杀案例在2022年达到2,968例高峰。2024年工作相关心理疾病索赔达1,057例历史高点。
  • 代际差异:年轻一代更重视心理健康与生活平衡,倾向于通过代理服务规避辞职过程中的心理压力;年长员工则更可能因传统观念忍受不良工作环境。

社会影响与未来展望

辞职代理机构的普及反映了日本工作文化的代际变革:年轻员工推动对过时职场规范的挑战,促进工作与生活平衡意识的提升。这一趋势可能缓解“过劳死”(karoshi)和“过劳自杀”(karojisatsu)等社会问题,推动职场环境向更可持续的方向发展。

15. Why did Windows 95 setup use three operating systems? (devblogs.microsoft.com)

Windows 95 安装程序为何要经过三个操作系统?

用户疑问在于,为何Windows 95安装要先后经过MS-DOS、Windows 3.1和Windows 95三个系统界面,而不是直接从MS-DOS升级到Windows 95。

核心原因:实现代码复用与开发效率。 Windows 95安装程序需要支持三种升级起点:从MS-DOS、从Windows 3.1或从Windows 95。如果为每种场景独立编写安装程序,意味着相同的安装逻辑(如收集用户信息、硬件检测、文件复制)需要实现三次,工作量巨大且容易产生不一致。

技术实现上的权衡与解决方案。 开发团队在选择安装程序的基础平台时面临三难选择:

  1. 基于MS-DOS编写(16位文本模式程序):可直接在所有三种起点运行,但界面简陋,无法体现Windows 95的图形化优势。
  2. 基于32位Windows 95 GUI编写:能提供最佳用户体验,但若从MS-DOS或Windows 3.1启动,则需要在安装Windows 95之前先运行这个程序,形成逻辑矛盾。
  3. 采用分阶段、多程序的“链式”安装方案:这是最终的“折中”方案,它允许核心安装逻辑只需编写一次。

最终采用的“链式”安装流程:

  1. 第一阶段(MS-DOS程序):仅在从MS-DOS启动时运行。其唯一任务是安装一个微型版本的Windows 3.1。这个版本极其精简,仅包含运行下一阶段16位图形界面程序所需的最少组件,可以从少数几张软盘中复制安装。
  2. 第二阶段(16位Windows程序):这是执行主要安装工作的核心程序。它可以在微型Windows 3.1(来自MS-DOS升级)、完整Windows 3.1或Windows 95环境中运行。它负责与用户交互、收集安装选项、进行硬件检测、复制Windows 95文件与驱动、迁移旧设置,然后重启系统。
  3. 第三阶段(32位Windows 95程序):在Windows 95系统首次启动后运行,执行需要在新操作系统下完成的最终配置步骤,例如安装打印机等。

总结: 通过这种分阶段的链式设计,Windows 95安装程序实现了一套核心代码(特别是硬件检测等复杂逻辑)在三种不同起点下的复用。每个阶段程序都使用最适合该阶段系统环境的技术编写(DOS程序、16位程序、32位程序),逐步引导用户完成系统升级,兼顾了开发效率与用户体验。这种设计确保了无论用户从哪个旧系统开始升级,其安装体验和最终结果都是统一的。

16. Show HN: Documind – Open-source AI tool to turn documents into structured data (github.com)

Documind:开源AI文档结构化数据提取工具

核心功能
Documind 是一款开源AI工具,专注于从PDF文档中提取结构化数据。它支持将非结构化文档转换为JSON或Markdown格式,并允许用户通过自定义schema定义提取内容,提供预定义模板(如银行对账单、发票)简化常见任务。

技术特性

  • 支持多种文件格式:PDF、DOCX、图片、文本、HTML等
  • 兼容OpenAI及本地LLM模型(如Llava、Llama3.2-vision)
  • 可自动生成schema或使用预置模板
  • 提供托管版本(Beta)免去本地配置

使用流程

  1. 安装依赖:需先安装Ghostscript、GraphicsMagick及Node.js (v18+)
  2. 环境配置:创建.env文件添加OpenAI API密钥
  3. 定义提取规则:通过JSON格式的schema指定字段名称、类型及描述
  4. 执行提取:调用extract函数传入文件URL和schema,返回结构化数据

示例输出
提取银行对账单时,可返回账户编号、余额、交易明细等结构化JSON数据,包含完整分页和文件信息。

未来规划
计划增加更多模型支持、图像提取、高级格式化、数据分类及微调模型集成。

开源信息

  • 采用AGPL v3.0许可证
  • 基于Zerox项目开发(MIT许可证)
  • 欢迎社区贡献
17. Interactive Visual Sorting (mszula.github.io)

交互式视觉排序

  • 作者:Mateusz,热爱创建互动项目,旨在结合教育和视觉乐趣。
  • 项目:Visual Sorting(交互式视觉排序),为用户带来快乐与学习体验。
  • 支持呼吁:作者鼓励在 Ko-Fi 上提供支持,以便有更多时间创作和分享类似工具。
  • 重要性:每一份支持都能帮助作者专注于项目开发和社区贡献,让互动项目持续发展。
18. How Japanese black companies oppress workers (2014) (www.tofugu.com)

日本“黑心企业”现象概述

定义与起源
“黑心企业”(ブラック企業)一词源于2000年代初的日本IT行业,特指通过极端剥削员工、违反劳动法等方式压榨劳动力的公司。该词最初为网络流行语,后扩展至各行业,尤其集中于白领领域。

社会关注与批评机制

  • 影视曝光:2009年上映的电影《黑心公司边缘人》改编自真实网络爆料,展现了高压、不人道的工作环境,推动公众讨论。
  • 黑心企业奖:2012年起由记者、学者等组成的委员会发起年度评选,通过公众投票揭露剥削严重的公司。评选标准包括:超长工时、低薪、性骚扰、歧视临时工、无薪加班等。
    • 2013年获奖案例:连锁餐饮企业Watami以72%得票率“夺冠”,其后依次为东北大学、倍乐生教育出版集团等7家机构。

典型案例:Watami集团

  • 2008年,26岁员工森美奈因单月加班141小时后自杀,入职仅两月。
  • 前店长揭露实际月加班常超300小时,创始人渡边美树多次发放侮辱性言论(如“用死亡程度反思业绩”),甚至从工资中强制扣款购买其个人著作。
  • 2014年Watami被迫公开道歉,并暂时关闭60家门店(约10%)以改善环境。

黑心企业鉴别标准
律师岩佐义行提出30项“黑度检测清单”,包括:

  • 无偿加班超80小时/月、低于最低工资、无休假制度;
  • 强制购置公司产品、威胁员工、高离职率;
  • 无工会、管理层为亲属垄断等。
    符合越多则“越黑”,全中则为“纯黑”。

数据与监管现状

  • 2012年日本劳动咨询案例超106万件,其中25.4万件涉及职场压迫,十年间增长约2.5倍。
  • 2013年劳动省调查5111家高离职率企业,发现82%(4189家)违反《劳动基准法》,包括无薪加班、恶劣条件等。政府计划公开屡教不改企业名单。

社会影响
“黑心企业”一词入选2013年日本十大流行语,反映公众意识提升。但文章指出,全国超400万家企业中,治理仍处于初期阶段,依赖媒体曝光、奖项评选及政策推进。

19. You could have designed state of the art positional encoding (fleetwood.dev)

这篇文章介绍了如何通过迭代改进,最终发现Transformer模型中先进的旋转位置编码。

核心问题

Transformer的自注意力机制是排列等变的,若不引入位置信息,模型无法区分序列中不同位置的相同词元(如“狗”)。

理想的编码特性

作者提出了位置编码应满足的五个特性:

  1. 唯一性:每个位置有跨序列的一致编码。
  2. 线性关系:位置编码之间的关系应简单,便于模型学习。
  3. 可泛化性:能处理比训练时更长的序列。
  4. 确定性:由确定性过程生成,便于模型学习。
  5. 可扩展性:能从1D自然扩展到nD(如图像)。

编码方案的迭代探索

  1. 整数位置编码:直接将位置整数加到词嵌入上。缺点是数值范围过大,会淹没语义信息,信噪比低。
  2. 二进制位置编码:将位置转换为二进制表示,每位加到嵌入的不同分量上。解决了数值范围问题,但编码是离散、“跳跃”的,不利于梯度优化。
  3. 正弦位置编码:使用不同频率的正弦和余弦函数生成编码。它结合了二进制编码的紧凑范围和平滑连续的优点。关键发现:正弦编码隐含地使用了旋转矩阵,能够通过线性变换实现位置间的相对关系,满足了理想特性中的线性关系。

关键洞察与最终方案:旋转位置编码

文章的核心洞察在于将位置编码置于自注意力机制的具体上下文中

  • 位置信息不应作为向量到词嵌入上(会污染语义信息)。
  • 应作用于查询向量和键向量的点积上,通过调制它们之间的夹角来影响注意力权重,而不改变向量的范数(范数编码语义信息)。

旋转位置编码 就是实现这一想法的方案:

  • 将查询和键向量分解为二维的块。
  • 对每对二维向量,根据其绝对位置应用一个旋转矩阵。
  • 两个位置向量的点积结果,仅取决于它们的相对位置
  • 在实践中,通过向量运算高效实现,无需进行稀疏矩阵乘法。

扩展与展望

  • 扩展到高维:对图像等高维数据,应独立地为每个维度(如x, y轴)应用旋转,以分别编码不同方向的相对位置。
  • 未来方向:RoPE并非最终方案,仍存在一些根本性问题。未来可能借鉴信号处理(如小波)或适应模型量化等场景进行创新。

总结

文章通过逻辑推理和数学推导,展示了从简单问题出发,如何迭代设计出满足理想特性的位置编码方案,最终理解并发现了RoPE这一当前主流方法背后的原理。核心思想是:位置信息应通过乘法(旋转) 作用于注意力机制的点积计算,以编码相对位置而不干扰语义信息。

20. Linux kernel 6.12 has been released (lwn.net)

Linux 内核 6.12 版本发布

Linus Torvalds 已正式发布 Linux 内核 6.12。开发者表示,上周没有出现意外情况,因此遵循了常规发布时间表,合并窗口将于发布次日开启。

主要新特性

此版本的亮点功能包括:

  • 架构支持:新增对 Arm 权限覆盖扩展的支持。
  • 安全加固:提供更精细的编译期控制,以选择启用哪些 Spectre 缓解措施;安全模块子系统中引入静态调用;新增完整性策略强制安全模块。
  • 实时性改进:完善了实时抢占支持(此为最后拼图);引入实时截止期限服务器机制。
  • 调度器发展:EEVDF 调度器进一步开发;支持可扩展的调度器类。
  • 网络与内存:设备内存 TCP 相关工作。
  • 文件系统增强:XFS 文件系统能够处理块大小大于系统页面大小的设备。

更多详情可参考 LWN 的合并窗口总结(第一部分、第二部分)以及 KernelNewbies 的 6.12 版本页面。

21. LLaVA-O1: Let Vision Language Models Reason Step-by-Step (arxiv.org)

LLaVA-CoT: 让视觉语言模型逐步推理

本文介绍了LLaVA-CoT,这是一个专为实现自主多阶段推理而设计的视觉语言模型。

解决的问题

当前的视觉语言模型在处理复杂的视觉问答任务时,往往难以进行系统化、结构化的推理。这限制了它们在需要深入分析和逻辑推导的任务中的表现。

核心方法

LLaVA-CoT 不同于传统的思维链提示方法。它能够独立、顺序地执行一系列明确的推理阶段:

  1. 总结
  2. 视觉解释
  3. 逻辑推理
  4. 结论生成

这种结构化的推理方式使得模型能够更清晰地分解复杂问题,从而在推理密集型任务上取得显著进步。

关键创新

  • 专用数据集构建:研究团队构建了 LLaVA-CoT-100k 数据集,整合了多种视觉问答来源的样本,并为其提供了结构化的推理标注。这是训练模型结构化推理能力的基础。
  • 测试时搜索方法:提出了一种测试时的阶段式回溯搜索方法。该方法能够在推理过程中进行有效的探索和回溯,实现了高效且有效的测试时性能扩展。

实验结果

  • 性能提升:仅使用100k训练样本并结合测试时扩展技术,LLaVA-CoT在一系列多模态推理基准测试上,其性能比基线模型平均提升了9.4%
  • 超越更大模型:该模型甚至超越了参数更大或商业闭源的模型,例如Gemini-1.5-pro、GPT-4o-mini和Llama-3.2-90B-Vision-Instruct。

资源

该研究的代码、数据集和预训练权重均已公开。

23. AlphaProof's Greatest Hits (rishimehta.xyz)

AlphaProof 最精彩的解法

本文解析了 AlphaProof 在 IMO 2024 中解决第1、2、6题时所运用的最巧妙的数学思想。AlphaProof 以 Lean 语言生成证明,每一份证明由一系列策略构成。以下重点介绍每道题解法中对应的核心策略。

题目1

问题:求所有实数 $\alpha$,使得对任意正整数 $n$,整数 $\lfloor \alpha \rfloor + \lfloor 2\alpha \rfloor + \dots +\lfloor n\alpha \rfloor$ 是 $n$ 的倍数。

解法要点: AlphaProof 得出答案为偶数集合。证明中关键的一步是定义整数 $\ell$ 使得 $2\ell = \lfloor\alpha\rfloor + \lfloor2\alpha\rfloor$(由 $n=2$ 时的性质得出)。随后提出并证明对于所有自然数 $n$,有: $$\lfloor (n + 1):\alpha \rfloor = \lfloor \alpha \rfloor + 2n:(\ell - \lfloor \alpha \rfloor)$$ 由此推导出 $\alpha = 2,(\ell-\lfloor\alpha\rfloor)$,必然是偶数。这一等式的设置是证明中最具洞察力的部分,虽然其动机不直观,但效果显著。

题目2

问题:求所有正整数对 $(a,b)$,使得存在正整数 $g$ 和 $N$,对所有 $n \geq N$ 满足 $\gcd,(a^n + b, b^n + a) = g$。

解法要点: AlphaProof 确定唯一解为 $(1, 1)$。证明的核心策略是考虑数 $ab + 1$,并证明它必须整除 $g$。接着选取 $n=N \phi(ab+1)$,利用欧拉定理: $$a^{\phi(ab+1)} \equiv 1 \pmod{ab+1},\quad b^{\phi(ab+1)} \equiv 1 \pmod{ab+1}$$ 从而推出 $ab + 1 \mid 1 + b$ 且 $ab + 1 \mid 1 + a$,最终得出 $a = b = 1$。引入 $ab + 1$ 是证明的关键步骤。

题目6

问题:设 $\mathbb{Q}$ 为有理数集。函数 $f: \mathbb{Q} \to \mathbb{Q}$ 称为“aquaesulian”的,如果对任意 $x,y \in \mathbb{Q}$,满足: $$f(x+f(y)) = f(x) + y \quad \text{或} \quad f(f(x)+y) = x + f(y).$$ 证明存在整数 $c$,使得对任意 aquaesulian 函数 $f$,形如 $f(r) + f(-r)$ 的有理数最多有 $c$ 个,并求出 $c$ 的最小值。

解法要点: AlphaProof 得出 $c=2$。证明分为两部分:

  1. 通过利用 aquaesulian 函数的性质,证明 $f(r) + f(-r)$ 的值最多只有两个(0 或某个其他值)。
  2. 构造一个具体的 aquaesulian 函数 $f(x) = -x + 2\lceil x\rceil$,展示它可以取到两个不同的值:$f(-1) + f(1) = 0$ 和 $f(1/2) + f(-1/2) = 2$。构造这个函数极具挑战性,在当时仅少数参赛者解出此题。

总结

AlphaProof 的解法展示了其独立发现深刻数学思想的能力,尤其在构造性证明(如题目6)和巧妙变量引入(如题目1和2)方面表现突出。尽管其证明风格有时显得复杂,但这些解法在严格的形式化验证下均成立。

24. Show HN: The App I Built to Help Manage My Diabetes, Powered by GPT-4o-Mini (apps.apple.com)
本文内容是一个应用和游戏推荐列表,主要包含各类手机应用和游戏的展示信息,涵盖游戏、娱乐、生活工具等多个类别。主要内容分类如下:

## 游戏推荐
- **热门游戏**:包括《卡厄思梦境》、《王者荣耀》、《和平精英》、《三角洲行动》、《无尽冬日》、《金铲铲之战》、《无畏契约:源能行动》、《蛋仔派对》、《梦幻西游》、《开心消消乐》、《我的花园世界》、《燕云十六声》、《向僵尸开炮-尸潮来袭》、《逆水寒》、《恋与深空》、《超自然行动组》、《原神·空月之歌》、《第五人格》、《三国杀》、《崩坏:星穹铁道》等。
- **独立游戏**:如《南宋江湖之侠影迷踪》、《大江湖之苍龙与白鸟》、《花雨旋律》、《霓虹深渊:无限》、《火山的女儿:再度重逢》等。
- **休闲与派对游戏**:如《元梦之星》、《弹壳特攻队》、《巅峰极速-趣游华夏》等。
- **音乐游戏**:如《初音未来:缤纷舞台》等。

## 生活与工具类应用
- **记账应用**:《喵喵记账》。
- **健康与健身**:提及Apple Watch相关伴侣应用。
- **儿童教育**:如《碰碰狐鲨鱼宝宝故事书》、《Dora:探索与玩耍》。
- **音乐创作**:如Auxy Studio、Launchpad、节拍器Soundbrenner、Remixlive、Groovepad、Drum Pad Machine、edjing Mix、djay、Beat Maker Go、Medly等。

## 娱乐与媒体
- **视频平台**:腾讯视频、爱奇艺、优酷视频、芒果TV。
- **电影与演出**:豆瓣、猫眼、淘票票等购票或内容平台。

整体上,该内容主要是一个应用和游戏的推荐汇总,旨在为用户提供多样化的选择,涵盖游戏娱乐、生活工具、音乐创作等多个方面。
26. Computer Networking Fundamentals – Learning Series (2023) (iximiuz.com)

计算机网络基础学习系列(2023)概要

该系列旨在通过精简的文字和丰富的图示,以更友好、直观的方式介绍计算机网络基础知识,并配有实践实验,尤其侧重于数据链路层(OSI L2)及以太网相关技术。

系列核心文章内容

  1. 面向开发者的计算机网络基础 作者以软件工程师的视角,梳理网络基础知识。重点聚焦于当前主流的数据链路层(OSI L2)有线以太网,并简要涉及相邻网络层。内容力求用最少的文字和最多的图示来简化复杂的术语和概念。

  2. Linux iptables 图解入门 本文尝试以通俗的语言和大量的图示来介绍 iptables,旨在在深入学习表、规则、目标和策略等具体细节前,先帮助读者建立对该领域的直观理解,避免枯燥的定义和冗长的命令列表。

  3. SSH隧道可视化指南:本地与远程端口转发 文章聚焦于SSH隧道这一实用特性,旨在通过实验和可视化速查表,帮助读者厘清本地端口转发远程端口转发的区别、正确的命令格式和标志。文中列举了SSH隧道的典型应用场景,如通过公网实例访问内部VPC端点、在主机浏览器访问开发虚拟机本地端口、以及将家庭或私有网络中的本地服务器暴露至外网。

  4. 网桥 vs. 交换机:数据中心参观后的所学 本文旨在探讨并厘清 “网桥”“交换机” 这两个常被混用的术语是否真的指代同一事物。作者反思了自己过去将二者等同的看法,并试图在更深入的网络知识背景下,探究它们之间可能存在的区别。

  5. 网络实验:以太网广播域 本实验解释了以太网广播域的概念:即构成同一个L2段的所有节点组成一个广播域。实验说明了多个物理(L1)段可以通过桥接合并为一个逻辑广播域,反之,一个更大的广播域也可以通过桥接多个L2段来创建。

  6. 网络实验:L3(网络层)与L2(数据链路层)段的映射 实验探讨了IP子网(L3)与广播域(L2)之间的映射关系。常见配置是一个L2段对应一个IP子网,但也允许在一个L2广播域上配置多个IP子网,或(更复杂地)在多个独立的L2段上配置同一个IP子网。本实验覆盖前两种场景。

  7. 网络实验:简单VLAN 本实验展示如何利用交换机的VLAN(虚拟局域网) 功能,将一个大的广播域分割成多个更小、逻辑上独立的广播域,这是在前一个关于广播域实验基础上的扩展。

学习形式与目标

该系列通过图文并茂的文章和配套的动手实验,致力于为开发者和技术爱好者提供一个精炼、实用且可视化的计算机网络基础学习路径。读者可以通过订阅博客来获取该系列的最新更新及关于云原生主题的深度技术文章。

27. Writes Large Correct Programs (2008) (www.johndcook.com)

本文核心探讨了如何界定真正的编程能力,指出其关键在于能否编写大型且正确的程序,而非仅拥有计算机科学学位。

  • 编程能力与学术背景无必然联系:作者通过观察指出,拥有计算机科学学位(包括高级学位)的人,其编程能力存在巨大差异。编程能力与学术成就仅有正相关关系,但非充分条件。

  • 核心定义:编写大型正确程序:作者提出,衡量一个人是否会编程的标准,应是其能否编写出大型且有很高概率正确的程序。这与Joel Spolsky提出的“聪明且能成事”的优秀程序员特质高度重叠。

  • 规模带来的非线性复杂度:非专业人士常误以为软件开发难度与规模线性增加。实际上,编写10000行代码的难度远超编写100行代码的100倍。大多数人会因无法驾驭随之急剧增长的复杂度而失败。专业程序员的核心能力之一,便是通过有效的软件组织来管理这种复杂度,使其可控。

  • “正确”的含义与极高难度:编写有缺陷但大体可用的程序已属不易,而要编写“大型正确程序”则难度剧增,甚至在绝对意义上不可能。优秀程序员会评估多种解决方案,选择最易实现正确性或最易暴露潜在错误的一种,并主动设计便于测试和调试的结构

  • 业余与专业程序员的根本思维差异:业余程序员常自信程序绝对正确。专业程序员则默认程序可能存在缺陷,但会清晰阐述已采取的测试策略和调试手段,以控制风险、处理未来可能出现的问题。

28. It's Time to Replace TCP in the Datacenter (2023) (arxiv.org)

本文探讨了数据中心网络环境中传输控制协议(TCP)所面临的挑战,并论证了对其进行替代或大幅改进的必要性。文章指出,随着数据中心内部通信流量模式的演变和对极致性能(如超低延迟、高吞吐量、可预测性)需求的提升,为广域网设计的传统TCP协议暴露出诸多不足,例如在拥塞控制、延迟和公平性方面存在瓶颈。

文章核心观点认为,是时候重新审视并替换数据中心内部使用的TCP,转而采用或设计更适合数据中心特定流量模式(如“多对多”通信)和基础设施特性的新型传输协议。这旨在推动网络协议栈的创新,以满足现代分布式计算系统对效率和可靠性的严格要求。

文中提到的相关研究和讨论,为理解当前TCP的局限性及探索替代方案(如基于RDMA的协议、专用数据中心传输协议等)提供了学术背景和见解。

30. Creating a QR Code step by step (www.nayuki.io)

创建QR码的逐步过程

本文详细演示了如何将文本字符串编码为QR码符号,解释了QR码生成库的内部工作原理。

输入与输出

用户输入文本,应用输出对应的QR码。

逐步流程

0. 分析Unicode字符

  • 检查输入字符串中每个字符的编码模式(数字、字母数字、字节等)兼容性。
  • 确定一个适合所有字符的段模式。

1. 创建数据段

  • 将字符转换为比特位。对于数字和字母数字模式,连续字符先分组再编码;字节模式下每个字符生成8、16、24或32位。
  • 输出单个数据段,包含模式、字符计数和二进制数据。

2. 匹配版本号

  • 根据总比特长度,确定所需的QR码版本(1-40)。
  • 比较数据量与各版本在不同纠错等级(L/M/Q/H)下的容量,选择最合适的版本。

3. 拼接段、添加填充、生成码字

  • 合并比特字符串:包括段模式(4位)、字符计数字段、终止符(最多4个“0”位)、比特填充(使最后字节完整)、字节填充(交替的EC和11十六进制字节直至容量填满)。
  • 输出完整的数据比特序列和对应的十六进制码字序列。

4. 分割块、添加纠错码、交错

  • 根据版本和纠错等级,将数据码字分割为多个块(短块和长块)。
  • 为每个块计算里德-所罗门纠错码字并附加。
  • 交错所有块的码字(先所有数据码字,后所有纠错码字),生成最终序列。

5. 绘制固定图案

  • 绘制定时图案(第6行和第6列)。
  • 在三个角落绘制寻边图案(含分隔符)。
  • 绘制对齐图案网格(避开寻边角)。
  • 绘制临时的格式信息位和版本信息位。

6. 绘制码字与剩余位

  • 从右下角开始,按“之”字形扫描路径访问所有未填充模块。
  • 按扫描顺序和比特值将最终码字序列绘制为深色/浅色模块。

7. 应用掩码

  • 展示掩码图案(仅影响非功能模块)。
  • 将掩码与数据、纠错及剩余位模块进行异或运算。
  • 绘制最终的格式信息位。

8. 识别惩罚图案

  • 检查以下模式:
    • 水平和垂直方向上相同颜色模块的连续段(长度≥5)。
    • 2×2的同色模块方块。
    • 类似寻边图案的结构。
    • 深色/浅色模块的平衡比例。

9. 计算惩罚点数并选择最佳掩码

  • 为每种掩码计算惩罚点数总和(包括连续段、方块、类似寻边图案及颜色平衡偏差)。
  • 选择总惩罚点数最低的掩码作为最终掩码。

补充资源

文章提供了源代码链接、以及维基百科QR码设计页面、教程、视频和分析工具等参考资料。

31. Lucid dreaming app triples users' awareness in dreams, study finds (www.psypost.org)

研究概述
西北大学研究人员在《意识与认知》期刊发表研究,表明一款智能手机应用通过感官提示(声音提示)能显著提高清醒梦的频率。清醒梦指人在梦中意识到自己在做梦的状态,具有增强创造力、克服噩梦等潜在益处。该研究首次将“目标化清醒再激活”方法从实验室扩展到家庭环境,验证了简化居家方法的可行性。

方法:目标化清醒再激活
该方法通过训练将特定声音提示(如音调或旋律)与清醒意识关联,然后在睡眠中播放相同声音以触发梦中的清醒状态。研究使用专用应用,参与者睡前进行20分钟训练,应用在延迟6小时后以渐增音量播放声音,避免突然惊醒。

实验设计与结果

  • 实验1:19名参与者使用应用一周,清醒梦频率从平均每周0.74次增至2.11次,多数参与者认为声音提示直接或间接促进了清醒梦。
  • 实验2:416名参与者分为三组:一组每晚接受训练提示,一组接受未训练提示,一组无提示。50名完成完整协议后发现,接受训练提示的组在训练夜报告显著更多清醒梦,证实提示与训练结合是关键。

挑战与未来改进
应用无法检测快速眼动(REM)睡眠阶段,提示可能干扰睡眠。研究人员正探索整合可穿戴技术(如Muse-S头带)以提高睡眠阶段检测精度,优化提示时机。

应用与研究信息
所用应用在Google Playstore持续开发中。研究作者包括Karen R. Konkoly等,标题为“Provoking lucid dreams at home with sensory cues paired with pre-sleep cognitive training”。

33. Solar-powered desalination system requires no extra batteries (news.mit.edu)

MIT工程师开发出一种无需额外电池的太阳能驱动海水淡化系统,该系统能够实时跟踪太阳光的变化调整运行节奏。当阳光增强时,系统加速脱盐过程;当云层遮蔽阳光时,系统自动降低功率。这种动态调整能力使得系统能最大化利用太阳能,即使在光照条件多变的情况下,也能高效生产淡水。

核心技术创新

系统采用电渗析技术淡化微咸地下水。其关键在于一种名为**“流控电流”的快速响应控制策略**。该系统每秒能监测太阳能电池板输出3到5次,并瞬间自动调整:

  1. 当检测到发电量高于当前用量时,控制器立即命令增加水流速度,让更多的水通过电渗析装置。
  2. 同时,系统会将多余的电力增加到电堆的电流上,以从更快的水流中析出更多的盐。 这种每秒多次的快速闭环控制,使得系统的电力消耗能紧密且精确地匹配不稳定的太阳能供应,从而几乎完全消除了对电池储能的需求,据称电池容量需求减少了近100%。

性能与测试

研究人员在新墨西哥州的微咸地下水井上测试了社区规模的原型系统。在为期六个月、天气多变的实际测试中,该系统平均利用了太阳能电池板所产生电能的94%以上,每天可生产高达5000升清洁水。

应用前景与意义

  1. 目标水源:系统主要针对微咸地下水,这是一种比淡水地下水更普遍但含盐的水资源,随着气候变化正变得更咸。
  2. 应用场景:特别适合内陆社区,这些地区远离海岸,无法进行海水淡化,且电网电力有限或无电网覆盖。该技术有望为全球缺水的偏远、低收入地区提供可持续、低成本的清洁饮水。
  3. 团队计划:研究人员计划进一步测试并扩大系统规模,以期为更大的社区甚至整个城市供水。团队将在未来几个月内成立公司,将该技术商业化。

背景与支持

该系统建立在团队此前“柔性批量电渗析”研究的基础上。研究论文发表于《自然·水》期刊,获得了美国国家科学基金会、朱莉娅·伯克基金会和麻省理工学院晨兴设计学院等机构的支持。

34. Playground Wisdom: Threads Beat Async/Await (lucumr.pocoo.org)

文章摘要:线程优于 Async/Await

本文作者认为,async/await 对大多数编程语言而言是一个糟糕的抽象,线程(特别是现代的虚拟线程)才是更好的选择。文章通过对比分析,阐述了 async/await 的缺陷、线程的优势,并探讨了未来并发编程模型的改进方向。

核心论点:async/await 的问题

  1. 彩色函数问题:async/await 创造了两种函数(同步与异步),它们之间存在单向兼容性(异步函数只能由异步函数或调度器调用),这增加了复杂性和限制。
  2. 丧失挂起能力:在阻塞式代码中,任何函数调用都可以隐式地挂起执行(例如 sleep)。async/await 强制要求显式地 await 异步操作,使得普通函数无法自由挂起,这削弱了表达能力。
  3. 调用栈与调试困难:async/await 通过将代码分解为链式调用或闭包来实现,丢失了传统的调用栈信息,给调试和性能分析带来了额外难题。
  4. 永不解决的 Promise:创建一个永不 resolve 的 Promise 是合法操作,但这会导致资源泄漏(如信号量令牌永不释放),问题比阻塞式函数中长时间休眠更严重,因为阻塞函数仍保持调用栈。
  5. 背压处理不佳:由于非阻塞 API 不能阻塞,只能缓冲或失败,async/await 系统在施加背压方面存在固有困难,容易导致缓冲区膨胀。
  6. 实现不一致:不同语言(JavaScript、Python、C#、Rust)的 async/await 起源和底层机制差异巨大,导致开发者的经验和陷阱各不相同。

线程作为更优抽象

  1. 自然的挂起与阻塞:线程(或虚拟线程)允许任何函数在任意点(如 sleep、内存访问甚至 I/O)挂起,这更符合现实世界中操作可能阻塞的实际情况(例如,内存映射文件的访问可能触发页面错误而阻塞)。
  2. 保留调用栈:线程执行时维护完整的调用栈,极大地方便了调试和分析。
  3. Scratch 的启示:面向儿童的编程环境 Scratch 通过演员(sprites)和消息传递,实现了简单直观的并发模型,说明并发可以很自然。
  4. 现代实现:Java Project Loom:作者赞赏 Java 的虚拟线程模型,它底层使用协程,但向上暴露为轻量级线程。虚拟线程可以挂起、在宿主线程间迁移,并与调度器无缝协作,既保留了线程的编程模型优势,又实现了高效调度。

并发编程的创新与未来方向

作者认为,尽管 async/await 有缺陷,但它极大地推动了并发编程的普及和创新。未来语言设计应吸收其优点,并整合到以线程为核心的模型中:

  1. 结构化并发:借鉴 Trio 等框架的理念,确保任务(线程)有明确的开始和结束、生命周期不超出父作用域、错误能传播并触发兄弟任务取消。这应成为线程系统的核心特性。
  2. 通道与选择:async/await 凸显了任务间通信(如通道)的重要性。线程模型应内置便捷的通道和选择机制,线程的返回值本身可视为一个只包含单个值的通道。
  3. 语言级集成:并发(如生成/加入线程、消息传递)应成为语言的一等公民,提供语法支持,使其像 Scratch 一样自然易用,而非依赖笨重的库函数。

结论

async/await 作为对回调地狱的解决方案,在引入新问题的同时,也推动了结构化并发、通道等关键概念的发展。然而,对于拥有真实线程的语言,采用 async/await 是一条弯路。未来的语言应转向以虚拟线程为核心,结合结构化并发和良好的通信原语,提供既强大又直观的并发编程体验。

35. Bird brain from the age of dinosaurs reveals roots of avian intelligence (www.cam.ac.uk)

古鸟类化石Navaornis的发现为理解鸟类智力进化提供了关键信息。该化石于2016年在巴西圣保罗州Presidente Prudente地区由威廉·纳瓦发现,以博物馆馆长纳瓦命名。化石保存极为完好,得益于数千万年前该地区干燥、水流缓慢的古环境,使研究人员能够通过先进的微CT扫描技术精确重建其头骨和大脑结构。

该化石属于一种名为“反鸟类”(enantiornithines)的早期鸟类,这类鸟类与现代鸟类在1.3亿多年前已分化,拥有复杂羽毛并具备飞行能力。Navaornis的头骨与小型鸽子相似,但其大脑解剖结构却呈现出进化过渡特征。此前,从始祖鸟到现代鸟类之间的脑进化几乎存在约7000万年的知识空白,而Navaornis恰好处于这一进化阶段的中间点,填补了这一空白。

现代鸟类拥有动物界中最先进的认知能力,但其独特大脑和智力的进化过程一直是科学难题。Navaornis化石显示,部分在恐龙时代飞行的鸟类在8000万年前已具备现代头骨结构。然而,Navaornis的大脑虽具备部分现代特征,却可能缺乏现代鸟类完整的大脑功能,例如作为空间控制中心的小脑扩展区域,这引发了反鸟类如何在没有完全现代脑结构情况下控制飞行的新问题。

研究人员认为,Navaornis的认知能力可能为其在寻找食物、栖息地或复杂社交行为(如求偶展示)方面提供优势。该化石是古生物学家丹尼尔·菲尔德研究团队自2018年以来描述的第四种中生代鸟类化石,此前的发现包括鱼鸟、奇翼鸟和Janavis。结合先进的可视化与分析技术,这些发现为了解鸟类这一现存最多样化脊椎动物类群的起源提供了根本性见解。

未来研究将进一步探索Navaornis与环境的互动方式,以回答鸟类认知随时间进化的更广泛问题。该研究由英国研究与创新署部分资助,成果发表于《自然》期刊。

37. Show HN: A dynamic C (Hot reloading) module-based Web Framework (github.com)

项目概述 这是一个名为 c-web-modules 的项目,是一个基于 C 语言的模块化 Web 框架,当前为概念验证版本(MVP),不建议用于生产环境。其设计灵感来源于内核模块和 AWS Lambda,核心特点是支持 C 语言编写的模块(插件)在运行时进行热重载,无需重启服务器。项目正在从通用 Web 框架方向重新聚焦,转向更适合 C 语言的计算密集型(CPU-bound)任务

核心功能与特性

  1. 热重载:这是项目的主要卖点。开发者可以直接上传 C 源代码到服务器,服务器在运行时进行编译并热替换现有模块逻辑,服务不中断。
  2. 计算优先:专注于计算和数据流处理,而非传统的前端 HTML 渲染。适用于需要 C 语言高性能和低延迟流式输出的场景。
  3. 三种核心交互模型
    • HTTP 端点:模块可定义同步的请求/响应路由,支持正则表达式匹配路径。
    • WebSocket:用于建立长连接,实现流式数据推送、交互式更新和流传输。连接可在模块更新时保持活跃。
    • 任务:异步工作单元。任务的状态和事件具有持久化日志,并支持通过 WebSocket 流式获取更新。关键行为:正在运行的任务会绑定到旧模块版本,新任务则使用更新后的模块,确保了稳定性。
  4. 内置特性:包含跨模块缓存和用于延迟任务的调度器。
  5. 开发与部署
    • 依赖:需要 OpenSSL(用于哈希)、SQLite(用于持久化任务状态)和 Jansson(用于 JSON 处理)。
    • 部署方式:可通过简单的 curl 命令上传 .c 文件,或使用配套的 cweb 脚本及 .ini 配置文件批量部署。也支持通过 docker-compose 快速构建和运行。
    • 管理 API:提供 /mgnt 路径用于上传模块,/jobs/* 系列 API 用于管理和触发任务。生产环境使用 TLS 加密,并支持通过环境变量设置 API 密钥进行访问控制。

适用场景 主要面向需要高性能计算和实时数据处理的后端服务,例如:

  • CPU 密集型转换:图像/视频处理、音频信号处理、压缩、哈希计算。
  • 流式分析:日志解析、指标聚合、JSON/CSV 数据处理。
  • 实时数据管道:数据摄入、转换并流式输出结果。

与传统技术的区别 与 Apache 模块和 ISAPI 扩展相比,c-web-modules 提供了更大的运行时灵活性:

  • 支持动态部署原始 C 代码并即时编译集成,无需重启服务器。
  • 模块相互隔离,单个模块崩溃通常不会影响整个服务器。
  • 可在不中断现有连接的情况下更新 WebSocket 处理程序。 这使得它更适合需要频繁迭代、模块化设计且要求服务不间断的实验性开发和应用。
38. ChibiHash: Small, Fast 64 bit hash function (nrk.neocities.org)

ChibiHash:小型快速的64位哈希函数

ChibiHash是一款设计用于提供小型、快速、可移植的64位非密码学哈希函数。其主要特点包括:

  • 代码精简:仅约60行C代码,便于复制粘贴使用。
  • 性能优异:基准测试显示,在大输入吞吐量方面领先于xxhash64、city64等类似函数;在小输入(<32字节)性能上与cityhash接近。
  • 高度可移植:不依赖特定硬件指令(如SSE),确保跨平台一致性。
  • 质量可靠:通过smhasher测试,具备良好的分布特性。
  • 无法律限制:代码已释放至公共领域。
  • 行为明确:无未定义行为,且结果不依赖于主机系统的字节序。

设计概览

  • 初始化:使用常数(如π、e、黄金比例的十六进制表示)和种子初始化32字节状态数组。
  • 主要循环:每轮处理32字节数据,通过异或和乘法进行混合,并结合位旋转(左移40位并右移24位)将高位影响扩散至低位,以减少乘法偏差。通过将混合结果存入下一索引,提升指令级并行性。
  • 数据加载:采用移位与或操作加载8字节数据,避免未定义行为,兼容任意对齐和字节序,并能被编译器优化。
  • 长度处理:将输入长度混入状态,并处理剩余字节:先处理奇数长度的情况,然后以8字节为单位处理,最后以2字节为单位处理剩余数据。
  • 最终混合:通过特定乘法和异或操作将四个状态合并为64位值,并使用类似moremur的终结器进行雪崩处理,确保输出分布均匀。

使用注意事项

  • 不适用场景:不可用于密码学用途;不推荐用于需防御哈希表碰撞攻击的场景(建议使用SipHash);由于混合程度相对较轻,对于要求极低碰撞概率的应用可能不是最佳选择。

开发动机 作者旨在提供一个易于集成、快速且无需复杂依赖的默认非密码学哈希函数,以解决现有方案(如FNV-1a速度慢、其他函数代码量庞大或依赖硬件指令)的不足。