分类: 开发

Chatbox:你的AI桌面助手

2025-01-25
Chatbox:你的AI桌面助手

Chatbox是一个开源的桌面客户端应用,支持多种大型语言模型(LLM),例如GPT、Claude、Gemini和Ollama等。它具有本地数据存储、多平台支持、强大的提示功能和团队协作等特性,方便用户与AI进行交互,并能用于提示调试和日常聊天等多种用途。开发者最初为了调试提示而创建了Chatbox,但因其易用性和功能性而广受欢迎,现已成为一个成熟的AI桌面应用。

用函数式思维解密Fenwick树

2025-01-25

本文深入探讨了Fenwick树(也称为二元索引树)的实现原理。作者从更易理解的线段树出发,运用函数式编程和等式推理,逐步推导出了Fenwick树的实现,揭示了其看似神秘的位运算操作背后的逻辑。通过巧妙地运用Haskell EDSL对无限二进制补码数进行操作,文章最终解释了Fenwick树高效实现的秘密,并证明了其更新和范围查询操作的log(n)时间复杂度。

使用Tach可视化Python项目依赖关系图

2025-01-25

本文介绍了如何使用Tach工具可视化Python项目的依赖关系图。通过简单的几步:安装Tach、定义模块边界、同步依赖关系和查看依赖关系图,开发者可以清晰地了解项目结构、模块间依赖关系,从而更好地进行代码重构、改进代码质量,避免循环依赖等问题。Tach还支持模块边界强制和接口定义,帮助开发者构建更清晰、更易维护的项目。

开发

别做 JIRA 僵尸:如何高效工作并获得晋升

2025-01-25

一位工程师分享了他职业生涯中宝贵的经验教训。他告诫初级工程师不要沉迷于完成 JIRA 任务,而应专注于对公司具有战略意义的项目。高效工作并非单纯地完成更多任务,而是要优先处理管理层认为最重要的事情。文章强调了识别重要任务的方法,例如关注高可见性事件、未解决的问题以及项目进度等。作者以自身经历为例,说明了专注于不重要的任务可能导致的挫败感,并建议工程师们要果断放弃不重要的工作,专注于对公司发展有真正贡献的项目,从而在更短的时间内创造更大的价值。

开发

用LLM自动回复房产中介垃圾短信

2025-01-24

作者开发了一个系统,利用LLM自动回复房产中介的垃圾短信。该系统通过修改Android SMS Gateway MQTT应用,实现短信双向MQTT通信。Python脚本监听MQTT消息,并使用LLM根据预设人格生成回复,存储对话上下文以保持连贯性。作者使用Ollama方便地测试和调整LLM个性。目前已成功进行了一些有趣的对话实验,但作者也提到了一些法律和安全方面的考量。

开发

告别Neovim,拥抱Zed:一位Vim老用户的15年编辑器迁移之旅

2025-01-24

一位使用Vim/Neovim长达15年的资深开发者,因厌倦繁琐的配置和插件管理,以及对原生LLM集成的渴望,尝试了新型编辑器Zed。Zed的Vim模式、简洁的JSON配置、强大的LLM集成(名为“Assistant”)以及极速运行速度,给他留下了深刻的良好印象,令他暂时告别了陪伴自己多年的Neovim。虽然这只是一次尝试,但他对Zed的未来充满期待,这或许预示着代码编辑器的新时代来临。

开发

GitHub UI 架构的过去、现在和未来:10倍的成本

2025-01-24

本文是GitHub工程师Joel Hawksley关于GitHub UI架构演进的总结。他回顾了GitHub UI从早期简陋到如今注重可用性和可访问性的历程,以及由此带来的挑战。他指出,移动端已成为新基准,而构建和维护设计系统(如Primer)的成本远超预期,且前端代码的复杂性是后端的十倍。他建议开发者避免重复造轮子,充分利用现有设计系统,并谨慎规划前端复杂性,以降低成本和提升效率。

开发

Compose:大规模 WebSocket 的经验教训

2025-01-24

Compose 公司分享了他们在扩展 WebSocket 服务过程中遇到的挑战和经验。文章重点介绍了如何优雅地处理部署、建立一致的消息模式、使用心跳检测静默断开连接以及使用 HTTP 作为回退机制等关键策略。通过这些方法,Compose 实现了近乎零停机时间的 WebSocket 服务,并确保了应用的实时性和高性能。

开发

使用GADTs简化多编译目标的Haskell后端开发

2025-01-24
使用GADTs简化多编译目标的Haskell后端开发

本文讲述了作者如何使用Haskell中的广义代数数据类型 (GADTs) 简化Agda编译器后端的开发。作者面临着为两种不同的Lambda Box中间语言目标(类型化和非类型化)编写编译器的挑战。通过巧妙运用GADTs和依赖类型,作者避免了代码重复,并利用类型系统强制执行类型安全,确保在类型化目标中不会遗漏类型信息。这篇文章不仅展示了GADTs在实际编程中的实用性,也提供了一个简洁明了的案例,说明了依赖类型如何帮助程序员避免错误。

开发 GADTs

C++26即将支持包索引:告别繁琐的元素提取

2025-01-24

C++11引入了参数包,但提取包中特定元素一直比较繁琐。C++26通过提案P2662R3引入了包索引,允许直接使用下标操作符访问包元素,例如`T...[0]` 获取第一个元素。这使得代码更简洁易读,编译性能也得到提升。虽然目前不支持负索引和切片,但该特性已足够实用,为C++开发带来了显著便利。

类型断言生成器:速度与类型的完美结合

2025-01-24
类型断言生成器:速度与类型的完美结合

本文深入比较了Type-Predicate-Generator与其他运行时类型检查器的性能和特性。Generator生成的代码速度快100倍以上,无需运行时依赖,且生成的TypeScript代码类型安全、可读、易修改,无需自定义DSL。它比其他代码生成器更快,甚至能生成单元测试,避免了eval()的使用,并提供更好的调试体验。总而言之,Generator在性能、类型安全性和易用性方面均具有显著优势。

开发

KubeStatus Operator:轻松为Kubernetes集群添加状态页

2025-01-24
KubeStatus Operator:轻松为Kubernetes集群添加状态页

KubeStatus Operator是一个开源工具,能轻松为你的Kubernetes集群添加状态页,显示服务的运行状态(运行中、降级或宕机)。它使用Go编写,通过Kubernetes API获取集群和资源信息。KubeStatus提供了一种简单方便的方式来查看集群和资源的当前状态,无需使用kubectl命令行工具或Kubernetes Dashboard。它还提供了一个用户友好的页面,可以用作你的主要状态页。

开发

用Lean证明助手形式化数学证明

2025-01-24
用Lean证明助手形式化数学证明

本文讲述了作者使用Lean证明助手,形式化验证一个关于线性代数中特征向量线性无关性的简单定理的过程。文章详细解释了Lean的语法、Mathlib库的使用,以及如何利用自动化推理工具简化证明过程。作者还探讨了如何改进和推广该定理,并介绍了Mathlib库的版本控制和社区协作模式。最后,文章展望了证明助手和AI技术在未来数学研究中的作用。

Eki Bright:DIY 路线规划的魅力

2025-01-24
Eki Bright:DIY 路线规划的魅力

Eki Bright 是一款东京地区列车时刻表应用,其核心特色在于“DIY 路线规划”。不同于传统应用的自动规划,Eki Bright 允许用户手动输入每一段行程,包括列车及出发到达站信息。这种方式更适合熟悉路线的资深用户,并提供实时更新的动态信息,以及便捷的分享功能。作者详细阐述了 DIY 路线规划的优势,例如能精确控制出发时间、避免步行时间误差、减少地图干扰等,并指出其适用场景和局限性。

192字节的WebAssembly编译器:代码高尔夫的极致

2025-01-24
192字节的WebAssembly编译器:代码高尔夫的极致

本文讲述了一个仅192字节的WebAssembly编译器,它能将逆波兰表达式编译成WebAssembly模块。作者逐步揭秘了这个精简代码背后的技巧,包括利用JavaScript的特性、巧妙运用WebAssembly字节码、以及对变量和表达式的优化。这个极小的编译器虽然功能简单,但却能帮助读者深入理解WebAssembly的运作机制。

开发

Little Snitch隐藏功能:精准控制Safari搜索助手网络连接

2025-01-24

作者在使用Little Snitch管理新Mac的网络连接时,发现Safari的搜索助手进程会偷偷连接Google的ssl.gstatic.com。通过修改搜索引擎或阻止连接可以解决,但后者会影响Gmail邮件认证。作者最终通过Little Snitch的“via”功能创建了精准规则,只阻止Safari搜索助手连接ssl.gstatic.com,而不影响Safari主进程,巧妙解决了这个问题。这揭示了Little Snitch一个鲜为人知的强大功能,以及浏览器与搜索引擎后台通信的细节。

开发

批处理作业系统中的数据分支:Git for Data 的实践

2025-01-24

本文探讨了如何在批处理作业系统中利用类似Git的数据分支管理策略。作者提出,将主分支作为生产数据版本,每个作业运行时创建一个分支,进行数据处理和元数据记录,成功后合并回主分支。此外,还介绍了测试执行、实验和多步骤作业等场景下的分支使用策略,最终实现高效的数据版本控制和实验管理,类似于数据库事务的ACID特性。

Lightpanda:为AI和自动化设计的轻量级无头浏览器

2025-01-24
Lightpanda:为AI和自动化设计的轻量级无头浏览器

Lightpanda是一个开源的无头浏览器,专为AI和自动化任务而设计。它使用Zig语言编写,具有极低的内存占用和极快的执行速度,比Chrome快11倍,内存占用低9倍。Lightpanda支持Javascript执行和部分Web API,兼容Playwright和Puppeteer,可用于AI代理、LLM训练、网页抓取和测试。目前仍处于Beta阶段,但已实现HTTP加载器、HTML解析器、DOM树、Javascript支持(基于v8)、基本DOM API、Ajax、XHR API、Fetch API和DOM转储等功能。

开发

Wild: 一个极速的 Linux 链接器

2025-01-24
Wild: 一个极速的 Linux 链接器

Wild 是一款旨在为迭代开发提供极速体验的 Linux 链接器。虽然目前尚未实现增量链接,但其速度已相当惊人。对于生产环境构建,建议使用 GNU ld 或 LLD 等更成熟的链接器;而对于开发环境,Wild 可以显著提升构建速度,尤其在 x86-64 Linux 系统上。它支持生成静态链接和动态链接的可执行文件及共享库,并已通过大量 crates.io 上热门库的测试。目前,增量链接、对其他架构和链接器参数的支持等功能尚在开发中。

开发

突破性算法:近乎完美的图书排序

2025-01-24
突破性算法:近乎完美的图书排序

科学家们在“图书馆排序问题”(也称为“列表标记问题”)上取得了突破性进展。该问题旨在找到一种最有效的方法来组织书籍或数据库中的文件,以最小化插入新项目所需的时间。一个团队开发出一种新算法,其平均插入时间接近理论上的最佳值(log n),该算法结合了对过去内容的少量了解和随机性的力量,有效解决了困扰研究人员四十多年的难题。这项研究不仅对图书馆员有实际意义,还对数据库和硬盘驱动器的文件组织具有重要意义,有望显著提高数据存储和检索效率。

开发

Threlte 8 发布:Svelte 3D 框架迎来重大更新

2025-01-24
Threlte 8 发布:Svelte 3D 框架迎来重大更新

Threlte 团队发布了 Threlte 8,这是一个重大的里程碑版本,带来了性能、灵活性和开发者体验的显著提升。该版本整合了 Svelte 5 的新特性,并利用了 Three.js 的最新进展。主要更新包括全新的 `` 组件、改进的插件 API、对 WebGPU 的支持以及 Threlte Studio 的 Alpha 版本发布。虽然存在一些破坏性变更,但迁移指南已提供帮助。

开发 Threlte

2025年我的Home Assistant智能家居之旅

2025-01-24
2025年我的Home Assistant智能家居之旅

作者从七年前的小公寓开始使用Home Assistant,经历了从简单的IKEA智能灯泡到如今拥有超过100个设备的智能家居系统。文章重点讲述了如何利用Home Assistant的Adaptive Lighting功能实现智能灯光调节,以及如何通过AI编码助手Cursor简化YAML配置文件的编写和调试。作者还分享了优化不同IKEA灯泡的Adaptive Lighting配置经验,并展望了下一步将智能温控阀门集成到系统中的计划,以实现更精细的房间温度控制。

开发

magenta.nvim: 基于工具的 Neovim LLM 插件

2025-01-24
magenta.nvim: 基于工具的 Neovim LLM 插件

magenta.nvim 是一个强大的 Neovim 插件,利用大型语言模型 (LLM) 提升编码效率。它通过一个聊天窗口与 AI 编码助手交互,并提供工具来填充上下文和进行内联编辑。与其他插件不同,magenta.nvim 依靠 LLM 自行选择上下文,并利用多种工具(如列出目录、获取文件内容、使用 LSP 功能等)来完成任务。其架构简洁,易于扩展,并拥有全面的测试,支持 OpenAI 和 Anthropic 等多个提供商。

开发

AI 正在培养出一代不识字的程序员

2025-01-24

一位资深程序员在 ChatGPT 宕机后,发现自己因为过度依赖 AI,编程能力严重退化。他不再阅读文档、调试代码,甚至不看错误信息,直接复制粘贴 AI 给出的解决方案。这让他失去了深入理解代码的乐趣和能力,也让他对编程的热情逐渐消退。他呼吁程序员们要适度使用 AI,定期进行无 AI 编程练习,避免成为 AI 的附属品,最终失去独立解决问题的能力。文章警示了 AI 虽然提升了效率,但也可能导致程序员技能的退化,我们需要保持平衡,才能在 AI 时代保持竞争力。

(nmn.gl)
开发

告别分布式协调:Restate如何用单一日志简化分布式应用

2025-01-24
告别分布式协调:Restate如何用单一日志简化分布式应用

构建健壮的分布式应用一直是难题。开发人员常常花费大量时间处理故障转移策略、重试、竞争条件等问题。本文介绍了一种名为Restate的新方法,通过避免分布式协调来简化开发。其核心思想是将所有系统(消息队列、数据库、锁服务等)都视为同一个日志。每个操作都记录到该日志中,重试时自动读取之前的操作记录,从而避免数据不一致和竞争条件。Restate是一个基于此思想的开源项目,利用单一日志简化分布式应用的开发和维护,提高系统可靠性。

开发

减少依赖:Rust 生态系统中的一个新视角

2025-01-24
减少依赖:Rust 生态系统中的一个新视角

知名开发者 Armin Ronacher 在其博客文章中批判了 Rust 生态系统中过度依赖外部库的现象。他指出,过多的依赖导致了持续不断的更新、补丁和安全审计,增加了开发者的负担,并常常引入不必要的代码。他倡导一种“自己动手”的理念,鼓励开发者在适当情况下编写自己的代码,而不是盲目依赖外部库。他以 `terminal_size` 库为例,说明了一个简单的功能却依赖了多个库,并经历了多次更新,这体现了过度依赖的弊端。文章呼吁 Rust 社区转变观念,重视减少依赖,并对那些编写低依赖库的开发者给予肯定。

开发

Docker Hub 的信任危机:LinuxServer.io 的困境

2025-01-24
Docker Hub 的信任危机:LinuxServer.io 的困境

LinuxServer.io,一个知名的Docker镜像提供商,长期以来依赖Docker Hub作为其主要镜像仓库。然而,Docker Hub近年来一系列政策变化,包括对免费用户的限制和糟糕的DSOS续期流程,导致LinuxServer.io的账号失去了DSOS会员资格,面临着镜像被删除和拉取限制的风险。尽管尝试联系Docker官方寻求帮助,但始终未得到回应。这迫使LinuxServer.io重新评估其镜像分发策略,未来或将减少对Docker Hub的依赖,这将影响大量依赖Docker Hub的用户。

开发 Docker Hub

Macbook最佳本地虚拟机:Oracle Linux

2025-01-24

作者在MacBook上寻找合适的本地Linux环境用于Kubernetes开发,尝试Docker Desktop后发现其耗电严重且存在睡眠问题。最终,他找到了一个意想不到的解决方案:Oracle Linux。Oracle Linux基于Red Hat Enterprise Linux,并提供易于使用的UTM模板。作者详细描述了安装k3s和cert-manager的过程,并惊喜地发现Oracle Linux在UTM中的运行非常省电,解决了Docker Desktop带来的困扰。

开发 Oracle Linux

Nix@NGI:让开源软件运行更流畅

2025-01-24
Nix@NGI:让开源软件运行更流畅

Nix@NGI团队致力于简化开源软件的运行,特别是在长期维护方面。他们与NGI Zero联盟合作,目标是让1200多个NLnet资助的项目能够与Nix生态系统无缝衔接。团队成员各司其职,涵盖了管理、运营、开发、维护等多个方面,并积极寻求志愿者和实习生的参与。他们的工作不仅能惠及NixOS贡献者,还能提升开源软件的可访问性。未来,他们计划改进工具、流程以及用户体验,进一步推动开源软件发展。

开发 NGI Zero

Trae:AI IDE 助你飞速开发

2025-01-24

Trae 是一款自适应的 AI 集成开发环境 (IDE),它能改变你的工作方式,与你协同合作,加快开发速度。通过 Trae,你可以更快地交付产品,提高效率。

开发
1 2 177 178 179 181 183 184 185 213 214