给软件开发者准备的优质简报,每日阅读 10分钟。
College instructor turns to typewriters to curb AI-written work
康奈尔大学德语教师用打字机抵制AI代写
- 康奈尔大学德语教师格里特·马蒂亚斯·费尔普斯自2023年春季起,每学期拿出从旧货店收集的数十台手动打字机,要求学生完成一项被称为"模拟"的写作任务,全程不使用任何屏幕、在线词典、拼写检查或删除键
- 费尔普斯此举源于学生对生成式AI和在线翻译工具的过度依赖,她质问学生:"如果作业已经很完美,而且不是你自己写的,那我阅读它还有什么意义?你能离开电脑完成它吗?"
- 没有屏幕意味着没有通知干扰写作,学生无法随时搜索答案,只能与同学讨论互助,一位计算机专业学生坦言:"我被迫真正独立思考问题,而不是把任务交给AI或谷歌搜索"
- 大多数学生因小指力量不足以进行盲打,只能用食指缓慢敲击按键,这种放慢的节奏让学生学会接受纸面上的错误和修改痕迹,费尔普斯建议学生直接在错误处打叉覆盖
- 该做法是美国教育界回归传统考试方法趋势的一部分,费尔普斯还会带上自己7岁和9岁的两个孩子担任"技术支持",确保课堂无人使用手机
Thoughts and feelings around Claude Design
关于 Claude Design 的思考与感受
- 作者认为 AI 时代设计工具将分化为两条路径:一是直接生成代码的工具(如 Claude Design),二是无需代码的纯创意探索环境,用于快速构思和概念验证
- Figma 为适配工程化组织而追求系统化,引入了组件、样式、变量、属性等层层嵌套的复杂概念,但这些原语与代码无法精确对应,即使是 Figma 自己的设计系统也存在 946 个颜色变量、组件变体深度嵌套等问题,维护成本极高
- Figma 封闭且难以程序化处理的文件格式反而使其被排除在 AI 训练数据之外——LLM 是在代码而非 Figma 原语上训练的,这导致 Figma 在 AI 时代天然处于竞争劣势
- Claude Design 遵循工艺美术运动中的"材料真实性"原则,直接以 HTML 和 JS 为底层,诚实呈现技术本质,且其与兄弟工具 Claude Code 的深度整合将使设计与开发之间的反馈循环成为一次连贯对话
- Figma Make 仍假设设计文件是权威来源,只服务于已深度绑定 Figma 生态的用户;相比之下 Sketch 等老牌工具若想抓住变革机会,需要大幅扩展创意能力而非继续依赖"原生 Mac 应用"的身份
- 作者以调侃口吻指出:代码生成门槛不断降低后,用 Figma 这种"在水彩画上塑陶"的方式工作将显得多余——Figma 的 Sketch 时刻(被时代抛弃的时刻)正在快速逼近
Game devs explain the tricks involved with letting you pause a game
游戏暂停功能的实现方式
- 开发者普遍通过操控游戏时间缩放来实现暂停:最常见的是将时间缩放设为0或接近0的值,同时确保菜单界面等必要元素能够无视暂停状态继续正常运作
- 部分开发者有意避免将时间缩放精确设为0,Chris Weisiger在《Waves of Steel》中将游戏速度降至正常值的十亿分之一,Tommy Hanusa则设为0.000001,以规避Unity等引擎在数值为0时的特殊行为
- 游戏存在多种不同级别的暂停状态,如断开Kinect摄像头、打开Xbox系统菜单、打开物品栏或断开手柄等,《Kinectimals》中就有约七种不同的暂停层级,每种暂停的处理方式各异
- 许多开发者采用截图技术:暂停时对游戏画面进行截图,用该截图作为菜单背景,同时停止渲染实际游戏对象以节省内存,Vlambeer工作室在《Minit》和《Disc Room》等游戏中使用此方法,有时还会跳转到一个完全空白的房间或停用所有游戏对象
- 多个暂停系统之间可能产生冲突并导致bug,例如同时处理常规暂停和手柄断开暂停时会出现问题;许多开发者在职业生涯早期实现暂停功能时,会让每个游戏对象在每一帧都检查暂停状态,这会导致整体性能下降
- 开发者Caliban Darklock建议使用层级结构让顶层对象统一管理暂停状态,而非让所有对象各自检查,这一经验往往来自早期开发中的失败教训
Vercel says internal systems hit in breach
Vercel披露内部系统遭第三方AI工具OAuth应用入侵
- 入侵源头为第三方AI工具的Google Workspace OAuth应用遭大规模破解,可能影响数百名跨多个组织的用户
- Vercel确认"有限数量的客户"受影响,但未具体披露受影响客户数量及具体涉及哪些系统
- Vercel建议客户检查活动日志中的可疑行为、轮换环境变量,并使用敏感环境变量功能将API密钥等标记为敏感信息以加密存储
- Vercel已聘请事件响应专家介入调查、通知执法部门,并承诺持续更新事件进展页面
- 该第三方应用的具体名称未被披露,但Vercel已将其标识符列为威胁指标(IOC),预计后续可能有更多相关安全事件曝光
Vercel April 2026 security incident
Vercel 2026年4月安全事件公告
- Vercel发现部分内部系统遭到未授权访问,已启动调查并聘请事件响应专家介入,同时已通知执法部门
- 调查显示此次事件的源头是一个小型第三方AI工具,该工具的Google Workspace OAuth应用遭到大规模入侵,波及数百名跨多个组织的用户
- 目前已确认受影响客户数量有限,Vercel正在直接与这些客户联系;平台服务保持正常运行
- 对于标记为"敏感"的环境变量,Vercel明确表示其以特殊方式存储无法被读取,目前无证据表明这些值遭到访问;但未标记为敏感的环境变量(如包含API密钥、令牌、数据库凭证、签名密钥等)应视为可能已泄露并优先轮换
- Vercel建议用户立即检查账户和环境活动日志,启用敏感环境变量功能以保护敏感值,并可通过vercel.com/help获取密钥轮换方面的技术支持
- Vercel公布了涉事OAuth应用的客户端ID,建议Google Workspace管理员和账户所有者立即排查该应用的使用情况
The seven programming ur-languages (2022)
七种编程语言的根源原型
- ur-语言概念:编程语言存在七个根本原型家族,学习同一家族的语言只需建立少量新的神经通路,但跨越到陌生家族需要大量时间和精力;作者建议首先精通ALGOL家族的语言,其次学习SQL(属于Prolog家族),之后每年学习一个陌生家族的语言
- ALGOL家族:最古老的ur-语言,源于Ada Lovelace为巴贝奇分析机编写的程序,其程序由赋值、条件语句、循环和函数组织;涵盖C、C++、Python、Java、JavaScript、Ruby、Fortran、Pascal、Ada等几乎所有主流语言;20世纪80年代从Self家族引入类的概念,2010年后又从ML家族吸收了新特性
- Lisp家族:以括号包围的前缀表达式为语法,其内置的列表数据结构与代码形式完全一致,独特之处在于宏系统允许程序员修改代码本身并重新定义语言语义,是仅次于Fortran仍在使用的第二古老语言(1958年由John McCarthy创造);代表语言包括Common Lisp、Scheme、Clojure、Emacs Lisp
- ML家族:以函数为第一等公民值,具有Hindley-Milner类型系统和Tagged Unions,所有迭代都通过递归实现;部分语言(如Haskell、Miranda)默认惰性求值;代表语言包括Standard ML、OCaml、Haskell,以及现代的依赖类型语言Agda和Idris
- Self家族:以消息传递为基础的纯面向对象语言,程序由相互发送和接收消息的对象组成,条件判断和循环都通过消息传递实现,Self消除了类的概念;Smalltalk和Self是其典型代表,JavaScript源自Self的类less对象系统,Common Lisp的对象系统(CLOS)则将消息分发泛化到所有参数,Erlang将并发模式改为并行线程间的消息监听
- Forth、APL、Prolog三族:Forth是基于栈的语言,语法可完全替换,常用于定义嵌入式领域的小语言;APL以n维数组为核心,操作符仅一两个符号却能表达复杂运算,其符号序列本身就成为操作的标签;Prolog以事实和查询构建程序,通过搜索和剪枝策略寻找答案,本质上是图搜索;SQL属于Prolog家族
Notion leaks email addresses of all editors of any public page
公开Notion页面严重隐私泄露漏洞
- 安全研究人员"impulsive"发现,所有公开的Notion页面正在泄露所有页面编辑者的邮箱地址,用户无需任何身份验证即可获取这些信息
- 仅需发送一个POST请求,无需cookies或tokens,就能一次性获取页面所有编辑者的全名、邮箱地址和个人头像
- 任何将公司wiki等内部资料设置为公开可见的Notion页面,都会导致员工邮箱等个人信息被完全暴露
- 该安全漏洞早在2022年就已有人报告,但截至2026年4月该漏洞仍然存在且可被利用
- 此帖子获得超过12.7万次浏览、1300余次点赞和595次转发,引发广泛关注
Show HN: I made a calculator that works over disjoint sets of intervals
区间并集计算器 — 区间并运算的在线实现
- 这是一款基于区间并运算(Interval Union Arithmetic)实现的计算器,区别于传统计算器仅处理实数,它支持对区间并集(如
[a, b] U [c, d])进行加减乘除、指数、对数、三角函数等完整算术运算 - 核心特性包括:闭合性——所有运算结果始终保持区间并集形式;除零安全——可安全除以包含零的区间(如
1 / [-2, 1]→[-∞, -0.5] U [1, +∞]);以及包含性保证——从每个输入区间中任选实数进行相同运算,其结果必定落在输出区间内 - 提供全精度模式,基于 IEEE 754 双精度浮点数实现外向舍入,确保计算结果区间必定包含无限精度下的真实值,可有效处理
0.1 + 0.2 = [0.29999999999999993, 0.3000000000000001]等经典浮点精度问题 - 支持丰富的语法特性:区间表示
[a, b]、并集运算符U、嵌套区间写法(如[0, cos(2*pi)]区间边界可参与运算);内置函数涵盖 lo()/hi() 边界提取、hull() 凸包、sqinv() 平方逆、对数指数、三角及反三角函数、最值运算等 - 由 Victor Poughon 开发并开源,核心计算引擎为
not-so-float,支持 GitHub 赞助;未来计划添加交集合运算、ans变量支持、改进并集运算符优先级等功能
What are skiplists good for?
跳表到Skiptree:Antithesis的树形查询优化实践
- 跳表是一种随机化数据结构,通过叠加层级递减的链表实现"快速通道",每个节点有50%概率晋升到上一层,将O(n)查找优化至O(log n),可作为二叉搜索树的替代方案
- Antithesis在模糊测试中需要沿parent pointers向上追溯日志消息的事件历史,但BigQuery等分析型数据库的点查询会触发全表扫描,导致查询代价为O(depth)倍的全量数据读取
- 分离存储方案(树结构存OLTP数据库、其余存BigQuery)存在双重写入和一致性问题,当时BigQuery一致性语义宽松,保持两个系统同步需要两阶段提交(2PC),成本过高
- Skiptree将跳表思想推广至树结构:每条root-to-leaf路径加上高层级节点构成一个跳表;每层对应一个SQL表,节点记录
next_level_ancestor(上一层最近祖先)和ancestors_between(中间节点列表) - 祖先查询通过固定数量的JOIN(约40个)逐层向上检索完成;由于各层表大小呈几何级数递减,查询成本仅相当于两次正常表扫描,且无需递归SQL
- 为避免手写庞大SQL,作者用JavaScript编写SQL生成编译器;该方案支撑Antithesis前六年测试,直至开发出支持高效树形查询的自有分析数据库,且跳表的核心优势在于即使naive实现也能提供足够性能
Show HN: Shader Lab, like Photoshop but for shaders
Shader Lab | basement.studio 视觉效果工具
- Shader Lab 是 basement.studio 开发的网页端专业视觉效果编辑工具,提供五种叠加图层:CRT(阴极射线管)、Dithering(抖动)、Text(文字)、Pattern(图案)和 Gradient(渐变)
- CRT 效果层提供精细的模拟参数,涵盖槽型遮罩、扫描线强度、桶形畸变、会聚偏移、磷光特性和噪声模拟等,支持对高光阈值、色度保留、阴影提升等参数的独立调节
- 内置辉光(BLOOM)后处理效果,支持强度、阈值、半径和柔和度四项参数独立控制
- 配备关键帧动画系统,支持最长 8 秒动画录制,具备自动关键帧创建功能,可通过时间轴进行播放控制
- 支持滤镜通用参数调节,包括不透明度、色相和饱和度,以及正片叠底、变暗等混合模式切换
- 已在 GitHub 开源(basementstudio/shader-lab),支持免费使用和二次开发