2024-04-22

21 篇热帖

1. Equinox.space (equinox.space)

项目名称: Equinox
简介: Equinox 是一个以星空为舞台的互动故事体验项目。
核心内容: 用户可以沉浸于一个设定在星际间的交互式叙事之中。
访问方式: 该体验通过其专属网站(equinox.space)提供。
视觉标识: 项目配有一张用于社交媒体分享的预览图(og-image)。

3. Inside the Super Nintendo cartridges (fabiensanglard.net)

超级任天堂卡带内部结构解析

超级任天堂(SNES)卡带不仅包含存储游戏指令和素材的ROM芯片,还集成了一系列功能独特的芯片。文章揭示了其内部构造的关键组件与技术。

主要组件

  1. CIC复制保护芯片:卡带与主机内的CIC芯片同步通信,若验证失败,主机将重启所有处理器。部分未授权游戏(如《Super 3D Noah's Ark》)不含此芯片,需通过物理方式借助正版卡带的CIC来启动。
  2. ROM芯片:存储游戏代码与数据。容量以比特为单位标识(如8Mb),文章统计了3378款游戏的ROM大小。最大的是《星之海洋》和《幻想传说》(48Mb,即6MB),而《超级马里奥世界》等仅需4Mb(0.5MB)。
  3. SRAM芯片与电池:用于保存游戏进度。由电池供电,在主机关闭时进入低功耗模式以保留数据。
  4. 内存地址解码器(如MAD-1):用于仲裁对ROM和SRAM的访问。

增强处理器

这是SNES卡带最显著的特征,共有13种增强芯片应用于72款游戏,显著提升了系统性能。

  1. SA-1(超级加速器1)

    • 性能:本质是主频10.74 MHz(为主机CPU的4倍)的65C816 CPU,内置CIC和2KB SRAM。它能与主机CPU并行工作,使系统整体性能提升高达5倍。
    • 应用:用于《超级马里奥RPG》等34款游戏。其强大性能可流畅处理128个精灵并实现实时精灵变换。后期被爱好者社区用于通过SA-1改造项目消除《超级马里奥世界》、《魂斗罗3》等老游戏的卡顿。
  2. CX4

    • 功能:卡普空专用芯片,用于《洛克人X2》和《X3》。能进行3D线框渲染及精灵的缩放、旋转,并处理游戏内所有精灵,有效增加了屏幕上同屏显示的精灵数量。
  3. CS-DD1

    • 功能:精灵解压缩芯片,用于《星之海洋》和《街头霸王Alpha 2》。能直接将解压缩后的图像数据传输至PPU的VRAM。
  4. DSP系列(数字信号处理器)

    • DSP-1:最常用,支持《超级马里奥赛车》、《飞行俱乐部》等16款游戏。提供快速16位乘法、三角函数、向量旋转等运算,对实现Mode 7的3D透视效果至关重要。
    • 其他型号(DSP-2/3/4)用于少数游戏,功能各异。
  5. Super FX系列(矢量图形处理器)

    • GSU-1:主频10.74 MHz,用于《星际火狐》、《特技赛车FX》等5款游戏。擅长像素渲染和多边形光栅化,通常将渲染结果存入卡带上的帧缓冲区,再在垂直消隐期间传送至VRAM。
    • GSU-2:与GSU-1相同架构,但运行在主频21.47 MHz(未分频),用于《超级马里奥世界2:耀西岛》、《毁灭战士》等3款游戏,性能更强。《毁灭战士》开发者在没有文档和源码的情况下对其进行了逆向工程。
    • 社区改造:爱好者项目致力于利用GSU芯片改善旧作,甚至将《毁灭战士》超频至32MHz以提升帧率。
  6. 其他专用芯片

    • OBC-1:用于《金属战斗》,主要辅助构建OAM(精灵属性)表。
    • S-RTC:实时时钟芯片。
    • SPC7110:数据解压缩芯片,部分型号集成实时时钟。
    • ST系列(ST-010/011/018):旨在提升游戏AI,但公开细节有限。ST-018疑似为内置ROM的ARM CPU。
    • MSU-1:非物理芯片,由爱好者设计,旨在让SNES支持CD质量音频、视频流和大容量存储,用于游戏模组。

对模拟器的挑战

这些增强芯片极大地增加了后期模拟器开发的难度。一些芯片需要通过开盖逆向工程或提取其内部ROM才能正确模拟,部分芯片的模拟至今仍未完善。

6. Infinitown (demos.littleworkshop.fr)

Infinitown 是一个基于 WebGL 的实验项目,旨在创建一个充满活力且有趣味的程序化城市。其核心技术是先生成一个有限的随机城市街区网格,随后利用视角环绕技巧,使观察者的视线不断绕行该网格,从而营造出无限城市景观的视觉效果。项目开发使用了 Three.js、Blender 和 Unity 等工具,模型资源由 VenCreations 提供。

7. Simon Tatham's Portable Puzzle Collection (www.chiark.greenend.org.uk)

Simon Tatham 便携益智游戏合集

概述

本页是一个包含多个单人益智游戏的小型计算机程序合集。所有游戏均可在Unix(GTK)和Windows系统上原生运行,也可通过Java或JavaScript小程序在网页上游玩。作者创作此合集的初衷是希望提供更多小巧的桌面娱乐工具,让人们能在工作间隙快速游戏几分钟,同时解决跨平台游戏缺失的问题。

重要更新(2023-09-20):由于作者的Mac电脑已损坏且不再打算购买新的Mac,Mac版本将无法继续构建和更新。作者欢迎其他开发者自愿维护Mac前端代码并提供可下载应用。Mac用户目前可通过网页版游玩。

设计与特点

  • 跨平台性:游戏基于可移植的框架设计,同一套后端代码可支持多种图形前端,确保在Unix、Windows等不同平台上一致运行。
  • 游戏来源:大部分游戏并非作者原创,而是对现有益智游戏规则的重新实现。部分游戏的代码由其他作者提交。
  • 网页版本:每个游戏均提供基于JavaScript和WebAssembly的现代网页版(链接标记为"js"),而旧版Java小程序(链接标记为"java")因浏览器支持减少已基本过时。

游戏列表

合集包含多种类型的益智游戏,例如:

  • Black Box:通过激光束反射寻找隐藏的球。
  • Bridges:用桥梁网络连接所有岛屿。
  • Solo:在网格中填入数字,使每行、每列和每个方块区域都包含所有数字。
  • Mines:在不踩到地雷的情况下找出所有地雷。
  • Untangle:重新定位点以使连接线不交叉。 完整游戏列表涵盖逻辑、数学、拼图等多种类别,每个游戏都配有Windows可执行文件和操作手册。

许可证

整个游戏合集受MIT许可证保护,版权属于Simon Tatham及部分代码的贡献者。用户可自由使用游戏二进制文件或代码,但不得冒充原创或因问题追究作者责任。

下载与安装

提供多种获取方式:

  • Windows可执行文件:单个游戏的.exe文件及包含所有游戏的压缩包(puzzles.zip)。
  • Windows帮助文件(puzzles.chm):与可执行文件放在同一目录时,游戏内会提供帮助菜单。
  • Windows安装程序:MSI格式的安装器(puzzles-version-installer.msi)。
  • 源代码包(puzzles-version.tar.gz):支持在兼容GTK的Unix系统上编译游戏。
  • MacOS版本:最后一个版本的磁盘映像(Puzzles.dmg),但已停止更新。
  • 第三方移植版本:社区开发者已将游戏移植到Palm、Android、Symbian、iOS、Windows Store和Rockbox等平台,但这些移植版并非作者维护。

开发信息

  • 游戏使用C语言编写,通过可移植的接口层实现后端与不同前端的分离。
  • 源码包含Windows、Mac OS X和GTK的前端实现,以及用于编译Java小程序的混合C/Java前端。
  • 作者提供详细的跨平台接口文档,鼓励开发者编写新游戏或新前端。
  • 最新开发源码可通过Git仓库获取:git clone https://git.tartarus.org/simon/puzzles.git

反馈与支持

  • 错误报告应发送至anakin@pobox.com
  • 报告游戏缺陷时,建议附上保存的游戏文件(通过游戏内"Game > Save"选项生成),或至少提供随机种子和游戏描述。
  • 欢迎提供补丁和改进建议。
8. Penzai: JAX research toolkit for building, editing, and visualizing neural nets (github.com)

Penzai:用于构建、编辑和可视化神经网络的JAX研究工具包

核心概念

Penzai 是一个 JAX 库,用于将模型编写为易读、函数式的 pytree 数据结构,并提供可视化、修改和分析工具。其核心理念是让训练后的模型操作变得简单,特别适用于模型逆向工程、消融研究、内部激活检查、模型手术和架构调试等研究场景。

模块化工具组成

Penzai 由一系列设计协调但可独立使用的模块化工具构成:

  1. Treescope (pz.ts):一个增强型交互式 Python 美化打印器。它是 IPython/Colab 渲染器的直接替代品,专为理解 Penzai 模型和其他深层嵌套的 JAX pytree 而设计,内置对任意维度 NDArray 的可视化支持。

  2. JAX 树和数组操作工具

    • penzai.core.selectors (pz.select):一个 pytree 通用操作工具,将 JAX 的 .at[...].set(...) 语法推广到任意基于类型的 pytree 遍历,便于进行复杂的重写或对模型进行动态修补。
    • penzai.core.named_axes (pz.nx):一个轻量级命名轴系统,可将普通 JAX 函数提升为按命名轴向量化,并允许在命名轴和位置轴编程风格之间无缝切换,无需学习新的数组 API。
  3. 声明式神经网络库 (penzai.nn (pz.nn)):与其他库(如 Flax、Haiku 等)的替代方案。它使用声明式组合子来暴露模型前向传播的完整结构。模型以 JAX PyTree 表示,这意味着可以通过美化打印查看模型的所有操作,并使用 jax.tree_util 注入新的运行时逻辑。此外,penzai.nn 模型在树的叶子节点允许存在可变变量,使其能够跟踪可变状态和参数共享。

  4. Transformer 模型模块 (penzai.models.transformer):一个参考 Transformer 实现,支持加载 Gemma、Llama、Mistral 和 GPT-NeoX/Pythia 等架构的预训练权重。它由模块化组件和命名轴构建,旨在简化复杂的模型操作工作流。

版本更新

  • Penzai 0.2 版引入了多项针对神经网络 API 的破坏性更改,旨在通过引入对可变状态和参数共享的一流支持并移除不必要的样板代码来简化常见工作流。
  • 用户可以从 penzai.deprecated.v1 子模块导入以保持旧版行为(V1 API)。

快速入门

  1. 安装:首先根据平台安装 JAX,然后通过 pip install penzai 安装 Penzai。
  2. 基本使用
    import penzai
    from penzai import pz
    
    在 Colab/IPython 笔记本中,推荐配置 Treescope 作为默认美化打印机:
    import treescope
    treescope.basic_interactive_setup(autovisualize_arrays=True)
    
  3. 示例:可以初始化并可视化一个简单的神经网络,或通过插入自定义层来捕获和提取模型中间激活。

文档与引用

详细文档位于 https://penzai.readthedocs.io。如果 Penzai 对您的研究有用,请考虑引用相关论文(收录于 ICML 2024 Mechanistic Interpretability Workshop)。

注意:这不是官方支持的 Google 产品。

9. Py2wasm – A Python to WASM Compiler (wasmer.io)

Py2wasm:Python 到 WebAssembly 编译器

概述

Py2wasm 是一款 Python 到 WebAssembly 的编译器,旨在通过将 Python 程序转换为 WebAssembly 来提升运行性能。它基于 Nuitka 工具,避免了传统解释器的开销,使程序运行速度比基线解释器快约 3 倍。

使用方法

  • 安装:运行 pip install py2wasm
  • 编译:使用 py2wasm myprogram.py -o myprogram.wasm 将 Python 文件编译为 WebAssembly 模块。
  • 执行:通过 wasmer run myprogram.wasm 运行生成的 .wasm 文件。
  • 环境要求:需要 Python 3.11 环境,可使用 pyenv 配置。

性能基准

通过 pystone.py 基准测试比较:

  • 原生 Python:387,549 pystones/second。
  • CPython 解释器在 WebAssembly 中:89,728 pystones/second(性能较低)。
  • Py2wasm 编译后:235,150 pystones/second。 结果表明,Py2wasm 达到原生 Python 速度的约 70%,比 WebAssembly 中的基线解释器快 2.5~3 倍。

工作原理与技术选择

优化 Python 在 WebAssembly 中运行的策略包括:

  1. 编译 Python 子集:如 Cython、RPython 和 Codon,但受限于语法支持或功能完整性。
  2. 使用 JIT 编译:如 PyPy,能加速执行但需要预热且 WebAssembly 支持复杂。
  3. 静态分析:通过工具如 mypy 或 Nuitka 转译代码,兼容性较好但加速幅度有限(1.5-3 倍)。

最终选择 Nuitka,因其将 Python 代码转译为 C 语言的 CPython API 调用,支持大多数 Python 程序,并已有成熟基础。集成过程中解决了两个关键问题:

  • 需要 Python 3.11 的 WASI 版本(Nuitka 暂不支持 Python 3.12)。
  • 处理了 32 位 WebAssembly 与 64 位主机架构之间的序列化不匹配问题。

目前 Py2wasm 使用 Nuitka 的 fork 版本,并已向上游提交 PR 以集成更改。

应用与未来计划

Py2wasm 主要用于加速 Python 后端应用(如 Django),便于将服务迁移到 Wasmer Edge 等边缘计算平台,以降低成本和提升性能。未来计划将 Py2wasm 作为 Wasmer 包发布,简化执行命令(如 wasmer run py2wasm)。

10. A flat map with the least error possible: The Gott-Goldberg-Vanderbei projection (vanderbei.princeton.edu)

Gott-Goldberg-Vanderbei 投影:误差最小的平面地图

这是一种旨在以最小误差将球形行星(如地球)投影到平面的地图方法。其展示形式为一个交互式双面圆盘,分别显示北半球(左盘)和南半球(右盘)。

主要特点与交互说明

  • 初始视图:左侧显示北半球,右侧显示南半球。
  • 改变中心点
    • 点击北半球上的任意点,该点将成为左侧圆盘的中心。
    • 点击南半球上的任意点,该点将成为右侧圆盘的中心。
  • 动态旋转:点击“Spin/Pause”按钮可以启动或暂停两个圆盘的动态旋转。
  • 重置功能:若想选择新的中心点,可点击“Reset”按钮重新开始。
  • 实体制作:该地图设计为可打印的双面圆盘。将背景设为“浅色”并打印页面后,将纸张折叠使两个圆盘正反相对,粘贴并剪下即可制成实体盘。

相关资源

该投影方法有详细的学术论文描述,同时也获得了《纽约时报》和《科学美国人》等主流媒体的报道,被称为“迄今为止最精确的平面地图”。

11. Pico.sh – Hacker Labs (github.com)

pico.sh 平台概述

pico.sh 是一个为开发者提供的、基于 SSH 的开源及托管 Web 服务集合。其核心特点是利用用户系统中已安装的 SSH 工具(如 rsync, scp, sftp),无需额外安装软件即可发布内容和管理服务。

主要服务与功能:

  1. pages:静态网站托管平台。使用 SSH 部署网站,自动处理 TLS 证书,支持自定义域名。示例:rsync -rv ./public/ pgs.sh:/mysite/
  2. tuns:HTTPS/WSS/TCP 隧道服务,可将本地服务(如 localhost:8000)暴露到公网。示例:ssh -R dev:80:localhost:8000 tuns.sh
  3. pipe:通过 SSH 进行身份验证的 Unix 管道,支持发布/订阅模式。示例:一个终端订阅主题 ssh pipe.pico.sh sub mytopic,另一个终端发布消息 echo "Hello world!" | ssh pipe.pico.sh pub mytopic
  4. prose:博客平台,使用 SSH 管理内容。示例:scp hello-world.md prose.sh:/ 即可发布文章。
  5. rss-to-email:RSS 订阅邮件通知服务。用户上传一个配置文件(包含邮箱、定时规则和 RSS 源),即可定时接收更新邮件。
  6. pastes:代码片段分享服务。可将命令行输出直接上传。示例:git diff | ssh pastes.sh changes.patch

核心优势:

  • 无需安装:仅依赖系统自带的 SSH 工具。
  • 命令行友好:所有操作均可通过简洁的 SSH 相关命令完成。
  • 自动化处理:如自动处理 HTTPS 证书。

平台旨在简化开发者的部署、发布和协作流程,使其能够通过熟悉的 SSH 命令快速完成各项任务。

12. How a photographer captured his eclipse photo (petapixel.com)

摄影师如何拍摄到日食照片

加拿大自然摄影师Liron Gertsman拍摄了PetaPixel所见过最出色的日全食照片之一。他的作品《军舰鸟与钻石环》是多年研究、辛勤工作、实践、地点勘察和一点运气的结晶。

目标与规划 Gertsman长久以来梦想捕捉到鸟类在日食前飞行的剪影。为实现这一目标,他专注于寻找一次日全食,并选择了2024年4月8日横跨北美的一次。他利用自身生物学背景和鸟类知识,通过各种在线资源(如eBird、Google Earth)筛选地点,最终确定墨西哥锡那罗亚州海岸附近的皮德拉斯布兰卡斯作为首选地点,因为该地区历史天气状况良好且是海鸟聚集地。他提前一年预订了旅行和住宿。

勘察与准备 Gertsman进行了详尽的地点勘察,制定了备用计划以防天气变化。关键挑战在于预测鸟类在日食期间的行为。他基于观察,选择了那些白天和夜晚都有鸟类活动的区域,以增加鸟类在日食期间可能表现出夜间行为的概率。马萨特兰群岛(Mazatlán Islands)生态保护区是他的首选点,因为傍晚时分有大量鸟类在此栖息。他特别希望拍摄到军舰鸟,一种具有显著叉状尾的大型海鸟。

拍摄过程 拍摄日当天,从包租的船上进行拍摄,这提供了快速调整位置的灵活性。在日全食开始前几分钟,起初只有四五十只鸟,但随后突然有约250只鸟升空盘旋,并且没有降落,这正好符合他需要的“空中盘旋”构想。船长和船员的专业支持至关重要,Gertsman还特意让船员移除了船舵处的遮阳篷,让大家都能亲眼目睹日食。

设备与技巧 Gertsman使用两台佳能EOS R5相机,以避免在日全食期间更换镜头浪费时间。一台搭载RF 100-500mm长焦镜头(使用伺服自动对焦及动物检测),另一台搭载RF 24-105mm标准变焦镜头(使用单次自动对焦,对焦至无穷远附近)。他长期练习在移动船只上手持拍摄,并在2023年的一次环食期间进行了实战练习,以熟悉在类似条件下拍摄飞鸟。

成功要素 Gertsman强调,成功离不开充分的准备和练习。尽管拍摄日早上天气一度令人担忧,但他坚持了原计划。薄云的出现为拍摄提供了理想条件,柔化了阳光,使鸟类与太阳的合影成为可能。摄影师承认运气是因素之一,但认为“运气是自己创造的”。

结语 这张梦想照片的获得,是长期准备、专业技能、灵活应变和有利环境共同作用的结果。Gertsman在日全食期间保持了冷静,并凭借自动化的操作流程完成了拍摄。

13. Parquet-WASM: Rust-based WebAssembly bindings to read and write Parquet data (github.com)

Parquet-WASM:基于Rust的WebAssembly绑定,用于读写Parquet数据

核心概述

Parquet-WASM 是一个基于 Rust 的 WebAssembly 项目,提供读写 Apache Parquet 格式数据的功能,并与 Apache Arrow 实现相互转换。其设计目的是与 JavaScript 的 Arrow 实现库(如官方的 JS Arrow 库)配合使用。该库包含完整的读写支持及所有压缩编解码器。

主要功能与API

  • API 类型:提供同步和异步两种 API。
    • 同步 API:函数包括 readParquetreadSchemawriteParquet。需要预先加载整个 Parquet 文件缓冲区,可能不适用于大文件。
    • 异步 API:包括 readParquetStreamParquetFile 类,支持流式读取和处理远程文件。
  • 内存表示:同步和异步函数均通过 WebAssembly 内存中的 Table 类来处理 Apache Arrow 表。

安装与入口点

  • 安装:通过 NPM 包管理器安装 parquet-wasm
  • 入口点:提供三种构建入口,适用于不同环境:
    • parquet-wasm/parquet-wasm/esm:用于浏览器的 ESM 模块,使用前需手动初始化 WebAssembly。
    • parquet-wasm/bundler:适用于 Webpack 等打包工具的构建。
    • parquet-wasm/node:适用于 Node.js 的同步 require 构建。

使用与初始化

  • ESM 初始化:支持异步(推荐)和同步两种方式初始化 WebAssembly 模块。可默认加载或指定自定义 URL。
  • 浏览器直接使用:可直接从 CDN 加载 ESM 文件。
  • 示例:文档提供了一个完整示例,展示了如何在 JavaScript 中创建 Arrow 表、使用 writeParquet 写入 Parquet 格式(支持压缩设置),再用 readParquet 读取回来。

特性与自定义构建

  • 压缩支持:包括 Uncompressed、Snappy、Gzip、Brotli、ZSTD、LZ4_RAW 以及已弃用的 LZ4。
  • 自定义构建:用户可根据需求(如仅需某种压缩编解码器)使用 wasm-pack 进行自定义构建,以最小化包体积。默认启用特性包括 all_compressionsreaderwriterasync

性能与优化

  • 推荐使用新的 Table.intoFFI API 将 WebAssembly 内存中的数据转移至 JavaScript。此 API 利用 Arrow 的 C Data Interface,相比传统的 intoIPCStream 方式,可减少内存拷贝,提升性能并降低内存开销。
  • 对于大型文件,该库因使用高性能 Rust 库并将数据加载至高效的 Arrow 二进制内存格式,通常比纯 JavaScript 方案(如 hyparquet)更快、内存效率更高。

与其他库比较(hyparquet)

  • hyparquet 优势:包体积更小、纯 JavaScript 实现易调试、无需 WebAssembly 初始化。
  • parquet-wasm 优势:处理大文件性能更优、内存使用更高效(得益于 Rust 和 Arrow 格式)。带宽节省可抵消其较大的初始包体积。

未来工作与致谢

  • 未来计划:包括实现谓词下推、列过滤等高级功能,并增加测试。
  • 致谢:项目基于多个现有工作的启发。
14. Apple has reportedly acquired Datakalab (9to5mac.com)

根据法国商业杂志《Challenges》报道,苹果公司已于2023年12月收购了总部位于巴黎的法国人工智能初创公司Datakalab。该公司专注于AI压缩和计算机视觉技术,自称是“低功耗、运行时高效及深度学习算法”的专家,其技术主要面向设备端运行。

Datakalab的核心优势在于其行业领先的压缩与自适应技术,能够部署快速、经济且精确的嵌入式计算机视觉系统。收购前,该公司规模较小,员工人数在10至20人之间。Datakalab的业务包括开发用于测量公共空间人流的图像分析算法,其产品强调“隐私设计”原则,能在100毫秒内将图像转化为匿名的统计数据,且不存储任何图像或个人数据。

该公司此前曾有重要的合作案例,包括在2020年5月与法国政府合作,在巴黎交通系统部署AI工具以检测乘客是否佩戴口罩,并与迪士尼等伙伴有过合作。

尽管苹果与Datakalab均未公开确认此次收购,但报道称交易已向欧盟委员会报备。消息指出,Datakalab的两位创始人并未加入苹果,但有多名其他员工转入。此外,Datakalab持有多项与AI压缩和视觉技术相关的专利。

此次收购正值苹果预计于今年晚些时候在iOS 18中引入一系列AI功能之际。Datakalab先进的视觉技术也可能在苹果未来的Vision Pro等项目中发挥作用,其高级面部识别技术还可能有助于改进“照片”应用和Face ID等功能。

15. Espressif Acquires Majority Stake in M5Stack (www.espressif.com)

Espressif 收购 M5Stack 多数股权

收购概况

Espressif Systems 于 2024年4月22日宣布收购 M5Stack 的多数股权。此举是物联网与嵌入式系统领域的战略里程碑,旨在推动双方共同的愿景——普及人工智能物联网技术。

技术协同与产品生态

  • M5Stack 核心业务:提供模块化、开源硬件平台,大幅简化物联网与嵌入式解决方案的开发,其产品线覆盖整个物联网领域。
  • 技术基础:M5Stack 的主控模块基于 Espressif 的 ESP32 系列芯片,体现了双方深度的技术协同。
  • 平台特点
    • 硬件:支持多种扩展模块(如环境传感器、摄像头、GPS 等)。
    • 软件:除支持 ESP-IDF 和 Arduino 外,还提供自有低代码开发平台 UIFlow 及数据服务 EZData。
    • 社区:拥有活跃的开发者社区和广泛影响力。

战略意义

  • 增强 Espressif 生态:借助 M5Stack 在工业物联网应用的经验,扩展 Espressif 的 AIoT 技术产品组合(涵盖芯片、软件、云中间件、工具及物流支持)。
  • 开放合作范例:此次收购表明 Espressif 不仅聚焦自有硬件,还通过第三方协作推动多样化的物联网解决方案生态。

Espressif 财务表现

2024 年第一季度,Espressif 实现营收 3.8719 亿元人民币,同比增长 21.71%;净利润 5392 万元人民币,同比大幅增长 73.43%,创下历史同期最佳业绩。

16. Ruby vs. Python comes down to the for loop (2021) (softwaredoug.com)

本文通过对比Ruby和Python中的for循环机制,阐述两种语言在对象迭代、数据处理和编程范式上的根本哲学差异。

核心差异:for循环的两种哲学

Python的方式:对象模型服从for循环。对象通过实现__iter____next__等方法,告诉语言如何迭代自己。for循环的主体负责处理对象返回的数据。

class Stuff:
    def __init__(self):
        self.a_list = [1,2,3,4]
        self.position = 0
    def __next__(self):
        # 返回数据或抛出StopIteration
    def __iter__(self):
        return self

for data in Stuff():
    print(data)

Ruby的方式for循环(通过each方法)服从对象模型。对象将过程式代码封装在块(block)中传递,对象内部通过yield将值传给块处理。

class Stuff
  def initialize
    @a_list = [1, 2, 3, 4]
  end
  def each
    for item in @a_list
      yield item
    end
  end
end

Stuff.new().each do |item|
  puts item
end

简单来说:Python将数据传回给for循环,Ruby将代码传给数据。

扩展差异

  1. 数据处理方式

    • Python基于for循环构建各种处理操作(如列表推导式):
      [item for item in Stuff()]
      [item for item in Stuff() if item % 2 == 0]
      
    • Ruby坚持方法优先,为集合提供专门的方法(如selectmap):
      Stuff.new().select{|item| item.even?}
      Stuff.new().map{|item| item}
      
  2. 控制权分配

    • Python:语言掌握数据处理的控制权。开发者只需让对象可迭代,语言决定如何处理数据。
    • Ruby:对象掌握处理自身的控制权。对象可以定义不同的迭代实现(例如eachmap可能有不同优化),开发者需要按照对象期望的方式与之交互。
  3. 编程范式基础

    • Python:源于C风格的过程式编程,面向对象是后来添加的层次。接受self作为第一个参数(类似C的句柄),自由函数常被鼓励。本质是过程式优先,对象化是安全性的提升。
    • Ruby:以面向对象为基石。过程式代码被封装在块中,让对象操控这些代码块。拥有真正的私有访问控制(而非仅靠约定),鼓励程序员对领域建模而非对编程环境建模。

总结与适用场景

  • Python适合系统编程、数值计算等领域,它扩展了C风格编程并使其更安全,在需要时可直接写C扩展。
  • Ruby更适合构建流畅的API和领域特定语言(DSL),强调对象对交互方式的控制,鼓励领域建模。

两种语言的根本分歧在于:Python让语言规范统领数据处理,Ruby让对象掌控自身的交互规则。这种哲学差异导致了它们在语法、惯用法和应用场景上的广泛不同。

17. Intel Gaudi 3 the New 128GB HBM2e AI Chip in the Wild (www.servethehome.com)

Intel Gaudi 3 AI加速器概述

Intel Gaudi 3是英特尔在2024年发布的最新一代专用AI加速器,相较于前代Gaudi 2实现了显著升级,计划于2024年下半年投入量产。

核心规格与升级

  • 工艺与显存:采用5nm工艺(上一代为7nm),配备128GB HBM2e显存(8个16GB堆叠)。
  • 计算能力:提供高达1.835 PFLOPS的FP8算力,拥有64个张量处理核心和8个矩阵数学引擎。
  • 架构设计:采用双芯片封装,每个芯片包含48MB SRAM、16个张量核心和媒体引擎。

关键特性与互联设计

  • 网络扩展:延续使用以太网进行横向扩展,提供24个网络接口,速率从上一代的100GbE升级至200GbE
  • 系统集成:支持OAM(开放加速模块)形态,可部署8块加速卡组成计算单元,单卡热设计功耗约900W(液冷版本可能更高)。
  • 扩展拓扑:在机箱内,每块OAM卡通过3路200GbE连接其他7块卡,剩余3路用于机箱外部连接(通过OSFP接口)。

性能对比与市场定位

  • 与NVIDIA H100对比:英特尔宣称Gaudi 3在推理和训练场景中均具备能效比或速度优势,尤其强调其在AI推理市场的潜力。
  • 竞争策略:定位为更具性价比的选择,尤其在2024年NVIDIA H200和Blackwell产品上市后,预计将以较低价格参与市场竞争。
  • 未来规划:2025年将推出采用GPU架构的Falcon Shores平台,旨在为Gaudi用户提供平滑过渡。

产品形态与上市时间

  • 多形态支持:除OAM模块外,还提供PCIe CEM形态(HL-338),热设计功耗为600W。
  • 量产安排:2024年上半年开始送样,风冷和液冷版本均计划于2024年下半年量产

总结

Intel Gaudi 3通过大幅增加显存容量、计算核心和网络带宽,显著提升了性能。其基于以太网的扩展设计降低了数据中心网络管理的复杂度,结合有竞争力的定价,旨在强化英特尔在快速增长的AI加速器市场中的地位。

18. Anti-municipal broadband budget amendment gets nixed in New York (communitynets.org)

纽约州成功抵制反市政宽带预算修正案

2024年4月19日,纽约州议会通过了一项预算法案,其中并未包含一项据信由大型有线电视公司Charter Spectrum游说推动的修正案。该修正案的失败,意味着纽约州旨在支持市政宽带建设的“市政基础设施计划”(MIP)拨款得以保全,避免了其被削弱的风险。

修正案内容与潜在影响 该修正案提议将MIP拨款限制在仅针对“未服务和服务不足”地点的项目。支持者认为,这种限制会使许多市政宽带项目在财务上难以维持,从而阻碍其发展。MIP是纽约州十亿美元“连接纽约”计划的一部分,专门用于资助市政宽带项目,旨在为居民提供更多宽带选择,打破大型垄断企业服务质量不稳定、价格高昂的局面。

支持市政宽带的观点 纽约州众议员安娜·凯莱斯(Anna Kelles)指出,被否决的修正案将“摧毁纽约州为市政宽带建立可持续商业模式的现有努力”。她与州参议员雷切尔·梅(Rachel May)强调,MIP项目的初衷是保障地方政府为其选民提供高速互联网的选择权。在已有市政宽带部署的地区,整体价格下降,服务水平得到提升。

美国公共宽带协会(AAPB)执行董事吉吉·索恩(Gigi Sohn)将此视为“纽约州每个社区和每位居民的胜利”。她赞扬州议会抵制了有线电视游说者破坏社区宽带的幕后企图,并强调社区应有权自由选择最适合居民的宽带网络类型,公共网络能够提供私营运营商往往无法实现的普遍服务和可负担价格。

挑战与未来展望 文章指出,将补贴局限于FCC定义的“未服务”地区存在缺陷,因为FCC的宽带数据收集本身因大型企业的长期游说而存在不准确之处,可能遗漏了实际上服务不足的地区。尽管此次修正案被成功阻止,但全国范围内大型电信和有线电视公司推动的反竞争行动并未消失。索恩预计,拥有庞大资源的同类游说者明年还会再次尝试,而AAPB及其成员将继续捍卫每个社区控制其宽带未来的自由。

19. JEDEC Extends DDR5 Memory Spec to 8800 MT/S, Adds Anti-Rowhammer Features (www.anandtech.com)

论坛板块结构概览

该内容展示了一个综合技术论坛的板块列表与统计数据。论坛涵盖硬件、软件、网络、娱乐及生活等多个领域。

主要硬件与技术板块

  • CPU与超频:讨论处理器与超频技术,拥有7.81万个主题帖和140万条消息。
  • 主板:专注于主板讨论,包含6.7万个主题帖。
  • 显卡:讨论显卡与图形技术,主题帖达9.61万个,消息超过160万条。
  • 内存与存储:涉及DDR内存、硬盘、SSD等存储技术,有2.26万个主题帖。
  • 显示器:关于显示器和显示设备的讨论区。
  • 电源:针对高功率PC的电源讨论。
  • 机箱与散热:分享散热方案与机箱选择。
  • 笔记本:笔记本电脑与移动设备的讨论。
  • 网络:涵盖从局域网到广域网的网络技术问题。
  • 外设与组件:即插即用设备的相关问题。
  • 装机:通用计算机组装、问题排查与硬件技术讨论。

消费电子与娱乐板块

  • 数码相机与摄像机:讨论各类数码相机及摄影摄像硬件。
  • 主机游戏:涵盖所有游戏主机与游戏相关话题。
  • 移动设备:智能手机、平板等移动设备讨论。
  • 音频设备:家庭影院及高保真音频设备讨论。
  • 电视:关于电视设备及家庭影院设置的讨论。

软件与操作系统板块

  • Windows:针对Windows系统及相关应用的讨论与帮助。
  • 苹果:MacOS、iOS及苹果硬件相关讨论。
  • 开源软件:讨论运行于类Unix系统上的开源或专有软件。
  • 操作系统:涵盖Windows、MacOS、Linux等各类操作系统的讨论。
  • 编程:计算机编程技术讨论专区。
  • PC游戏:所有PC平台游戏相关话题。
  • 分布式计算:讨论SETI@home、Folding@home等分布式计算项目。
  • 安全:与计算机安全相关的所有话题。

社区与生活板块

  • 优惠与赠品:分享网络上的热门优惠、交易和赠品信息。
  • 非主题讨论俱乐部:一个开放的非技术主题讨论区。
  • 政治与新闻:用于严肃讨论政治与时事的版块。
  • 咨询技术专家:专注于PC架构与技术的深度专业讨论。
  • 车库:汽车相关需求,涵盖机械、电气及改装话题。
  • 家居与园艺:分享家居改善和园艺技巧。

管理板块

  • 论坛问题与反馈:用于反馈论坛账号或技术问题。

:提供的实际内容为论坛的板块结构与数据统计,而非指定的文章内容。

20. An Exploration of SBCL Internals (2020) (simonsafar.com)

本文是关于SBCL(一种Common Lisp实现)内部机制的技术探索。作者通过实际实验,逐步揭示了SBCL运行时的多个关键方面。

反汇编与机器码

文章首先使用SBCL内置的反汇编工具,对一个简单的Lisp函数testfunc进行分析。通过查看生成的x86-64汇编代码,作者发现函数调用GENERIC-+进行加法操作,并且常量33在代码中被移位(左移1位,即存储为66)。作者随后演示了如何直接修改函数对应的机器码内存(通过sb-sys:int-sapsap-ref-8),将常量从66改为80,从而验证了修改后函数返回结果变为40。这展示了Lisp代码与底层机器码的直接对应关系,以及SBCL允许在运行时修改已编译代码的可能性。

Lisp对象的内存布局

接着,文章探讨了Lisp对象(如字符串)在内存中的表示。作者使用sb-kernel:get-lisp-obj-address获取对象地址,并编写了一个简单的十六进制转储函数hexdump-address来查看内存内容。通过分析一个测试字符串,作者揭示了带标签指针的关键概念:

  • SBCL使用64位指针的最后4位(一个十六进制数字)作为低标签,用于标识指针指向的对象类型。
  • 例如,字符串指针的低标签通常是0xF(OTHER_POINTER_LOWTAG),函数指针是0xB(FUN_POINTER_LOWTAG),列表指针是0x7(LIST_POINTER_LOWTAG)。
  • 为了对齐,需要屏蔽掉低标签位才能看到实际的对象数据。屏蔽后,字符串的内存布局变得清晰:前几个字节包含对象头信息,其后是UTF-32编码的字符数据。

作者通过修改字符串对象内存中的长度字段和字符数据,直接改变了字符串的内容,进一步验证了这种内存布局。

数字的表示与装箱

文章解释了SBCL如何高效表示数字。定点数不作为堆上的对象分配,而是直接嵌入指针值中。如果指针的最低位为0,则该值被解释为一个定点数(实际值左移1位存储)。这种技术避免了频繁的内存分配和解引用,提高了性能。

相关工具与生成文件

文中提到了几个对探索SBCL内部有用的工具:

  1. 反汇编器(disassemble 'function-name)
  2. 对象地址获取(sb-kernel:get-lisp-obj-address object)
  3. 内存读写:通过sb-sys:int-sap将整数转换为系统区域指针,并使用sap-ref-8等函数访问。
  4. 生成的常量文件:自编译SBCL后,在src/runtime/genesis/constants.h中生成了定义低标签和对象布局的C语言常量,这些常量是SBCL的C语言运行时系统理解Lisp对象结构的关键。

文章目标与前提

作者声明本文旨在为那些不熟悉SBCL实现细节的读者提供一个内部机制的入门导览,并将其作为一次“公开学习”的实验。前提是读者已熟悉Lisp基础,并对x86汇编有一定了解。

总结来说,本文通过一系列交互式实验,揭示了SBCL中函数编译结果、Lisp对象内存布局(特别是带标签指针机制)以及数字高效表示等核心内部机制。

21. Why African tech companies are ditching Google for a small Indian competitor (restofworld.org)

近年来,众多非洲科技公司正从谷歌(Google)的服务转向印度竞争对手Zoho。驱动这一转变的核心因素是成本压力本地化策略

  • 成本与本地货币支付:对于非洲中小企业和初创公司而言,Zoho产品的定价远低于谷歌等国际巨头。例如,尼日利亚公司Flexisaf转用Zoho后,每年可节省约7000美元。至关重要的是,Zoho自2021年起允许非洲客户使用当地货币支付,规避了美元短缺和外汇管制带来的障碍,而谷歌Workspace仅接受美元或欧元支付。
  • 激进的本地化扩张:Zoho于2019年才进入非洲市场,但通过设立本地办事处、雇佣本地员工(目前约60名)、并针对非洲市场提供大幅折扣(如尼日利亚的Zoho One套餐价格仅为全球价的五分之一),实现了快速增长。2023年,其在尼日利亚的用户数同比增长50%,在南非的收入增长73%。
  • 挑战与不足:尽管初获成功,Zoho仍面临挑战。用户反馈其产品界面设计略显过时,移动端应用体验有待提升。更重要的是,Zoho缺乏像谷歌那样成熟且庞大的本地开发者生态与社区支持,这可能影响企业用户在遇到技术问题时的解决效率。
  • 应对策略:为弥补短板,Zoho正积极与本地商业社区、创业孵化器及加速器合作,以建立品牌信任并融入当地生态系统。

总而言之,Zoho凭借其极具竞争力的价格、灵活的支付方式及积极的本地化策略,成功切入非洲市场,成为谷歌的有力替代选择。然而,其长期成功还需在产品体验升级和开发者生态建设上持续投入。