2024-10-19

19 篇热帖

2. The long road to lazy preemption in the Linux CPU scheduler (lwn.net)

Linux CPU调度器中的懒惰抢占(lazy preemption)

当前抢占模式

Linux内核目前提供四种CPU抢占模式,针对系统吞吐量和响应时间进行不同权衡:

  • PREEMPT_NONE:仅允许在任务时间片耗尽时抢占
  • PREEMPT_VOLUNTARY:在内核中添加大量自愿抢占点
  • PREEMPT_FULL:除持有自旋锁等特殊位置外几乎任意点可抢占
  • PREEMPT_RT:优先抢占,甚至使大部分自旋锁持有代码可抢占

懒惰抢占的核心思想

2023年9月提出的“懒惰抢占”概念旨在简化内核调度并提供更好结果。其核心是引入新标志TIF_NEED_RESCHED_LAZY,表示需要重调度但非立即执行。

工作原理

在懒惰抢占模式(PREEMPT_LAZY)中:

  1. 大多数事件设置TIF_NEED_RESCHED_LAZY而非立即抢占标志TIF_NEED_RESCHED
  2. 仅在返回用户空间等特定点检查任一标志
  3. 定时器滴答处理程序检查懒惰标志并设置立即抢占标志

这实现了:

  • 在几乎任何位置启用内核抢占
  • 真正需要时(如实时任务就绪)快速响应
  • 任务通常运行接近完整时间片以保持吞吐量

替代现有模式

懒惰抢占最终将取代PREEMPT_NONEPREEMPT_VOLUNTARY,仅保留两种非实时模式:

  • PREEMPT_LAZY:在原先两种模式之间
  • PREEMPT_FULL

移除cond_resched()调用

当前内核有数百个cond_resched()调用作为启发式抢占点。懒惰抢占允许内核几乎任意点可抢占后,这些调用最终可被移除。

在当前补丁中,cond_resched()仅检查TIF_NEED_RESCHED,预计不到5%的调用需要保留(检查TIF_NEED_RESCHED_LAZY)。

当前状态

该补丁系列已提交,但仍有大量工作:

  • 需要检查数百个cond_resched()调用
  • 需要进一步开发和性能测试
  • 初步测试显示吞吐量略低于PREEMPT_VOLUNTARY

最终目标

实现更小、更简单的内核,无需在代码中散布调度相关调用即可提供可预测延迟。这需要时间完成,但将是更优解决方案。

5. Civet: A Superset of TypeScript (civet.dev)

Civet 语言摘要

Civet 是一种编译为 TypeScript 或 JavaScript 的编程语言,作为 TypeScript 的超集,它在保持与现有 JS/TS 生态系统(如 VSCode 工具链)完全兼容的基础上,提供了更简洁、更强大的语法特性。

核心特性与亮点

  1. 高度兼容性:起始即兼容 99% 的 JS/TS 语法,便于将现有代码迁移到 Civet。
  2. 超越 TC39 提案
    • 模式匹配:提供了比现有 if-else 链更强大、更易读的复杂条件匹配语法。
    • 管道操作符:支持使用 |> 进行函数管道组合,并引入了“胖管道”(||>)来对同一对象进行链式操作。
    • 字符串去缩进:自动移除模板字符串中每行的公共前导空白。
    • Do 表达式:允许在表达式位置使用块语句,使其返回最后一个表达式的值。
  3. 强大的语法糖与表达能力
    • 单参数函数简写:使用 ($) => ... 语法快速定义回调。
    • 自定义中缀运算符:允许将函数作为中缀运算符使用,如 max(min(value, ceiling), floor)
    • 一切皆表达式if/for 等语句块可直接用作表达式,返回其最后一个值。
    • 在条件/循环中声明变量:允许在 iffor 的条件部分直接进行变量声明与赋值。
    • 链式比较:支持 a < b && b < c 的连写形式。
    • 迭代项默认 constfor...of 循环中的迭代变量默认为常量。
    • 灵活的展开语法:允许在数组和对象的任意位置使用展开操作符。
  4. JSX 支持与更简洁的导入/导出
    • 支持 JSX 语法。
    • 导入语法与解构赋值更加一致。
    • 提供了更便捷的 export ... from 语法。
  5. 项目信息
    • 列出了主要赞助商和核心贡献者(如 edemaine、STRd6 等)及其代码贡献量。

Civet 旨在通过提供这些先进的语法特性,帮助开发者编写更简洁、更具表现力的代码,同时无缝利用现有的 TypeScript 生态。

6. Send: Open-source fork of Firefox Send (send.vis.ee)

Send:Firefox Send的开源分支

Send 是一个开源文件共享工具,作为 Firefox Send 的分支版本。其主要功能是通过加密文件并生成一个自动过期的链接来发送文件,从而确保重要文档不会永久在线,以保护用户隐私和数据安全。该工具旨在提供简单、安全的文件传输方式,适合需要临时分享敏感资料的场景。

8. Have McKinsey and its consulting rivals got too big? (www.economist.com)

核心摘要

本文探讨了以麦肯锡为代表的大型管理咨询公司可能面临“过于庞大”的困境,指出其增长模式与战略聚焦受到内部质疑,行业黄金时代或将终结。


匿名批评与内部反思

一份在2024年3月流传的匿名备忘录引发了对麦肯锡的批评。据称,该文件由前合伙人撰写,指责这家顶级战略咨询公司近年来追求“不受约束且缺乏管理的增长”,并批评其领导层“缺乏战略重点”。备忘录警告,这种趋势可能导致“真正伟大的组织”逐渐消亡,直指麦肯锡赖以生存的自我管理与战略清晰度正在流失。

行业背景:黄金时代的隐忧

文章标题《自我管理艺术的失传》点明主旨:咨询行业长期以来被视为CEO的“耳语者”,凭借专业知识和战略洞察影响商业决策。然而,如今这一模式面临挑战。麦肯锡的困境被视作行业缩影,暗示整个管理咨询领域可能正从黄金时代步入转折点。

核心问题:增长与聚焦的失衡

  • 规模扩张的副作用:持续的业务扩张可能导致公司失去内部协调与战略聚焦,削弱其提供差异化、高质量服务的能力。
  • 自我管理能力下降:大型咨询机构可能因结构复杂而难以保持高效的内部治理,进而影响对外服务的专业性与创新性。
  • 行业信任危机:若无法解决增长带来的管理问题,咨询公司的声誉及其“战略引领者”的角色可能逐渐受损。

总结

麦肯锡面临的内部批评揭示了咨询行业巨头的共性挑战:在追求规模扩张的过程中,可能牺牲了维持卓越所需的自我管理与战略清晰度。这不仅关乎单一公司的未来,也折射出整个行业在新时代下的适应性考验。

9. Express v5 (expressjs.com)

Express v5 的发布信息页面已从旧地址 /2024/10/15/v5-release.html/ 重定向至新地址 /en/blog/2024-10-15-v5-release

11. Building a Game with the Real Engine (novalis.org)

文章总结:使用“Real Engine”构建游戏

作者放弃虚幻引擎,采用自定义的“Real Engine”方法开发点击式游戏。该方法核心是构建实体立体模型(微缩场景),拍摄照片,再导入游戏引擎组建空间;移动元素通过定格动画或单独拍摄组件并在引擎中实现动画。以下为关键内容摘要:

动机与背景

  • 作者原计划与艺术家合作,但先后两位艺术家均未能完成工作,导致合作失败。
  • 为避免情感投入和低效重复,作者决定独立承担艺术创作,虽预估艺术耗时远超编程(数倍以上),但乐在其中。

“Real Engine”方法特点

  • 实体构建:在物理空间搭建微缩场景,使用手工材料(如空气干燥粘土、环氧粘土、针刺毡)制作细节,避免预制家具或大量3D打印,以保持独特手工质感。
  • 摄影技术:自制相机系统(基于树莓派),解决手机镜头视角不足问题;采用焦点堆叠(focus stacking)增强景深,全景拼接扩展视野,通过Wi-Fi控制曝光和白平衡。
  • 引擎集成:照片导入自定义游戏引擎,链接成可探索空间;动画部分使用定格拍摄或单独组件动画,视频后期添加遮罩处理透明度。

为何不用传统工具?

  • Blender:作者排斥其界面,易出错且修复繁琐;纹理重复破坏探索感,手工制作可确保每个元素独特(如楼梯每阶不同)。
  • AI艺术:遵循提示能力差,难以生成一致视角的多张图像,且细节(如建筑结构)常不符合逻辑。
  • 其他引擎:传统3D游戏纹理易重复,作者希望玩家体验全新世界。

规模与设计挑战

  • 场景设定:游戏以高山修道院为背景,室内外结合;内部用1:12比例,外部用1:48比例,通过绿幕衔接不同尺度。
  • 建筑细节:以小教堂为例,说明结构复杂性(如梯形墙、复合角度);窗户使用醋酸片和亚克力制作彩色玻璃,地板用手工切割瓷砖铺设。
  • 材料实践:使用DAS空气干燥粘土制作门框,环氧粘土强化细节,针刺毡制作屏幕动画;摄影中解决光线泄漏、家具粗糙等问题,通过反复重建改进。

项目进展与发布

  • 作者享受创作过程,持续学习(如相机校准、光照优化)。
  • 游戏《High Mountain Abbey》预计2025年或2026年初发布,具体取决于微缩场景的制作和拍摄进度。

此方法强调手工真实感,虽耗时但能创造独特视觉体验,作者视其为对传统游戏开发的有趣替代。

12. An Illustrated Guide to Maritime Signal Flags (rabbitwaves.ca)

国际信号旗图解指南摘要

国际信号码是一套标准化的信号与代码系统,用于在语言障碍、距离遥远等口头沟通困难的情况下,传递重要的安全与航行信息。该系统为每个字母和数字创建了标准化的语音字母表(例如:Alfa、Bravo、Charlie)及相应的信号旗,以避免发音相似字母的混淆。

  • 单旗与组合旗的含义: 每一面旗单独使用时具有特定含义(例如,奥斯卡旗单独表示“有人落水”)。两面旗组合使用可传达更具体的信息(例如,统一旗与威士忌旗组合表示“祝您航行愉快”)。在双旗信号后附加数字旗可传递更详细的消息(例如,魁北克旗、罗密欧旗加数字1旗表示“我可否靠泊?”)。
  • 医疗紧急信号: 以迈克旗开头的三字母信号专门用于医疗紧急情况(例如,迈克旗接阿尔法旗再接第二替代旗表示“请求紧急医疗指导”)。
  • 替代旗: 为避免携带多面相同旗帜,系统使用三面替代旗。替代旗代表其指向位置的前一面旗帜(例如,替代1旗用于表示第二个D,组成DD信号,意为“禁止船只靠泊”)。
  • 日间遇险信号: 在遇险时,可使用N和C旗进行视觉信号传递。若缺乏信号旗,亦可采用日间信号形标:将一面方形旗置于一个球状物体上方或下方,以此表示遇险。
  • 拼写功能: 单个字母旗可用于拼写单词。拼写开始时需先升起洋基旗和祖鲁旗,表示“以下内容为明文”。之后按顺序升起对应字母旗即可拼写出名称(例如,用帕帕旗、印度旗、十一月旗和奥斯卡旗拼写船名“Pino”)。
  • 多语言标准化: 国际信号码的所有信息均已标准化,并被翻译成九种语言(英语、法语、意大利语、德语、日语、西班牙语、挪威语、俄语和希腊语)。每种语言都有一本手册,确保相同代码对应相同含义(例如,维克托旗的标准化含义是“我需要援助”)。
13. Mosaic REALMAP: Explore Prague in detail with 1.26M images (www.mosaic51.com)

Mosaic REALMAP:发布1.26百万张高分辨率布拉格图像数据集

数据集概览 Mosaic公司发布了一个大规模、高精度的布拉格城市图像数据集,供研究非商业用途。该数据集基于CC BY-NC 4.0知识共享许可协议提供,旨在推动计算机视觉、摄影测量及三维建模等领域的研究。

核心规格

  • 数据量:总计15.15太像素(15.15 Terapixels)。
  • 图像构成:包含1,262,814张源图像(每个全景由6张1200万像素图像拼接而成),对应210,469个13.5K分辨率的全景图。
  • 采集精度:图像具有精确的地理位置标记,通常精度在2厘米左右,即使在GPS信号不佳的环境下,也能保持10-20厘米的精度。
  • 覆盖范围:以每米一张的密度沿轨迹采集,覆盖了布拉格市中心绝大部分区域,包括所有死胡同。

技术细节

  • 使用Mosaic X相机(7200万像素,全局快门)在阴天拍摄,以避免强烈阴影,获得均匀光照。
  • 通过控制车速(约20公里/小时)、短曝光时间和大传感器尺寸,最大限度地减少了运动模糊。
  • 同时提供了相机的内参和外参标定数据

潜在研究应用 该高精度、高密度数据集适用于多种研究场景:

  1. 计算机视觉:可用于物体识别、图像分割、场景理解和视觉导航算法的开发与测试。
  2. 摄影测量与三维重建:厘米级定位精度有助于创建城市环境的精细三维模型,应用于历史保护、城市规划等。
  3. 点云生成:可生成高度详细的3D点云,用于结构评估、虚拟现实等。
  4. 高级渲染技术:支持3D高斯溅射神经辐射场等前沿技术,用于生成连续、逼真的三维表面和新视角合成。
  5. 专项分析:适用于物体检测、树木植被分析、路面监测、电力线巡检等多种实际应用。

公司背景与目标

  • Mosaic是一家专注于360度成像硬件和软件的公司,其产品已应用于全球40多个国家。
  • CEO Jeffrey Martin拥有丰富的360度影像经验,曾创办360cities.net并创下吉尼斯世界纪录。
  • 公司的使命是普及高质量的360度成像技术,使其应用于从街景测绘到大规模摄影测量等广泛领域。
  • 发布此数据集一方面是为了支持全球研究社区,促进技术创新;另一方面也希望提升公司知名度,并根据用户反馈迭代其产品。

未来展望 Mosaic计划在未来发布更多来自全球其他标志性地点的数据集,并持续研发更先进的成像技术。公司期待与研究社区合作,共同探索成像与可视化技术的新前沿。

15. S3 as a Git remote and LFS server (github.com)

工具概述

该工具库(git-remote-s3)允许将Amazon S3用作Git远程仓库和Git LFS服务器。它通过自定义的Git远程助手和LFS传输实现,为无服务器Git托管提供支持。

安装与前提条件

  1. 安装:作为Python脚本(Python >= 3.9),通过 pip install git-remote-s3 安装。
  2. 前提条件
    • 准备AWS账户并配置具有IAM用户/角色。
    • 创建或拥有一个S3存储桶。
    • 为IAM用户/角色附加最小权限策略(包括s3:PutObjects3:GetObjects3:DeleteObjects3:ListBucket权限)。
    • (推荐)为存储桶启用SSE-KMS加密,并授予IAM用户/角色相应KMS密钥的访问权限。
    • 安装Git和AWS CLI。

安全性

  • 数据加密:默认在静止和传输中加密。推荐使用客户管理的KMS密钥(带存储桶密钥)增强安全性。
  • 访问控制:通过IAM权限控制,可在存储桶、前缀(用于在同一桶中存放多个仓库)和KMS密钥级别进行管理。可通过修改资源策略来限制对特定仓库前缀的访问。

核心功能:使用S3远程仓库

  • 创建与推送:使用s3://前缀的URI标识远程仓库(如s3://bucket-name/repo-prefix)。支持通过s3+zip://方案额外上传ZIP归档。
  • 克隆与常规操作:支持标准的git clone、分支创建与推送等Git操作。使用子模块时需配置protocol.s3.allow
  • 与AWS CodePipeline集成:使用s3+zip://方案时,推送会自动生成并上传repo.zip文件,可配置为CodePipeline的S3源动作。

Git LFS支持

  • 通过安装并配置git-lfs-s3作为自定义传输,可将大文件(LFS对象)存储到同一S3存储桶的<prefix>/lfs/<oid>路径下。重复上传会被避免。

并发控制与注意事项

  • 引用锁机制:通过S3条件写入实现对每个引用的锁定,防止并发推送到同一分支时产生冲突。锁默认60秒超时,可通过环境变量或doctor命令管理。
  • 特殊行为
    • 对于结构正确的S3 URI,即使不存在,克隆也会成功(创建一个空仓库)。
    • 在罕见情况下(如旧版本客户端并发推送),可能导致同一分支存在多个包(bundle),需使用git-remote-s3 doctor命令修复。

底层原理

  • 远程工作原理:Git对象以捆绑包(.bundle文件)形式存储在S3中,路径为<prefix>/<ref>/<sha>.bundle。推送时创建新包,成功后删除旧包。
  • LFS工作原理:LFS文件以其唯一标识符(OID)存储在S3的LFS前缀下。

调试与鸣谢

  • 调试:可通过--verbose标志、设置transfer.verbosity=2或环境变量GIT_REMOTE_S3_VERBOSE=1输出调试信息。LFS调试日志可通过特定命令启用。
  • 鸣谢:该项目的S3集成部分受到Bryan Gahagan工作的启发,LFS实现则受益于@nicolas-graves的lfs-s3项目。
16. How to leverage Claude's capabilities with interactive visualization (github.com)

该文章介绍了一个结合Claude AI能力与交互式数据可视化的Next.js应用程序,主要用于通过聊天方式分析财务数据。

核心功能

  • 智能数据分析:由Claude(使用Claude 3 Haiku和Claude 3.5 Sonnet)提供支持。
  • 多格式文件上传:支持文本/代码文件(.txt, .md, .html, .py, .csv等)、PDF文档(仅限带文本的普通PDF,不支持扫描件)及图片。
  • 交互式数据可视化:Claude可根据分析的数据上下文自动生成多种图表,包括折线图、柱状图、多柱状图、面积图、堆叠面积图和饼图。

技术栈

  • 前端:Next.js 14、React、TailwindCSS、Shadcn/ui组件、Recharts(用于数据可视化)、PDF.js(用于PDF处理)。
  • 后端:Next.js API路由、Edge Runtime、Anthropic SDK。

项目设置与运行

  • 前提条件:Node.js 18+ 和Claude API密钥。
  • 安装步骤:克隆仓库、安装依赖、配置.env.local文件中的API密钥,并启动开发服务器。

使用场景

  • 主要用于财务分析任务,如数据提取、趋势分析和生成可视化图表。
  • 可扩展至其他领域,例如环境数据分析(气候变化趋势)、体育表现跟踪、社交媒体分析、教育进度跟踪和健康监测。
  • 也可结合图表和图片进行创意应用,例如通过饼图分析图片中的常见元素。

该应用展示了如何通过AI与可视化工具的集成,实现灵活的数据分析和交互体验。

17. Steve's Jujutsu Tutorial (steveklabnik.github.io)

本文是Steve关于版本控制系统Jujutsu的学习教程。作者分享撰写教程的初衷:习惯在学习新事物时同步记录,这有助于自身理解并可能帮助有相似思维模式的读者。

Steve坦言自己对Git的命令行界面接受度尚可,但一直未能理解“堆叠差异”的概念。在朋友推荐Jujutsu后,他初期未能掌握。受Chris Krycho文章的启发,他决定再次尝试,最终在清晨按官方教程安装并配置了Jujutsu,开始了这份教程的撰写。

教程内容是作者个人的学习记录,旨在整理所学。他明确指出教程未必完整、准确或优秀,并开放了源码仓库供反馈。接下来,教程将正式展开对Jujutsu的教学。

18. Morsle – A daily Morse code challenge (morsle.fun)

Morsle – 每日摩尔斯电码挑战

Morsle 是一个每日摩尔斯电码挑战活动。具体内容未加载,无法提供详细信息。

19. Knocker uppers: Waking up the workers in industrial Britain (2016) (www.bbc.com)

敲窗人:工业革命时期唤醒工人的职业 在闹钟普及前,英国工业区曾长期存在一种特殊职业——"敲窗人"(knocker uppers)。该职业主要盛行于北方纺织城镇和伦敦码头区,服务于轮班制工人和受潮汐影响作息的码头工人。

工作方式与工具 敲窗人手持长杆(类似钓鱼竿)、软锤、摇铃甚至豌豆射击器,沿街敲击顾客卧室窗户唤醒他们。通常只敲击三四下便迅速前往下一户,确保效率。

社会背景与消亡 该职业出现于工业革命时期,与工厂倒班制直接相关。据1956年生于奥尔德姆的艺术家保罗·斯塔福德回忆,敲窗人主要唤醒临街卧室的住户,后排房间往往听不到声响。这种服务模式持续到20世纪70年代才逐渐消失,被家用闹钟取代。

历史意义 敲窗人不仅体现了工业时代的时间纪律要求,也反映了前电气化时期民间自发的解决方案。其存在佐证了工业化如何重塑日常作息,并催生出适应新社会需求的临时性职业。