第345期 — 2025-12-06

在浏览器中阅读

周e信

扫描二维码关注微信公众号

Node.js

better-auth - 基于typescript的身份验证(和授权)库🔗
export const auth = betterAuth({
	database: new Pool({
		connectionString: DATABASE_URL,
	}),
    emailAndPassword: {
        enabled: true,
    },
	plugins: [
		organization(),
    	twoFactor(),
	]
})

Better Auth

TanStack ai - 一个功能强大、类型安全的 AI SDK 仓库🔗

TanStack/ai 是一个功能强大、类型安全的 AI SDK 仓库,支持 OpenAI、Anthropic 等多种 AI 服务提供商,可处理图像、音频等多模态内容,具备聊天完成、流式传输等交互能力,适配 Next.js、Express 等各类框架,与 TanStack Start 集成时能实现 AI 工具和服务器函数的共享定义,同时提供完善的开发配置、示例代码和文档,支持开发者参与贡献,助力高效构建 AI 驱动的应用程序。

TanStack

Remend - 用于AI的Markdown 流式处理🔗

Vercel 推出了一款名为 Remend 的独立 npm 工具包(可通过 npm i remend 安装),专门解决 AI 流式输出 Markdown 时易出现的语法不完整问题(如未闭合的粗体标记、链接、代码块等),它能智能补全缺失语法、避免误补复杂场景,作为预处理工具可搭配任意 Markdown 渲染器使用,后续还能随 AI 完整输出无缝更新,经生产环境验证,能确保流式渲染稳定、用户体验流畅,此前它是 Streamdown 工具的一部分,现单独拆分供各类应用调用。

Hayden Bleasel

Javascript

网页性能不平等差距🔗

尽管设备和网络有小幅进步,但网页正变得越来越臃肿(平均大小超经典游戏《毁灭战士》,十年间翻倍),而不同用户的设备(高端苹果与低端安卓性能差 9 倍,多数人用 2 年以上旧设备)、网络(富裕地区与低收入地区网速差距达数倍,5G 实用价值有限)差距持续扩大,再加上开发者多依赖高端设备,过度使用 JavaScript、盲目采用 SPA 技术等不当技术选择,导致 “数字富人” 能流畅使用网页,“数字穷人” 却因卡顿被排挤,加剧了数字鸿沟;作者给出了 2026 年网页性能预算基准,呼吁浏览器、搜索引擎和开发者采取行动,通过约束网页大小、优化技术选型等方式,兼顾低端设备和慢网用户,让网页更具包容性。

Alex Russell

浏览器指纹识别的隐私噩梦🔗

文章首先回顾了cookies的历史及其对隐私的潜在风险,指出虽然浏览器在识别和阻止恶意cookies方面有所改进,但更隐蔽的浏览器指纹识别技术已经成为新的主要威胁。

浏览器指纹识别不依赖cookies,通过收集浏览器提供的各种信息(如浏览器版本、操作系统、语言、时区、字体、插件、硬件信息,甚至包括Canvas指纹和窗口大小等)来创建用户的唯一标识。即使禁用JavaScript,也会成为一个独特的识别特征。

文章指出,通过修改浏览器行为来对抗指纹识别也存在问题,因为这些修改本身也可能留下痕迹。

作者认为,目前抵抗指纹识别的有效方法包括使用VPN、定期更换VPN端点、阻止长期存在的cookies、使用流行的浏览器和操作系统、保持计算机的默认配置,以及使用具有内置指纹识别抵抗功能的浏览器(如Brave、Mullvad或Librewolf)。即使采取这些措施,也只能将用户被跟踪的概率从99%降低到50%。

文章还讨论了抵抗指纹识别的缺点,例如可能遇到更多身份验证挑战,以及某些网站可能无法正常工作。

最后,文章探讨了浏览器指纹识别的合法性问题,并指出目前尚不明确。虽然一些机构对此持负面态度,但尚未有人根据GDPR对此提出挑战。作者呼吁制定新的立法来解决这一隐私威胁,并表示虽然浏览器指纹识别可能无法完全确定用户身份,但它助长了侵入性的在线广告行业。尽管很难完全阻止,但采取一些措施可以降低被跟踪的风险,并减轻对隐私的侵犯。

Kevin Boone

不用写 TypeScript(TS),只用 JavaScript(JS)加 JSDoc 注释,就能享受类型检查的好处🔗

作者更偏爱 JavaScript 而非 TypeScript,认为类型信息应作为文档注释而非代码一部分,而 JSDoc 可实现这一需求 —— 在 JS 文件首行添加// @ts-check并通过 JSDoc 注释标注类型,配合jsconfig.json/tsconfig.json配置、TypeScript 工具(tsc)及相关 IDE,就能让原生 JS 获得与 TS 同等的类型提示和检查功能,且无需额外构建步骤,作者呼吁 JS+JSDoc+tsc 成为行业默认选择,仅在框架强制要求时才使用 TS。

Jared White

Keichi Takahashi

Pocketbase – 单文件中的开源实时后端🔗

PocketBase是一个开源的实时后端服务,它被打包成单个文件。它具备以下核心功能:

  • 实时数据库: 嵌入式的高性能数据库,支持模式构建、数据验证、实时订阅和易于使用的 REST API。
  • 身份验证: 方便地管理用户,并处理邮箱/密码和OAuth2(Google, Facebook, GitHub, GitLab)登录。
  • 文件存储: 安全地在本地或 S3 存储中存储文件,轻松将媒体附加到数据库记录,并动态生成缩略图。
  • 可扩展性: 可以作为独立应用或框架使用,并通过 Go 和 JavaScript 钩子进行扩展,以创建自定义的可移植后端。

此外,PocketBase提供了 JavaScript 和 Dart SDK,方便与前端技术栈集成。它还提供了常见问题解答、讨论区和文档,以便用户了解和使用。

Gani

Jarred Sumner

前端

Penpot:开源的 Figma🔗

Penpot 是一款开源的设计工具,旨在促进设计和代码的协作。它允许设计师创建精美的设计、交互式原型和可扩展的设计系统,同时为开发者提供可直接使用的代码,从而简化工作流程,消除设计交付的障碍。

penpot

非正方形图片实现 “模糊延伸效果”🔗

核心是仅通过单个 img 标签和少量 CSS 代码,给横版、竖版等非正方形图片实现 “模糊延伸效果”—— 先通过width: min(100%, 23em)控制图片宽度不溢出且有最大限制,再用aspect-ratio: 1将图片显示区域设为正方形,接着以object-fit: contain保证图片完整不变形(横版上下留空、竖版左右留空),最后给留空区域添加与图片色调匹配的模糊效果,同时还考虑了浏览器兼容性、模糊与图片自然过渡、适配未知比例图片等实际需求,方便新手快速上手。

.wrap {
  display: grid;
  container-type: inline-size;
  place-content: center;
  position: relative;
  aspect-ratio: 1;
  background: var(--img) 50% / cover;

  &::before {
    position: absolute;
    inset: 0;
    backdrop-filter: blur(8px) brightness(0.8) contrast(0.7);
    content: "";
  }

  > * {
    grid-area: 1/ 1;
  }

  img {
    max-width: 100cqw;
  }

  [aria-hidden="true"] {
    max-height: 100cqw;
    opacity: 0;
  }
}

Ana Tudor

事实证明CSS-in-JS不好用🔗

这篇文章批判了 CSS-in-JS 这种前端样式方案,指出它虽初衷是解决传统 CSS 的全局冲突、实现样式与组件模块化,但实际带来了运行时性能损耗(渲染慢、占内存)、调试困难(类名乱码、渲染不一致)、维护复杂(过度依赖钩子和上下文、增加脑力负担)等问题,而如今现代 CSS 已能通过变量、容器查询等原生功能解决原有痛点,Remix、Next.js 13 等框架也在引导开发者回归传统 CSS、CSS Modules 等静态方案,作者认为前端应摒弃这种 “以复杂解决自身制造问题” 的抽象方案,回归样式与逻辑分离的原生 CSS fundamentals,才能打造更快、更易维护的网页。

Alexander T. Williams

Adem Kouki

React Server组件中的严重安全漏洞🔗

受影响的是这些 React 相关包的 19.0、19.1.0、19.1.1、19.2.0 版本:react-server-dom-webpack、react-server-dom-parcel、react-server-dom-turbopack;像 Next.js、react-router 这些常用框架和打包工具也受影响。不过如果你的项目不用 React 服务器、也不涉及 React 服务器组件相关的框架 / 打包工具,就不用担心。

The React Team

Fran Sans – 一款受旧金山轻轨显示屏启发的字体🔗

Emily Sneddon 设计了一款名为 Fran Sans 的字体,其灵感来源于旧金山轻轨车辆上的目的地显示屏,尤其是 Muni 的 Breda 轻轨车辆中的 LCD 面板显示屏。这些显示屏使用 3x5 的网格,由几何模块构成,呈现出一种机械但又独特的个性。

由于 Breda 车辆将被替换,这些启发字体设计的显示屏也将在 2025 年底从旧金山消失。作者希望 Fran Sans 能够唤起人们对生活中和城市中那些不完美之处的欣赏。

EMILY SNEDDON

移动端

Pebble Watch 软件现在开源🔗
  1. Pebble手表软件完全开源: Pebble手表软件已经100%开源,包括手表操作系统(PebbleOS)和手机APP。这意味着用户可以下载、编译和运行所有需要的软件,保证Pebble手表的长期可用性。
  2. Pebble Appstore去中心化备份: Pebble Appstore现在支持多个应用商店源(feeds),并提供了公开备份,增强了长期可靠性。Pebble官方也推出了自己的应用商店源和开发者仪表盘。
  3. Pebble Time 2 发货时间更新: Pebble Time 2 预计在1月份开始发货,大部分用户预计在3月/4月收到。生产受到中国春节假期影响。颜色选择将在后续邮件通知预购者。
  4. 硬件可持续性:作者提到Core Devices 是一家自筹资金的公司,致力于可持续地制造Pebble手表,并使新的手表更容易维修。Pebble 2 Duo 的电路和机械设计文件已经公布在Github上。
  5. Pebble Time 2 演示: 作者在Tick Talk #4 中演示了Pebble Time 2,展示了预生产版本的特性。

Eric Migicovsky

Margelo

Margelo

人工智能

万亿资金投入AI,大型软件项目仍然失败🔗

作者Robert N. Charette指出,尽管全球IT支出持续增长,但软件项目的成功率在过去二十年中并未显著提高,导致商业和社会因软件失败而造成的损失持续增加。作者认为,指望AI能够解决IT管理问题是不现实的,因为大型软件项目涉及复杂的系统工程、项目管理、财务管理、业务管理以及组织政治等诸多因素,而AI在这些方面存在局限性。

文章通过加拿大政府的Phoenix薪酬系统和英国邮局的Horizon系统等案例,说明了IT项目失败的常见原因,包括缺乏想象力、不切实际的目标、无法处理复杂性、风险管理不当等。这些问题在过去几十年中反复出现,但IT行业未能从中吸取教训。

美国也面临着同样的问题,IT相关的开发和运营失败造成的损失已达数万亿美元。文章引用报告指出,美国每年花费巨额资金用于支持遗留软件系统,且遗留技术阻碍了组织的进步和创新。

尽管Agile和DevOps等方法在一定程度上改善了软件开发,但它们的成功实施需要领导力、组织纪律、耐心、培训投资和文化变革。然而,由于缺乏组织决心,这些方法也经常失败。

作者强调,IT行业未能从过去的失败中吸取教训,项目经理常常认为自己的项目是独特的,因此之前的经验不适用。此外,文章还提到了网络攻击对企业造成的巨大损失,以及政府部门在算法决策方面的问题。

文章最后呼吁IT行业停止重复犯错,并强调了诚实、怀疑精神和道德的重要性。作者认为,项目成本效益分析应充分考虑软件失败对最终用户的财务和情感影响。文章还指出,需要透明和可问责的自动化系统,人本的AI系统,重视伦理。

Robert N. Charette

运维

比较AWS Lambda Arm64与x86_64的性能🔗

对比了 arm64 与 x86_64 两种架构在 Node.js、Python、Rust 多种运行环境下的轻量、CPU 密集型、内存密集型 workload 表现,结果显示 arm64 架构在成本(低 25%-40%)、冷启动速度(快 13%-24%)和多数场景性能上均占优,推荐作为默认选择,具体运行环境可按需求挑选:追求极致性能选 Rust+arm64,Python 项目选 3.11+arm64,Node.js 项目选 22+arm64,轻量 / I/O 密集型任务则侧重成本即可,且测试代码已开源供复现或自定义。

Chris Ebert

将主要的 Zig 仓库从 GitHub 迁移到 Codeberg🔗

Zig项目宣布从GitHub迁移到Codeberg。作者提到,自从GitHub被微软收购后,质量开始下降,例如GitHub Actions存在bug且被忽视,导致CI系统不稳定。此外,GitHub积极推广LLM/AI相关功能,违背了Zig的“no LLM / no AI”政策。

虽然GitHub Sponsors对Zig的早期融资很重要,但由于产品被忽视,Zig认为它已经成为一种负担。作者呼吁通过GitHub Sponsors捐款的用户考虑迁移到Every.org。同时,Zig将停止GitHub Sponsors的赞助者福利,并计划在Every.org上提供类似的福利。

Zig在GitHub上的主仓库现在为只读,Codeberg上的https://codeberg.org/ziglang/zig.git是新的主仓库。现有的GitHub issues和pull requests将保留,无需迁移,但Codeberg上的issue编号将从30000开始,以避免混淆。作者感谢Forgejo和Codeberg团队的支持。最后,作者强调了非营利组织在对抗平台资本主义中的作用。

Andrew

其他

旅行者 1 号即将到达距离地球一光天的地方🔗

文章主要讲述了NASA的旅行者1号探测器即将到达一个重要的里程碑:到2026年11月15日,它将到达距离地球161亿英里(259亿公里)的位置,这意味着无线电信号需要整整24小时(一个光日)才能到达它。文章解释了光日与光年的区别,并回顾了旅行者1号自1977年发射以来,探索木星和土星,最终在2012年进入星际空间,成为有史以来距离地球最远的人造物体。文章还强调了与旅行者1号通信的挑战,因为指令需要一天的时间才能到达,确认信息还需要一天。文章最后指出,旅行者1号的旅程不仅仅是距离上的记录,它所拍摄的“暗淡蓝点”照片提醒人们太阳系的广阔和探测器探索的持久性。

Piyush Gupta

未供电的 SSD 会缓慢丢失数据🔗

这篇文章指出,长期未通电的固态硬盘(SSD)存在数据丢失的风险。与机械硬盘通过磁化存储数据不同,SSD依靠NAND闪存单元中的电荷存储数据,即使断电也能保持数据。但是,NAND闪存的数据保持时间有限。

不同类型的NAND闪存数据保持时间不同:

  • QLC NAND:约1年
  • TLC NAND:约3年
  • MLC NAND:约5年
  • SLC NAND:约10年

由于大多数消费级SSD使用TLC或QLC NAND,因此长时间不通电可能会导致数据损坏或丢失。虽然机械硬盘也可能因磨损而出现位衰减,但它们在断电情况下更具抵抗力。

文章建议备份重要数据,并遵循3-2-1备份原则,即至少3个数据副本,存储在2种不同介质上,其中1个异地存储。对于长期存储,不应依赖SSD,应考虑其他存储介质。

不过,文章也提到,对于大多数只在电脑上使用SSD的用户,并且SSD最多只会断电几个月的情况,无需过于担心这个问题。数据丢失更可能是由电源浪涌或驱动器故障引起的。

一些评论提到,新的或使用较少的SSD,在凉爽的环境下保存的时间可能比文章中提到的时间更长,可以考虑每隔几个月通电SSD并访问一下文件,或者将整个SSD复制到另一个SSD。DVD和蓝光光盘也可以用于更长时间的存档,但是几年后也会降解。

Tanveer Singh

用超声波诱导气味🔗

这篇网页文章介绍了作者团队如何使用聚焦超声刺激大脑中处理气味的区域,成功诱导出不同的气味和感觉。据他们所知,这是首次尝试进行这种类型的刺激,即使在动物身上也没有先例。

Lev Chizhov, Albert Yan-Huang, Thomas Ribeiro, Aayush Gupta

酒店请装回浴室门🔗

这篇文章的中心思想是作者不满于现在很多酒店为了节省成本和追求美观而取消浴室门,这严重影响了入住者的隐私和尊严。

因此,作者创建了一个网站(Bring Back Doors),旨在:

  1. 整理并列出保证有浴室门的酒店。
  2. 收集并公布没有浴室门的酒店,以此来“羞辱”这些酒店,从而保护未来旅行者的尊严。

作者通过邮件和社交媒体联系酒店,询问他们的浴室门是否能完全关闭以及是否是玻璃材质的。符合“门能关闭且不是玻璃”标准的酒店将被按价格范围和城市分类,方便用户查找。

Andy Gavin

垄断 ISP 拒绝修复上游基础设施🔗

问题概述:

  • 作者从2024年6月开始使用Xfinity,但连接频繁掉线,每天6-7次,每次持续约125秒。17个月内总计掉线3387次,累计117小时以上。
  • 作者的邻居也遇到同样的问题,尽管他们使用不同的线路和接口盒,但掉线时间和频率相似。
  • 作者通过OPNSense的网关正常运行时间监控器记录了详细的掉线日志,显示出有规律的掉线模式,例如在每小时的特定分钟(:29和:44)掉线频率较高,中午和凌晨时段掉线集中。
  • 作者通过分析日志,认为问题并非出在自己的设备上,而是Xfinity网络上游的基础设施故障。

作者的尝试:

  • 多次联系Xfinity客服,但客服人员将问题归咎于WiFi、调制解调器或路由器,即使作者证明问题与这些无关。
  • Xfinity派了多个技术人员上门,更换了线路,但问题依旧存在。
  • 作者升级到“保留”计划,并提供了详细的技术文档,但问题仍然无法得到解决。

总而言之, 作者揭露了Xfinity作为一家垄断ISP,在明知存在网络基础设施故障的情况下,因缺乏竞争压力而拒绝采取行动解决问题,并寻求外部力量的介入以推动问题的解决。

The Sacramento Bear

个人博客回归,利基博客会是下一个吗?🔗

文章指出,博客的黄金时代曾涌现出大量指导人们如何成功写作博客的文章,但成功的定义因人而异,有些人追求金钱回报。作者提到了Darren Rowse及其博客Problogger,这是一个专注于博客写作的小众博客。虽然小众博客一度被认为是成功的关键,但并非适合所有人。Kottke等博客不局限于特定主题,同样获得了成功。

随着社交媒体和网红的兴起,博客的地位受到了挑战。尽管如此,个人网站和博客并未完全消失,反而出现了一种抵制社交媒体的趋势,IndieWeb/SmallWeb社区的兴起推动了个人网站的复兴。作者认为,在个人博客复兴的同时,也应该重视高质量、主题明确的小众博客,以提供可靠的信息来源,对抗社交媒体上的虚假信息和AI生成的内容。作者也强调不希望看到充斥着广告和小弹窗的小众博客回归,而是希望独立作者能够创作优质内容,并从中获得合理的回报。

文章最后提到,个人博客的复兴是重建充满活力的网络的第一步,下一步应侧重于恢复可访问且值得信赖的信息流动。

disassociated

YouTube 产品经理像是 “近视” 了,根本没 get 到问题所在🔗

作者之前分析过 YouTube 首页的视频数量变化,还做了统计预测,原本觉得 2026 年 5 月左右首页可能只剩 1 个视频了。结果没想到,他最近用 Apple TV 打开 YouTube 时,发现首页实际的视频数量已经特别少(仔细数下来没几个,还有广告)。 更有意思的是,之前有谷歌员工泄露出内部录音,能看到 YouTube 的产品经理团队是怎么应对外界对 “首页视频变少” 的批评的 —— 作者调侃这些产品经理像是 “近视” 了,根本没 get 到问题所在。 现在根据最新的首页情况,作者更新了预测:原本说 2026 年 9 月首页会变成 0 个视频,现在得提前到 2026 年 5 月了。最后他还开玩笑说,谷歌产品经理的操作太离谱,连讽刺都显得多余,甚至调侃可能未来强制植入神经链接的日子都要提前了。

Jayden Milne

扫描二维码关注微信公众号