分类: 开发

用Clojure实现Bel语言:一段9个月的编程冒险

2025-03-11

作者历时9个月,用Clojure语言实现了Bel语言,这是一个基于1958年麦卡锡设计的Lisp语言的扩展。起初计划只用一个周末完成,却遭遇了诸多挑战:需要自行编写解析器以处理Bel语言独特的语法;简单的递归解释器无法处理Bel语言的延续性;为了解决栈溢出问题,作者不得不重新实现调用栈。最终,通过借鉴Clojure的设计理念,并使用Java数据结构优化性能,作者完成了Bel语言的实现,并对Bel语言的特性进行了深入探讨,例如lit、globe、scope、mac、err等,以及延续性带来的强大功能。尽管项目仍在完善中,但这段充满挑战和收获的旅程本身已价值非凡。

开发

Kubernetes 自动化 IP 地址和网络变更处理

2025-03-11
Kubernetes 自动化 IP 地址和网络变更处理

作者的 Kubernetes 集群依赖于动态分配的 IP 地址,这导致了其网络配置的脆弱性。为了解决这个问题,作者编写了一个 Kubernetes 部署程序,该程序使用 Unifi API 定期检查并更新其 Unifi 网关的公共 IP 地址。一旦检测到 IP 地址或 IPv6 网络的变化,该程序就会自动更新 Unifi 防火墙规则和 Kubernetes 服务资源(包括 MetalLB 配置),并通过 MQTT 通知用户。该程序使用 Python 编写,并利用 Kubernetes 和 Unifi 的 API 来实现自动化。

Shef:无需编写复杂 shell 脚本的 CLI 命令行工具

2025-03-11
Shef:无需编写复杂 shell 脚本的 CLI 命令行工具

Shef 是一款强大的命令行工具,它结合了 shell 命令和 YAML 配置,让用户无需编写复杂的 shell 脚本就能轻松创建和运行复杂的命令行工作流程。Shef 支持命令管道、交互式提示、循环和条件逻辑等高级功能,并提供丰富的模板和转换函数,极大地简化了 shell 脚本的编写和管理。通过 Shef,用户可以创建可重用、易于维护和分享的 shell recipes,提升效率并降低出错概率。

开发

Windows资源管理器图标排列的O(n²)算法导致卡顿

2025-03-10
Windows资源管理器图标排列的O(n²)算法导致卡顿

一位Windows用户遇到资源管理器卡顿问题,作者通过性能分析工具发现罪魁祸首是图标排列算法的低效。该算法的时间复杂度为O(n²) ,导致大量图标时,排列耗时过长,即使图标隐藏也存在问题。作者通过实验验证了这一结论,并呼吁开发者避免使用低效算法。

开发

你讨厌CSS?这本书或许能帮到你

2025-03-10

Rex Riepe的新书《你讨厌CSS》并非教你如何写CSS,而是教你如何高效地使用CSS,并解释了CSS及周边设计生态系统为何如此。本书面向CSS新手和老手,旨在帮助读者快速完成前端工作,并着重强调团队协作下的效率。它支持California Stylesheets CSS框架,目标是帮助开发者快速高效地使用Web技术。

开发

彻底分离关注点:重构Bug追踪器

2025-03-10

作者在长期使用各种Bug追踪器后,发现其数据表示存在根本性缺陷,导致许多困扰。文章列举了三个典型问题:统一的“修复版本”字段混淆了事实与计划;状态和解决方案字段的二元化模糊了代码现状与未来意图;将Bug列表等同于待办事项列表,导致非Bug任务的处理变得笨拙。作者提出了一种“关注点分离”的原则,建议将Bug追踪器的数据分为事实表和计划表,分别记录客观存在的Bug信息和修复计划。事实表记录Bug的存在、版本、严重程度等客观信息,计划表记录修复计划、时间安排和主观优先级等。这种分离使得Bug追踪更加清晰高效,并能更好地适应不同类型的项目,甚至可以完全去除计划表,只关注Bug本身。

开发 Bug追踪器

55岁程序员因恶意代码破坏前雇主网络面临十年监禁

2025-03-10
55岁程序员因恶意代码破坏前雇主网络面临十年监禁

一名55岁的软件开发人员因部署恶意代码破坏其前雇主网络而面临长达10年的监禁,据称造成数十万美元的损失。这名程序员Davis Lu在伊顿公司工作了11年,因2018年公司重组导致其职责减少而心生不满,随后在公司网络中植入恶意代码,造成系统崩溃和数据丢失。他甚至设计了一个名为“IsDLEnabledinAD”(Is Davis Lu enabled in Active Directory的缩写)的“终止开关”,在其被解雇当天自动激活,导致伊顿公司全球用户受到影响。

开发 网络破坏

开源维护者的困境与有效的贡献方式

2025-03-10

一位开发者在Hacker News上发文,探讨了开源项目的维护难题。大型组织依赖开源项目节省成本却很少回馈,导致维护者不堪重负。文章指出,沟通不畅是主要问题:维护者缺乏清晰的贡献指南,开发者不知道如何有效帮助。作者建议维护者明确表达需求,例如是否接受PR,如何提交bug报告,以及是否接受资金支持,以提高效率,促进合作。

开发

爆款强化学习教材:数学基础与配套视频

2025-03-10
爆款强化学习教材:数学基础与配套视频

一本获得5000+星标的强化学习教材,以数学为基础,通俗易懂地讲解强化学习基本概念、问题和经典算法。书中包含大量示例,并配套中英文讲义视频(Bilibili和YouTube均有)。作者历时多年教学经验积累而成,适合本科生、研究生、研究人员和从业者学习。

开发

在AWS EKS上实现零停机部署的三个步骤

2025-03-10
在AWS EKS上实现零停机部署的三个步骤

Glasskube工程师Jakob分享了如何在AWS EKS上实现应用零停机部署的经验。文章深入探讨了AWS负载均衡控制器的工作机制,指出其在滚动更新过程中可能导致宕机的两个问题:健康检查延迟和Pod终止延迟。文章提出了三个解决方案:启用Pod就绪门,实现优雅的应用关闭,以及使用sidecar容器或在应用中添加终止延迟。通过这三个步骤,可以有效避免滚动更新期间的502/504错误,实现100%零停机部署。

开发 AWS EKS

Visual Studio:编程的挚友还是智力杀手?

2025-03-10

本文探讨了Visual Studio对程序员思维方式的影响。作者认为,虽然Visual Studio是程序员的好帮手,但其过度自动化和代码生成功能,例如IntelliSense,可能会降低程序员的编程能力和创造力,养成依赖工具的坏习惯。作者更偏爱纯代码编程,认为这能更好地锻炼思维和提升编程技巧。文章还回顾了编程工具的发展历史,并展望了Avalon(WPF)和XAML技术带来的变革。

开发 Visual Studio

arXivLabs:与社区协作者一起进行实验性项目

2025-03-10
arXivLabs:与社区协作者一起进行实验性项目

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

开发

程序员的福音:致敬强大的堆栈追踪

2025-03-10

本文探讨了程序调试中堆栈追踪的重要性。作者以Python为例,展示了堆栈追踪如何清晰地指示错误发生位置及调用过程。然而,现代编程语言(如Go、Rust)以及微服务架构下,堆栈追踪的获取和完整性面临挑战。虽然一些语言提供了解决方案,但仍需额外工作才能达到Python那样便捷的调试体验。作者呼吁重视堆栈追踪,认为其带来的便捷远超性能损耗。

开发 堆栈追踪

CPython性能提升的意外转折:LLVM回归引发的悬念

2025-03-10

CPython最近合并了一个新的字节码解释器实现策略,最初的基准测试显示性能平均提升了10-15%。然而,这项令人印象深刻的改进主要源于无意中规避了LLVM 19中的一个回归问题。与GCC或LLVM 19的特定优化版本相比,实际性能提升仅为1-5%。作者通过几周的编译、基准测试和反汇编,揭示了LLVM 19中尾调用复制的限制导致了性能回归。虽然尾调用解释器本身是一项有价值的改进,但这次事件突显了基准测试、性能工程和软件工程中存在的挑战,例如基准选择的难度以及对编译器优化的复杂性认识不足。

开发

虚拟打孔机:重温老式电脑的魅力

2025-03-10
虚拟打孔机:重温老式电脑的魅力

还记得上个世纪的打孔卡片吗?现在,你可以通过一个名为“虚拟打孔机”的在线工具,体验这种复古的编程方式。这个网站允许你输入文本,并将其转换为模拟的打孔卡片图像,支持多种卡片类型(如FORTRAN、COBOL),甚至包括二进制模式。它不仅是一个有趣的怀旧工具,也为开发者提供了一个学习早期编程方式的独特途径。

开发

拥抱开源Android应用:隐私、安全与自由的盛宴

2025-03-10

厌倦了封闭软件的广告和隐私担忧?试试开源Android应用!公开的源代码保证了透明度和安全性,你可以自行检查代码,确保没有恶意元素。开源应用通常更注重用户隐私,收集的数据更少,使用方式也更透明。更重要的是,你可以根据自身需求定制应用,强大的社区支持也保证了应用的持续改进。

开发

开源Windows兼容操作系统Free95:重拾经典,拥抱自由

2025-03-10
开源Windows兼容操作系统Free95:重拾经典,拥抱自由

Free95是一个开源的、兼容Windows的开放源码操作系统。它致力于提供一个友好易用的Windows环境,同时拥有开源社区的信任保障。你喜爱的Windows游戏和应用程序都能完美运行。该项目旨在摆脱Windows臃肿的系统和安全问题,并摆脱大型公司控制。Free95通过NT系统调用和Win32 API实现等技术实现兼容性。加入项目的方式很简单:提交Pull Request或者联系开发者dripkap_19416。你可以从源码编译操作系统,或从Releases下载二进制文件。

Structured:重新定义数据应用开发

2025-03-10
Structured:重新定义数据应用开发

Structured公司正在革新开发者构建和部署数据应用程序的方式,它将整个分析堆栈整合到代码中。针对数据密集型应用部署效率低下的现状,Structured开发了一个轻量级SDK,使开发者能够在数小时内完成原型设计、部署和管理数据应用程序(仪表板、内部工具)。公司寻求经验丰富的全栈工程师加入,参与核心SDK构建、交互式组件设计和性能优化等工作,使用Python、TypeScript、Next.js、React、Postgres、AWS/GCP等技术栈。

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

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

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

开发

Linux、FFmpeg和抽象的力量:如何构建可扩展的媒体框架

2025-03-09
Linux、FFmpeg和抽象的力量:如何构建可扩展的媒体框架

本文探讨了Linux和FFmpeg如何通过抽象和接口设计实现代码的可扩展性。Linux的“一切皆文件”理念,通过`file_operations`结构定义文件操作的通用接口,使得各种资源(网络套接字、特殊文件、USB设备)都能以统一的方式访问。FFmpeg也采用类似策略,使用`AVCodec`等抽象概念,方便添加新的编解码器和格式,例如DAV1d的集成过程就体现了这种设计的优势。文章通过Ruby、Go和C语言的示例代码,对比说明了不同编程语言下实现抽象接口的不同方式,最终强调了良好的软件设计在提高代码可维护性和扩展性方面的关键作用。

开发

苹果XNU内核中Exclave架构深度解析

2025-03-09
苹果XNU内核中Exclave架构深度解析

本文深入探讨了苹果XNU内核中Exclave的安全架构。Exclave通过构建一个两级内核表来管理资源,其中包含多个域(如com.apple.kernel),每个域包含多个资源(如服务、缓冲区)。Conclave作为一种特殊的资源,允许一组服务共享访问,并通过Conclave Manager进行控制。XNU新增了_exclaves_ctl_trap()系统调用,用于管理Exclave的各种操作,包括启动Conclave、查找服务和执行Downcall(安全世界代码执行)。Upcall则允许安全世界代码调用XNU内核中的特定功能。此外,文章还详细描述了Exclave的启动过程(三个阶段),以及SPTM内存类型系统如何为Exclave提供内存访问控制。

AI赋能:程序员不再惧怕大型复杂项目

2025-03-09

一位资深程序员在过去一年中有了显著变化:他不再害怕大型或复杂的项目,也不再被不熟悉的技术或编程语言吓倒。这得益于AI技术的进步。文章以他过去因项目复杂度而放弃的两个案例为例,对比了现在借助AI辅助编程的效率提升。作者仅用一小时就完成了以前需要六周才能完成的项目,并对未来充满信心,认为现在是从事编程工作的黄金时代。

开发

Go 语言最佳实践指南补充:风格一致性与代码规范

2025-03-09

本文档补充了 Go 语言官方风格指南,涵盖了拼写一致性(例如:`marshaling`而非`marshalling`)、句子间距、错误命名、品牌词大小写、注释风格、包命名以及方法接收器命名等细节。作者通过列举代码示例,并给出清晰的“正确做法”和“错误做法”对比,旨在帮助开发者编写更符合 Go 语言风格规范的代码,提升代码可读性和可维护性。

开发

C++/WinRT 的一个微妙的调用问题及解决方法

2025-03-09
C++/WinRT 的一个微妙的调用问题及解决方法

C++/WinRT 的一个 pull request 修复了 `winrt::impl::promise_base::set_completed` 中由于参数相关查找(ADL)导致的 `invoke` 函数调用歧义问题。由于 C++20 正式支持协程,导致查找范围扩大,意外找到了 `std::invoke`,而非预期的 `winrt::impl::invoke`。文章详细解释了 ADL 机制,并提供了针对旧版 C++/WinRT 的补丁方案:在 `winrt::Windows::Foundation` 命名空间中声明一个更匹配的 `invoke` 函数,从而引导编译器选择正确的函数。此补丁还包含一个静态断言,确保在升级 C++/WinRT 后自动失效。

开发 WinRT ADL

Fintech初创公司如何将数据平台基础设施成本降低70%

2025-03-09

一家金融科技初创公司面临着数据来源多样化、成本高昂的挑战。他们最初的数据平台依赖Hevo和BigQuery,成本居高不下。为了解决这个问题,他们构建了一个新的数据平台,采用ELT架构,利用便宜的S3存储原始数据,并通过Airflow、Debezium、Kafka和dbt进行数据处理和转换。他们还使用了Trino进行查询和Metabase进行可视化,最终将基础设施成本降低了70%。这个案例展示了如何通过合理的数据平台设计和技术选型来有效控制成本,并提高效率。

开发

开源矢量/光栅图形引擎Graphite:你的2D创作瑞士军刀

2025-03-09
开源矢量/光栅图形引擎Graphite:你的2D创作瑞士军刀

Graphite是一款免费开源的矢量和光栅图形引擎,目前处于alpha阶段。它结合了基于图层的合成和基于节点的生成式设计,提供完全无损的编辑工作流程。Graphite不仅仅是一个矢量编辑器,它更像一个游戏引擎,集成了各种功能,涵盖照片编辑、动态图形、数字绘画、桌面出版和视觉特效合成等。它欢迎图形程序员和Rust开发者贡献代码,并通过捐赠支持项目发展。Graphite的目标是成为一个业界标准的综合艺术和设计工具,为所有艺术家提供便捷的创作体验。

Rust 核心工具集 uutils:重写 GNU Coreutils 的五年征程

2025-03-09

在 FOSDEM 2025 上,Sylvestre Ledru 宣布其 Rust 编写的 GNU Coreutils 替代品 uutils 项目取得重大进展,几乎完成了对 100 多个核心 Unix/Linux 工具的重写。该项目始于疫情封锁期间,如今拥有 530 多位贡献者和超过 18000 颗 GitHub 星星。uutils 旨在提供更安全、更高效的替代方案,目前已通过 GNU coreutils 测试套件中的近 500 个测试,并被 Debian-based Apertis、Spectacles 智能眼镜和 Microsoft Visual Studio Code 等项目采用。Ledru 接下来计划将此 Rust 重写扩展到其他关键 Debian/Ubuntu 包,以应对 C 语言维护的挑战,并为新一代开发者提供更现代化的开发体验。

开发

TeX Live 2025 ISO 发布!

2025-03-09

TeX Live 2025 ISO镜像终于发布了!你可以通过多种方式获取它,例如直接下载(注意镜像同步需要时间,部分镜像可能尚未更新),或者通过种子文件下载。作者连续七年负责TeX Live ISO种子的创建和初始分发,并对TeX和LaTeX在过去近二十年里带来的高效和乐趣表达了由衷的感谢。

Infisical:招聘全栈工程师,共建开源秘密管理平台

2025-03-09
Infisical:招聘全栈工程师,共建开源秘密管理平台

Infisical,一个领先的开源秘密管理平台,正在招聘全栈工程师。你将参与构建和优化产品核心功能,维护基础设施,提升用户体验,并探索AI领域的秘密管理新方法。理想候选人需具备扎实的全栈技能,包括基础设施管理、Docker/Kubernetes、云原生架构(AWS优先)、TypeScript/Go等。这是一个快速发展的团队,你将有机会在未来18个月内影响数千用户,并最终拥有平台的特定部分。

开发
1 2 141 142 143 145 147 148 149 213 214