2024-04-01

31 篇热帖

1. LLaMA Now Goes Faster on CPUs (justine.lol)

文章标题:LLaMA Now Goes Faster on CPUs

核心内容概述 作者为 llamafile 项目(基于 llama.cpp 的跨平台单文件封装)编写了84个新的矩阵乘法内核,显著提升了在CPU上处理提示词(Prompt)和图像的速度。与 llama.cpp 相比,在使用F16和Q8_0权重时,提示词评估(prompt eval)速度在CPU上提升了30%到500%。性能提升在ARMv8.2+(如Raspberry Pi 5)、Intel Alderlake和AVX512(如Zen 4)等平台上尤为明显。新内核在L2缓存内的矩阵运算中速度是MKL的2倍,但目前在超过1000个标记的提示词上效果最佳。

详细技术内容

1. 性能提升数据

  • 企业级硬件 (Intel i9-9900):对于Mistral 7B模型(q8_0权重),llamafile-0.7 的提示词处理速度是 llama.cpp 的1.45倍,是旧版 llamafile 的2倍。
  • 爱好者硬件 (Raspberry Pi 5):使用ARMv8.2的fp16指令集,TinyLlama 1.1B模型(f16权重)的提示词速度是 llama.cpp 的2.2倍。
  • 游戏硬件 (Intel i9-14900K Alderlake):Mistral 7B模型(q8_0权重)提示词速度比 llama.cpp 提升58%;TinyLlama 1.1B(f16权重)提升3.5倍。
  • 专业硬件 (AMD Threadripper 7995WX):支持AVX512,新增bf16支持。Mistral 7B(bf16权重)提示词速度是 llama.cpp 的2.8倍。

2. 优化原理

  • 聚焦关键操作:性能提升源于针对 GGML_OP_MUL_MAT(矩阵乘法)操作的深度优化,该操作消耗了95%的推理时间。
  • 向量化与循环展开:核心优化技术是向量化的外积循环展开。通过同时计算输出矩阵的多个元素(如3x4的块),共享加载的输入向量(如a0),最大化利用CPU的指令级并行和缓存,减少内存访问次数。
  • 轻量级线程模型:为了适配 llama.cpp 的旋转屏障(spinlock)线程模型,实现了自己的线程分块内核框架,避免了传统BLAS库的线程管理开销,使计算能无缝集成到现有的多线程流程中。

3. 关键技术细节

  • 处理不同矩阵大小:通过递归的“分块打包”(mnpack)策略,将矩阵划分为可被特定大小内核(如3x4)处理的块,处理剩余部分。
  • 硬件指令集利用:针对不同架构使用最优指令,如在x86上使用AVX2/AVX512的FMA指令,在ARM上使用fp16和dotprod指令。
  • 精度权衡:在ARMv8.2+上使用fp16计算可能引入舍入误差,但速度更快;Q8_0使用dotprod指令则精度稍好。作者强调应让模型以声称的位宽运行。

4. 实际应用示例

  • 垃圾邮件过滤:展示了在Raspberry Pi 5上,使用TinyLlama模型和 --grammar 参数强制单标记输出,在3秒内完成邮件分类。
  • 提示词速度的重要性:强调在诸如文本摘要、LLaVA图像处理等需要处理长上下文的场景中,提示词评估速度比标记生成速度更关键。

5. 项目背景与贡献

  • llamafile 是与Mozilla合作的项目,旨在将 llama.cpp 封装为单一跨平台二进制文件。
  • 作者已将优化后的矩阵乘法内核提交至 llama.cpp 上游(PR #6414, #6412),并将许可证改为MIT,以促进更广泛的开源社区采用。
  • 工作重点是通过改进核心技术,为用户提供最佳的本地LLM体验,特别是服务于没有高端GPU的用户。

结论 通过专门优化的矩阵乘法内核和适配的线程模型,llamafile 在多种CPU硬件上实现了显著的提示词处理速度提升,使得在CPU上运行大型语言模型更加高效和实用。优化效果在特定模型大小(如7B)和权重格式(f16, q8_0)下表现最佳,降低了本地LLM部署对量化技术的依赖。

2. Xzbot: Notes, honeypot, and exploit demo for the xz backdoor (github.com)

本文介绍了针对xz后门漏洞(CVE-2024-3094)的探索工具Xzbot,包含以下核心组件:

  1. 蜜罐 (Honeypot):通过修改OpenSSH源代码,创建一个能够检测并记录后门利用尝试的虚假易受攻击服务器。连接尝试若匹配后门格式,其公钥N值将被记录在系统日志中。

  2. ED448 补丁 (ed448 patch):利用Python脚本(需pwntools库)修改被感染的liblzma.so共享库文件。该脚本将库中硬编码的攻击者ED448公钥替换为用户指定的公钥(默认使用种子0生成),从而控制后门。修改后的库可用于运行一个触发后门的SSHD实例。

  3. 后门格式 (backdoor format)

    • 触发方式:通过连接携带特殊构造的CA签名密钥的SSH证书触发。
    • 载荷结构:包含一个由三个值(a, b, c)构成的请求类型(a * b + c,值大于3则跳过),以及一个240字节的加密载荷。
    • 请求类型:目前明确识别类型2,此类型会通过system()函数执行解密后的命令。
    • 加密与解密:载荷使用chacha20加密,密钥是ED448公钥的前32字节。因此,知道攻击者的公钥即可解密。
    • 载荷内容:解密后包含一个114字节的ED448签名、标志位、命令长度和以null结尾的命令字符串。签名覆盖了魔术值(类型)、相关字段和命令,并且还涉及服务器主机密钥的SHA256哈希。
  4. 后门演示 (backdoor demo):提供一个Go语言编写的命令行工具xzbot,用于在已知ED448私钥(对应替换后的公钥)的情况下,向目标SSH服务器发送恶意证书,从而执行任意命令。成功利用时,目标服务器的进程树会出现异常(出现sh -c <命令>子进程),且不会产生常规的SSH日志信息

该工具集旨在用于研究、测试和检测xz后门活动。

3. 10 > 64, in QR Codes (huonw.github.io)

QR码中使用十进制编码比Base64更高效

文章通过案例和数据分析说明,在将数据存储于QR码时,使用十进制(base10)编码相比常用的Base64编码能带来显著优势:生成的QR码模块更少、密度更低、更易扫描,或能容纳更多数据。这看似违反直觉,因为十进制编码的字符串长度会增加约50%,但QR码的特殊编码模式(特别是数值模式)使得存储效率极高。

核心案例:澳大利亚新南威尔士州(NSW)COVID签到QR码

  • 原方案:URL中包含Base64编码的JSON数据,生成一个81×81(版本16)的QR码。
  • 优化方案:将同一份JSON数据用十进制编码(视为大端序整数后转为十进制字符串)嵌入URL。虽然URL长度增加50%,但由于该十进制数据全部由数字组成,QR码可使用高效的数值模式存储,最终生成一个更小的73×73(版本14)的QR码,模块数减少20%,更易扫描。

为何更高效:QR编码模式是关键

QR码使用不同的模式存储数据段,每种模式对字符集和位效率有不同要求:

  1. Base64(或Base64url)编码:输出字符包含字母,必须使用二进制模式存储。每个字符占8位,但实际只使用了64个可能值中的部分,存储效率损失巨大(平均每输入1字节,需在QR码中占用1.33字节)。
  2. 十进制(base10)编码:输出字符仅为0-9,可使用数值模式存储。该模式将3个数字打包为10位(约3.33位/数字),效率极高。经计算,存储十进制编码数据的开销几乎等同于数值模式自身的微小开销(约0.34%),几乎无额外浪费

编码方式对比

编码方式 字符集 是否URL安全 典型输入输出比 QR码适用模式
Base64 (url) A-Z, a-z, 0-9, -, _ 1:1.33 二进制模式(低效)
Base10 (十进制) 0-9 1:2.41 数值模式(高效)
Base45 0-9, A-Z, $%*+-.:/ 等 1:1.5 字母数字模式

结论:虽然十进制编码后的字符串更长,但因其与QR码数值模式完美契合,存储时几乎无编码开销,总体效率远高于使用二进制模式存储的Base64编码。

如何实现

  • 可将原始字节数据视为一个大端序整数,转换为十进制字符串。文章提供了Python实现的b10encodeb10decode函数示例。
  • 在生成QR码时,应将URL拆分为两部分以利用不同模式:
    1. 非数字的URL前缀部分,使用二进制模式
    2. 十进制编码的数据部分,使用数值模式
  • 使用支持分段模式的QR码生成库(如Segno)即可实现。

极限测试与注意事项

  • 最大数据容量:理论上,使用数值模式的十进制编码能比二进制模式多存储约33%的原始数据(如2.9KB vs 2.2KB)。
  • 实践限制:尽管十进制编码数据在QR码内存储高效,但生成的URL可能过长(数千字符)。文章测试发现,iOS的相机扫码应用可能无法正确解析超长的十进制URL,直接跳转失败。因此,实际应用前必须在不同设备上进行充分测试

总结

通过精心选择数据编码方式(十进制)并匹配QR码的最优存储模式(数值模式),可以在不增加物理尺寸甚至缩小尺寸的前提下,有效提升QR码的数据容量或扫描可靠性。这一技巧特别适用于需要在QR码中嵌入较大数据块(如加密信息、复杂参数)的场景。

4. Show HN: DN$ – an innovative, ad-supported DNS resolver (github.com)

DN$ 是一个虚构的、具有讽刺意味的广告支持型DNS解析器项目。该项目通过夸张和反讽的手法,模仿并批评了某些科技公司在隐私、商业模式和技术决策方面的常见问题。

主要宣传点与讽刺内涵:

  1. 隐私与广告的矛盾:项目声称提供“注重隐私”的DNS服务,却同时承诺在DNS响应中加入广告。其文案直接讽刺了公司可能利用用户数据牟利的行为,并指出传统DNS提供商(如ISP、Cloudflare、Google)可能存在数据追踪和转售问题。
  2. 技术栈的摇摆:项目描述中充斥着对技术潮流(如频繁在Go、Rust、微服务、单体架构间切换)的戏仿,并强调使用Rust语言只是为了迎合“安全快速”的宣传,而非实际需求。
  3. 商业模式的虚伪:项目提供“终身订阅”以减少广告,但内部路线图显示,公司计划在积累用户后违背承诺、出售数据并最终关闭服务。这讽刺了某些公司从创立之初就规划的短期套利策略。
  4. 法律与伦理的漠视:文章提及公司高管可能不会因严重罪行入狱,并暗示将践踏“RFC标准”和“向后兼容”等原则,以此批评某些企业对行业规范和社会责任的轻视。
  5. 项目结局:公告以“项目已废弃”结尾,并归因于“多起诉讼和刑事调查”,进一步强化了其讽刺性质。

关键信息:

  • 该项目是一个恶作剧或社会评论,旨在揭露科技行业中的不良实践。
  • 文章中包含了如何自行搭建类似服务的命令,但这并非实际推荐的技术方案。
  • 内部路线图和更新日志(如“2024年4月2日项目废弃”)是讽刺叙事的一部分,而非真实的发展计划。

总之,DN$ 作为一个虚构项目,通过幽默和反讽的方式,批评了隐私承诺与盈利模式冲突、技术决策随波逐流、商业模式缺乏可持续性以及对伦理法律问题漠视等现象。

5. A deep dive into email deliverability in 2024 (www.xomedia.io)

BANDARBOLA855 在线老虎机平台简介

核心定位与优势 BANDARBOLA855 是一个提供官方在线老虎机访问的平台,其主要优势包括:

  • 低门槛入场:用户仅需存款 5,000 印尼盾即可访问数百款游戏。
  • 高回报潜力:宣传拥有实时(Live)的 RTP(返奖率)数据、每日奖金以及较大的头奖机会。
  • 正规性与可靠性:声称拥有官方许可证,并保证所有中奖金额将全额支付,无延迟。

主要服务特点

  • 游戏选择:提供来自官方游戏供应商的数百款老虎机游戏。
  • 实时数据:平台提供“RTP Live”功能,可显示每日每款游戏的实时返奖率,帮助玩家选择所谓“正在爆分(gacor)”的游戏。
  • 自动化系统:交易和验证系统为全自动,宣称能即时处理支付,无需人工审核延迟。
  • 安全保障:平台声称已获得官方许可,并采用与银行同级的 SSL 加密技术,以保护玩家数据安全。

常见问题解答 (FAQ) 摘要

  1. 主要优势:相比其他网站,BANDARBOLA855 的优势在于实时 RTP、无延迟的自动系统以及真实的每日奖金。
  2. 支付可靠性:使用自动化和官方验证系统,所有支付即时处理,并通过实时报告透明展示。
  3. 存款要求:无需大额资金,仅需 5,000 印尼盾存款即可开始游戏。
  4. 选择游戏:建议使用平台的“每日 RTP Live”功能来查看胜率最高的游戏。
  5. 安全性:对新手玩家而言,该平台声称非常安全,拥有官方许可和强大的数据加密。
6. First-in-human implantation of bionic device to halt Crohn's disease (2023) (florey.edu.au)

全球首例仿生装置植入以阻止克罗恩病复发

手术概况 奥斯汀健康中心的临床医生完成了全球首例手术,将一种迷走神经电刺激装置植入克罗恩病患者体内,旨在预防术后炎症复发。该设备由仿生研究所与弗洛里研究所、墨尔本大学研究人员合作开发,有望帮助克罗恩病患者实现长期缓解

克罗恩病背景 克罗恩病会导致肠道内壁炎症。大多数患者最终需要手术切除受损肠段,但疾病常复发,导致多次手术。患者通常还需终身依赖药物控制症状。该病在澳大利亚发病率极高,常影响20-30岁人群的学习、工作和家庭生活。

设备原理与设计 该设备由微型电极构成,植入在迷走神经上。迷走神经控制消化、心率和免疫系统等多种身体功能。通过刺激迷走神经中的抗炎神经,设备可激活人体天然防御机制,从早期防止炎症损害肠道,有望避免复发性炎症和疤痕组织形成。

设备由皮下小型电池供电,设计理念为“设定即遗忘”的治疗方式,让患者无需担心后续手术或长期药物治疗。

首例患者与研究目标 首位接受植入的患者是40多岁的安东尼·贝克,他长期受克罗恩病困扰,尽管长期服药仍需手术。他希望通过此治疗避免进一步手术。研究团队表示,该设备旨在为患者提供无手术恐惧的生活质量。

未来展望 研究将验证设备在克罗恩病患者中的安全性和有效性,并收集数据以了解术后能否维持缓解。若成功,该设备有望成为一种长期解决方案,帮助克罗恩病患者摆脱反复手术和终身用药的循环。

7. Upscayl – Free and Open Source AI Image Upscaler (github.com)

Upscayl - 免费开源 AI 图像放大工具

核心特点

Upscayl 是一款免费、开源的 AI 图像放大工具,使用 Real-ESRGAN 模型和 Vulkan 架构来增强图像细节。其后端在 AGPLv3 许可下完全开源。

⚠️ 主要要求

  • 必须拥有 Vulkan 兼容的独立 GPU。大多数集成显卡可能无法工作。

👨‍💻 安装指南

🐧 Linux

  • 可通过系统软件商店、Flatpak 或 Snap 安装。
  • 便携版方法
    1. 从官网或发布页面下载 .AppImage 文件。
    2. 右键文件 -> 权限选项卡 -> 勾选“允许作为程序执行文件” -> 双击运行。
  • 也可选择 RPM、DEB 或 ZIP 格式安装。

🍎 macOS (macOS 12 及更高版本)

  1. 下载 .dmg 文件。
  2. 双击 dmg,将 Upscayl 图标拖入“应用程序”文件夹。
  3. 在 Finder 中找到 Upscayl,右键选择“打开”,并在弹出窗口中再次确认“打开”。
  • 也可通过 Homebrew 安装brew install --cask upscayl

🐌 Windows (Windows 10 及更高版本)

  1. 下载 .exe 文件。
  2. 双击运行,若遇到 SmartScreen 警告,点击“更多信息”后选择“仍要运行”。
  3. 按照安装步骤操作。

📄 文档与指南

提供详细文档,包括:新模型试用、自定义模型转换、兼容性列表和故障排除指南。

⚖️ 效果对比

提供图像放大前后的对比示例。

🤫 路线图

进度可在 GitHub 项目页面跟踪,主要目标为修复错误并推动开源软件的使用。

🛠️ 开发指南

  1. 推荐使用 Volta 安装 Node.js。
  2. 克隆仓库:git clone https://github.com/upscayl/upscayl
  3. 进入目录并安装依赖:cd upscayl -> npm install
  4. 运行开发服务器:npm run start
  5. 打包应用:npm run dist

🤓 常见问题解答

  • 工作原理:使用 AI 模型推测并增强图像细节。
  • 增强效果不明显:适用于低分辨率或像素化图像,但不能用于失焦或模糊的图像。
  • 是否有命令行工具:有,名为 upscayl-ncnn
  • 是否需要 GPU:是,必须使用 Vulkan 兼容的 GPU。
  • 批量处理中断:模型会先完成所有图像的放大,然后再进行后期处理,需耐心等待过程完成。
  • GPU ID 用途:用于选择特定 GPU,具体步骤参见 Wiki。
  • 更多模型:可从 GitHub 的 custom-models 仓库获取。

🎁 支持与捐赠

接受捐赠以支持项目发展。

❤ 致谢

感谢 Real-ESRGAN 的研究工作、各模型的贡献者、代码贡献者、社区支持以及 Logo 设计者。

版权信息:© 2023 - Upscayl,由 Nayam Amarshe 和 TGS963 制作。

8. The Hearts of the Super Nintendo (fabiensanglard.net)

超级任天堂(SNES)硬件时钟系统解析

本文探讨了超级任天堂(SNES)硬件层面的时钟系统,解析了其核心组件的协同工作原理、时钟生成机制以及卡带扩展功能。

时钟发生器(系统“心脏”)

时钟发生器通过CLK引脚为各芯片提供运行节拍。SNES主板上配备了两个主时钟源:

  • 音频时钟(X2):采用 24.576 MHz 陶瓷谐振器,为音频处理单元(APU)提供节拍。
  • 核心时钟(X1):采用 21.500 MHz(NTSC制式)晶体振荡器,服务于CPU和图像处理单元(PPU)。主板上设有一个可变电容,将其微调至官方标准的 21.47727 MHz。此设计旨在补偿元件老化导致的频率漂移,方便技术人员修复因频率不准导致的黑白画面等故障。

分频机制与多时钟系统

SNES的处理器不直接使用主时钟,而是通过分频器生成所需的工作频率。例如,CPU运行在主时钟的1/6频率(3.579545 MHz)。 通过分频机制,SNES内部共衍生出 15个不同的时钟信号。这解释了官方文档中看似“缺失”的CIC(防盗版)芯片振荡器——其 3.072 MHz 时钟实际上是由APU的 24.576 MHz 主时钟分频生成的。

卡带端口与增强芯片

SNES将系统时钟信号路由至卡带端口,以支持卡带内的额外硬件:

  • SYS-CLK (21.47727 MHz):供卡带内置的增强芯片(如《星际火狐》的SuperFX处理器)使用,以提升计算与图形性能。
  • CIC-CLK (3.072 MHz):专供卡带内的CIC防盗版芯片使用。
  • 独立时钟源:当系统时钟无法满足特定需求时(如《洛克人X2》的CX4图形芯片),卡带会集成独立的振荡器(如 20 MHz)来提供专属时钟。
10. Documentation for the AMD 7900XTX (github.com)

AMD 7900XTX (Navi31/gfx1100) 文档摘要

1. 概述与标识

  • 显卡型号: AMD Radeon RX 7900 XTX
  • 代号/别名: Navi31, gfx1100, Plum Bonito, amd744c
  • 架构: RDNA 3
  • 物理构成: 1个5纳米图形计算芯片 (GCD) + 6个6纳米缓存芯片 (MCD)

2. 核心硬件单元与固件

文档详细列出了GPU内部的主要处理器单元及其对应的固件模块:

  • 平台安全处理器: PSP (ARM处理器),负责加载安全固件。
  • 系统管理单元: SMU (smuio1306, smu_13_0_0.bin)。
  • 图形与计算核心: GC (gfx1100)。
    • 命令处理器 (CP): 包括 PFP (gc_11_0_0_pfp.bin)、ME (gc_11_0_0_me.bin) 等。
    • 运行列表控制器: RLC (gc_11_0_0_rlc.bin)。
    • 计算微引擎: MEC (gc_11_0_0_mec.bin),基于RS64 (RISC-V 64位) 指令集。
    • 微引擎调度器: MES (gc_11_0_0_mes1.bin, gc_11_0_0_mes_2.bin),基于RS64。
    • 集成内存控制器工具: IMU (gc_11_0_0_imu.bin)。
  • 显示核心: DCN (dcn320, dcn_3_2_0_dmcub.bin)。
  • 视频编解码核心: VCN (vcn400, vcn_4_0_0.bin)。
  • 系统DMA: SDMA (lsdma600, sdma_6_0_0.bin)。

RS64说明: MEC和MES等单元使用RISC-V RV64I架构,并加载偏移量为0x200。

3. 固件加载与内核集成

  • 固件加载过程: 通过PSP加载多个固件镜像,文档列出了详细的加载序列、固件类型枚举和对应的文件(如psp_13_0_0_sos.bin, psp_13_0_0_ta.bin)。
  • 内核模块:
    • 安装: 使用 sudo apt-get install linux-generic-hwe-22.04,并将用户加入rendervideo组。
    • 重新编译: 可通过 make -C . M=drivers/gpu/drm/amd/amdgpu 单独编译amdgpu模块。
    • 调试启用: 可通过动态调试控制(dynamic_debug)和DRM调试参数启用详细日志。

4. 架构与IP块

  • 列出IP块: 使用 sudo umr -lb 命令可以列出GPU的所有IP块及其版本,例如 amd744c.gfx1100 (11.0.0), amd744c.smuio1306 (13.0.6) 等。
  • 固件信息: 可以通过 /sys/kernel/debug/dri/0/amdgpu_firmware_info 查看所有加载的固件版本。

5. 调试与寄存器查看

  • umr工具: 用于查看GPU寄存器。
    • sudo umr -lr amd744c.gfx1100 -O bits: 列出寄存器及其位信息。
    • sudo umr -s amd744c.gfx1100: 转储寄存器状态。
    • umr --top: 查看使用率。
  • GRBM (图形寄存器骨干管理器): 文档显示了各硬件单元(如TA、SPI、CP等)的实时使用率百分比。

6. 关键参考链接

文档提供了大量外部资源链接,包括:

  • AMD官方RDNA 3指令集架构文档。
  • Linux内核amdgpu驱动文档。
  • AMDGPU固件和工具的GitHub仓库。
  • RDNA 3技术演讲和模拟器相关论文。
  • AMDGPU维基页面和调试博客。

7. 其他缩写与术语

  • MQD: 内存队列描述符
  • VMID: 虚拟内存标识符 (用于隔离页表)
  • TCC: 每个通道的纹理缓存 (共享L2)
  • CWSR: 计算波前存储与恢复
  • BACO: 总线活跃,芯片关闭 (一种电源状态)
11. Ask HN: Who is hiring? (April 2024)
12. A proposal to add signals to JavaScript (github.com)

一、提案概述

本文档是TC39 Stage 1阶段关于为JavaScript引入信号机制的提案,旨在为JavaScript生态系统(特别是UI框架)提供标准化的响应式原语。该提案由多位知名框架作者(如Angular、Vue、Svelte、Solid、Qwik等)共同设计,目标是定义信号图的核心语义,而非面向应用开发者的高层API。其愿景类似于Promises/A+对Promise标准化的推动作用,旨在先实现生态对齐,再考虑标准化。

二、背景与动机

  • 问题:在复杂的用户界面开发中,手动管理状态(存储、计算、失效、同步、推送到视图层)存在大量样板代码、紧耦合、不必要的重计算和更新、订阅管理复杂等问题。
  • 信号的作用:信号是一种响应式编程原语,通过声明式模型自动管理基于状态变化的更新,允许开发者专注于业务逻辑。它支持自动依赖追踪惰性求值缓存,可避免不必要的计算和更新,且能解耦状态与视图。
  • 标准化动机
    1. 互操作性:各框架自有的信号实现和自动追踪机制导致模型、组件和库难以跨框架共享。标准化旨在将响应式模型与视图渲染解耦。
    2. 性能/内存:内置实现可能带来少量性能提升,且原生C++实现可能比JS实现更高效。
    3. 开发工具:内置信号便于运行时和开发工具更好地进行调试和性能分析(如追踪错误调用栈、分析信号引用图)。
    4. 标准库优势:符合TC39让JavaScript“开箱即用”的趋势。
    5. 未来HTML/DOM集成:为未来可能的原生HTML模板、Web组件或DOM集成提供底层支持。

三、核心设计与API

设计目标

  • 提供可读写的状态信号和基于公式的计算信号
  • 计算应是惰性无故障缓存的。
  • 支持自定义比较函数。
  • 提供响应器机制,用于在依赖项变化时调度后续工作(框架可据此实现副作用)。
  • 允许框架自行调度,写入同步且立即生效。
  • 提供untrack等“逃生舱”功能。
  • 考虑内存管理(如自动垃圾回收)和性能优化(如减少分配、支持子类化)。

API草案

提案提供了具体的API草案(以TypeScript接口形式描述),主要包括:

  • Signal.State<T>:可读写的信号状态。
  • Signal.Computed<T>:基于其他信号的计算信号。
  • Signal.subtle命名空间:包含高级/框架相关的API,如:
    • Watcher:用于观察信号变化并触发通知回调。
    • untrack:在不被追踪的情况下读取信号。
    • 用于内省的辅助函数(如introspectSourcesintrospectSinks)。
  • 信号选项支持自定义比较函数(equals)和“被监视”/“解除监视”回调。

四、工作原理

  • 信号图:信号构成一个有向无环图。状态信号是源,计算信号是依赖于其他信号的节点。
  • 自动追踪:当计算信号被求值时,它会自动记录其读取的所有其他信号作为依赖项。
  • 惰性与缓存:计算信号只在被读取时才计算,并缓存其值。只有当依赖的实际值发生变化时才重新计算。
  • 同步性:所有操作(写入状态、读取计算、触发响应器回调)都是同步的。
  • 状态管理:计算信号有明确的状态机(如~dirty~~checked~~clean~),以高效管理脏检查和传播。
  • Watcher:当被监视的信号或其依赖项发生变化时,其通知回调会被同步调用,框架可借此调度渲染等任务。

五、开发计划与现状

  • 当前处于Stage 1阶段(2024年4月提案)。
  • 提供了polyfill供实验使用。
  • 提案方计划在推进至Stage 2之前,进行大量原型开发框架集成测试,以验证其在实践中的实用性、性能和正确性。
  • 强调只有当信号在多个框架中被证明可用且比现有框架自有实现有实质优势时,才会推进标准化。

六、常见问题解答(摘要)

  • 使用方式:API主要面向框架作者,应用开发者通常通过框架间接使用。
  • 与现有框架的关系:旨在作为框架底层的响应式核心,兼容VDOM、原生DOM及各类框架范式(类式、编译器式)。
  • 数据流:支持单向数据流,其“拉取”计算特性有助于实现无故障更新。
  • 状态管理:可为Redux等状态管理系统提供基础。
  • 与Proxy关系:互补,可结合使用以创建嵌套式响应结构。
  • 标准化时间:预计至少需要2-3年才可能被所有主流浏览器原生支持。
13. Inside the failed attempt to backdoor SSH globally that got caught by chance (doublepulsar.com)

事件概述 近日,PostgreSQL开发者Andres在Mastodon上发布信息,揭露了一起针对OpenSSH的全球性后门尝试。攻击者通过社会工程手段,迫使XZ Utils开源项目的志愿维护者交出维护权限,随后利用该软件包在支持systemd的Linux发行版中植入后门。该后门通过liblzma加载XZ,进而钩住sshd,允许攻击者使用私钥远程执行命令。OpenSSH运行于近2000万个IP地址上,若后门广泛部署,将造成严重安全威胁。

后门机制与影响 后门设计高度复杂,采用五阶段加载器隐藏自身,并具备远程禁用和移除功能。该恶意代码于今年2月提交至GitHub,并已进入Debian、Fedora和Kali Linux的测试版本,但未进入稳定发行版。攻击者还试图申请成为XZ Embedded的Linux内核模块维护者,显示其长期渗透意图。

发现过程 Andres在进行系统基准测试时,注意到sshd进程CPU使用率异常,回忆起之前在PostgreSQL自动测试中Valgrind的可疑警告。他使用了Debian unstable系统、-fno-omit-frame-pointer编译选项等独特配置,这些巧合条件使得Valgrind能够检测到问题。Andres私下研究后,及时通知Linux发行版社区,阻止了后门的广泛传播。他强调,全球几乎无人拥有类似测试环境,现有安全工具也未能提前发现此威胁。

攻击者高级性与系统性问题 攻击者表现出极高的专业知识,包括多年时间线上的代码修改、影响OSS Fuzzer扫描等。后门至今未被完全逆向工程。文章指出,systemd在Linux中的核心作用(libsystemd链接到众多服务)创造了攻击面,攻击者利用liblzma加载XZ这一下游环节,因为该环节关注度较低。此外,systemd的修复虽已进行但未发布,攻击者可能因此加速部署,最终露出破绽。

结论与建议 事件凸显开源软件的内部威胁风险,维护者常面临压力和网络欺凌。文章建议:保持冷静,继续推进供应链安全工作(如CISA的SBOM);加强Linux EDR检测能力;关注systemd等核心依赖的加固;避免过度恐慌,但需承认开源开发固有风险。Andres的及时发现防止了危机,但长远需系统化改进安全实践。

14. Show HN: Libmui is a macOS Classic widget lib for Linux (github.com)

Libmui 是一个为 Linux 系统复刻 macOS Classic(System 7/8 风格)控件库的项目,最初为 MII Apple //e 模拟器提供轻量、无过多依赖的 UI 解决方案。它模仿了 Macintosh Toolbox 的部分 API,并非完整实现,但足以支撑简单应用。

核心特点与动机:

  • 开发者因不满现有即时模式 UI 库(如 Nuklear)的布局僵化、样式简陋、状态管理复杂等问题,转而自建库。
  • 注重 UI 的“精雕细琢”与可用性,借鉴经典系统设计但去除灰度元素,采用更耐看的扁平风格。
  • 输出为 ARGB 缓冲区,可灵活嵌入 OpenGL 纹理或 X11 窗口,仅重绘“脏区域”以提升效率。

功能模块:

  1. 窗口管理器:支持最多 15 层窗口、拖拽、前置和智能区域重绘,暂无缩放/调整大小功能,不支持透明窗口。
  2. 菜单管理器:实现菜单栏、菜单、快捷键等,风格接近 System 7/8,支持层级菜单,但粘性菜单功能尚未完善。
  3. 控件管理器:包含按钮、复选框、单选按钮、滚动条、文本框等,编辑框和滑块仍在开发中。
  4. 列表管理器:主要用于文件列表显示,支持键盘导航和类型 ahead 搜索,暂不支持文本省略显示。
  5. 对话框:实现“打开文件”对话框,支持历史目录记录和键盘操作;具备基础警报对话框。
  6. 资源管理器:未实现,计划未来引入轻量资源格式。

技术细节:

  • 依赖项:外部仅需 libpixman(用于像素处理和区域裁剪),内部集成简易抗锯齿渲染器(libcg)、字体加载库(stb_truetype)等。
  • 构建:使用 Makefile 构建,示例程序需 XCB 相关依赖。Nvidia 用户需配置 Xorg 以启用共享内存。
  • 使用方式:通过示例 mui_shell 和插件系统快速迭代开发,支持代码热重载。

设计差异与限制:

  • API 全异步、回调驱动,不同于经典 Toolbox 的同步轮询。
  • 简化为两类对象:mui_window(窗口、菜单栏、菜单)和 mui_control(控件元素)。
  • 无暗色模式、主题支持、透明窗口、现代构建工具(CMake 等)或跨语言绑定。

项目定位明确,旨在复刻经典 Mac UI 的体验与开发模式,适用于模拟器或怀旧风格应用开发。

15. Overview: What are Cpp2 and cppfront? How do I get and build cppfront? (hsutter.github.io)

Cpp2 与 cppfront 概述

Cpp2 是什么?

Cpp2 是一种实验性的 "C++ 语法2"。它旨在探索 C++ 语言语法的可能性改进,是现行标准 C++ 语法的一种替代性设计。

cppfront 是什么?

cppfront 是 Cpp2 的第一个编译器。它的主要作用是将采用 Cpp2 新语法编写的代码转换为标准的、可由现有 C++ 编译器编译的 C++ 代码。

如何获取与构建?

根据文章标题,本部分应包含关于获取 cppfront 源代码及进行构建的具体步骤。然而,提供的文章内容仅为标题信息,未包含详细的构建指南或下载链接等具体操作信息。通常,此类工具的获取方式会包括:

  • 从版本控制仓库(如 GitHub)克隆源代码。
  • 使用相应的构建工具(如 CMake、Make)进行编译。

注意:文章提供的具体内容仅确认了项目的名称与基本定义,未详述具体的获取与构建流程。

16. Century-old stone "tsunami stones" dot Japan's coastline (2015) (www.smithsonianmag.com)

日本“海啸石”警示碑:跨越世代的灾难记忆

核心警示

在日本东北海岸的青苗村,矗立着一块约3米高的石碑,上面刻有明确警告:“居高处乃子孙平安和睦之本。谨记巨灾海啸,勿在此点以下建造房屋。”这类石碑被称为“海啸石”,散布于日本海岸线,旨在警示后代在地震后寻求高地,以防毁灭性海浪。

历史背景与现状

  • 起源:多数石碑可追溯至1896年左右,当时两场致命海啸造成约22,000人死亡。
  • 忽略与遗忘:几十年来,随着沿海城镇繁荣,加上人们信任政府修建的大型海堤,石碑的警示被许多人忽视或遗忘。
  • 例外与传承:在青苗村等地方,居民仍遵循石碑教诲。一名12岁村民表示,全村人在2011年海啸时根据标记撤至高地,得以幸存。

灾害记忆的流失

  • 地名遗迹:海啸还影响了地区地名,如“生还者谷”、“波浪边缘”可能暗示高地,而“章鱼地”则指废墟中留下的海洋生物。
  • 代际遗忘规律:东北大学防灾规划教授今村文彦指出,灾难记忆通常在三代人后淡化——亲历者传给子女和孙辈,随后记忆消失。

现代影响与教训

  • 2011年3月海啸后四年,仍有约230,000人住在临时住房中。
  • 该海啸还引发福岛第一核电站核泄漏事故,因设备损坏导致堆芯熔毁。
  • 历史学家板仓郁子强调,海啸石是“跨越世代的警告”,但许多地方未能吸取教训。
17. The Tale of Daniel (www.hillelwayne.com)

本文探讨了名字“丹尼尔”可能拥有长达3400年的历史,追溯了其从古代铭文到现代全球使用的演变过程。核心脉络如下:

  1. 最古老的证据(约公元前1350年)

    • 在叙利亚乌加里特古城遗址发现的《阿卡特传说》泥板中,首次出现了“丹尼尔”(古乌加里特语形式:𐎄𐎐𐎛𐎍)的名字,意为“被艾尔神审判”。
    • 这是目前所知该名字最早的文字记录,比最早的中国文字早约100年,比《圣经》中的《但以理书》早约1000年。
  2. 文化的连续性与中断

    • 作者认为,尽管寻找一条不间断的个体“丹尼尔”传承链是不可能的,但可以考察该名字是否存在于共同的文化意识中,从而被一代代人沿用。
    • 乌加里特在约公元前1190年随“青铜时代大崩溃”而消亡,其文献记录中断。
    • 随后兴起的腓尼基(迦南)诸城邦使用乌加里特的字母系统发展出腓尼基字母,并共享部分文化宗教传统(如崇拜艾尔神和巴力神),这为《阿卡特传说》等故事的流传提供了可能渠道。但由于腓尼基人使用易腐烂的纸莎草书写,几乎没有文学文献留存下来。
  3. 关键证据:希伯来《圣经》中的连接

    • 以色列人本身是迦南人群的一部分,其早期宗教也源于迦南传统。
    • 在《以西结书》(约公元前6世纪)中,“但以理”(דנאל,四字母)与挪亚、约伯并列,被视为外邦义人。学者推测,以西结可能引用的是在更广泛的迦南民间传说中知名的义人“丹尼尔”(即《阿卡特传说》中的父亲),从而建立了从乌加里特到希伯来文献的文化联系。
    • 在《以斯拉记》和《历代志》中,“丹尼尔”(דניאל,五字母)作为真实人名出现,证明当时已有以此为名的真实人物。
  4. 名字的传播与最终定型

    • “丹尼尔”名字得以保存并传播的关键在于《但以理书》。该书虽写于较晚时期(约公元前2世纪),但其中关于未来君王的预言后来被早期基督徒解释为关于耶稣的预言。
    • 这使得《但以理书》在基督教思想中占据重要地位,“丹尼尔”这个名字因此被基督教世界广泛接受,随后随着基督教的传播而遍布欧洲乃至全球,最终成为今天常见的名字。

结论: 文章勾勒出一条假设性的传承路径:“丹尼尔”可能起源于青铜时代迦南地区的共同文化(以乌加里特文献为证),通过迦南/腓尼基文化圈流传,被希伯来《圣经》吸收并记录,最终因基督教的传播而成为全球性名字。虽然从古至今存在拼写和发音的细微变化(如四字母与五字母),且作者强调这并非严格的历史考证,但这一叙事展示了名字可能承载的惊人历史深度。

18. I upgraded my iBook G4 to have an SSD (boredzo.org)

这篇文章记录了作者为Apple iBook G4笔记本电脑升级固态硬盘(SSD)并进行清洁维护的详细过程。

升级动机与准备 作者的主要动机是这台曾属其母亲的笔记本非常脏污(因长期使用时吸烟导致烟灰积累),因此决定在升级存储的同时彻底清洁。原机搭载30GB机械硬盘。作者参考了iFixit维修指南和Apple官方服务手册,并购买了必要工具(如iFixit工具套件、螺丝取出器)和硬件。

硬件选择与采购

  • 存储升级: 因iBook G4内部空间有限,标准SATA SSD无法安装。作者排除了因协议复杂而难以选择的M.2 SSD,最终选择了仍在售的Kingston 256GB mSATA SSD,并搭配了一个mSATA转IDE(PATA)适配器
  • 内存升级: 顺手将内存从512MB(PC2100)升级至1GB(PC2700)
  • 安装介质: 由于光驱不可靠且机器无法从USB启动,作者使用了OWC的外置FireWire固态硬盘来启动并安装系统(注:作者提到该产品已停产)。

实施过程与遇到的问题

  1. 清洁工作: 作者拆解后,用稀释的多功能清洁剂擦拭大部分部件,并用卸甲水处理了顽固的指甲油污渍。
  2. 螺丝问题: 键盘托盘旁一颗微小(M2)螺丝严重生锈。尝试后损坏,后使用精密螺丝取出器(iFixit销售)成功取出。另一颗生锈螺丝则通过清洁(如使用Dremel的尼龙刷头)得以处理。
  3. 安装后故障:
    • 系统安装卡住: 重新组装后,Tiger系统安装光盘引导卡在蓝色界面。意外发现Leopard安装盘可以启动(但无法安装)。
    • 诊断发现内存问题: 在Leopard的终端中运行system_profiler发现新内存槽和PATA总线均无响应。经检查,发现新内存条未完全插入。重新正确安装内存后,问题解决,Tiger安装程序恢复正常。
    • 分区工具限制: 作者想为Mac OS 9创建分区,但发现Tiger的磁盘工具分区表大小限制为512MB。解决方案是切换到Leopard系统下使用hdiutilpdisk等命令行工具完成分区和格式化,再返回Tiger安装系统。

升级效果

  • 性能提升: 原始机械硬盘写入速度约30MB/s。升级后,使用Xbench测试,SSD写入速度达到约90MB/s,基本饱和了UDMA100接口带宽,性能提升约三倍。
  • 体验提升: Tiger系统启动过程中的进度条部分仅需约一秒,整体响应明显加快。
  • 安装速度: 通过FireWire SSD安装Tiger至内部SSD仅耗时15分钟。

其他注意事项

  • 硬盘仓内有减震胶垫,安装时需注意螺丝头与胶垫的对齐。
  • 重新安装脚垫时,需注意其卡口设计,确保正确对位,不可强行安装。

未来计划 作者计划进一步尝试让这台iBook G4引导Mac OS 9(官方不支持),或安装Leopard(官方同样仅支持Panther和Tiger)。

作者感想 作者对升级结果非常满意,同时对OWC逐步停止生产老式Mac兼容配件(如FireWire产品)表示遗憾。

19. XZ Backdoor: Times, damned times, and scams (rheaeve.substack.com)

XZ后门事件:时间戳分析揭露Jia Tan可能的真实所在地

2024年3月,在xz/liblzma软件包中发现了一个严重的后门。这很可能是自由软件生态系统中最严重的信任破坏事件之一,后门被认为是由xz的长期维护者Jia Tan植入的。尽管匿名在自由软件社区中很常见且通常被视为好事,但在此事件中,Jia Tan利用多年建立的信任实施了破坏行为,因此分析其身份线索变得至关重要。

分析方法

分析基于JiaT75在GitHub上向XZ仓库提交代码的时间戳。主要关注点是其提交时间模式和时区信息。

关键发现

  1. 时区不一致

    • Jia Tan的大部分提交(440次)时间戳显示为UTC+08时区,暗示其可能在中国。
    • 但是,存在少数提交(3次和6次)意外地使用了UTC+02和UTC+03时区。这些时区恰好与东欧的冬令时(UTC+02,如2月和11月)和夏令时(UTC+03,如6月、7月及10月初)切换时间吻合,而UTC+08地区没有此类夏令时制度。
  2. 矛盾的时间间隔

    • 在某些日期,Jia Tan的提交记录显示了从UTC+0300时区迅速切换回UTC+0800时区的记录。
    • 例如,2022年10月6日,两次提交的时间戳显示其在11小时内从UTC+0300切换到UTC+0800;2023年6月27日,两次提交甚至只相隔数分钟。考虑到从中国飞往东欧至少需要10-12小时的飞行时间,如此快速的时间切换在物理上几乎不可能,这强烈暗示其并不实际身处UTC+08时区。
  3. 工作习惯与假期模式

    • Jia Tan的工作时间呈现规律性(通常为周二至周五的9:00-18:00),如果调整为东欧时间则更为合理,而按UTC+08时间则意味着在深夜工作。
    • 其活动假期模式更符合东欧习俗:他从未在圣诞节(12月25日)或新年前后(12月31日/1月1日)工作,这与许多东欧国家的公共假期一致。相反,他在中国的主要公共假日(如中秋节、清明节、农历新年)期间仍在提交代码。

结论与限制

基于以上时间戳、时区、工作规律和假期模式的分析,作者推断Jia Tan可能来自东欧时区(UTC+02/03,如以色列或更广泛的东欧地区),而非其名义上暗示的中国。他很可能通过每次提交时简单地将系统时间修改为中国时间来伪造时区。

然而,分析存在限制:Git提交的时间戳和时区理论上都可以被伪造,尽管持续、无破绽地伪造会非常困难且可能影响开发进度。此外,部分显示东欧时区的提交是由另一位维护者Lasse Collin作为“提交者”记录的,这为分析增添了一层复杂性。作者强调,这些结论并非确凿证据,而是基于公开元数据的合理推论。

更新(4月2日):文章澄清UTC+02/03时区涵盖的地理范围比单纯的东欧更广。

20. Ask HN: Who wants to be hired? (April 2024)
21. Error Handling in Baby Toys (brainbaking.com)

本文分析了婴儿电子玩具(如Clementoni和VTech品牌产品)中用于识别不同塑料部件并发出对应声音的简易但巧妙的技术方案及其错误处理机制。

核心识别原理:二进制组合编码 这些玩具的中央模块内设有多个微型开关。每个塑料玩具部件(如动物拼图块、玩偶)的底部都有特定的凹槽设计。当部件插入或放置时,其凹槽会按压特定的开关组合,从而产生一个二进制代码(例如,4个开关可产生16种组合)。玩具的固件通过读取这个二进制代码来识别部件身份,并播放预置的对应声音(如猫叫、鸟鸣)。

Clementoni拼图板:内置错误处理与彩蛋 Clementoni的农场主题拼图板使用4个开关,理论上有16种组合。它仅使用了12种组合来对应12个拼图片。对于未使用的3种组合(1111,1001,1101),工程师设计了一个友好的错误处理程序:当儿童意外触发这些组合时(例如手指乱按或部件错位导致错误触点),玩具会发出“bloop”声并说“uh-oh!”。这种设计既避免了无声的故障感,也增加了趣味性,被视为一个巧妙的“彩蛋”。

VTech玩具:缺乏错误反馈 VTech的多种玩具(如动物系列、汽车系列)同样采用基于开关组合的识别机制。在一些产品(如水上玩乐中心)中,由于部件(如小河马)是圆形的,需要考虑旋转插入的情况。为了正确识别,设计可能采用了位运算(如位移和或操作)或依赖于已启用位的相对位置(例如通过计算二进制码中“1”的数量)来避免因旋转导致的误判。

然而,与Clementoni不同,当VTech玩具遇到未知的开关组合时,不会发出任何声音或反馈,保持沉默。文章对此表示失望,认为这是一个错过增加趣味性或提供错误反馈的机会。

现实应用中的挑战与拓展 在实际使用中,幼儿随意的塞入动作可能导致开关接触不良或误触发邻近开关,从而产生错误的识别码。此时,像Clementoni那样的错误处理音效就显得尤为有用。

文章还补充了一则关于LeapFrog Alphabet Pal毛毛虫玩具的彩蛋故事:当在拼读模式下快速连续按下“F”和“K”字母键时,玩具会在两个字母发音之间插入一声 giggles(轻笑)。据推测,这可能是为了防止组合成一个特定的不雅词汇而特意设置的彩蛋。

总结 这些玩具通过简单的物理开关与二进制编码实现了部件识别。不同品牌在错误处理上的策略差异明显:Clementoni提供了友好的反馈彩蛋,而VTech则选择静默。这些设计体现了在低成本约束下解决复杂识别问题(包括部件旋转)的工程智慧,同时也反映了不同文化背景(文中暗示为意大利与中国)下可能的设计风格差异。

22. Will any crap we put into graphene increase its electrocatalytic effect? (2020) (pubs.acs.org)
25. What we know about the xz Utils backdoor that almost infected the world (arstechnica.com)

xz Utils 后门事件概述

事件发现
2024年3月底,微软开发者Andres Freund在排查Debian系统SSH连接性能问题时,偶然发现异常源于xz Utils软件的更新,进而揭露了一个精心隐藏的后门。该后门若被广泛部署,可能导致全球大量Linux/Unix系统面临严重安全风险。

xz Utils简介
xz Utils是几乎所有Linux和Unix-like系统中普遍使用的数据压缩工具,负责关键的数据解压功能,支持.lzma格式,在系统运行中扮演重要角色。

后门技术机制

  • 后门通过修改xz Utils 5.6.0和5.6.1版本引入,主要针对sshd(SSH服务进程)。
  • 攻击者利用glibc的IFUNC机制,在运行时劫持OpenSSH的认证函数RSA_public_decrypt。
  • 当sshd加载被感染的liblzma库时,后门会替换关键函数指针,使攻击者能使用预共享密钥在SSH证书中嵌入并执行任意代码,从而实现未授权远程命令执行。
  • 后门仅在x86_64架构、glibc环境以及Debian或Red Hat系发行版构建时激活,具有高度针对性。
  • 实现方式复杂,采用多阶段加载:恶意脚本在构建过程中解码隐藏在测试文件中的共享对象,最终编译进liblzma库。

攻击者渗透过程

  • 攻击者以“Jia Tan”身份从2021年起参与开源项目,逐步渗透xz Utils维护流程。
  • 通过社会工程学手段,施压原维护者Lasse Collin并获取提交权限,随后植入后门。
  • 攻击者还干扰了oss-fuzz安全测试,以避免后门被检测。
  • 后门代码仅存在于发布压缩包中,而非公开Git仓库,增加了隐蔽性。

影响范围
受影响版本曾短暂进入多个主流Linux发行版的测试或不稳定分支,包括:

  • Fedora Rawhide与Fedora 41
  • Debian testing/unstable/experimental(特定版本)
  • openSUSE Tumbleweed和MicroOS(2024年3月7日至28日间)
  • Kali Linux(2024年3月26日至28日间)

当前状态

  • 漏洞已分配CVE编号:CVE-2024-3094。
  • 各发行版已迅速回退版本并发布安全更新。
  • 研究人员已开发检测工具(如xz.fail、xzbot)用于识别受感染系统。
  • 后门的最终目的尚未明确,但理论上可导致系统完全被控制。

事件意义
该事件被安全专家称为“开源领域最复杂、最接近成功的供应链攻击之一”,凸显了开源项目维护中的社会工程风险,以及关键基础软件依赖管理的挑战。

27. Show HN: Celest – Flutter Cloud Platform (celest.dev)

Celest: Flutter 云平台摘要

核心概念

Celest 是一个面向 Flutter 开发者的云平台,旨在简化后端开发与部署流程。其核心理念是让开发者能够像编写 Flutter 应用一样编写后端代码,并实现一键部署。

主要功能

1. 全栈 Dart 开发

  • 开发者可以使用 Dart 语言编写所有后端逻辑。
  • 通过为 Dart 函数添加 @cloud 注解,即可将其转换为无服务器函数
  • 示例
    @cloud
    Future<String> sayHello(String name) async {
      return 'Hello, $name!';
    }
    

2. 开箱即用的数据库

  • Celest 集成了 Drift(一个 Dart 数据库工具)。
  • 开发者只需定义 Drift 表结构(schema),Celest 会自动创建并配置对应的数据库
  • 示例
    // database.dart
    class Tasks extends Table {
      late id = integer().autoIncrement()();
      late title = text()();
      late completed = boolean()();
    }
    
    // project.dart
    const tasks = Database(
      schema: Schema.drift(TaskDatabase),
    );
    

3. 一键部署

  • 当开发完成后,只需运行一个命令即可将整个后端项目部署到 Celest 云。
  • 部署命令celest deploy
  • 部署过程会自动完成项目初始化、数据库迁移、资源预热等步骤。
  • 部署成功后,会提供一个在线访问地址(例如:https://my-project-a18bbb.us-south1.celest.cloud)。

安装与使用

  • 安装:通过 Dart 包管理器安装 CLI 工具。
    $ dart pub global activate celest_cli
    

市场定位与背景

  • 文章指出 Flutter 框架在全球持续快速发展,巩固了其作为领先跨平台框架的地位。
  • Celest 正是建立在 Dart + Flutter 技术栈之上,旨在为这个日益庞大的开发者社区提供无缝的后端云服务支持。

附加信息

  • 官方提供了新闻通讯订阅,以获取最新产品更新。
28. Fired Americans Say Indian Firm Gave Their Jobs to H-1B Visa Holders (www.msn.com)
29. Ross Anderson (www.schneier.com)

Ross Anderson于2024年3月28日在剑桥家中意外去世。他是密码学与安全工程领域的杰出学者,也是安全与经济交叉研究的先驱。

交往历程

  • 合作历史:Bruce Schneier与Ross Anderson相识超过30年。他们共同创建了安全与人类行为研讨会(SHB,2008年)以及经济学与信息安全研讨会(WEIS,2001年),后者主要由Anderson发起。
  • 早期互动:早在1993年欧洲密码学会议上,当时还是无名作者的Schneier请Anderson审阅《应用密码学》初稿,Anderson通过邮寄手写注释的方式给予了详细反馈。1996年,Anderson邀请Schneier参加他在剑桥大学牛顿研究所组织的密码学驻留项目。
  • 学术贡献:Anderson是1993年快速软件加密(FSE)研讨会的创始人,Schneier在该会议上首次介绍了Blowfish加密算法。他的著作《安全工程》已成为该领域的经典教材,并配套了系列讲座视频。

学术成就

  • 研究领域:Anderson横跨多个领域,从1990年代的分组密码分析到近年的大型语言模型安全研究。他创立了多个重要学术会议。
  • 核心观点:他是首位将安全问题本质上视为经济问题并建立相关联系的学者,致力于反对监控和后门设计,维护学术自由。
  • 人物特质:Schneier形容Anderson热情、才华横溢、见解深刻但略显固执,对政府和企业界的不专业行为直言不讳。

最后交往

  • 2023年6月在匹兹堡举行的SHB 2023研讨会是Schneier最后一次见到Anderson。Anderson原计划参加同年12月的“重新构想民主”研讨会但临时取消,不过他提交了拟演讲的内容。
  • Anderson去世前一天,两人还在讨论当年SHB研讨会的参会安排。Schneier表示每次与Anderson交流都能学到新知。
  • Anderson生前两周接受了一次长达80分钟的采访,讲述了自己的人生经历。

文章最后表达了对Anderson的妻子Shireen及其家人的哀悼,认为业界过早失去了这位重要人物。

30. 10 Years of Hacker News "Ask HN: Who Is Hiring" Trends (customizedresumes.com)

十年Hacker News“招聘帖”趋势分析

通过分析Hacker News十年来每月发布的“Ask HN: Who is hiring”帖子,可以洞察科技行业的招聘趋势变化。

远程工作兴起

  • 2019年疫情彻底改变了工作模式,“混合工作”概念在疫情前不存在。
  • 远程工作成为主流,影响了工作地点的选择。

工作地点迁移

  • “旧金山”和“纽约”的提及量在2020年大幅下降。
  • “欧洲”和“欧洲的”相关职位描述稳步增加,显示地域分布更广泛。

加密货币兴衰

  • “区块链”在2017年爆发,但2019年需求回落。
  • 值得注意的是,2021年加密货币价格飙升时,区块链相关职位并未显著增加。

人工智能崛起

  • “AI”从2014年几乎不存在到近年来指数级增长。
  • “LLM”自2022年首次出现后迅速普及。
  • “机器学习”需求多年保持稳定。

技术需求下降

  • “移动”、“安卓”、“jQuery”和“Ruby on Rails”需求明显减少。
  • 前端框架和无服务器后端使Rails等传统技术逐渐过时。

招聘术语变化

  • “黑客”一词在招聘描述中越来越少被使用。

职位级别两极分化

  • “高级”和“管理层”职位需求持续增加。
  • “实习”职位显著减少,入门级求职者面临更大挑战。
  • 例如,计算机科学专业学生对实习机会的焦虑在社区中日益凸显。

数据库趋势转变

  • 2016年成为转折点,PostgreSQL在职位描述中逐渐超越MySQL的流行度。

这些趋势反映了科技行业在技能需求、工作方式和人才结构上的快速演变。