分类: 开发

颠覆式细粒度授权:Feldera 的增量计算引擎

2025-01-20
颠覆式细粒度授权:Feldera 的增量计算引擎

Feldera 提出了一种颠覆性的细粒度授权 (FGA) 方法。传统 FGA 系统实时计算授权请求,效率低下。Feldera 通过预计算所有授权决策并使用增量计算引擎 Feldera (基于 SQL) 更新结果,将授权请求转换为简单的键值查找。即使在大型对象图中,Feldera 也能以毫秒级速度处理变更,显著提升性能。文章详细介绍了 FGA 原理,并用 SQL 代码演示了高性能 FGA 引擎的构建,展示了其在处理大型数据集时的优越性。

Rust嵌入式脚本语言Rhai:安全高效的脚本引擎

2025-01-20
Rust嵌入式脚本语言Rhai:安全高效的脚本引擎

Rhai是一个为Rust设计的嵌入式脚本语言和评估引擎,它提供了一种安全且简便的方法,将脚本功能添加到任何应用程序中。它支持多种目标平台和操作系统,包括WebAssembly,并具有简洁的类似JavaScript的语法。Rhai高效地执行脚本,并与Rust函数和类型紧密集成,允许轻松地传递和使用Rust值。它还具有强大的安全特性,防止恶意攻击,例如堆栈溢出和无限循环。

开发

概率噪声下的计算几何算法

2025-01-20

一篇新的预印本论文研究了在存在概率噪声的原始操作下的计算几何算法。许多计算几何算法依赖于访问输入坐标数据并将其转换为组合信息的原始操作。该论文考虑了原始操作随机产生错误结果的情况,并探索了如何在不显著降低效率的情况下获得高概率的正确结果。研究发现,对于一些问题(如构造凸包),可以避免因重复操作带来的效率降低;而对于其他问题(如查找最近点对),则无法避免。该研究与之前的通信复杂性研究相关,后者利用带噪声的比较来提高效率。

开发 概率噪声

编程界的两座大山:缓存失效和命名

2025-01-20
编程界的两座大山:缓存失效和命名

程序员圈流传着一句名言:“计算机科学只有两件难事:缓存失效和命名”。这篇文章追溯了这句话的起源和演变,并探讨了其背后的幽默与深刻含义。从最初的简洁版本到加入“越界错误”等各种变体,这句玩笑话反映了程序员在日常工作中遇到的诸多挑战,也体现了编程的复杂性和趣味性。

开发

打断对软件工程师的影响:研究揭示认知差距

2025-01-20
打断对软件工程师的影响:研究揭示认知差距

一项最新研究深入探讨了工作打断对软件工程师效率和压力的影响。研究发现,不同类型的打断(例如面对面沟通或屏幕通知)对编码、代码理解和代码审查等任务的影响程度不同,且复杂任务受打断影响较小。有趣的是,生理数据(心率变异性)显示面对面打断压力较小,但工程师的主观感受却相反。因此,管理者应优先关注工程师的主观感受,例如减少高优先级打断,并为编码等高压力任务提供专注时间,以提升团队效率。

开发 工作打断

Lisp缩进风格大乱斗:程序员的审美困境

2025-01-19

Lisp程序员长期以来为代码缩进风格争论不休。文章探讨了多种Lisp缩进方案,包括无缩进、函数对齐缩进、填充缩进以及作者提出的“病态”宏缩进。作者指出,函数对齐缩进在嵌套较深时会变得难以阅读,填充缩进虽然高效,但在极端嵌套下仍有不足。作者最终推荐了一种“病态”宏缩进风格,虽然不符合惯例,但在处理深度嵌套时能保持良好的可读性,并能与大多数缩进工具兼容。文章最后鼓励读者分享自己的偏好。

开发

Git自动纠正速度太快?连F1车手都反应不过来!

2025-01-19
Git自动纠正速度太快?连F1车手都反应不过来!

Git的自动纠错功能以其0.1秒的反应速度引发热议。文章解释了这一功能的设计初衷,以及为何其速度如此之快。原来,这并非Git的默认行为,而是通过`help.autocorrect`设置进行配置。最初的设计者开玩笑似的设定了这个极短的等待时间,后来的改进允许用户自定义等待时间或选择提示确认模式。作者还分析了Git自动纠错的算法,并提出了改进建议,力求让其更符合用户预期。

开发

用YubiKey打造家庭实验室的微型证书颁发机构

2025-01-19
用YubiKey打造家庭实验室的微型证书颁发机构

本文介绍了如何在树莓派上搭建一个安全可靠的、基于YubiKey的微型证书颁发机构(CA)。该CA使用step-ca开源软件,并结合Infinite Noise TRNG增强随机数生成,为家庭实验室提供安全的TLS证书。文章详细讲解了系统设置、PKI创建、CA配置以及ACME provisioner的添加等步骤,并提供了应对YubiKey移除和重新插入的systemd服务配置方法,最终实现了无需SSH访问也能安全运行的微型CA。

开发 YubiKey

C/C++ 中处理 UTC 时间字符串的惊人挑战

2025-01-19
C/C++ 中处理 UTC 时间字符串的惊人挑战

本文探讨了在 C/C++ 中将 UTC 时间字符串转换为 Unix 时间戳的复杂性。作者发现 POSIX 时间处理函数在不同 C 库和语言中的实现存在许多意想不到的行为。文章重点介绍了 `strptime()`、`mktime()` 和 `timegm()` 函数的使用,并指出了在处理夏令时和不同区域设置时可能遇到的问题。作者还提供了解决方案,包括使用 `timegm()` 函数处理 UTC 时间,以及使用 C++ 流来绕过区域设置问题。文章最后推荐了 C++20 及更高版本中提供的更强大的时间处理库,例如 Howard Hinnant 的 tz 库。

开发

开源ROS 2机器人入门课程:零基础学习ROS 2

2025-01-19
开源ROS 2机器人入门课程:零基础学习ROS 2

Henki Robotics联合东芬兰大学开源了一门ROS 2机器人入门课程。该课程涵盖ROS 2基础概念、Gazebo仿真、SLAM、导航等核心技能,并提供基于Docker的容器化环境,无需预先安装ROS 2。课程以实践为主,适合零基础学习者,旨在帮助学生快速掌握现代机器人开发所需技能。

开发 ROS 2

Node.js 的类型去除:简化 TypeScript 开发

2025-01-19
Node.js 的类型去除:简化 TypeScript 开发

Node.js v23.6.0 引入了一项期待已久的实验性功能——类型去除(Type Stripping),旨在简化 TypeScript 的使用,无需额外配置即可运行 TypeScript 代码。该功能通过去除 TypeScript 代码中的类型信息来实现,避免了繁琐的配置和类型检查,提升了开发效率。虽然为了兼容性和性能做出了一些权衡,例如不支持某些复杂的 TypeScript 特性,但该功能显著改善了开发者体验,并为 TypeScript 在 Node.js 生态系统中的普及铺平了道路。

开发 类型去除

Google开源OSV-SCALIBR:强大的软件成分分析库

2025-01-19
Google开源OSV-SCALIBR:强大的软件成分分析库

Google发布了OSV-SCALIBR,一个可扩展的软件成分分析(SCA)库,用于扫描已安装软件包、独立二进制文件和源代码中的漏洞。它支持多种编程语言和包管理器,并能生成SBOM(软件物料清单)。OSV-SCALIBR是Google内部使用的主要SCA引擎,现已开源,并计划集成到OSV-Scanner中,为用户提供更强大的命令行界面。

开发

Linux网络编程指南:套接字编程详解

2025-01-19
Linux网络编程指南:套接字编程详解

本指南详细讲解Linux网络编程,特别是套接字编程。作者指出许多在线资源不够清晰,代码示例通常只涵盖基础知识,因此创建了这份教程,提供清晰的指导和大量示例。教程涵盖套接字类型、地址、API(getprotobyname()、getservbyname()、getaddrinfo()、htonl()、htons()、ntohl()、ntohs()、socket()、setsockopt()、bind()、listen()、accept()、connect()、recv()、send()、close()),客户端-服务器模型(简单HTTP客户端、基于TCP的客户端-服务器、多线程TCP客户端-服务器、基于UDP的客户端-服务器),高级技术(非阻塞套接字、使用select()和poll()的同步I/O多路复用、广播消息),以及使用libcurl和OpenSSL进行安全网络编程。

开发 套接字

《模糊测试宝典》:自动化软件测试的利器

2025-01-19
《模糊测试宝典》:自动化软件测试的利器

《模糊测试宝典》是一本涵盖自动化软件测试的全面指南,尤其侧重于模糊测试技术。书中介绍了多种模糊测试方法,例如词法模糊测试、语法模糊测试和语义模糊测试,并辅以可执行代码示例,方便读者实践。无论你是软件测试人员、安全工程师还是软件开发者,都能从中受益匪浅,学习如何自动生成测试用例,提高软件质量,发现更多隐藏的bug。

开发

3000行代码构建数据库:从零依赖到SQL查询

2025-01-19
3000行代码构建数据库:从零依赖到SQL查询

作者用3000行Go代码,从零依赖构建了一个小型数据库,逐步演示了数据库的核心概念。文章首先阐述了构建数据库的关键思想:避免因断电导致的数据损坏(通过追加日志和校验和实现原子性写入),以及使用B+树等数据结构进行高效索引。然后,作者详细介绍了构建过程,包括创建追加式KV存储、回收空间、支持关系型数据库操作(点查询、范围查询、二级索引)、并发控制和简单的SQL查询语言。最终,作者将这个过程整理成书,分享给读者。

开发

重温苹果Newton遗珠:Open Dylan编程语言

2025-01-19

Open Dylan 是一款面向对象的函数式编程语言,源自苹果公司为Newton PDA开发的Dylan语言。它结合了Scheme和CLOS的优点,摒弃了Lisp语法,致力于高效的机器码生成。本文介绍了Open Dylan 的官方文档,包括教程、参考手册和丰富的库文档,并提供了在线Playground供用户快速上手体验。无论是想学习一门新语言,还是探索高效的编程范式,Open Dylan 都值得一试。

开发 Open Dylan

在终端里看图:一个程序员的修罗场

2025-01-19

一位程序员为了追求完美的终端图像查看器,踏上了一段充满挑战的旅程。他从简单的像素显示出发,深入探索了各种图像格式(JPEG、PNG、GIF、AVIF、JPEG XL、HEIC、ETC、BC、OpenEXR等)的加载和渲染,遭遇了各种意想不到的难题:格式标准不统一、库文档混乱、HDR图像处理的复杂性、色彩管理的玄机,以及终端输出协议的局限性。最终,他克服重重困难,打造了一个功能强大的图像查看器,并在此过程中深刻体会到计算机图形学的复杂与魅力。

开发 终端显示

GitHub Issues 重大更新:子问题、问题类型和高级搜索

2025-01-19
GitHub Issues 重大更新:子问题、问题类型和高级搜索

GitHub 发布了 Issues 的重大更新,包括子问题、问题类型和高级搜索功能。子问题允许将问题分解成更小的单元,方便跟踪进度;问题类型则帮助团队使用统一的语言分类和管理问题;高级搜索则支持更复杂的筛选条件,方便查找特定问题。此外,Issues 的 UI 也进行了更新,提升了效率和易用性。同时,CodeQL Action v2 已正式停用,用户需要升级到 v3 版本。Secret scanning 默认模式也增加了对更多秘密类型的支持,增强了安全性。

开发

Rust 中一个奇怪的内存溢出错误调查

2025-01-19
Rust 中一个奇怪的内存溢出错误调查

Qovery 的一个名为 engine-gateway 的 Rust 服务遇到了奇怪的内存溢出错误。起初,监控显示内存使用稳定,但服务却突然崩溃。经过调查,发现罪魁祸首是 anyhow 库在启用回溯时,会在每个错误上捕获回溯,只有在调试模式下打印错误时才会解析符号,导致内存大量增加。最终,通过设置环境变量 `RUST_BACKTRACE=1` 和 `RUST_LIB_BACKTRACE=0`,只在 panic 时启用回溯,解决了问题。这个案例提醒我们,监控数据可能具有欺骗性,并且需要仔细阅读库的文档。

Haskell:一个优秀的程序语言?

2025-01-19

本文挑战了Haskell的刻板印象,认为它是一个优秀的程序式语言。文章深入探讨了Haskell中副作用作为一等公民的特性,解释了`do`块的底层机制,并展示了如何使用`pure`、`fmap`、`liftA2`等函数操作副作用。文章还介绍了`sequenceA`、`traverse`等函数如何处理副作用的集合,以及如何利用这些特性进行高效的元编程。最终,文章通过一个复杂的例子展示了Haskell在处理状态管理和缓存等场景下的优势,并对比了其他语言的不足之处。

开发

树莓派网站搭建指南:从零到上线

2025-01-19
树莓派网站搭建指南:从零到上线

本文详细介绍了作者如何用树莓派搭建个人网站的全过程,涵盖了硬件准备、系统配置、服务器安装、域名注册、HTTPS证书申请、HTML/CSS编写、虚拟主机设置、备份与版本控制、SEO优化、用户追踪、防范机器人攻击、系统更新、CPU和内存监控等多个方面。作者还分享了在Hacker News上进行网站压力测试的经验,以及在过程中遇到的问题和解决方法,是一篇非常实用且具有指导意义的教程。

开发

Yek: 一款用于LLM的快速文本文件分块工具

2025-01-19
Yek: 一款用于LLM的快速文本文件分块工具

Yek是一个用Rust编写的快速工具,用于读取仓库或目录中的文本文件,将它们分割成块,并将其序列化以供大型语言模型(LLM)使用。它能智能地忽略无用文件(例如,使用.gitignore规则和Git历史记录),将内容分割成基于标记数量或字节大小的块,并支持多种配置选项,例如自定义忽略模式和文件优先级规则。Yek旨在简化LLM的数据准备过程,提高效率。

开发

Forgejo:开源自托管软件forge,GitHub 的强大替代品

2025-01-19
Forgejo:开源自托管软件forge,GitHub 的强大替代品

Forgejo 是一款轻量级、易于安装和维护的自托管软件forge,由 Codeberg e.V. 社区驱动。它注重安全、可扩展性、联邦化和隐私,提供类似 GitHub 的用户体验,让开发者轻松迁移。Forgejo 100% 免费开源,资源占用少,性能高,并致力于通过去中心化平台促进协同软件开发。

Elixir全栈开发新利器:Hologram

2025-01-19

Hologram 彻底简化了 Web 开发流程。开发者可以使用 Elixir 构建丰富的交互式用户界面,Hologram 的声明式组件系统会将代码智能地转译成 JavaScript,无需依赖任何 JavaScript 框架即可实现现代前端功能。告别繁琐的 JavaScript,拥抱 Elixir 的优雅与效率!

开发 Hologram

Unix 拼写检查器:如何在 64kB RAM 中运行

2025-01-19
Unix 拼写检查器:如何在 64kB RAM 中运行

在 70 年代,Unix 的拼写检查器如何在只有 64kB RAM 的 PDP-11 计算机上运行?这篇文章讲述了 Douglas McIlroy 如何通过巧妙的数据结构和压缩技术解决这一难题。他首先使用布隆过滤器进行快速查找,但随着字典大小的增加,他转向了一种创新的哈希压缩方案。通过分析哈希值的差值符合几何分布,并利用 Golomb 编码,他实现了接近理论极限的压缩率,最终在内存和速度之间取得了平衡。这是一个关于如何在资源受限环境下进行巧妙工程设计的经典案例。

开发

Julia语言中的借用检查器:一个实验性API

2025-01-18
Julia语言中的借用检查器:一个实验性API

BorrowChecker.jl是一个Julia包,通过宏系统模拟Rust的内存所有权和借用语义,在开发和测试阶段进行运行时检查以标记内存安全问题。它不保证绝对的内存安全,但有助于编写更安全的代码。该库通过`@own`、`@move`、`@clone`等宏管理对象所有权,并使用`@lifetime`块管理引用生命周期,同时提供`@managed`块自动执行借用检查。虽然它不完美,但能有效辅助开发者提升代码的内存安全。

开发

超越cuBLAS:单精度矩阵乘法的CUDA实现

2025-01-18

本文介绍了一个单精度通用矩阵乘法(SGEMM)的CUDA实现,其性能在某些情况下超过了cuBLAS。作者通过巧妙运用PTX指令、异步内存复制、双缓冲等技术,并针对NVIDIA RTX 3090进行了优化,实现了高效的矩阵乘法运算。文章详细解释了算法设计、优化技巧以及基准测试方法,为CUDA学习者提供了宝贵的经验。

开发

Wasm GC 还不适合实时图形处理

2025-01-18

作者David Thompson在博客中指出,尽管Wasm GC已在主流浏览器中可用,但它在实时图形处理方面存在严重缺陷。主要问题在于Wasm GC堆对象对宿主(JavaScript)而言是不透明的,导致需要逐字节复制数据才能进行WebGL渲染,极大降低了性能。与之相比,Wasm线性内存可以直接被JavaScript访问,效率更高。作者尝试了几种解决方法,但都无法令人满意。他呼吁Wasm社区尽快解决这个问题,否则将严重限制WebGPU等技术的应用。

卡尔曼滤波器教程:从入门到精通

2025-01-18
卡尔曼滤波器教程:从入门到精通

这篇教程详细介绍了卡尔曼滤波器,一种强大的状态估计和预测工具。它从基础的单变量滤波器开始,逐步讲解多变量滤波器、非线性滤波器以及实际应用中的技巧,例如传感器融合和异常值处理。教程包含丰富的数值例子和图表,并附带Python和MATLAB代码。即使没有数学基础也能轻松入门,最终掌握卡尔曼滤波器的设计、仿真和性能评估。

开发 状态估计

AI智能体对浏览器UX/UI的期待:一场革命性的设计

2025-01-18
AI智能体对浏览器UX/UI的期待:一场革命性的设计

随着AI智能体的兴起,浏览器用户界面(UX/UI)需要重新设计以满足其需求。文章探讨了当前浏览器UX/UI的局限性,例如信息架构不足、可访问性有限以及API集成不足等问题。为了适应AI智能体,重新设计的浏览器应注重数据可访问性、自动化功能、简化的界面元素以及安全隐私。文章还介绍了AI友好型浏览器设计的关键原则,例如上下文感知界面、低延迟交互以及模块化可定制设计等,并通过案例研究(如Brave、Microsoft Edge和Opera浏览器)展示了AI集成浏览器的成功案例。

开发 UX/UI设计
1 2 181 182 183 185 187 188 189 213 214