分类: 开发

Protocol Buffers:一场由业余爱好者编写的灾难?

2025-09-05

本文作者批判了Protocol Buffers(protobuf)的设计缺陷,认为其类型系统糟糕、设计随意,并导致一系列问题渗透到代码中。protobuf 的诸多限制源于其对已解决问题的拙劣方案,缺乏组合性,例如oneof字段不能重复,map字段的限制等等。文章还批评了protobuf在向后和向前兼容性上的谎言,以及它如何污染代码库,使得代码难以编写和维护。作者认为protobuf只适合谷歌这样的大公司,不适合大多数公司,建议开发者放弃使用protobuf。

开发

ClickHouse实时分析:毫秒级查询数十亿条天气记录

2025-09-05
ClickHouse实时分析:毫秒级查询数十亿条天气记录

本文介绍了如何利用ClickHouse构建实时分析应用,实现毫秒级查询数十亿条数据。文章涵盖数据导入、高级技术(如统计抽样、预聚合策略和多级优化)等,并结合Rill平台演示了从S3导入NOAA天气数据并进行可视化的完整流程。ClickHouse凭借其列式存储、高级压缩和向量化查询执行等特性,实现了极速的分析性能,成为实时分析的理想选择。文章还讨论了实时分析中数据新鲜度和准确性之间的权衡,以及数据建模策略(如反规范化、字典、增量物化视图等),最终展示了一个完整的基于ClickHouse、S3和Rill的实时数据分析案例。

开发

深入探秘Mach-O:苹果系统的二进制奥秘

2025-09-05
深入探秘Mach-O:苹果系统的二进制奥秘

本文深入探讨了Mach-O,苹果操作系统中用于可执行文件、库和目标代码的二进制格式。文章详细解释了Mach-O的结构,包括头部、加载命令、段和节,以及通用二进制文件。此外,文章还阐述了Mach-O在代码签名完整性和ARM64e系统上的指针认证码(PAC)中的作用,并介绍了代码签名机制和PAC的工作原理。通过对Mach-O的深入了解,我们可以更好地理解苹果系统的安全机制和代码执行过程。

Mojo:LLVM 之父 Lattner 的下一个大动作,旨在革新机器学习编程

2025-09-05
Mojo:LLVM 之父 Lattner 的下一个大动作,旨在革新机器学习编程

LLVM 创建者 Chris Lattner 与 Ron 共同探讨了 Mojo 编程语言的设计理念。Mojo 旨在简化现代 GPU 的编程,同时提供编写最先进内核所需的控制级别。其关键在于,让程序员充分了解硬件细节,并通过类型安全的元编程使其易于管理和共享,从而实现针对特定计算和硬件平台的专门化。Lattner 认为,只有这样才能打破单一厂商对 AI 计算生态的垄断。

开发

告别Docker守护进程:Podman容器运行时的新时代

2025-09-05
告别Docker守护进程:Podman容器运行时的新时代

作者回顾了Docker容器技术的兴起和安全隐患,详细介绍了Podman——一个无需守护进程的容器运行时。Podman通过其简洁的架构、增强的安全性(无root权限运行)、以及与systemd和Kubernetes的良好集成,解决了Docker daemon带来的安全性和稳定性问题。文章还提供了一个从Docker迁移到Podman的FastAPI应用的实用指南,展示了迁移的便捷性和Podman带来的诸多优势,例如更优的资源利用和更安全的生产环境。

开发

告别SQL的嵌套查询地狱:单次查询构建电影页面数据

2025-09-05

本文讲述了使用关系型数据库构建电影页面数据时遇到的挑战。传统方法需要多次SQL查询来获取导演、演员、类型等信息,并手动将结果组装成所需层级结构,效率低下且易出错。作者通过使用`jsonb_agg`等函数,在单次SQL查询中直接生成JSON格式的结构化数据,有效解决了“对象关系阻抗失配”问题,提升了效率,避免了多次网络请求和数据不一致的问题。这展示了SQL的演进,以及适应新的数据需求的重要性。

开发

HTTPX 的 Fiber 并发插件:提升异步编程效率

2025-09-05

HTTPX 的 :fiber_concurrency 插件允许在由 Fiber 调度器管理的多个 Fiber 中无缝地使用同一个 HTTP 连接,尤其适用于长连接场景。如果使用 :persistent 插件,则此插件默认启用。示例代码展示了如何在 Thread 中启动多个 Fiber,每个 Fiber 使用 http.get() 并发地访问同一个 URL。此插件是使用异步 gem 等框架进行 Fiber 调度时必不可少的组件。

开发 HTTPX Fiber

在终端中渲染 Chrome:Carbonyl 浏览器项目

2025-09-05

Carbonyl 项目尝试在终端中渲染网页。作者巧妙地利用终端的字符和转义序列,结合 Rust 和 C++,实现了基本的网页渲染。文章详细介绍了如何利用 Unicode 字符模拟像素,处理文本绘制、鼠标输入以及与 Chrome 进程间通信等技术细节,并解决了一些渲染效率和布局问题。最终,Carbonyl 虽然还处于早期阶段,但已展现出在终端环境下渲染网页的可行性,为开发者提供了一个新奇的探索方向。

开发 终端渲染

Adobe Premiere登陆iPhone:免费的专业级移动视频编辑

2025-09-05
Adobe Premiere登陆iPhone:免费的专业级移动视频编辑

Adobe 将其专业视频编辑软件 Premiere 带到 iPhone 上,并承诺提供免费的专业级移动视频编辑功能。这款应用将于本月晚些时候推出,Android 版本也正在开发中。Premiere for iPhone 支持无限数量的视频、音频和文本层,具有自动字幕、4K HDR 支持以及一键导出到 TikTok、YouTube Shorts 和 Instagram 等功能。虽然应用本身免费,但 Adobe 表示额外云存储和生成式 AI 功能需付费。它支持 Adobe 的生成式音效和 AI 驱动的语音增强,以及更多通过 Adobe Firefly 生成的 AI 素材。用户也可以选择免费的 Adobe 字体、图像、声音、音乐和视频素材。与简化版的 Premiere Rush 不同,这款新的 Premiere 旨在提供更接近完整版 Premiere Pro 的体验,让用户在手机上也能拥有专业级的创意控制。

告别Spotify:我的自建音乐流媒体方案

2025-09-05
告别Spotify:我的自建音乐流媒体方案

厌倦了Spotify的低廉艺术家分成、虚假账号和令人不安的年龄验证?作者打造了一个自托管的音乐流媒体系统,拥有比Spotify更优质的音质、完全的音乐所有权和隐私保护。核心组件包括Navidrome音乐服务器、Lidarr音乐库管理工具、以及Last.fm和ListenBrainz用于音乐发现。该方案不仅提升了音乐体验,也让作者能更直接地支持喜爱的艺术家。

开发

Atari 8位机上的Action!编程语言:一个复古IDE的传奇

2025-09-05
Atari 8位机上的Action!编程语言:一个复古IDE的传奇

本文回顾了Atari 8位机上的Action!编程语言。Action!由Clinton Parker创作,是一款为6502 CPU优化的编译型语言,包含监控器、编译器、文本编辑器和调试器,堪称8位机上的首个IDE。其集成开发环境、快速编译速度以及创新的编辑器功能在当时令人惊艳,尽管其功能不如C或Pascal强大,但凭借其为6502 CPU优化的特性,编译速度极快。文章作者分享了其寻找和使用Action!的经历,并讨论了Action!的局限性以及扩展工具包(Action! RunTime和Action! ToolKit)如何部分解决这些问题。

开发

对抗LLM数据抓取:用“毒药”反击

2025-09-05
对抗LLM数据抓取:用“毒药”反击

大型语言模型(LLM)训练数据来源广泛,其中包含大量未经授权的网络内容。作者尝试通过创建“胡言乱语”的镜像文章,并使用nofollow链接来“毒害”LLM的训练数据,以此对抗LLM对自身内容的未经授权抓取。这种方法利用LLM可能忽视nofollow标签的特性,将充满语法错误和语义混乱的文本喂给LLM,从而降低其输出质量。虽然方法并非完美,但作者希望通过这种方式,引起LLM开发者对数据来源版权的重视。

开发

Swift 6 类型安全错误处理:分层错误模型

2025-09-05

Swift 6 引入了类型化 throws,增强了错误处理的类型安全。本文介绍了一种用户友好的分层错误模型,该模型使用自定义协议 `SystemError`,包含 `logMessage`、`userFriendlyMessage` 和 `underlyingErrors` 等属性,并提供递归查找错误类型和生成错误堆栈的功能。文中还展示了如何使用 struct 和 enum 定义自定义错误对象,以及如何处理 Foundation 错误和解码错误。通过示例,演示了如何利用类型化 throws 和自定义错误处理提升 Swift 项目的可靠性。

开发

超高速UR5逆运动学求解器:IK-Geo的性能突破

2025-09-05

本文介绍了一种基于IK-Geo库的UR5机器人逆运动学(IK)高性能求解器。该求解器利用子问题分解法,通过求解三个规范几何子问题,实现了比IKFast快40倍以上的计算速度,精度达到机器精度级别(10⁻¹⁶)。它能够返回所有可能的解,并有效处理奇异性问题,为实时控制、路径规划和仿真带来显著优势,解锁了机器人控制的新能力。

如果OpenDocument使用SQLite会怎样?

2025-09-05

本文探讨了如果OpenDocument(特别是ODP格式)基于SQLite数据库构建的可能性。作者认为,此举将带来诸多益处,包括文件体积缩小、文件保存和启动速度加快、内存占用减少、版本控制以及更佳的用户体验。文章详细分析了现有OpenDocument格式使用ZIP存档的局限性,例如增量更新困难、启动缓慢、内存占用高、崩溃恢复困难以及内容访问不便等问题。作者提出将ZIP替换为SQLite,并进一步建议将内容拆分成更小的单元存储在数据库表中,从而实现增量更新和更快的启动速度。此外,作者还探讨了SQLite数据库如何支持版本控制,以保留历史版本并简化崩溃恢复。总而言之,文章认为使用SQLite作为应用文件格式,可以显著提升OpenDocument等应用程序的用户体验和性能。

开发 OpenDocument

Hypr MCP 网关:为你的 MCP 服务器添加 OAuth2 身份验证

2025-09-05

Hypr MCP 团队构建了一个名为 MCP Gateway 的反向代理,它简化了为基于大型语言模型 (LLM) 的工作流程添加 OAuth2 身份验证的过程。该网关解决了现有身份提供商 (IdP) 软件在支持 MCP 规范授权框架方面的不足,例如缺乏对动态客户端注册 (DCR) 和授权服务器元数据 (ASM) 的支持。文章详细介绍了网关的实现,包括使用 Dex 作为身份提供商,处理 CORS,以及构建 OAuth2 中间件。此外,它还讨论了在实现过程中遇到的问题,例如一些客户端对动态客户端注册和错误处理的不足。Hypr MCP Gateway 提供了一种易于使用且功能强大的解决方案,帮助开发者安全地连接内部应用程序到 LLM 工作流程。

开发

Rasterizer: 历经十年打磨的GPU加速矢量图形引擎

2025-09-05
Rasterizer: 历经十年打磨的GPU加速矢量图形引擎

受到Adobe Flash的启发,作者历时十年,打造了一款名为Rasterizer的GPU加速2D矢量图形引擎。它比CPU快60倍,非常适合矢量动画UI。该引擎使用C++ 11和Metal,目标平台为macOS,iOS版本正在开发中。Rasterizer支持SVG和PDF文件,并采用了创新的抗锯齿算法和高效的渲染策略,例如基于GPU的二次贝塞尔曲线求解和批量并行处理。

开发 2D引擎

Fil-C的令人难以置信的垃圾收集器FUGC:并发、精确且高效

2025-09-05

Fil-C编译器采用了一种名为FUGC(Fil's Unbelievable Garbage Collector)的并行并发即时灰栈Dijkstra精确非移动式垃圾收集器。FUGC支持多线程并发标记和清除,无需全局停止世界,使用“软握手”机制实现与mutator线程的无阻塞交互。它采用灰栈技术避免了加载屏障,仅需简单的存储屏障,并通过Dijkstra屏障确保精确标记。FUGC是非移动式的,简化了并发实现,并支持C、Java和JavaScript风格的内存管理,包括finalizer、弱引用和弱映射等特性,极大地提升了Fil-C的内存管理效率和安全性。

开发

一个终端UI库的实验与放弃

2025-09-04
一个终端UI库的实验与放弃

作者在开发游戏Kartoffels时,尝试编写一个高性能的终端UI库Kruci,以替代现有的Ratatui库。Kruci采用声明式UI设计,并试图通过避免逐像素差异化计算来提升性能。然而,在处理事件、状态管理以及Z-stacking等方面,Kruci遇到了诸多挑战,最终作者决定放弃该项目,认为优化Ratatui或专注于游戏开发更有效率。

(pwy.io)
开发

高效缓存字体资源的Service Worker代码片段

2025-09-04

这段代码展示了一个Service Worker如何有效缓存字体资源。它使用`CacheStorage`缓存字体,并包含版本控制机制,避免旧缓存的干扰。当请求字体时,Service Worker会先检查缓存,命中则直接返回;未命中则从网络获取,并将其添加到缓存中,同时处理网络请求错误。代码还巧妙地利用了`clone()`方法,避免资源被多次消费。

Thunk: 让你的Rust程序兼容古老的Windows系统

2025-09-04
Thunk: 让你的Rust程序兼容古老的Windows系统

Thunk是一个Rust工具,利用VC-LTL5和YY-Thunks库,让你的Rust程序能够在Windows XP等老旧系统上运行。它通过在库搜索路径中添加VC-LTL,并使用YY-Thunks弥补老系统中缺失的API来实现兼容性。Thunk提供命令行工具和库两种使用方法,方便开发者构建兼容老版Windows的程序和共享库。需要注意的是,Thunk并不保证程序在老系统上的完全兼容性,使用需谨慎。

开发

用Go语言构建高性能地图:向量瓦片技术的实践

2025-09-04
用Go语言构建高性能地图:向量瓦片技术的实践

作者在构建一个实时城市活动地图网站时,为了优化地图加载速度,采用了向量瓦片技术。文章详细介绍了从GeoJSON数据到MVT瓦片生成的整个过程,包括坐标转换、瓦片识别、几何图形构建以及属性添加等步骤,并使用Go语言实现了关键代码。通过将GeoJSON数据转换为MVT向量瓦片,显著减少了网页文件大小,提升了地图渲染速度和整体性能。

攻破Math.random(): 一个改进的Xorshift128+逆向算法

2025-09-04
攻破Math.random(): 一个改进的Xorshift128+逆向算法

最近发现的CVE-2025-7783漏洞利用了Node.js生态系统中axios或已弃用的request库的边缘情况。攻击者需要连续五个JavaScript Math.random()的输出才能预测未来的输出。作者认为,仅需两个完整的64位输出即可逆向Math.random()使用的Xorshift128+算法。文章详细介绍了一种高效的226操作算法,通过对Xorshift128+的分析,只需知道R1的低26位,就能确定L1和R2的剩余位。作者还讨论了如何将该算法应用于Math.random(),并分享了使用ChatGPT辅助研究的经验,指出虽然AI工具存在不足,但其潜力巨大。

开发

hledger 1.50 发布:更强大的交易平衡和诸多改进

2025-09-04
hledger 1.50 发布:更强大的交易平衡和诸多改进

hledger 1.50 版本发布,带来了更强大的交易平衡机制,使用本地精度进行平衡计算,提高了精度和稳定性。此外,该版本还包含CSV数据命令、导入存档、时间记录改进等诸多功能改进和错误修复。新版本也改进了时间记录格式,支持并发会话,并增强了全局模式匹配功能。

开发 财务软件

从SixthSense到物理学研究:一位本科生的技术探索

2025-09-04
从SixthSense到物理学研究:一位本科生的技术探索

一位大学生从对人机交互方式的思考出发,尝试复现SixthSense项目,由此开启了他的计算机科学与工程专业学习之旅。在学习过程中,他发现自己对软件工程更感兴趣,尤其是在构建实际应用并解决实际问题方面。他参与了物理学研究,利用Docker简化软件安装,并使用CNN和Transformer进行电子识别,最终将专业方向调整为计算机科学与物理学。这段经历展现了他在探索不同技术领域的过程中,如何找到自己的兴趣和方向,以及在实践中提升技能的故事。

Polars Cloud 正式发布:开启大规模 DataFrame 处理的新时代

2025-09-04
Polars Cloud 正式发布:开启大规模 DataFrame 处理的新时代

Polars Cloud 正式在 AWS 上推出,并同时开放其新型分布式引擎的公开测试版。该平台旨在弥合本地 Pandas 易用性和远程 PySpark 可扩展性之间的差距,提供一个单一 API,实现从笔记本电脑到云端的无缝扩展。其分布式引擎利用 Polars 新颖的流式架构,支持水平、垂直和对角线扩展策略,显著降低成本和复杂性,提升性能。未来,Polars Cloud 还将支持本地部署、实时集群监控、任务编排、自动扩展、目录支持和多区域部署等功能。

2
开发 Polars Cloud

告别不可靠的beforeunload:JavaScript Beacon API 的可靠数据发送

2025-09-04
告别不可靠的beforeunload:JavaScript Beacon API 的可靠数据发送

在用户离开网站时可靠地向服务器发送数据一直是个挑战。传统的 `beforeunload` 事件结合 `fetch` 或 `XMLHttpRequest` 方法不可靠,因为浏览器可能为了用户体验而取消请求。JavaScript 的 Beacon API 提供了一种“即发即忘”的解决方案,浏览器无需等待响应即可立即执行 JavaScript,确保数据可靠发送。尽管 Beacon API 限制数据量且仅支持 POST 请求,但对于发送少量关键数据(如分析数据或页面离开事件)非常理想,并适用于任何需要可靠异步数据发送的场景,例如实时数据同步。

单机版“穷人”双时间数据库:用SQLite构建时间旅行

2025-09-04

本文讲述了作者如何使用SQLite构建一个简易的双时间数据库,以满足其独立B2B SaaS项目的需要。文章深入探讨了时间数据的本质、事实的真伪以及时间旅行的模拟,并提供了详细的Clojure代码示例,展示了如何使用SQLite、HoneySQL和UUIDv7来实现一个高效且易于维护的双时间数据库。作者强调了系统简洁性、可扩展性和数据主权的重要性,并分享了其在架构设计和代码实现上的经验和挑战。

FreeBSD 拒绝 AI 代码:一场保守与创新的碰撞

2025-09-04
FreeBSD 拒绝 AI 代码:一场保守与创新的碰撞

FreeBSD 项目最新季度报告显示,其核心团队正在制定一项政策,禁止使用大型语言模型 (LLM) 生成的代码和文档。此举与 NetBSD 和 Gentoo Linux 的做法一致,反映了对 AI 代码可靠性和安全性的担忧。报告中还提及 FreeBSD 正在进行的其他项目,包括提升对 Wi-Fi、图形、声音和电源管理的支持,将大部分操作系统重构为 pkg 包,以及开发基于 Web 的虚拟化 GUI 等。尽管面临着来自 Linux 等系统的竞争,FreeBSD 仍然保持着活跃的开发状态,并持续改进其功能和用户体验。

开发

AI 编码工具的谎言:生产力提升的泡沫?

2025-09-04
AI 编码工具的谎言:生产力提升的泡沫?

一位拥有28年编程经验的资深程序员,通过六周的实验,对AI编码工具的实际效率提升提出了质疑。他发现,AI工具并没有显著提高他的编程速度,甚至可能使其变慢。更令人担忧的是,市面上对AI编码工具的生产力提升宣传夸大其词,与实际情况严重脱节。文章以大量数据佐证,指出AI工具并没有带来软件开发数量的爆炸式增长,所谓的“10倍工程师”更是子虚乌有。作者呼吁开发者们理性看待AI工具,不要盲目跟风,也不要被不切实际的宣传所迷惑。

开发
← 前页 1 3 4 5 6 7 8 9 201 202