Instant 是一个客户端数据库,通过关系查询、乐观更新和多人支持实现实时协作应用程序
- • Instant:用于实时应用的客户端数据库
Instant 是一种新颖的客户端数据库,旨在简化 Notion 或 Figma 等实时协作应用程序的构建。它可以处理数据获取、权限检查、离线缓存、乐观更新和回滚等复杂任务,让开发人员可以专注于打造卓越的用户体验。
- • 主要特点:
- • **关系查询:**开发人员以熟悉的关系格式 (InstaQL) 编写查询,反映所需数据的结构。Instant 可处理所有底层复杂性。
- • **默认多人游戏:**每个查询都会自动在多个用户之间同步,实现无缝实时协作,而无需设置复杂的服务器端状态管理。
- • 离线支持: Instant 利用 IndexedDB(Web)和 AsyncStorage(React Native)进行持久数据存储,确保即使在离线时应用程序也能正常运行。
- • 动机:
Instant 解决了开发人员在构建现代应用程序时面临的常见痛点:
- • 服务端开销: 传统架构通常涉及在服务器端设置数据库、缓存、ORM 和端点,从而增加了复杂性和开销。
- • 客户端复杂性: 使用存储、选择器和修改器管理客户端状态可能既麻烦又耗时。
- • 多人挑战: 实现实时协作通常需要复杂的有状态服务器。
Instant 旨在通过将数据库直接带到客户端来简化这一过程,从而消除对大部分服务器端基础设施的需求并简化开发过程。
- • 架构概述:
- • 后端: Postgres 数据库将所有用户数据存储为三元组。基于 Clojure 的同步服务器与 Postgres 和理解 InstaQL(一种类似于 GraphQL 的关系语言)的自定义查询引擎进行交互。
- • **前端:**客户端三重存储使用 IndexedDB(Web)或 AsyncStorage(React Native)处理缓存最近的查询。
- • 权限: Google 的 CEL 库为权限系统提供支持,确保安全访问数据。
- • 入门:
Instant 提供不间断的免费套餐,让您轻松上手。开发人员可以在 instantdb.com 上注册,并在几分钟内创建功能性应用。Instant 团队也在 Discord 上活跃,提供支持并解答问题。
Notris:PlayStation 1 的俄罗斯方块克隆版

- • **动机:**作者受到怀旧情绪和体验低级编程的渴望的启发,想要为 PS1 创作一款经典游戏。
- • 技术挑战:
- • **PSX 开发环境:**作者使用了 PS-Noop SDK,这是专为 PlayStation 1 开发设计的工具链。
- • **图形渲染:**本文重点介绍
ui_renderBlock()函数的使用,建议使用 SDK 内的自定义图形库或 API 在屏幕上绘制像素。
- • PlayStation 启动顺序:
- • BIOS 和许可证数据: PSX 启动序列涉及两个阶段:Sony Computer Entertainment 徽标(来自 BIOS)和 PlayStation 徽标(来自光盘许可证数据)。
- • **版权注意事项:**为了包含官方 PlayStation 徽标,作者需要从 PS1 游戏 ISO 中提取许可数据。出于版权考虑,此文件已从版本控制中排除
.gitignore。
- • 刻录游戏光盘:
- • **光盘兼容性:**本文强调了使用兼容 CD-R 介质刻录 PSX 游戏的重要性。现代 CD 通常缺乏 PS1 激光所需的反射率。
- • 反复试验: 作者在寻找合适介质时面临挑战,最终求助于专门的 JVC Taiyo Yuden 光盘。
- • 成功与反思:
- • **关键时刻:**成功的启动顺序和俄罗斯方块游戏标题(“NOTRIS”)的显示标志着作者取得了重大成就。
- • **欣赏低级编程:**本文最后反思了低级编程的独特挑战和回报,强调了对精确性和对细节的关注。它赞扬了“通过巧妙的机器营造出活着的幻觉”的能力——让代码在物理机器上栩栩如生。
Amazon EBS 通过渐进式改进和无中断维护实现了亚毫秒级延迟
无中断维护:作者强调了设计无中断维护系统的重要性。他们通过 EBS(弹性块存储)实现了这一点,允许客户卷在不停机的情况下迁移到新的存储服务器。这使他们能够升级硬件、优化数据结构并确保持续的服务可用性。
通过协作提高绩效:作者回顾了他们作为工程领导者学习提高绩效的个人历程。他们意识到仅仅依靠个人专业知识是一种瓶颈,因此他们接受了同行调试和知识共享,以更有效地解决复杂问题。
为客户价值而不断改进: 团队采用迭代方法来改进 EBS 性能,专注于为客户提供增量价值,而不是追求一次性大规模改造。这使他们能够适应不断变化的客户工作负载并随着时间的推移不断改进解决方案。
通过创新降低延迟:作者强调通过持续创新显著降低了 EBS 延迟。他们从平均每 I/O 操作超过 10 毫秒的延迟过渡到使用 io2 Block Express 卷实现一致的亚毫秒级性能。
致力于持续改进:团队承认他们的工作永远不会真正完成。他们仍然致力于突破 EBS 性能的界限并满足客户不断变化的需求。
SBAT 是什么?为什么大家突然关心它?
讨论的焦点是微软决定撤销其旧的代码签名证书颁发机构 (CA 2011) 并过渡到新的证书颁发机构 (CA 2023)。此更改旨在通过防止使用可能易受攻击的过时证书来提高安全性。
过渡过程是自愿的,这意味着用户可以选择是否更新系统以识别新 CA。不过,微软计划在未来将此更新变为强制性的。
此更改会影响启动 Windows 并从媒体安装它。使用 CA 2011 签名的旧安装媒体可能不再适用于已更新为仅识别 CA 2023 的系统。这意味着用户需要获取使用最新证书签名的新安装媒体。
一些用户担心强制更新可能会侵犯用户的选择和自由。他们认为,即使存在安全风险,个人也应该有权决定是否更新系统。另一些人则反驳说,强制更新对于保护用户免受恶意软件和其他威胁是必要的。
讨论还涉及“垫片”的概念,垫片是用于实现旧操作系统与新硬件或软件之间兼容性的软件组件。一位用户询问管理员如何配置他们的系统,将所有垫片视为恶意软件并阻止它们启动。这表明他们希望采取更严格的安全措施,即使以潜在的兼容性问题为代价。
GPU 利用率可能是一个误导性指标
- • 了解SM效率:
- • SM 效率是 Nvidia GPU 上的一个关键指标,它揭示了在给定时间范围内积极参与计算的流多处理器 (SM) 的百分比。
- • 可以将 SM 视为监督 CUDA 核心组的“领班”。SM 效率越高,表示 GPU 处理能力的利用率越高。
- • 识别瓶颈:
- • 通过逐层监控 SM 效率,您可以确定模型的哪些部分(例如,特定的转换器层)未充分利用可用的 SM。这些是优化的主要候选对象。
- • 融合内核的威力:
- • 将多个层融合到单个 GPU 内核中可显著提高性能。这可最大限度地减少与 CPU 和 GPU 内存之间的数据传输相关的开销。
- • Flash Attention 等库为常见操作(例如,attention、MLP、dropout)提供了预先构建的融合内核,从而节省了您的开发时间。
- • 仍需人工干预:
- • 虽然 torch.compile 旨在实现内核融合的自动化,但目前与 FSDP 等高级分布式训练策略一起使用时存在局限性。
- • 目前,通常需要将融合内核手动集成到模型代码中。
- • 令人印象深刻的结果:
- • 通过关注 SM 效率并采用融合内核,作者为客户的 Transformer 模型实现了显著的 4 倍训练时间加速。
- • 超越 GPU 利用率:
- • 虽然 GPU 利用率很重要,但它并不能说明全部情况。SM 效率可以更细致地了解 GPU 的使用效率。
- • 其他工具和指标:
- • Nvidia DCGM(数据中心 GPU 管理器)提供内置 SM 活动监控。
- • 为了获得更深入的见解,请探索 SM 占用率(PyTorch Profiler 中实现的占用率)等指标,以揭示每个 SM 内的工作负载强度。
Isaiah:用于管理所有 Docker 的开源自托管应用程序
- • Isaiah 是一个基于 Web 的 Docker 管理工具,旨在作为 lazydocker 的替代品,提供基于浏览器的界面来管理容器和图像。
- • **开发动机:**创建者想要一个比 Portainer 等现有解决方案更简单的 Docker 管理 Web 界面。他们最初尝试将 lazydocker 适配到 Web 上,但最终决定从头开始构建 Isaiah。
- • 主要特性和功能:
- • 在 Web 浏览器中复制 lazydocker 的核心功能。
- • 支持对 Docker 容器和图像的远程管理。
- • 包括一个 shell 仿真组件,用于通过基于 Web 的终端与 Docker 交互。
- • 技术堆栈:
- • 主要使用 Go 和 JavaScript 构建。
- • 采用 WebSockets 实现浏览器和后端之间的实时通信。
- • 利用 Heroicons(用于图标)、Melody(用于 WebSocket 处理)、Fuse(用于模糊搜索)和 GoReleaser(用于自动发布)等库。
- • 常见问题和故障排除:
- • 加载屏幕卡住:刷新浏览器通常可以暂时解决此问题,但建议在客户端或服务器端使用超时机制以永久解决问题。
- • 偏好设置未保存:确保您的浏览器支持 localStorage 并且您未处于隐私浏览模式。
- • 安全最佳实践:
- •
AUTHENTICATION_ENABLED使用和启用身份验证AUTHENTICATION_SECRET。 - • 使用强密码来保护您的 Isaiah 实例。
- • 考虑将 Isaiah 放在只能通过 VPN 访问的私人网络上,以增加安全性。
- •
- • Isaiah 与 Lazydocker: Isaiah 并非旨在替代 lazydocker,而是具有自己的一套功能和改进的替代方案。开发人员在从头开始构建 Isaiah 时从 lazydocker 中汲取了灵感。
硬件虚拟化:Haiku QEMU 端口获得了性能改进,但遇到了与 SMP、EPT 刷新和 BIOS 兼容性相关的新错误
- • **项目目标:**使用英特尔的虚拟机扩展 (VMX) 在 Haiku 的 QEMU 端口中启用硬件辅助虚拟化。与软件模拟相比,这将显著提高性能。
- • 最初的挑战和解决方案:
- • 实际硬件上的性能较慢:由于对扩展页表 (EPT) 格式的假设不正确,初始实现速度较慢。EPT 表由 VMX 用于内存虚拟化,dalme 意识到它们的结构与标准 x86 页表不同。解决此问题可显著提高性能。
- • 性能修复后出现的新错误:修复 EPT 表问题引入了新的错误,主要影响引导加载程序和图形环境。
- • 未决问题:
- • 太空侵略者启动问题:性能修复后,太空侵略者启动区游戏不再在真实硬件上运行。BIOS 在尝试加载时挂起。
- • Sortix GUI 崩溃:Sortix 操作系统在 GUI 加载期间崩溃,可能是由于三重故障。在 GRUB 中禁用 GUI 可使 Sortix 成功启动。
- • **QEMU SMP 问题:**启用对称多处理 (SMP) 时 QEMU 崩溃。发生这种情况是因为在物理 CPU 之间迁移 VM 时,VM 从 NVMM(Haiku 虚拟机管理程序)无效退出。目前尚未查明原因。
- • EPT 转换刷新: 每当 EPT 表发生更改时,都需要从主机 TLB(转换后备缓冲区)刷新缓存的 EPT 转换。目前,Haiku 会在每次上下文切换时刷新整个 TLB,这适用于单 CPU VM,但对于多 CPU VM 则不够用。
- • 主要学习内容:
- • 深入了解 VMX 和虚拟化概念。
- • 具有分页机制和内核开发经验。
- • 改进的汇编语言和调试技能(使用 GDB)。
.hljs.code__pre::before { position: initial; padding: initial; content: ''; display: block; height: 25px; background-color: transparent; background-image: url("doocs.oss-cn-shenzhen.aliyuncs.com/img/123.svg"); background-position: 14px 10px!important; background-repeat: no-repeat; background-size: 40px!important; } .hljs.code__pre { padding: 0!important; } .hljs.code__pre code { display: -webkit-box; padding: 0.5em 1em 1em; overflow-x: auto; text-indent: 0; }
本文使用 文章同步助手 同步