分类: 开发

代码共置:提升代码可维护性的秘诀

2025-02-19

本文探讨了在软件开发中“代码共置”的重要性。作者指出,将代码注释、模板、CSS、单元测试以及应用程序状态等与相关代码放在一起,可以显著提高代码的可维护性、适用性和易用性。与将这些元素分散在不同目录的做法相比,代码共置可以避免代码不同步、难以查找和上下文切换等问题,从而减少技术债务。作者以React、Vue和Angular等框架为例,说明了现代前端开发中代码共置的实践,并强调了其在提高代码可读性和简化代码库管理方面的优势。此外,文章还讨论了工具函数和资源文件的放置策略,建议将它们尽可能靠近使用它们的地方,以减少维护成本和认知负担。

Typst 0.13 发布:改进日常使用体验及实验性 HTML 导出

2025-02-19
Typst 0.13 发布:改进日常使用体验及实验性 HTML 导出

Typst 0.13 版本专注于提升用户日常使用体验,修复了大量长期存在的 bug,并增强了灵活性。最令人兴奋的是,该版本首次引入了实验性的 HTML 导出功能。更新内容包括:语义段落改进,使段落缩进更加灵活;大纲样式改进,使其更美观易于定制;新增 curve 函数,简化贝塞尔曲线绘制;改进文件和字节处理,支持直接使用原始字节数据;优化图像生成流程,支持加载未压缩的原始像素数据;提升插件性能,支持多线程执行;修复数学公式中单字母字符串的样式问题;新增字体覆盖控制功能,更好地支持混合文字排版;新增 pdf.embed 函数,支持将文件嵌入 PDF;以及实验性的 HTML 导出功能,可以将 Typst 文档导出为语义丰富的 HTML。

Bluesky通过“有损时间线”提升性能

2025-02-19

Bluesky为了解决高活跃用户导致数据库热点问题,引入了“有损时间线”机制。该机制通过概率性地丢弃部分写入操作,限制了高关注度用户对数据库的负载,从而显著降低了P99延迟,将原本可能长达数分钟的写入操作缩短至不到10秒。这一策略巧妙地牺牲了一部分数据一致性,换取了系统性能和可扩展性的巨大提升,证明了在特定场景下,追求不完美的系统设计反而能带来更好的用户体验。

开发

Mastra:一个构建AI应用的Typescript框架

2025-02-19
Mastra:一个构建AI应用的Typescript框架

Mastra是一个基于Typescript的AI应用开发框架,它提供了一套构建AI应用所需的基本组件:工作流程、智能体、RAG、集成和评估。你可以本地运行Mastra,也可以将其部署到无服务器云平台。Mastra的核心功能包括:LLM模型集成、支持多种LLM提供商;智能体系统,允许LLM模型调用工具、工作流程和同步数据;可类型化的工具函数;持久化的图型化状态机工作流程;RAG知识库构建;预构建的第三方服务API客户端;以及基于模型、规则和统计方法的自动化评估功能。Mastra提供CLI工具`create-mastra`快速创建应用,并通过`mastra dev`打开Playground。

开发 AI框架

Subtrace:你的Docker容器的Wireshark

2025-02-19
Subtrace:你的Docker容器的Wireshark

Subtrace是一款针对Docker容器的网络流量分析工具,类似于Wireshark。它允许开发者查看后端服务器的所有进出请求,从而更快地解决生产问题。Subtrace无需代码更改即可开箱即用,支持所有编程语言,并显示完整的负载、头部、状态码和延迟,性能开销小于100微秒。它基于ClickHouse构建,并以开源方式提供,但目前不接受代码贡献。

开发

放松的基数平衡树:高效的不可变向量实现

2025-02-19

本文介绍了一种名为“放松的基数平衡树”(RRB树)的数据结构,它用于高效地实现不可变向量。与传统的持久向量相比,RRB树在合并操作方面具有显著的性能优势。文章深入探讨了RRB树的工作原理,包括其核心思想——放松左稠密约束,以及如何通过引入大小表和M..M-1不变性来保证高效的查找和合并操作。作者还提供了TypeScript实现示例,并详细解释了合并算法的步骤,展示了RRB树在实际应用中的高效性。

Apache Airflow:掌控复杂数据工作流的利器

2025-02-19
Apache Airflow:掌控复杂数据工作流的利器

在嘈杂的地铁上,一段关于企业如何管理复杂工作流和海量数据的对话,引出了今天的主角——Apache Airflow。这个强大的开源工具,如同一位数据工程师的守护神,帮助处理从ETL流程到机器学习管道,再到云基础设施管理等各种复杂场景。文章深入浅出地讲解了Airflow的核心功能、架构、最佳实践以及常见挑战,并提供了许多实用技巧,助你高效优化Airflow,充分发挥其潜能,最终实现数据处理自动化和流程优化。

从舒适区到高速成长区:如何在一两年内获得五年经验

2025-02-19
从舒适区到高速成长区:如何在一两年内获得五年经验

本文探讨了职业发展中学习速度的差异。作者认为,某些时期学习效率极高,如同几年经验浓缩于几个月。他以Drivy被Getaround收购为例,讲述了在高压下完成复杂任务,获得飞速成长的经历。作者提出了“舒适区”、“学习区”、“快速成长区”和“倦怠区”四个概念,并建议在不同区域间灵活切换,保持持续学习,避免长期停留在舒适区或快速成长区导致倦怠。

开发 经验积累

BleachBit:高效清理系统垃圾,释放磁盘空间

2025-02-19

你的电脑空间不足?BleachBit 能帮你快速释放磁盘空间并保护你的隐私!它可以清理缓存、删除Cookie、清除浏览历史记录、粉碎临时文件、删除日志以及清除你意想不到的垃圾文件。支持Linux和Windows系统,兼容Firefox、Adobe Flash、Google Chrome、Opera等众多应用程序。此外,BleachBit 还提供高级功能,例如文件粉碎以防止恢复、擦除空闲磁盘空间以隐藏其他应用程序删除文件的痕迹以及优化Firefox以提高速度。更棒的是,BleachBit 是开源且免费的!

开发

arXivLabs:与社区协作者合作的实验项目

2025-02-19
arXivLabs:与社区协作者合作的实验项目

arXivLabs是一个框架,允许合作者直接在我们网站上开发和分享新的arXiv功能。与arXivLabs合作的个人和组织都拥抱并接受了我们开放、社区、卓越和用户数据隐私的价值观。arXiv致力于这些价值观,并且只与遵守这些价值观的合作伙伴合作。 有一个项目的想法可以为arXiv的社区增加价值?了解更多关于arXivLabs的信息。

开发

大型软件项目的长期维护:远不止代码编写

2025-02-19
大型软件项目的长期维护:远不止代码编写

本文作者以其开发的Construct游戏引擎为例,深入探讨了大型软件项目长期维护的挑战。作者指出,编写初始代码仅占工作量的很小一部分,大部分工作在于后续的维护,包括测试、调试、优化、升级、重构、客户支持和文档维护等。作者用建造房屋的比喻说明,一个免费提供的扩展部分,虽然初期看起来很美好,但长期维护成本可能远超预期,甚至导致最终需要推倒重来。这揭示了大型软件项目维护者对外部贡献代码的谨慎态度,以及由此可能产生的沟通和协调问题。

开发

去中心化组织的沟通困境与AI的解法

2025-02-19

作者在高度去中心化的远程组织工作,面临着沟通效率低下的挑战。信息在各种非正式渠道(如Zoom、TikTok等)中传播,导致理解偏差频发,缺乏清晰的记录和可追溯性。作者将这种现象比作“口头文化”的回归,并认为AI技术有望通过强大的信息处理能力,帮助组织提升沟通效率,将非结构化的信息转化为可理解的结构化信息。

Go-msquic:微软QUIC库的Go语言封装

2025-02-19
Go-msquic:微软QUIC库的Go语言封装

go-msquic是微软QUIC库的Go语言封装,为Go开发者提供了一个易于使用的接口来处理基于QUIC的协议,例如HTTP/3。它借鉴了quic-go的API设计,可以作为直接替换。除非你准备处理C库,否则我们实际上推荐使用quic-go而不是go-msquic。安装需要先构建本地MsQuic C库,然后使用`go get github.com/noboruma/go-msquic`安装。示例代码位于sample/目录下。

开发

用100行纯Jax代码实现LLaMA3

2025-02-19

本文介绍了如何仅用100行纯Jax代码从零开始实现LLaMA3模型。作者选择Jax是因为其简洁的语法和强大的功能,例如XLA加速器、JIT编译、vmap向量化等。文章详细讲解了模型的各个组件,包括权重初始化、BPE分词、动态嵌入、旋转位置编码、分组查询注意力机制和前向传播过程。此外,文章还阐述了Jax中独特的随机数生成器管理和JIT编译机制。最后,作者演示了如何使用Shakespeare数据集训练该模型,并给出了训练循环的代码。

开发

Augment:Vim/Neovim插件,AI赋能代码补全与代码聊天

2025-02-19
Augment:Vim/Neovim插件,AI赋能代码补全与代码聊天

Augment发布了其Vim/Neovim插件,该插件利用AI提供代码补全和多轮对话功能,能根据你的代码库上下文提供智能建议。安装后,你需要添加工作区文件夹并登录Augment服务。然后,你就可以在编写代码时获得上下文感知的代码补全建议,并使用`:Augment chat`命令与AI进行代码相关的多轮对话。插件支持Vim 9.1.0+和Neovim 0.10.0+,并需要Node.js 22.0.0+。你可以通过`git clone`或插件管理器安装,并配置工作区文件夹以提高准确性。插件还提供了丰富的命令,例如状态查看、登录注销、启用禁用建议、查看日志、开启新的聊天会话等。对于大型项目,你可以使用`.augmentignore`文件忽略某些文件或目录。

Rust 实现的 JSON 解析器:从大学课程到 800 行代码

2025-02-19
Rust 实现的 JSON 解析器:从大学课程到 800 行代码

作者在学习编译原理课程的同时,利用业余时间用 Rust 语言编写了一个 JSON 解析器。文章详细介绍了解析器的设计思路、实现细节,包括如何处理各种 JSON 数据类型(字符串、数字、数组、对象等)、错误处理以及性能测试。最终的解析器代码约 800 行,作者还对错误信息进行了美化,使其更易于阅读和调试。性能测试显示,该解析器在未经优化的情况下,也能达到不错的速度。

开发 JSON解析器

Linux内核Rust之争:维护者反对Linus强推

2025-02-18

Linux内核维护者Christoph Hellwig公开反对在内核中强制使用Rust。他指出Linus Torvalds私下表示将无视维护者的否决,强行合并Rust代码。Hellwig担忧此举会导致内核代码库变成难以维护的多语言混合体,并增加维护负担,最终损害内核的长期稳定性。他认为,解决内核内存安全问题应该优先关注现有代码的改进,而非引入新的语言,并呼吁制定明确的语言使用规范。

开发

uv:Python 项目管理工具的 Pareto 解决方案

2025-02-18
uv:Python 项目管理工具的 Pareto 解决方案

经过一年的使用,作者发现Astral的Python项目管理工具uv是高效的Pareto解决方案。uv独立于Python本身,易于安装和使用,并提供pip和venv接口,能统一安装和运行Python,解决各种平台和环境下的兼容性问题。uv还具有强大的依赖解析器和构建功能,并提供便捷的命令行工具,极大提高开发效率。虽然在遗留项目或受限的企业环境中可能存在一些限制,但作者强烈推荐优先尝试uv,因为它极大地简化了Python项目的管理和开发流程。

开发

Kafka作为作业队列的陷阱:低吞吐量下的不公平性

2025-02-18

本文探讨了将Kafka用作低吞吐量作业队列的弊端。作者指出,由于Kafka的底层机制,即使其他消费者空闲,工作也可能不公平地分配给单个消费者,导致部分消费者负载过重,其他消费者闲置。文章给出了计算最坏情况下单个消费者处理作业数的公式,并分析了在不同负载下这种不公平性对应用性能的影响。作者建议,在低吞吐量场景下,除非KIP-932实现,否则不应将Kafka用作作业队列。

开发

arXivLabs:社区协作的实验性项目

2025-02-18
arXivLabs:社区协作的实验性项目

arXivLabs是一个允许合作者直接在arXiv网站上开发和分享新功能的框架。参与arXivLabs的个人和组织都认同并接受了arXiv关于开放性、社区、卓越和用户数据隐私的价值观。arXiv致力于这些价值观,并且只与遵守这些价值观的合作伙伴合作。如果你有想法,可以参与其中,为arXiv社区增值。

开发

从Java到Go:一次高效的语言迁移

2025-02-18
从Java到Go:一次高效的语言迁移

作者回顾了从2011年学习Java到2024年转向Go的历程。起初,他偏爱Java的成熟生态和Spring框架,但随着项目的规模和复杂度增加,Java应用的启动速度慢和高资源消耗成为瓶颈。在开发Kubernetes工具和自托管软件分发平台的过程中,作者选择了Go语言,并发现其学习曲线并不陡峭,而快速的启动速度、低资源消耗以及轻量级的生态系统带来了显著的效率提升。虽然Java仍有其优势,但在云原生应用和Kubernetes领域,Go 成为更理想的选择。

开发

闪电般快速的文件管理器:自定义面板、标签页和强大的搜索功能

2025-02-18
闪电般快速的文件管理器:自定义面板、标签页和强大的搜索功能

这款文件管理器拥有可自定义的面板和标签页布局,支持拖放操作,让你轻松管理文件。毫秒级搜索功能可浏览整个硬盘,模糊搜索和文件扩展名过滤功能更提升了效率。此外,它还提供文件内容预览、批量重命名、快速访问常用路径、命令面板和自定义快捷键、上下文菜单以及自定义外观等功能,极大提升了文件管理效率。

开发

解决Amazon EKS集群认证错误:“您必须登录到服务器(未授权)”

2025-02-18
解决Amazon EKS集群认证错误:“您必须登录到服务器(未授权)”

连接Amazon EKS API服务器时遇到“您必须登录到服务器(未授权)”错误?这通常是因为kubectl配置的IAM实体未经Amazon EKS认证。本文档详细介绍了两种情况下的解决方案:您是集群创建者或您不是集群创建者。如果是集群创建者,请检查AWS CLI配置的IAM实体是否与用于创建集群的实体匹配,并使用`aws eks update-kubeconfig`更新kubeconfig文件。如果不是集群创建者,则需要将您的IAM实体映射到aws-auth ConfigMap,可以使用`eksctl create iamidentitymapping`命令或手动编辑ConfigMap来实现。最后,别忘了检查CloudWatch日志以排查问题。

利用LLM进行高效代码生成的秘诀

2025-02-18
利用LLM进行高效代码生成的秘诀

本文分享了一种利用大型语言模型(LLM)进行软件开发的高效工作流程。作者将开发流程分为三个阶段:想法细化、规划和执行。首先,利用对话式LLM完善项目构思,生成详细的开发规范;然后,使用推理模型将规范分解成小的、可迭代的步骤,并生成相应的代码生成提示;最后,利用代码生成工具(如Claude或Aider)逐步实现每个步骤,并进行测试。作者还介绍了处理遗留代码的方法,以及一些常用的LLM提示技巧。虽然这种方法提高了开发效率,但也存在一些挑战,例如团队协作的困难和等待LLM处理时间的消耗。

开发

开源多引擎数据湖仓的崛起:一个基于S3和Python的实践

2025-02-18
开源多引擎数据湖仓的崛起:一个基于S3和Python的实践

数据行业正掀起一股开源多引擎数据湖仓的热潮。文章作者通过六篇文章详细介绍了如何构建一个基于S3和Python的、支持多引擎的开源数据湖仓。他们选择了Snowflake的Open Catalog作为元数据管理服务,并利用PyArrow和Polars等Python库进行数据处理和分析,成功实现了Spark、Snowflake和Polars等多种引擎的并发读写。这为数据平台团队节省了昂贵的ETL流程成本,标志着数据栈的一次重大革新。

开发 多引擎

Kleene:FreeBSD 的 Docker 式容器管理平台

2025-02-18
Kleene:FreeBSD 的 Docker 式容器管理平台

Kleene 是一个专为 FreeBSD 设计的容器管理平台,它借鉴了 Docker 的理念,但充分利用了 FreeBSD 的原生工具和理念。它遵循 KISS 原则,利用 FreeBSD 内置的 jails、ZFS 和 PF 等功能,简化了应用程序的部署、维护和升级,避免不必要的复杂性和抽象。Kleene 采用客户端-服务器架构,客户端 Klee(Python)向服务器 Kleened(Elixir)发送指令,两者可运行在同一台机器或远程连接。它支持创建、运行和管理容器化应用程序,并具有良好的透明度和控制能力。对于熟悉 Docker 的用户,Kleene 的使用方法会很熟悉;对于 FreeBSD 新手,Kleene 也降低了容器化的学习门槛。

开发 容器管理

arXivLabs:与社区协作者共建arXiv新功能

2025-02-18
arXivLabs:与社区协作者共建arXiv新功能

arXivLabs是一个实验性项目框架,允许合作者直接在arXiv网站上开发和分享新功能。参与者(个人或组织)都认同arXiv的开放、社区、卓越和用户数据隐私的价值观。arXiv致力于这些价值观,只与遵守这些价值观的合作伙伴合作。如果你有想法能为arXiv社区增值,那就了解更多关于arXivLabs的信息吧!

开发

深入浅出异或运算:从布尔逻辑到密码学

2025-02-18

本文深入探讨了计算机科学中看似简单的异或 (XOR) 运算符。作者从布尔逻辑中的XOR运算开始,逐步扩展到整数的位运算,并探讨了XOR在密码学、像素图形、游戏理论以及有限域等领域的应用。文章以生动的故事性和丰富的例子,解释了XOR的各种特性和用途,例如在密码学中作为简单的加密方式,在像素图形中实现可逆的绘制和擦除,以及在Nim游戏中确定最佳策略。最后,文章还介绍了XOR与集合的 symmetric difference、指数为2的群、Nim-sum、GF(2) 有限域以及CRC校验和等数学概念的联系,展现了XOR运算符的深层数学内涵和广泛的应用场景。

开发 异或运算

滥用通用搜索算法解决动态优化问题

2025-02-18

本文作者通过一个简单的动态优化玩具问题,比较了贝尔曼原理、迪杰斯特拉算法、蒙特卡洛树搜索和庞特里亚金最大值原理四种算法的性能。结果显示,针对该特定问题,专门的算法(如贝尔曼原理和庞特里亚金最大值原理)效率更高,而通用算法虽然能够解决问题,但在效率和内存使用方面表现较差。作者还对这些算法进行了动画演示,并进行了基准测试,直观地展现了不同算法的搜索过程和性能差异。

调试构建速度提升 100 倍的秘诀:SIMD 和专用硬件的奇迹

2025-02-18

作者在开发一个 C 语言编写的 Torrent 应用程序时,遇到了调试构建启动速度过慢的问题(20-30 秒)。这主要是因为程序启动时需要逐块验证下载文件的 SHA1 哈希值,而调试模式下的 Address Sanitizer 会显著降低 SHA1 计算速度。文章尝试了多种优化方法,包括使用 SIMD 指令和 CPU 的专用 SHA 加速硬件。最终,通过使用 Intel SHA 扩展指令集,将启动时间缩短到 866.9 毫秒,实现了 100 倍的性能提升。这篇文章详细介绍了各种优化方案的实现细节和性能对比,并探讨了编译器优化和磁盘 I/O 的影响。

开发
1 2 156 157 158 160 162 163 164 213 214