分类: 开发

MacOS GPU 性能优化难题:浪费资源换取速度

2024-12-15

Anukari 的开发者在 MacOS 系统上进行 GPU 性能优化时遇到瓶颈。由于系统对 GPU 性能的控制有限,导致 Apple 的 GPU 性能调控机制在 Anukari 的应用场景下表现不佳,出现音频卡顿等问题。最终,开发者采取了一个“笨办法”:用一个 GPU 线程组的 warp 进行无用计算,以此来“欺骗”系统,强制提升 GPU 频率,从而显著降低音频计算延迟,提升性能。虽然方法粗糙,但效果显著,解决了 MacOS 下的性能问题。然而,在不同 DAW 软件(Ableton 和 GarageBand)中,性能提升效果差异较大,后续仍需进一步优化。

大型语言模型能否终结编程?

2024-12-15

近年来,大型语言模型(LLM)在代码生成方面展现出令人印象深刻的能力,引发了“编程终将过时”的讨论。然而,本文作者认为这种观点过于乐观。文章从程序合成(Program Synthesis)的计算复杂性入手,指出生成正确程序代码是一个难题,其复杂度属于PSPACE-complete级别,这意味着即使对于中等规模的输入,算法也可能需要指数级的运行时间。虽然LLM可以作为辅助工具,提高编程效率,但其局限性决定了它不可能完全取代程序员。编程的本质仍然是解决问题和设计系统,而这需要人类的智慧和创造力。

开发 编程未来

乐观计算:软件的未来走向何方?

2024-12-15

本文探讨了一种“乐观计算”的理念,并非盲目乐观,而是基于对诸多优秀理念的融合:极简易用(“启动即杀”)、本地优先、用户赋能。作者认为,通过限制依赖、简化流程,创造“即装即用”的体验,并赋予用户更多控制权,可以构建更可靠、安全、长久的软件。这种理念不仅适用于个人用户,也适用于企业软件开发,最终目标是创造一个尊重用户隐私和数据所有权的数字世界。

开发 乐观计算

Spark、DuckDB和Polars性能大比拼:小型到中型工作负载的最佳选择

2024-12-15
Spark、DuckDB和Polars性能大比拼:小型到中型工作负载的最佳选择

本文对Spark、DuckDB和Polars三种数据处理引擎进行了基准测试,比较了它们在处理10GB和100GB数据集时的性能、成本和开发难度。结果显示,对于大型数据集和ETL任务,Spark凭借其分布式计算能力和成熟的生态系统仍然占据优势,而DuckDB和Polars在小型数据集的交互式查询和数据探索方面表现出色。作者建议根据实际需求选择合适的引擎,并可以结合使用这三种引擎,例如使用Spark进行ETL,DuckDB进行交互式查询,Polars用于特定场景。

从零开始构建快速LLM推理引擎

2024-12-15

本文讲述了作者如何使用C++和CUDA从零开始构建一个LLM推理引擎,无需任何库。通过这个过程,作者深入学习了LLM推理的全栈知识,从CUDA内核到模型架构,并了解了各种优化如何影响推理速度。目标是创建一个程序,可以在单CPU+GPU服务器上加载常用开源模型的权重,进行单批推理,并迭代改进令牌吞吐量,最终超越llama.cpp。文章详细介绍了CPU和GPU上的优化步骤,包括多线程、权重量化、SIMD、内核融合以及KV缓存量化等,并分析了遇到的瓶颈和挑战。最终实现了接近最先进性能的本地LLM推理。

开发

抛弃设计文档,拥抱代码冲刺:一种更有效的软件开发方法

2024-12-15
抛弃设计文档,拥抱代码冲刺:一种更有效的软件开发方法

软件开发中,传统的设计文档加渐进式开发模式并不总是高效。作者Doug Turnbull提出了一种“代码冲刺”方法:先用临时PR快速实现原型,尽早获得团队反馈,完善设计后再逐步拆分出可部署的PR。这种方法鼓励快速迭代,尽早发现问题,并认为代码本身就是最好的文档。虽然设计文档在特定情况下仍有价值,但作者更推崇“行动胜于言辞”,通过代码原型快速验证和迭代,从而更高效地完成软件开发。

开发 代码原型

高效团队的秘密:跨记忆系统

2024-12-15
高效团队的秘密:跨记忆系统

本文探讨了高效团队运作的基石——跨记忆系统。它并非指团队成员个体记忆力的强大,而是指团队如何有效地共享和利用成员间的知识和技能。文章介绍了三种团队记忆类型:工作记忆、长期记忆和跨记忆系统,并重点阐述了跨记忆系统如何提升团队绩效。文章指出,跨记忆系统包含两个要素:成员间的协作模式和每个成员的专业知识。通过构建跨记忆系统,团队能够充分发挥集体智慧,克服成员变动带来的影响。文章还推荐了例如能力梳理、团队手册和刻意练习等方法,帮助团队快速建立和完善跨记忆系统。

同构 Web 组件:服务器端渲染不再是难题

2024-12-15
同构 Web 组件:服务器端渲染不再是难题

长期以来,服务器端渲染Web组件被认为难以实现。本文作者挑战了这一观点,通过巧妙地利用Happy DOM模拟浏览器环境,实现了对现有Web组件的服务器端渲染。文章详细介绍了两种方法:一种是利用`template`标签直接渲染,另一种是通过模拟DOM环境运行组件代码,从而生成HTML。作者强调这种方法的优势在于其对Web组件的兼容性,以及在JavaScript加载失败时仍能保证基本功能的健壮性,有效解决了服务器端渲染Web组件的难题,避免了对特定框架的依赖。

开发 同构

极简虚拟计算机SVC16:挑战你的编程极限

2024-12-15
极简虚拟计算机SVC16:挑战你的编程极限

SVC16是一个极简的16位虚拟计算机,其设计目标是极致的简洁性。它没有CPU寄存器,所有操作都在一块内存中进行,指令集极其精简,没有花哨的功能,例如声音、可变屏幕大小等。开发者需要自行编写机器码和编译器,挑战在于用最简单的工具创造出令人惊叹的作品。该项目提供了一个模拟器,用户可自行编写程序并在模拟器中运行,甚至可以尝试编写游戏。这是一个适合学习计算机底层原理以及锻炼编程能力的绝佳项目。

Railgun Labs发布高性能Unicode算法库Unicorn

2024-12-15

Railgun Labs发布了名为Unicorn的Unicode算法库,它以其高速度、可嵌入性、跨平台性和安全性而著称。Unicorn支持多种Unicode算法,包括规范化、大小写转换、排序和分词等,并提供UTF-8、UTF-16和UTF-32编码的解码器、编码器和验证器。该库完全可定制,并经过广泛测试,确保其准确性和可靠性,符合MISRA C:2012标准,并具有线程安全特性(除少数例外)。

开发 Unicode算法

Home Assistant远程访问安全隐患

2024-12-15

博主Frederik Braun尝试使用Home Assistant实现智能家居远程控制,但发现其架构设计导致无法有效保障互联网访问安全。Home Assistant虽然支持用户名密码和双因素认证,但其不支持URL嵌入凭据以及必须在根路径部署的限制,使得无法添加额外的安全机制,例如Web服务器身份验证或隐藏服务路径。这使得Home Assistant的安全完全依赖于其内部安全措施,存在安全风险。文章呼吁Home Assistant社区改进其安全性配置灵活性。

开发

XFCE 4.20发布:Wayland实验性支持及诸多改进

2024-12-15

历经近两年开发,XFCE 4.20正式发布!该版本着重于Wayland支持的准备工作,目前已为大多数组件提供实验性Wayland支持,但仍处于早期阶段,建议高级用户使用。此外,XFCE 4.20还包含大量新功能、错误修复和改进,例如改进的图标缩放、性能提升的图标视图、增强的Thunar文件管理器等。值得注意的是,Wayland支持尚不完整,部分组件和功能尚未移植。

开发 XFCE

Ruby零基础构建对象系统:从匿名函数到元编程

2024-12-15

本文讲述了如何在Ruby中从零开始构建一个简单的对象系统。作者巧妙地运用匿名函数和哈希表,实现了方法查找、原型继承、Mixin和元编程等核心概念。通过逐步构建“构造函数”、模拟私有变量和公共接口,最终实现了类似于面向对象编程中类和继承的功能,为读者深入理解对象系统原理提供了清晰的实践路径。文章以实例代码演示了如何创建对象、定义方法、实现继承和Mixin,并最终实现了类似于Ruby的`attr_accessor`的元编程功能,极具学习价值。

开发

TeaVM 0.11.0 版本发布:全新 WebAssembly 后端

2024-12-15

TeaVM 0.11.0 版本重磅发布,核心在于全新的 WebAssembly 后端。旧版 WebAssembly 后端存在已久,但因性能提升不显著且开发体验差,并未被广泛采用。新后端基于 WebAssembly GC 提案,解决了旧版的问题,例如与浏览器 JS API 交互困难以及生成文件过大等。虽然目前新后端功能略逊于 JS 后端,但已支持 JSO(Java-to-JS 交互 API),并计划在下一版本中达到与 JS 后端相同的功能水平。此版本还修复了 BitSet 实现中的错误,并添加了对更多 JS API 的支持,例如文件读取、触摸事件、Popover API 和 Navigator.sendBeacon 等。

开发 TeaVM

告别无尽会议:高效率软件开发新方法

2024-12-15

厌倦了无休止的会议和冗长计划?本文介绍一种高效率的软件开发方法:以代码为中心,快速迭代。作者以烘焙为例,阐述了通过快速尝试、频繁测试和持续改进,最终获得最佳方案的理念。该方法强调减少文档编写,直接用代码表达想法,利用mock数据和热重载工具加快开发速度,并通过简洁的代码风格和命名规范提高代码可读性。作者提倡将项目拆分成独立可执行文件,最小化重启时间,并使用默认语言工具进行调试。这种方法虽然看起来像“混乱的实验室”,但却能高效地完成项目,避免了传统方法中的冗余和低效。

开发

Vim:超越编辑器的编程语言

2024-12-15

Vim不仅仅是一个文本编辑器,更是一种与计算机交互的语言。它简洁高效的命令结构,易于记忆和理解,也易于计算机解析。虽然Vim自身功能强大,但其核心优势在于其模式已被集成到几乎所有主流代码编辑器中,这使得开发者可以灵活选择自己喜欢的编辑器界面,同时保留Vim高效的命令语言。因此,NeoVim作为Vim语言最完整一致的实现,其价值在于它提供了这种高效的编辑语言,而非仅限于编辑器本身。

开发

编程语言:安全与强大的权衡

2024-12-15

本文探讨了编程语言中安全性和强大性的权衡问题。传统观念认为,强大的语言往往伴随着更高的风险,例如C语言的高性能伴随着手动内存管理的复杂性和危险性。然而,作者认为这种观点是过时的。现代编程语言研究表明,通过更强大的表达能力,我们可以兼顾安全性和强大的功能。文章以Lisp、Scheme和Racket宏的演变为例,说明了如何通过改进语言设计,在保证安全性的同时提升宏的强大功能。Racket的宏系统被认为是最佳实践,因为它在保证代码卫生的同时,允许进行复杂的代码操作。文章最后强调,安全可靠的系统能够构建更强大、更可靠的软件,并推荐了进一步学习Racket宏的资源。

开发

Python依赖管理:一场熊熊大火

2024-12-15

本文深入探讨了Python依赖管理的复杂性,将其比作在干旱森林中生火。作者指出,Python依赖并非简单的pip install,而是涵盖项目包、系统包、操作系统、硬件和环境等多个层面。良好的依赖管理至关重要,它确保代码的可重复性,即在不同环境下都能获得相同结果。文章详细介绍了版本控制、环境隔离以及定义文件、锁定文件等关键概念,并对pip、venv、virtualenv、pip-tools、Pipenv、Poetry、PDM、pyenv、pipx、uv、Conda、Mamba、conda-lock和Pixi等多种工具进行了全面比较,分析了它们的优缺点和适用场景。最终,作者根据不同场景(管理员权限、依赖类型、操作系统等)提供了相应的工具推荐,并展望了未来Python依赖管理工具的发展趋势。

LLVM C库GPU加速:让C代码在GPU上飞速运行

2024-12-14

LLVM项目推出了一款令人兴奋的GPU C库,允许开发者直接在GPU上运行C/C++代码中的libc和libm函数。该库支持两种主要模式:作为OpenMP、CUDA或HIP等异构计算框架的补充库,以及直接编译C/C++代码为GPU目标代码。文章详细介绍了这两种模式的使用方法,包括编译选项、链接方法以及针对AMD GPU和NVIDIA GPU的特定构建步骤。通过该库,开发者可以利用GPU的并行计算能力,显著提升程序性能,而无需深入学习复杂的GPU编程模型。

开发 C库

开源全文搜索应用Buzee:两年磨一剑,终成佳作

2024-12-14
开源全文搜索应用Buzee:两年磨一剑,终成佳作

Buzee是一款由Rust和Svelte开发的跨平台全文搜索应用程序,它能够快速搜索本地文件、文件夹、浏览器历史记录等,并支持OCR提取PDF和图片中的文本。作者耗时两年,克服了诸多技术挑战,最终完成了这个项目,并将其开源。Buzee采用Tauri框架提升性能,使用SQLite和Tantivy进行数据存储和索引,目前已支持多种文件类型,但仍有一些功能尚待完善。

开发

Tailscale子网路由器:轻松连接设备的秘密武器

2024-12-14
Tailscale子网路由器:轻松连接设备的秘密武器

Tailscale通常需要在每个设备上安装客户端,但对于嵌入式设备或现有VPC,这并非总是可行。这时,子网路由器就派上用场了。它允许设备无论是否运行Tailscale,都能通过强大的NAT穿越技术进行通信。本文介绍了Tailscale子网路由器的使用方法,包括在Windows和Linux系统上的安装和配置。对于大型网络迁移或连接AWS VPC等场景,子网路由器提供了一种快速简便的入门方式,个人使用免费,且不计入设备数量限制。

Ultralytics遭遇供应链攻击:PyPI安全事件分析

2024-12-14
Ultralytics遭遇供应链攻击:PyPI安全事件分析

近期,Python项目Ultralytics遭受供应链攻击,攻击者入侵其GitHub Actions工作流程并窃取PyPI API令牌,导致版本8.3.41、8.3.42、8.3.45和8.3.46被污染。攻击未利用PyPI自身漏洞,而是针对GitHub Actions缓存。PyPI利用可信发布和Sigstore透明日志迅速识别并移除恶意软件,并指出API令牌和GitHub环境配置的不足。文章强调了保障软件代码库和发布流程的重要性,并为开发者提供了加强安全性的建议,包括使用可信发布者、锁定依赖项、避免使用不安全模式以及启用多因素身份验证等。

开发

Cortex-M 微控制器上的异步 Rust:高效并发编程的探索

2024-12-14
Cortex-M 微控制器上的异步 Rust:高效并发编程的探索

本文深入探讨了在 Cortex-M 微控制器上使用异步 Rust 进行高效并发编程的方法。文章详细解释了 Futures、协作式调度和异步 Rust 执行器的工作原理,并介绍了 Embassy 项目,这是一个用于在微控制器上解锁异步编程能力的创新框架。通过 Blinky 和 Button 例子,展示了异步 Rust 在嵌入式系统中的应用,并比较了异步 Rust 与传统 RTOS 的优缺点,最终得出异步 Rust 在资源利用率和并发性方面具有显著优势的结论。

开发 Cortex-M

YC孵化器公司Fern招聘资深前端工程师

2024-12-14
YC孵化器公司Fern招聘资深前端工程师

YC孵化器支持的初创公司Fern正在招聘一名资深前端工程师,年薪168,000至192,000美元,并提供股权激励。该职位位于纽约布鲁克林威廉斯堡,需要4年以上前端开发经验,精通JavaScript/TypeScript、React和Next.js。工作内容包括优化开发体验、管理前端基础设施、构建用户界面功能以及与客户建立信任。Fern致力于简化API的使用,其客户包括Cohere、ElevenLabs、Webflow和Merge.dev等知名公司。

开发

Svader:基于WebGL和WebGPU的Svelte GPU渲染组件库

2024-12-14
Svader:基于WebGL和WebGPU的Svelte GPU渲染组件库

Svader是一个用于创建GPU渲染Svelte组件的库,它利用WebGL和WebGPU片段着色器实现高性能图形渲染。开发者可以使用片段着色器编写程序,自定义像素颜色,并通过参数传递控制渲染效果。该库支持Svelte 4和Svelte 5,提供了WebGL和WebGPU两种渲染模式,并包含丰富的内置参数,例如分辨率、缩放比例和时间等。Svader还提供易于使用的组件,简化了GPU渲染的开发流程,即使在不支持WebGL或WebGPU的环境下,也能通过回退机制提供基本的渲染功能。

开发

Canva打印订单路由系统的科学

2024-12-14
Canva打印订单路由系统的科学

Canva工程团队构建了一个可配置的图遍历规则系统,用于优化打印订单的路由。该系统通过将构建图、遍历图和决策过程解耦,实现了高可用性和可扩展性。它使用关系型数据库管理数据,并异步生成缓存中的图,以便快速查询。通过规则引擎和改进的最小成本流算法,系统能够在毫秒级内找到最佳路由,同时最小化运输距离和碳排放,提升用户体验和运营效率。

Go语言:何时不该选择它?

2024-12-14
Go语言:何时不该选择它?

一位开发者在多年使用Go语言后,决定转向Java。他认为Go语言在某些方面存在不足,例如:循环方式单一、缺乏高级函数式编程特性、错误处理繁琐、代码风格限制过多,导致代码冗长且难以维护,以及包生态系统不够成熟等。虽然Go语言适合基础设施开发,但他不建议用于复杂的企业应用开发。

开发

PHP静态类型之争:动态语言的灵活与效率

2024-12-14

本文作者Tony Marston强烈批判PHP 8.1强制静态类型检查的变更。他认为此举违背了PHP动态类型的核心设计理念,导致与PHP长期以来灵活处理数据类型的方式冲突,并给开发者带来巨大的工作量。文章深入探讨了PHP动态类型系统的优势,例如类型自动转换和灵活的数据处理能力,并指出静态类型在现代硬件条件下性能优势已不明显,反而限制了开发效率。作者认为,PHP的动态类型系统更适合处理HTML前端和SQL后端数据的场景,强制静态类型检查是舍本逐末,对PHP社区造成负面影响。

开发

Rust编写的高速Python包和项目管理器uv横空出世

2024-12-14

uv是一个用Rust编写的极速Python包和项目管理器,它整合了pip、pip-tools、pipx、poetry、pyenv、twine和virtualenv等工具的功能,速度提升了10到100倍。uv支持项目管理、工具管理、Python版本管理、脚本支持以及pip兼容接口,并具有全局缓存、工作区支持等特性,极大提升了开发效率。无论是创建项目、管理依赖、运行脚本还是构建发布包,uv都能提供高效便捷的解决方案。

开发
1 2 206 207 208 209 210 212 214