2024-11-02

26 篇热帖

1. Notepad++ is 21 years old (learnhub.top)

文章摘要:Notepad++ is 21 years old

根据提供的内容,原文页面无法访问,返回了 “404 page not found” 错误。因此,无法获取关于“Notepad++ is 21 years old”一文的具体细节、论述或背景信息。

基于可访问的标题,我们可以推断其核心主题是庆祝或回顾Notepad++文本编辑器发布21周年。然而,任何关于其发展历程、功能特性、社区影响或作者感慨等具体内容,均因原文缺失而无法总结。

2. Weird Lexical Syntax (justine.lol)

奇怪的词法语法:构建语法高亮器时遇到的语言特性

项目背景

作者为 llamafile(一个 Mozilla 项目)构建新的语法高亮器,为此学习了 42 种编程语言,包括 Ada、Assembly、C、C++、COBOL、D、Forth、Fortran、Go、Haskell、Java、JavaScript、Julia、Kotlin、Lisp、Lua、Perl、PHP、Python、R、Ruby、Rust、Scala、Shell、SQL、Swift、Tcl、TeX、TypeScript 和 Zig 等,基本覆盖了 TIOBE 指数上的主要语言(Scratch 因使用图形化块除外)。

语法高亮器的实现

  • 核心工具:使用 C++ 和 GNU gperf 生成完美哈希表,以高效识别关键字(如 Java 的 truefalsenull),避免大量字符串比较。
  • 主要方法:基于有限状态机(FSM),通过循环和 switch 语句处理字符串、注释和关键字,无需复杂解析器。例如,highlight_ada.cpp 展示了基础实现。
  • 性能目标:实现高达 35 MB/s 的 C 语言语法高亮,即使定义了约 4000 个关键字。

各语言中令人惊讶的词法特性

C 语言

  • 三字符组(Trigraphs):如 ??= 代替 #,虽在 C23 标准中移除,但编译器仍支持。
  • 通用字符名:允许在标识符中使用 Unicode 字符(如 \uFEB2),但受限于标准认可的 Unicode 平面。
  • 多行单行注释:行尾的反斜杠可使 // 注释跨行。
  • 空预处理指令:单独的 # 有效,可用于隐藏注释。

Haskell

  • 支持嵌套注释:{- 注释 {- 嵌套注释 -} -},解决了 C 语言中注释不可嵌套的问题。

D 语言

  • 同时支持 C 风格的 ///* */ 注释,并引入 /+ +/ 语法支持嵌套注释。
  • 提供详细的字符串语法文档,包括十六进制字符串和 heredoc 字符串。

Tcl

  • 标识符可包含引号(如 a"b),变量名引用需使用 ${a"b}

JavaScript

  • 正则表达式字面量:方括号内的 / 不需转义(如 /[/]/g)。
  • Unicode 行分隔符:U+2028 和 U+2029 被视为换行符,可用于创建 C 与 JavaScript 的 polyglot 代码。

Shell

  • Heredoc 语法:空标记(<<'')的 heredoc 在空行结束;支持同一行多个 heredoc。
  • 上下文相关符号:如 # 在变量引用中可用于前缀剥离(${x#hi-})。

字符串插值

  • Kotlin、Scala、TypeScript:字符串中可嵌入代码,需跟踪花括号平衡和解析状态。
  • Swift:使用 # 标记来允许字符串中包含引号(如 #"""#)。
  • C#:支持任意数量的引号作为字符串界定符(如 """"""")。

其他语言

  • Forth:以空格分隔的词法简单性,如 c" hello world" 定义字符串。
  • Fortran/COBOL:固定列规则(如 Fortran 的列 1 为注释符,COBOL 的列 7 为注释符)。
  • Zig:使用 \\ 前缀的多行字符串,避免 Python 式的缩进问题。
  • Lua:支持任意数量等号的括号字符串(如 [==[...]==])和嵌套注释。
  • Assembly:方言多样(AT&T、NASM、GNU),注释和字符字面量语法各异。
  • Ada:单引号用于字符字面量、属性引用和函数调用。
  • BASIC:无关闭引号的字符串、关键字词法识别(如 goto)、日期字面量。
  • Perl:丰富的正则表达式和替换语法,支持任意分隔符(如 s{hello}{Perl}i),以及 POD 文档。
  • Ruby:语法极其复杂,反引号重载、heredoc 歧义、混合字符串等使得词法分析近乎不可能。

复杂度排名

以实现代码行数衡量,语法高亮复杂度从简到繁:

  1. 最简单:Forth(125 行)、m4、Ada、Lisp。
  2. 中等:Fortran、SQL、Go、Python、Java。
  3. 最复杂:D、Shell、Perl、Ruby(1042 行)。

项目成果与资助

  • llamafile 的语法高亮器优于 Ollama(后者无高亮),增强了代码生成体验。
  • 项目由 Mozilla 资助,并通过 GitHub Sponsors 和 Patreon 接受支持。作者邀请用户加入 Mozilla AI Discord 和 Redbean Discord 社区交流。
3. My Time Working at Stripe (jondlm.github.io)

作者在Stripe工作近四年后,决定在没有新工作的情况下辞职,本文分享了他的工作经历和内心挣扎。最初面试时,他因紧张失败,但六个月后重新面试并成功加入。作为JS Infra团队首位成员,他努力证明自己,但写作项目提案的挑战让他感到不自信。尽管领导的JS bundler迁移项目提高了开发速度10倍,获得好评,绩效评估却只得到“部分符合预期”,令他深感受挫。后来新经理鼓励团队脆弱交流,作者分享个人困境,这成为他最珍贵的Stripe经历之一。他逐渐经历抑郁,影响工作和生活,向团队坦白后休假获得支持。最终,他意识到工作失去灵魂,需要改变,决定辞职。文章以诗歌结尾,强调面对未知的勇气,反映了作者对诚实和成长的追求。

4. Linux on Apple Silicon with Alyssa Rosenzweig [audio] (softwareengineeringdaily.com)

Linux on Apple Silicon with Alyssa Rosenzweig 播客摘要

核心项目:Asahi Linux

  • 目标:将Linux操作系统移植到Apple Silicon芯片(基于定制ARM架构)。
  • 重要性与挑战:由于Apple Silicon Macs的普及,该项目意义重大。但其技术挑战在于Apple Silicon是一个完全未记录的平台,使得移植工作极具技术难度。

关键人物:Alyssa Rosenzweig

  • 身份:知名计算机科学家、图形开发者,致力于软件自由。
  • 当前工作
    • 作为承包商在Valve工作,开发开源软件以提升Linux游戏体验。
    • 是Asahi Linux项目的贡献者,主要工作包括对Apple M1 GPU进行逆向工程

播客讨论内容

  • Alyssa Rosenzweig作为嘉宾,讨论话题包括:
    • 硬件逆向工程的过程与方法。
    • Asahi Linux项目的最新进展。
    • 在Asahi Linux上游戏体验的新进展。

主持人背景:Sean Falconer

  • 曾任学者、创业公司创始人、谷歌员工。
  • 发表过涵盖信息可视化到量子计算等多领域著作。
  • 现任Skyflow公司营销与开发者关系主管。
  • 主持关于隐私与安全工程的播客《Partially Redacted》。

赞助商信息

  1. Bitwarden Secrets Manager

    • 解决开发者在代码中硬编码机密信息的安全风险。
    • 提供一个集中的、安全的解决方案来管理和部署机器与基础设施机密。
    • 特点:开源、端到端加密,并能与Kubernetes、GitHub等现有工具集成。
  2. QA Wolf

    • 帮助软件工程团队解决因缓慢的QA流程导致的发布瓶颈。
    • 目标是为团队实现80%的自动化端到端测试覆盖率,并将QA周期从小时缩短到分钟,从而帮助团队将发布速度提高一倍。
5. Rewrite It in Rails (dirkjonker.bearblog.dev)

本文讲述了作者为海关申报应用选择技术栈的经历与反思。作者最初使用熟悉的Ruby on Rails快速开发了功能完善的版本,随后受Rust的类型安全和性能吸引,尝试用Rust后端和SvelteKit前端重写应用(“版本2”)。然而,重写过程中面临大量基础架构工作,开发速度缓慢,且新版本仅覆盖约10%的功能,最终被放弃。

作者决定采用渐进式迁移策略:新功能用Rust/SvelteKit开发,逐步替换Rails部分。但随着时间的推移,Rails部分持续迭代并增添实用功能,而新栈的开发却陷入技术细节(如数据库抽象、权限管理、后台任务等),未能为用户带来直接价值,反而增加了系统复杂度和部署难度。

在团队因业务扩张雇佣全职开发者后,这一矛盾更加突出。作者最终意识到,继续重写是一项不合理且低效的“投资”,它消耗了大量时间却未提升用户体验,反而增加了维护负担和团队压力。因此,作者做出了艰难的决定:将已迁移至新栈的部分回滚至Rails,并让团队学习Rails。

文章总结了Rails的突出优势:其“约定优于配置”的理念、丰富的内置功能和成熟的生态系统,使开发者能专注于业务逻辑而非底层支撑代码。作者反思道,这次技术探索虽未达到预期目标,但收获了重要教训:Web开发本质是权衡,没有完美框架;选择技术时应评估其带来的实际竞争优势和长期价值,而非盲目追求新技术。作者最终回归Rails,感到生产力恢复,并认识到应接纳技术的固有局限,通过良好的工程实践(如测试、重构)来应对其缺点。

6. 131M American Buildings (tech.marksblogg.com)

ORNL发布1.31亿栋美国建筑AI数据集 橡树岭国家实验室(ORNL)于今年五月发布了一个全新的、由AI生成的美国建筑数据集。该数据集包含1.318亿栋独立建筑,基于Maxar和NAIP的卫星影像,利用卷积神经网络提取建筑轮廓矢量。相较于谷歌和微软的同类数据集,其建筑轮廓精度更高,并集成了来自Lightbox、OpenStreetMap及美国政府机构的丰富元数据,包括建筑地址和用途分类。

数据特性与分析要点

  • 数据规模与格式:原始数据为42 GB的压缩包,以州为单位的地理数据库格式存储。经转换压缩后,整体体积优化至约15 GB的Parquet文件。
  • 元数据丰富:每条记录包含唯一标识符(UUID)、精确几何形状、占地面积、建筑高度、占用类别、主要用途、地址信息、地理编码(FIPS、Census Code)、影像来源及日期、生产日期与验证方法等数十个字段。
  • 占用与用途:超过1.12亿栋建筑为住宅类;商业、农业、工业建筑分别约有560万、390万、130万栋。主要用途细分显示,单一家庭住宅(约9690万栋)是最主要的类型。
  • 地址完整性:地址信息覆盖不均。几乎所有记录都有州名和FIPS代码,但近6200万栋建筑缺少街道地址,近6800万栋缺少邮编,近6960万栋没有城市名。
  • 数据来源与验证:建筑主要由ORNL(约9970万)和NGA(约3210万)生成。验证方法以“自动化”为主(约9964万条),其次是“未验证”(约3217万条),人工验证记录仅2731条。
  • 地理分布:建筑数量最多的州是德克萨斯州(约1160万栋),其次是加利福尼亚州(约1093万栋)和佛罗里达州(约699万栋)。数据集包含了从2000年至2021年多个年份的影像,生产时间集中于2018-2020年。

该数据集为城市规划、灾害评估和商业分析等应用提供了高精度且信息丰富的建筑基础数据。相关ETL脚本已在GitHub开源。

7. Obtainium: Get Android App Updates Directly from the Source (obtainium.imranr.dev)

Obtainium:直接从源头获取Android应用更新

Obtainium是一款Android应用,其核心功能是允许用户直接从应用的官方发布页面安装和更新应用,并能在新版本发布时收到通知提醒

该应用支持多种来源网站,包括但不限于GitHub、GitLab和F-Droid。每个来源都可以根据不同的发布方案、特殊情况或用户偏好,进行详细的配置和设置,例如设置过滤器。

对于未在预设列表中的来源,Obtainium提供了一个通用的**“HTML”源**,用户可以自定义抓取规则,以提取APK的下载信息。

此外,该应用还提供了数据导入与导出的功能,并支持用户之间分享应用的配置信息

8. Linux Syscall Support (chromium.googlesource.com)

Linux Syscall Support (LSS) 总结

项目概述
Linux Syscall Support (LSS) 项目提供一个头文件 linux_syscall_support.h,允许应用程序直接嵌入Linux系统调用,而不是依赖系统运行时库(如glibc)的实现。其目标是提供一个API,通常镜像标准C库的功能,同时确保直接进行系统调用,并尽量隐藏不同架构之间的差异。

核心目标与设计

  • API兼容性:通过添加 sys_ 前缀来调用系统调用(例如,sys_open 替代 open),使API与标准C库类似。
  • 架构抽象:自动处理架构差异,例如,新架构可能不支持 open 系统调用,但LSS会通过 openat 提供 sys_open 辅助函数。
  • 用户友好:避免暴露原始系统调用ABI的复杂性(如参数顺序问题),简化直接系统调用的使用。

使用方法

  • 集成方式:可以将头文件直接复制到项目中,或通过Git子模块从源代码仓库自动拉取。
  • 支持的目标架构:已在多种架构/ABI上测试,包括:
    • x86 32位(i386等)
    • x86_64 64位
    • x32 32位
    • ARM 32位(OABI和EABI)
    • AARCH64 64位
    • PowerPC 32位
    • MIPS 32位(o32和n32 ABI)和64位(n64 ABI)
    • LOONGARCH 64位ABI
      (列表可能随时间更新,建议检查头文件获取最新信息。)

API与配置

  • 默认API:使用 sys_ 前缀调用函数,例如 sys_opensys_stat
  • 配置选项(Knobs):头文件顶部提供注释文档,包含多个控制导出API的选项,允许用户自定义功能。

注意事项(Caveats)

  • ABI差异:标准C库和Linux内核使用的ABI可能不同(例如 struct stat 布局)。直接使用系统调用时,需使用内核命名空间下的头文件(如 linux/asm/),以避免内存损坏或值错误。LSS为多数情况提供结构体(如 kernel_stat)。
  • 向后兼容性:LSS不自动回退到旧内核的系统调用(与glibc不同)。用户需自行处理错误(如 ENOSYS)或新标志在旧内核上的失败(如 O_CLOEXEC 导致 EINVAL)。
  • 可变参数(varargs):不支持可变参数函数。例如,标准 open() 可接受2或3个参数,但 sys_open() 始终要求3个参数。

错误报告与功能请求

  • 通过项目的bug跟踪器报告问题或请求功能。
  • 补丁应直接提交(不通过跟踪器),优先发送补丁以加速处理。

使用LSS的项目

  • Chromium
  • Breakpad
  • Native Client(在 nacl_bootstrap.c 中)

贡献指南

  • 代码审查:使用Gerrit上传更改(通过 git cl upload)。
  • 测试:测试文件位于 tests/ 子目录。新系统调用包装器应包括测试。运行测试:在 tests 目录执行 make;交叉编译测试使用 make cross(仅编译不执行)。
  • 集成到Chromium:提交LSS更改后,需更新Chromium的 DEPS 文件中的 lss_revision,以确保更改被测试。

总结
LSS是一个技术项目,旨在简化直接Linux系统调用的使用,通过提供跨架构兼容的API和头文件,支持多种架构。它强调用户需注意ABI差异和向后兼容性,不提供自动回退机制。项目鼓励通过测试和代码审查进行贡献,并与Chromium等开源项目集成。

9. Sleep regularity is a stronger predictor of mortality risk than sleep duration (academic.oup.com)

睡眠规律性比睡眠时长更能预测死亡风险

提供的内容概述:提供的内容并非实际文章正文,而是一个Cloudflare安全挑战页面,用于验证用户环境。这表明原始文章可能受网站保护,无法直接访问。

内容分析

目的

  • 该HTML页面是Cloudflare挑战系统的一部分,旨在检测用户是否启用了JavaScript和cookies,以确保安全访问。
  • 页面标题显示“Just a moment...”,表示临时验证步骤,防止自动化或恶意流量。

结构

  • HTML文档:标准结构,包括<head><body>部分,使用UTF-8字符编码。
  • 元数据:设置视口、机器人指令(noindex,nofollow)和内容安全策略(CSP),限制脚本、样式等资源的来源。
  • 样式:内联CSS定义基本布局,如居中内容、错误文本样式(使用SVG背景图片显示错误图标)。
  • 主体内容:一个主要的<div>容器,包含<noscript>标签,当JavaScript禁用时显示错误信息:“Enable JavaScript and cookies to continue”。
  • JavaScript代码:设置Cloudflare挑战选项(如cFPWvcH等参数),并动态加载外部脚本(从/cdn-cgi/challenge-platform/)。脚本处理重定向和历史状态管理。

关键功能

  • 环境验证:检查JavaScript和cookies是否启用,否则阻止访问。
  • 挑战机制:通过Cloudflare的脚本执行安全验证,可能包括人机验证或风险评估。
  • 重定向处理:使用history.replaceState管理URL,确保挑战后正确返回原页面。
  • 错误处理:如果没有启用必要功能,显示明确错误提示。

总结

此页面是网站安全访问的一部分,不包含实际文章内容。它展示了Cloudflare如何保护在线资源,通过技术验证来保障访问安全。

11. Nvidia to join Dow Jones Industrial Average, replacing Intel (www.cnbc.com)

核心事件: 英伟达(Nvidia)将于11月8日取代英特尔(Intel),加入道琼斯工业平均指数(DJIA)。同时,宣伟公司(Sherwin Williams)将取代陶氏公司(Dow Inc.)。

变动背景与原因:

  • 反映行业巨变: 此次调整深刻体现了人工智能(AI)热潮的兴起和半导体行业的重大格局变化。
  • 英伟达崛起: 英伟达作为AI芯片领域的领军者,股价和市值飙升。其GPU被微软、Meta、谷歌和亚马逊等科技巨头大规模采购,用于构建AI计算集群。公司营收连续多个季度实现翻倍甚至三倍增长,且表示对其下一代AI GPU Blackwell的需求“疯狂”。
  • 市值与排名: 英伟达市值已达3.3万亿美元,仅次于苹果,成为全球第二大上市公司。其纳入道指后,六大万亿市值科技公司中有四家已进入该指数。
  • 英特尔困境: 英伟达的崛起恰逢英特尔的衰落。作为曾经的PC芯片霸主,英特尔在市场份额上受到AMD的冲击,在AI领域进展甚微。其股价今年已下跌过半,并正面临制造挑战和成本压力,近期宣布了包括裁员1.65万人在内的削减成本计划。

指数特性与英伟达的准备:

  • 道指特性: 道琼斯指数包含30只成分股,采用按股价加权的方式,而非按总市值。这使得高股价的公司会被赋予更高权重。
  • 拆股铺路: 英伟达在2024年5月进行了1:10的拆股,这大幅降低了每股价格,使其在不影响市值的情况下,更容易被纳入道指,且不会造成过重的权重。

近期动态:

  • 这是自2024年2月(亚马逊替换沃尔格林联合博姿)以来,道指首次进行成分股调整。该指数近年来一直在努力纳入最大的科技公司以保持代表性。
12. Cash: A small jQuery alternative for modern browsers (github.com)

Cash 是一个面向现代浏览器(IE11+)的极轻量级 jQuery 替代库,提供类似 jQuery 的链式语法用于操作 DOM。它利用现代浏览器特性来最小化代码库,在保持接近 jQuery 日常使用场景功能的同时,显著减少了文件体积。

核心优势与对比

  • 体积微小:压缩并 Gzip 后仅 6 KB,相比 jQuery Slim (24.4 KB) 减少了 76.6%
  • 功能覆盖:提供选择器、集合方法、事件处理、DOM 操作、CSS 操作等,与 jQuery API 高度兼容。
  • 现代性:不支持旧浏览器,但提供 TypeScript 类型定义和按需部分构建的能力。
  • 积极维护:相比 Zepto 已停止维护,Cash 持续更新。

使用方法
可通过 CDN 引入或使用 npm 安装:

<script src="https://cdn.jsdelivr.net/npm/cash-dom/dist/cash.min.js"></script>
npm install --save cash-dom

用法与 jQuery 相似,例如 $('selector').addClass('class')

核心功能概要

  1. 选择器 $():支持 CSS 选择器、HTML 字符串、DOM 元素、节点集合以及 DOM 就绪回调。
  2. 集合方法:挂载在 $.fn 上,用于操作匹配的元素集合,包括:
    • 属性操作attr, prop, data, val
    • CSS 与尺寸css, height, width, show, hide
    • DOM 操作append, prepend, after, before, remove, empty, html, text
    • 遍历与过滤find, parent, children, siblings, next, prev, filter, not, eq
    • 事件on, off, one, trigger
    • 工具each, map, slice, clone
  3. 库方法:作为静态方法存在于 $ 对象上,如 $.each(), $.extend(), $.isArray(), $.parseHTML()
  4. 可扩展性:可通过 $.fn$.fn.extend() 添加自定义方法或插件。

文档与贡献
文档详细列出了所有可用方法。项目欢迎通过 GitHub 提交问题或拉取请求。该项目采用 MIT 许可证。

14. Cramming Solitaire onto a Nintendo E-Reader card (mattgreer.dev)

Nintendo E-Reader 开发 Solitaire 游戏总结

本文详细介绍了作者如何为 Nintendo E-Reader 外设开发并成功将完整的 Solitaire(纸牌)游戏压缩到一张点码卡上的过程与技术细节。

E-Reader 简介与开发动机

E-Reader 是 Nintendo 于 2002 年为 Game Boy Advance 推出的外设,通过扫描带有点码条的卡片来加载迷你游戏、额外关卡、动画等内容。作者因其独特的设计而对该设备情有独钟,并决定亲自为其开发游戏。

游戏格式选择:为何选择 z80

E-Reader 支持多种应用格式:GBA 程序、NES 游戏、原始二进制数据和 z80 应用程序

  • z80 格式优势:生成的二进制文件比等效的 GBA 格式小约 30-50%,有助于将扫描卡片次数(应用加载所需)降至最低。
  • 主要挑战:开发需使用 z80 汇编语言,且 E-Reader 内置的 z80 模拟器并非完全准确,部分操作码和寄存器未被支持,有时会导致系统死锁,增加了开发难度。
  • ERAPI API:Nintendo 提供了一个简易但有效的 API(ERAPI),用于创建精灵、播放声音等常见功能,避免了将所有功能代码打包进卡带。

开发工具与调试难题

  • 工具来源:作者利用了早期开发者(如 Tim Schuerewegen, CaitSith2)留下的工具和文档,以及较新的 e-reader-dev 仓库。
  • 调试困境:在实体 GBA 上运行如同黑箱,无法输出日志。最初的调试方法是运行一个基于 JavaScript 的 z80 模拟器(z80js),输出每一步的 CPU 状态日志,但效率低下且无法交互。
  • 突破性解决方案:作者基于 ZX81-Debugger(一个 VS Code 的 z80 调试扩展)进行改造,成功开发出一个可在 VS Code 中运行的 E-Reader 专用调试器。该调试器包含一个简易的 ERAPI 模拟器,能可视化渲染游戏画面,并支持加载商业 E-Reader 卡进行反汇编调试。

开发中遇到的主要技术问题

  1. 图形渲染故障:尝试使用 ERAPI 的 SpriteDrawOnBackground 函数将精灵绘制到背景层以避免精灵数量限制,但多次重绘会导致显存数据损坏。最终改用更底层、更可靠的 LoadCustomBackground 函数解决了该问题。
  2. 程序结构:z80 应用的工作方式类似于脚本。通过 halt 操作码来同步游戏帧率和动画,无需传统复杂的主游戏循环。
  3. 资源与空间优化
    • 可利用 E-Reader ROM 内置的大量资源(背景、音效、精灵图)来节省卡带空间。
    • 单张点码条的实际可用数据存储量约为 2KB(压缩后)。作者通过有效的数据压缩,成功将完整的 Solitaire 游戏压缩到两个点码条上,并印刷在一张卡片上。

未来计划与项目资源

作者计划继续开发更多 E-Reader 游戏,目标是制作至少 10 个应用并制成实体卡片。Solitaire 卡片及更多开发信息已发布在 retrodotcards.com 网站。开发者也计划将开源其调试器。

16. Tell HN: We (Causal) got acquired – thank you HN
17. Okta – Username Above 52 Characters Security Advisory (trust.okta.com)

Okta 用户名超过52字符安全公告摘要

漏洞描述:
2024年10月30日,Okta内部发现AD/LDAP委托认证(DelAuth)的缓存密钥生成过程存在漏洞。该漏洞源于使用Bcrypt算法对“userId + 用户名 + 密码”组合字符串进行哈希生成缓存密钥。在特定条件下,攻击者可能通过提供与先前成功认证缓存密钥对应的用户名来实现认证。

影响范围:
受影响的产品为 Okta AD/LDAP DelAuth,漏洞引入时间为 2024年7月23日

修复情况:
该漏洞已于 2024年10月30日 在Okta生产环境中通过将加密算法从Bcrypt更换为PBKDF2得到解决。

漏洞利用前提条件(需同时满足):

  1. 使用Okta AD/LDAP委托认证。
  2. 未启用多因素认证(MFA)。
  3. 用户名长度达到或超过52个字符
  4. 用户此前已成功认证并生成了缓存。
  5. 缓存被优先使用(例如,当AD/LDAP代理因网络流量高等原因无法连接时)。
  6. 认证发生在 2024年7月23日至2024年10月30日 期间。

客户建议:

  • 符合上述条件的客户应检查其Okta系统日志,排查在 2024年7月23日至10月30日 期间,是否存在来自用户名长度超过52个字符的异常认证记录。
  • Okta建议所有客户至少启用多因素认证(MFA),并强烈鼓励用户注册防钓鱼认证器(如Okta Verify FastPass、FIDO2 WebAuthn或PIV/CAC智能卡),并对所有应用程序的访问强制实施防钓鱼措施。

时间线:

  • 2024-07-23:漏洞作为标准发布的一部分被引入。
  • 2024-10-30:Okta内部发现该漏洞。
  • 2024-10-30:漏洞通过更换加密算法得到解决。
  • 2024-11-04:本安全公告更新,以明确漏洞利用所需的前提条件。
18. SpawELO – small free matchmaking system for LAN parties (blog.spawek.com)

本文讲述了作者为解决LAN聚会中Dota2手动组队效率低、平衡性差的问题,逐步开发一个自动化匹配系统的过程。

问题背景:作者与朋友每年举办LAN聚会,主要玩Dota2等游戏。传统手动选队(类似学校选人)耗时、结果重复、队员水平差异大导致不平衡,且无人愿当队长。

初步解决方案:简单ELO系统

  1. 利用历史比赛数据,为每位玩家初始分配1000分ELO。
  2. 初始方案每局固定增减20分。
  3. 改进后采用标准ELO更新公式,基于两队总ELO差计算胜率概率,将分数变动平均分配给队伍成员。
  4. 通过多次迭代计算,ELO分数会收敛,可用于寻找总ELO差最小的队伍组合。

机器学习优化

  1. 建模:将ELO视为模型参数,目标是最小化所有历史比赛的预测胜率与真实结果(设为1)之间的L2损失。
  2. 反向传播:计算损失函数关于每个玩家ELO的导数,使用梯度下降法更新ELO。
  3. 过拟合问题:直接优化导致模型过拟合,ELO值爆炸式增长,完美记忆历史但无法泛化。
  4. 解决过拟合:将“真实胜率”从100%调整为概率值(如均势局75%,一边倒局95%),增加了模型学习难度,从而防止过拟合,使ELO收敛到合理范围。

最终系统:训练后的模型能根据玩家当前ELO,自动计算不同组合的预测胜率,从而生成平衡的队伍(即使人数不均)。作者展示了聚会前用新系统生成的首次分队示例,两队总ELO非常接近(2660 vs 2655),系统效果良好。

19. Show HN: Midnight Reminders via Morse Code (github.com)

问题背景
作者在凌晨2点突然想到一个需要记住的想法,但不想打扰妻子休息,也避免使用手机光线(即使很暗也会干扰),同时写字不便。

解决方案
使用莫尔斯电码作为输入方式,以便在黑暗和安静的环境下记录想法。

设备构成
基于6美元的Raspberry Pi Pico W微型电脑和一个静音手持开关构建。开关连接到GPIO引脚,用于输入莫尔斯电码。

工作流程

  • 设备通电后自动连接Wi-Fi,并立即开始监听莫尔斯电码输入。
  • 当接收到一个完整的莫尔斯电码序列后,设备会等待沉默10秒(以确认输入结束)。
  • 随后,将解析出的文本通过HTTP POST请求发送到一个网络服务。
  • 该网络服务进一步处理后,通过电子邮件将文本发送给作者。
20. Superstreamer – OSS streaming toolkit from video source to player (github.com)

Superstreamer – 开源流媒体工具包

Superstreamer 是一个可自托管的流媒体平台,旨在简化视频传输的复杂性。它通过简单的 API 调用和合理的默认配置,完成媒体的转码与封装,用于在线流媒体播放;也能动态创建 HLS 播放列表,灵活插入片头、广告及滤镜。

核心功能:

  • 转码: 将视频文件转码为不同质量的轨道(如 1080p、720p、480p)。
  • 封装与存储: 直接将 HLS CMAF 播放列表写入 S3 存储,即可用于播放。
  • 动态插播: 支持动态插入类似 Netflix 的片头作为 HLS 插播内容。
  • 广告集成: 可通过提供简单的 VMAP 插入线性广告,或手动安排 VAST 广告。
  • 播放器外观: 提供了一个简化版的播放器 API,配合 HLS.js 使用,方便开发者构建播放器 UI。

快速开始: 项目提供了预构建的容器镜像。部署步骤如下:

  1. 进入 docker 目录。
  2. 复制并配置 .env.example 文件为 .env
  3. 运行 docker compose up -d 启动服务。 详细的自托管指南可在“Getting Started”部分找到,旨在让部署过程在几分钟内完成。

贡献与支持:

  • 贡献方式: 报告 Bug(提交 Issue)、设置本地开发环境、提交 Pull Request 以添加功能或修复错误。
  • 支持项目: 作者希望项目能获得赞助。支持方式包括赞助、贡献代码、编写文档或帮助推广项目。
21. Direct Sockets API in Chrome 131 (chromestatus.com)

这个HTML页面是Chrome Platform Status网站的一部分,用于跟踪和管理Chrome浏览器的功能状态。页面采用响应式设计,兼容移动设备,包含viewport元标签和主题颜色设置。它加载了多个CSS样式表和JavaScript脚本,包括谷歌字体、分析工具和登录客户端,以支持用户交互和数据收集。

脚本部分处理用户登录状态:检查URL参数,如果未登录则提示登录,或根据错误代码(如403)显示权限错误消息,并清理URL中的错误参数。页面使用模块化JavaScript导入了ChromeStatusClient和ChromeStatusOpenApiClient,用于与后端API通信,客户端通过身份验证令牌初始化。

页面主体是一个自定义Web组件<chromedash-app>,其应用标题设置为“Chrome Platform Status”。这个组件负责渲染主要界面,但具体内容未在提供的代码中显示。整体结构优化了性能,支持全屏模式和渐进式Web应用特性,如iOS状态栏透明显示。

该页面是Chrome状态跟踪系统的基础框架,可能用于展示Direct Sockets API在Chrome 131中的实现状态,但提供的代码片段未包含具体API详情。

22. Venvstacks: Virtual Environment Stacks for Python (lmstudio.ai)

venvstacks 是一个开源的 Python 工具,旨在解决大型机器学习库依赖管理复杂、环境庞大的问题。它通过创建分层、可独立下载的虚拟环境栈,使 Python 应用程序能够嵌入到其他应用中,而无需用户手动安装 Python 依赖。其首次实际应用是为 LM Studio 桌面应用内置了 MLX 引擎。

核心概念与结构

venvstacks 利用 Python 的 sitecustomize.py 特性,将虚拟环境划分为三个独立的层级:

  1. 运行时层:包含特定版本的 Python 解释器(如 CPython 3.11)及其基础依赖。
  2. 框架层:包含关键框架(如 PyTorch、scikit-learn)及其依赖。它可以共享并链接到运行时层的环境。
  3. 应用层:包含可直接启动的组件和具体应用代码。它可以共享并链接到框架层和运行时层的环境。

各层环境可以独立归档、发布和部署,但它们的依赖锁定是集成的。这确保了应用层能共享框架层安装的依赖,框架层能共享运行时层安装的依赖,从而避免重复安装大型库,节省空间。

核心工作流程

venvstacks 的工作流通过命令行工具管理,主要命令包括:

  1. 定义:在 venvstacks.toml 配置文件中,使用不同的表([[runtimes]], [[frameworks]], [[applications]])定义各个环境层及其依赖和关联关系。
  2. 锁定:运行 venvstacks lock 命令,对整个环境栈的所有依赖进行统一解析和锁定,确保各层独立部署后仍能协同工作。锁定机制优化了更新,下层变化不会不必要地触发所有上层重建。
  3. 构建:运行 venvstacks build 命令,根据规格和锁定的依赖,创建实际的 Python 环境。
  4. 发布:运行 venvstacks publish 命令,将构建好的每一层环境打包成可重现的二进制归档文件,并附带详细的元数据(如依赖哈希、归档大小和内容哈希)。这些归档可传输到目标系统解压使用。
  5. 本地导出venvstacks local-export 命令可在本地复制构建好的环境,避免打包解压大型归档(如数 GB 的 PyTorch)的开销,便于快速迭代开发和测试。

在 LM Studio 中的应用

LM Studio 使用 venvstacks 来部署其开源的 mlx-engine。它将引擎作为一个应用层,运行在 MLX 框架层和 CPython 3.11 运行时层之上。这种架构允许 LM Studio 在不重复分发大型框架层和运行时层的情况下,添加新的基于 MLX 或 Python 的功能,并支持平滑地进行组件版本迁移。

安装与获取

venvstacks 已在 PyPI 上发布,可通过 pip install --user venvstackspipx install venvstacks 安装。项目采用 MIT 许可证,源代码托管在 GitHub (github.com/lmstudio-ai/venvstacks)。开发者可通过 GitHub Issues、Python Packaging Discord 的 #venvstacks 频道或 LM Studio Discord 的 #dev-chat 频道进行反馈和讨论。

23. Low-cost, portable device can detect colorectal and prostate cancer in an hour (medicalxpress.com)

低成本便携设备一小时内检测结直肠癌与前列腺癌

得克萨斯大学埃尔帕索分校的研究人员开发了一种低成本、便携式的微流体设备,能在一小时内检测出结直肠癌和前列腺癌。该设备由化学与生物化学教授Xiujun (James) Li博士领导,其核心是一种创新的“纸-聚合物池”混合微流体微板结构。

工作原理与创新点 该设备将患者血液样本引入微小的孔洞和特殊纸张上。纸张可在几分钟内捕获血液中的癌症蛋白质生物标志物,随后纸张会根据生物标志物的类型和浓度改变颜色,颜色强度可指示癌症类型及进展阶段。这种微流控设计仅需极少量液体即可完成多种功能。

优势与性能 与传统的商业方法ELISA相比,该设备具有显著优势:

  • 速度极快:ELISA方法通常需要12至16小时,而此设备仅需约一小时。
  • 成本极低:设备成本仅需几美元,无需昂贵的专用仪器。
  • 灵敏度高:比传统方法灵敏度高约10倍,能够检测到早期癌症中含量更低的生物标志物。
  • 便携易用:适合在缺乏专业医疗仪器的偏远地区或资源有限的环境中使用,有助于解决诊断障碍。

应用前景与意义 目前的研究集中于结直肠癌和前列腺癌,但该技术方法可适用于多种癌症类型。研究人员指出,早期检测对提高患者生存率至关重要,而此设备能加快诊断进程,尤其对医疗资源匮乏地区(如部分发展中国家)的癌症死亡率降低具有重要意义。

研究现状与后续步骤 该设备的原型研究论文已发表于《Lab on a Chip》期刊。然而,设备在公开使用前仍需完成最终设计,并通过临床试验验证,随后可能还需获得美国食品药品监督管理局的批准,整个过程可能需要数年时间。研究团队认为,这项创新通过缩短检测时间和减少对昂贵仪器的需求,显著改善了即时诊断,尤其适合资源有限的环境,有望改善癌症的早期诊断和治疗结果。

25. The Shell Hater's Handbook (2010) (shellhaters.org)

《The Shell Hater's Handbook (2010)》文章摘要

本文介绍的是Ryan Tomayko在2010年旧金山举行的区域性Ruby会议GoGaRuCo上所做的一个演讲,主题为UNIX Shell编程入门

演讲背景与目的:

  • 演讲标题为“The Shell Hater's Handbook”(讨厌Shell者手册),暗示其旨在向那些可能对Shell有负面看法或不熟悉的开发者介绍其价值与用法。
  • 这是一个入门级演讲,内容聚焦于UNIX Shell编程。

附带资料: 文章下方提供了与演讲相关的补充材料链接:

  1. The POSIX Shell And Utilities:一份针对IEEE Std 1003.1-2008 POSIX shell语言及命令参考的“讨厌者索引”,被描述为编写Shell时不可或缺的参考资料。
  2. AWK-ward Ruby:一篇探讨从AWK到Perl,再到Ruby的功能演进文章,原计划作为该演讲的配套文章,刊登在GoGaRuCo会后总结杂志中。

总结: 该内容的核心是宣传Ryan Tomayko的一次旨在向开发者(特别是Ruby开发者)介绍和普及UNIX Shell编程基础的演讲,并提供了演讲相关的官方资料(视频、幻灯片)以及两篇延伸阅读材料。

26. SmolLM2 (simonwillison.net)

SmolLM2 模型概述

基本信息

  • 发布时间:2024年11月2日
  • 开发团队:Hugging Face 的 Loubna Ben Allal 及其研究团队
  • 模型特点:一系列紧凑型语言模型,提供三种尺寸,旨在实现轻量级且能在设备端运行。

模型规格 提供三种参数规模:

  1. 135M(1.35亿)参数
  2. 360M(3.6亿)参数
  3. 1.7B(17亿)参数

训练详情

  • 训练数据量:11万亿个令牌。
  • 训练数据集:使用多样化的数据组合,包括FineWeb-Edu、DCLM、The Stack,以及团队策划并计划很快发布的新的数学和编码数据集。

许可证与获取

  • 模型权重以Apache 2许可证发布。

使用与初步体验

  • 博客作者使用 llm-gguf 插件进行了测试,初步印象非常积极。
  • 提供了运行不同量化模型的命令行示例:
    • 运行 1.7B 参数的 Q8 量化模型(约1.7GB)。
    • 运行 135M 参数的 Q8 量化模型(约138MB)。

其他信息

  • 详细的配套博客文章即将发布。
  • 提供了2024年7月发布的初代模型“SmolLM”的入口链接,其描述为“速度极快且功能强大”。