第324期 — 2025-07-12

在浏览器中阅读

周e信

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

Node.js

代码拆分与范围提升(scope hoisting)的冲突,还需要范围提升吗🔗

Parcel 的创建者认为,范围提升(当捆绑器将模块内联到共享范围时)与现代 JS 模式(如代码拆分和动态导入)冲突,导致细微的错误并且几乎没有什么好处,因此他正在考虑在 Parcel v3 中删除它。

Devon Govett

Vercel 收购了Nuxt核心团队的公司NuxtLabs🔗

Vercel 现在管理或至少支持几个关键项目,如 Next.js、Turborepo、Svelte 和 shadcn/ui。

Sébastien Chopin

前端

Tailwind 语法尴尬、工具链复杂、代码冗长但却十分好用受欢迎🔗

提升性能:只生成使用到的类,CSS 文件不会无限膨胀。

减少样式冲突:避免了复杂的层叠与优先级问题。

设计一致性:团队只能使用预定义的 token,减少视觉偏差。

开发者体验 (DX):避免命名疲劳,无需记忆复杂的 BEM 名称。样式和结构在同一个地方可视化,更利于组件化开发

逃生舱机制:支持自定义值,例如 svg class="lg:w-[1rem]" 以满足非常规需求

Darius Cepulis

不要使用“点击这里”作为链接文本(2001)🔗

本文指出,在网页链接文本中应避免使用“click here”(点击这里)。 建议:

  • 使用简短但有意义的链接文本,链接文本要能够提供关于链接内容的足够信息。
  • 链接文本应说明链接所提供的服务或内容。
  • 提供更具体的链接描述,例如 "Get Amaya!" 或 "Tell me more about Amaya: W3C's free editor/browser..."。

Aaron Swartz

Dominik Fojcik

Lakshay Bhushan

Zach Leatherman

grammyjs

Figma

移动端

Xfinity 使用WiFi 信号来检测运动🔗

“WiFi Motion” 是 Xfinity 的一项智能家居功能,能够利用家中 Xfinity 网关通过 WiFi 信号变化来检测房间内的运动。一旦检测到动作,它会向你的移动设备发送推送通知。

xfinity

破解 IKKO Activebuds “人工智能驱动” 耳塞🔗
  • 运行Android: 耳机运行Android系统。
  • ADB开启: ADB调试模式默认开启,方便了破解。
  • OpenAI密钥泄露: 设备直接与OpenAI通信,导致OpenAI API密钥暴露在设备上。
  • 数据泄露:

    • 聊天记录被记录在IKKO服务器上。
    • 通过设备IMEI可以获取用户的聊天记录。
    • 通过可猜测的IMEI可以生成绑定二维码,在设备未绑定情况下绑定设备,在设备已经绑定的情况下获取用户的姓名。

Marcel

react-native-unistyles - 支持更多特性的跨平台的react native style sheet🔗

支持变量 复合变量 动态功能 媒体查询 水平和垂直断点

Jacek Pudysz

人工智能

英伟达通过虚假宣传技术垄断和操控媒体等手段来榨取消费者的利益🔗

这篇文章批判了NVIDIA在RTNVIDIA利用其市场主导地位,通过虚假宣传、技术垄断和操控媒体等手段来榨取消费者的利益。消费者们最终因为NVIDIA的霸主地位而蒙受损失

Sebin Nyshkim

运维

本地优先软件 - 解决云应用在便捷协作的同时剥夺用户数据所有权的问题🔗

CRDTs是一种有潜力的基础技术,它是一种从根本上支持多用户的通用数据结构,能够实现本地优先软件的理想。

Martin Kleppmann, Adam Wiggins, Peter van Hardenberg, Mark McGranaghan

如何让虚拟机(VM)认为它拥有一个CPU风扇🔗

通过修改SMBIOS数据,成功欺骗了虚拟机中的恶意软件,使其认为存在CPU风扇,从而达到了绕过检测的目的。

  1. 恶意软件检测虚拟机的方法: 恶意软件会通过WMI查询Win32_Fan类来检测CPU风扇是否存在。
  2. 修改SMBIOS数据: 作者通过修改虚拟机的SMBIOS数据来伪造CPU风扇的存在。SMBIOS数据可以通过dmidecode命令获取,并通过修改Xen或QEMU/KVM的配置文件来设置。
  3. Xen配置的挑战: 在Xen中,作者发现需要打一个patch才能允许修改SMBIOS中的特定类型数据。此外,还需要同时伪造Temperature Probe(类型28)数据,才能让WMI正确识别CPU风扇。
  4. QEMU/KVM配置的便利性: 作者指出,在QEMU/KVM中,可以使用-smbios file=/path/to/smbios.bin参数来设置自定义的SMBIOS数据,无需像Xen那样打补丁。QEMU/KVM也不需要数据结构前的大小定义。

Petr Beneš

其他

美联储说这是一个100万美元的立方体。我猜应该多了50万美元🔗

作者参观了芝加哥联邦储备银行的货币博物馆,发现一个号称装有100万美元的透明立方体存在问题。作者通过自己开发的图像计数工具(Dot Counter)以及计算,发现该立方体实际上包含大约155万美元,比标牌上声称的金额多了55万美元。文章还探讨了为什么用美元纸币制作一个精确的100万美元立方体很困难,以及对这个立方体内部可能存在空心或其他情况的猜测。最后,作者得出结论,无论立方体里到底是什么,至少可以确定它所展示的金额是不准确的。

Calvin Liang

过于雄心勃勃是一种聪明的自我破坏形式🔗

人们常常在创造开始之前,沉溺于想象中完美的创作,导致迟迟不敢行动,因为一旦开始,实际作品就无法达到想象中的完美状态。这种“品味-技能差异”会让人在行动前就预见到作品的不足,从而陷入“生产性回避”,即忙于计划和研究,却避免真正创造。

作者用摄影课的例子说明,专注于数量(Quantity Group)的学生反而能拍出更好的照片,因为他们通过大量的实践,与不完美亲密接触,从失败中学习。而追求质量(Quality Group)的学生,则因为过度分析而停滞不前。

要克服这种自我破坏,需要放下过高的期望,允许自己从初学者的角度出发,享受创造过程中的乐趣和发现。作者用自己的经历和母校的校训“Do-Learn”来鼓励读者先行动后学习,从实践中获得理解。

文章还提到了“放弃点”(the quitting point),即最初的热情消退,工作变得困难的时刻。要克服这个难关,需要专注于改进工作本身,而不是保护自我形象。

最后,作者鼓励读者降低标准,允许自己创造最差的作品,与现实对话,从现实中学习,并提醒读者,重要的作品往往比想象的要小,并且近在咫尺。重要的是行动起来,在实践中不断学习和进步。

Maalvika

编写代码从来都不是软件工程的瓶颈🔗

LLM在快速原型设计、脚手架搭建和自动化方面具有真正的价值,但它们并不能消除清晰的思考、仔细的审查和周到的设计。 编写代码的成本确实下降了,但团队一起理解代码的成本并没有下降,这仍然是瓶颈。

ordepdev

自己写的Discord机器人改变了我朋友圈的社交结构🔗

作者记录了人们加入 Discord 的数据,显示大家使用 Discord 的频率很高,甚至在有了孩子之后,也能抽出几分钟在 Discord 上与朋友聊天。

Dan Petrolito

托管美国主要气候报告的网站被关闭🔗

特朗普政府已经通知下一份气候评估报告的志愿者作者,他们不再需要他们的服务,并结束了与帮助协调网站和报告的私人公司的合同。

SETH BORENSTEIN

将tmux从C语言移植到Rust语言的项目tmux-rs🔗

移植过程:

  1. 最初尝试C2Rust: 使用C2Rust将C代码转换为Rust代码,但生成的代码难以维护,体积是原C代码的3倍。例如COLOUR_FLAG_256被转换成了0x1000000。作者放弃了这种方法。
  2. 手动翻译: 作者决定手动将C代码翻译成Rust代码,一次翻译一个函数,并进行快速构建以验证更改。
  3. 构建过程: 作者首先需要理解tmux的构建系统,即autotools。 作者编写了一个小的build.sh脚本来调用cargo,然后运行make。 之后使用了cc crate,将C代码编译成库供Rust使用。
  4. Yacc解析器: Tmux使用Yacc实现自定义解析器。作者使用lalrpop crate在Rust中重新实现了解析器。

开发工具:

  • Vim: 使用Neovim和自定义宏来加速翻译过程。
  • AI Tools: 尝试使用Cursor,但发现它并没有显著提高效率,反而引入了新的bug。

结论:

  • 虽然代码已经100%是Rust,但质量并不比C2Rust的输出好多少。
  • 作者的下一个目标是将代码库转换为safe Rust。
  • 发布了0.0.1版本,欢迎大家通过GitHub Discussions参与讨论。

Collin Richards

扫描二维码关注微信公众号
本期阅读量