分类: 开发

Meta三年晋升至Staff工程师:速度、视野和人际关系的成功秘诀

2024-12-14
Meta三年晋升至Staff工程师:速度、视野和人际关系的成功秘诀

本文讲述了Evan King如何在三年内从Meta的新毕业生晋升为Staff工程师的经历。他总结了六大成功秘诀:1.速度是倍增器,高效完成核心工作才能有时间提升;2.放眼全局,像更高职级的人一样思考和行动;3.勇于表达想法,没有人拥有全部答案;4.关注问题而非技术,寻求最简单的解决方案;5.积极帮助他人,建立良好的人际关系;6.保持积极乐观的心态。Evan的成功并非完全依靠个人能力,也受益于合适的时机和团队,但他总结出的这些经验对所有渴望职业发展的工程师都具有借鉴意义。

开发 晋升

Clojure异常处理:没有银弹,只有选择

2024-12-14

Clojure的异常处理风格多样,没有单一最佳实践。文章探讨了多种方法:抛出原生异常、使用`ex-info`携带数据、返回错误map,以及利用各种库实现更复杂的错误处理流程,如`anomalies`库或`pact`、`failjure`等。作者强调,选择何种方法取决于具体场景,甚至在一个项目中可以混合使用。开发者需根据自身需求选择最合适的方案,Clojure赋予了开发者充分的自由。

开发

HTMX v2.0.4 更新日志:修复和改进

2024-12-14
HTMX v2.0.4 更新日志:修复和改进

HTMX v2.0.4 版本更新日志涵盖了大量错误修复和改进。该版本主要关注提升稳定性和兼容性,包括修复嵌套Shadow DOM问题、改进`hx-boost`在表单中的行为、增强对Web Components和Shadow DOM的支持,以及更新多个扩展以提高性能和可靠性。此外,还对`htmx.ajax`函数进行了调整,并对`hx-trigger`事件处理机制进行优化。

开发

程序员导师用Shell脚本改进学生论文写作

2024-12-14

一位博士生导师为了帮助学生提高论文写作水平,编写了三个Shell脚本,分别用于检查被动语态滥用、空洞词语和重复词语。这些脚本集成到LaTeX文档的构建系统中,帮助学生们在写作中做出更清晰、更精确的选择,而非盲目遵循语法规则。导师认为,程序员可以利用自动化工具来克服写作中的个人弱点,并推荐了《风格:清晰与优雅的基础》等书籍作为写作参考。

开发 论文写作

macOS 15.2系统复制功能故障:用户面临数据备份难题

2024-12-14

macOS 15.2更新后,系统复制功能出现严重故障,导致数据备份过程中出现资源繁忙错误,无法复制Preboot或Recovery分区。开发者Dave Nanian在博客中指出,此问题源于苹果公司自身代码的错误,目前没有有效的解决方案,只能依靠第三方备份软件进行“备份-所有文件”的完整备份,再进行系统重装和数据恢复。该问题给用户带来极大不便,尤其在节假日临近之际,更令人沮丧。

开发 macOS 15.2

Rust 语言下的多模式路线规划项目 Farebox

2024-12-14
Rust 语言下的多模式路线规划项目 Farebox

Farebox 是一个使用 Rust 语言编写的快速 RAPTOR 实现的多模式路线规划项目,旨在为内存受限的机器提供服务。它基于 Valhalla 进行换乘和首末公里路线规划,支持多机构和时区感知路由。该项目的目标是作为 OpenTripPlanner 的补充,用于覆盖 OpenTripPlanner 实例未覆盖的区域。通过内存映射处理时刻表,力求实现单实例覆盖全球,并降低托管成本。未来计划支持 GTFS-RT,并考虑支持 rRAPTOR 路由选项,以实现跨多种出发时间的行程同时计算。

开发 RAPTOR

Luon编程语言:静态类型Lua的诞生

2024-12-14
Luon编程语言:静态类型Lua的诞生

Luon是一种新型静态类型编程语言,其语法类似于Oberon系列语言,并融合了Lua的特性,目标平台为LuaJIT虚拟机。它可以被视为Lua的静态类型版本,允许通过外部声明调用Lua和C库函数。Luon解决了Lua在编译时错误检查、代码结构等方面的不足,并提供了一个集成的编译器和IDE,支持过程式、泛型和面向对象编程。项目包含丰富的示例和测试用例,并且持续更新中。

开发 静态类型

SCCS:50年后,源代码旅馆的传奇

2024-12-13

本文回顾了源代码控制系统SCCS 50 年来的影响。作者Larry McVoy详细解释了SCCS独特的编织格式,这种格式允许通过引用进行合并,避免了其他系统中基于补丁的复制方式的低效。他解释了SCCS如何利用编织格式在恒定时间内检索任何版本的文件,并保留跨版本的作者信息。尽管SCCS存在一些缺点,例如长期锁定和文件导向,但其编织格式的效率和对作者信息的保留使其成为一个具有开创性的系统,并为后来的版本控制系统如BitKeeper奠定了基础。

Rails 应用中的六边形架构:解耦之道

2024-12-13
Rails 应用中的六边形架构:解耦之道

本文探讨了如何在Rails应用中应用六边形架构(Ports and Adapters模式)。作者起初对该模式感到困惑,直到意识到“适配器”直接指代四人帮设计模式中的适配器模式才豁然开朗。文章详细解释了入站和出站端口的概念,以及如何使用适配器解耦应用逻辑和外部服务(如数据库、日志、邮件服务等)。作者指出,Rails框架本身可以作为HTTP适配器,但需要避免直接使用ActiveRecord等框架组件,而是通过自定义的Repository模式来访问数据,从而实现更好的解耦和可维护性。最终,作者鼓励Rails开发者采用六边形架构,以构建更健壮、更易于维护的应用。

旧智能手机变身Kubernetes集群节点:postmarketOS赋能

2024-12-13
旧智能手机变身Kubernetes集群节点:postmarketOS赋能

作者利用闲置的旧智能手机,通过postmarketOS系统,构建了一个功能完善的Kubernetes集群。文章详细介绍了这一过程,包括选择旧手机的原因(强大的计算能力、内置电池)、postmarketOS系统的优势(基于Alpine Linux,使用主线Linux内核)、以及在配置过程中遇到的挑战(内核模块、网络配置等),并提供了详细的解决方案。最终,作者成功将旧手机变为Kubernetes集群节点,实现了资源的有效利用和环保目标。

绕过Windows内核缓解措施:Violet Phosphorus利用详解

2024-12-13

本文深入探讨了如何绕过Windows 10和11中的现代内核缓解措施,例如SMEP和VBS。作者详细介绍了一种名为Violet Phosphorus的通用VBS/SMEP绕过技术,并提供了相应的PoC代码和ROP链。文章首先解释了SMEP和VBS的工作原理,然后通过利用HackSysExtremeVulnerableDriver驱动程序中的漏洞,演示了如何利用ROP gadgets和MiGetPteAddress函数来修改页表项,从而实现内核代码执行。最后,作者还分享了如何使用Kristal-G的SYSRET shellcode从内核返回用户模式。这篇文章对内核漏洞利用和安全研究人员具有重要的参考价值,属于开发类文章。

Node.js EPUB 库 @smoores/epub 发布

2024-12-13
Node.js EPUB 库 @smoores/epub 发布

一个名为 @smoores/epub 的 Node.js 库正式发布,它能够检查、修改和创建 EPUB 3 出版物。该库提供了高级 API,简化了 EPUB 规范的实现细节,例如设置标题和获取作者信息;同时也提供了低级 API,允许更精细地控制 EPUB 结构,例如添加章节和元数据。@smoores/epub 基于 fast-xml-parser,提供了强大的 XML 解析和操作功能,方便开发者处理 EPUB 文件的 XML 内容。

开发 EPUB

定期重启服务器:预防胜于治疗

2024-12-13

一家大学的研究团队面临一个棘手的系统管理员问题:服务器运行时间过长,需要重启,但频繁重启会影响用户体验。他们通常避免重启,但这次因服务器长时间运行而不得不进行大规模重启。为了避免类似情况再次发生,他们决定制定一个年度重启计划,每年至少重启三次,以配合学校的教学时间表,从而在预防潜在问题与保证用户体验之间取得平衡。

开发 定期重启

并发循环垃圾收集:Rust 实现 Scheme 的垃圾回收智能指针

2024-12-13

本文介绍了如何在 Rust 中实现一个并发循环垃圾收集器,用于 Scheme 解释器中的垃圾回收智能指针 Gc。Gc 类似于 Arc>,支持内部可变性、克隆和跨线程发送。文章详细讲解了 Gc 的实现,包括线程安全内部可变性、使用信号量和读写锁的实现,以及基于 Bacon 和 Rajan 算法的并发循环垃圾收集的实现细节,包括追踪特性、周期检测和处理并发修改的机制。

开发

HyperDX招募全栈、前端和后端工程师

2024-12-13
HyperDX招募全栈、前端和后端工程师

Y Combinator孵化的HyperDX公司正在招聘全栈、前端和后端工程师。HyperDX致力于构建一款开源、开发者友好的可观察性平台,旨在替代Datadog和New Relic等工具,帮助工程师更快地找到生产环境故障原因。该公司提供具有竞争力的薪酬和远程工作机会,对经验丰富的工程师开放。

开发 可观察性

创客自制激光射击游戏:从乐高游乐设施到ESP32驱动的万圣节狂欢

2024-12-13
创客自制激光射击游戏:从乐高游乐设施到ESP32驱动的万圣节狂欢

作者受到乐高埃及探险游乐设施的启发,决定制作一款类似的射击游戏。他利用廉价的ESP32微处理器、红外激光枪和自制目标,成功打造了一个万圣节主题的射击游戏。过程中,他学习了Arduino和MicroPython编程,并克服了硬件连接、供电、通信等挑战,最终在学校和自家举办的活动中获得了成功。未来,他计划改进目标设计、灯光效果和电路板等方面,提升游戏体验。

开发

新型哈希函数Rain Hashes强势来袭,速度与安全兼具

2024-12-13
新型哈希函数Rain Hashes强势来袭,速度与安全兼具

DOSAYGO Research团队发布了新型哈希函数Rain Hashes,包含Rainbow和Rainstorm两种算法。Rainbow算法速度极快,适用于通用场景,其C++实现已通过SMHasher3测试,代码简洁高效。Rainstorm算法则更注重安全性,虽然未经正式安全审计,但设计理念借鉴了密码学哈希函数,提供64到512位多种输出。该项目提供C++、WASM以及Node.js版本,并附带命令行工具和基准测试,方便开发者使用和评估。

Web Origami:一种简化网站构建的全新编程语言

2024-12-13

Web Origami 是一种新型编程语言,旨在简化中小型网站的构建。它以简洁的语法,结合 HTML 和 CSS,让用户可以用类似电子表格公式的方式描述网站结构,并通过简单的程序将数据和文件转化为 HTML 等网站资源。即使不懂 JavaScript,也能创建全文搜索、RSS 订阅等功能。Origami 提供命令行界面、内置函数和异步树库,并支持 JavaScript 扩展。其核心思想是将网站构建过程抽象成数据转换,使创建和部署网站变得高效、低成本且易于理解。

开发 Web Origami

Dart/Flutter弱PRNG引发的安全漏洞

2024-12-13
Dart/Flutter弱PRNG引发的安全漏洞

Zellic的研究揭示了Dart/Flutter中弱伪随机数生成器(PRNG)导致的多个安全漏洞。由于Dart SDK中`Random()`函数的初始化方式存在缺陷,导致生成的密钥熵不足,容易被暴力破解。这使得攻击者能够通过简单的代码轻易获得Dart Tooling Daemon的访问权限,从而读取或写入工作区文件,甚至执行任意代码。此外,Proton Wallet和SelfPrivacy项目也因使用了该弱PRNG而受到影响,分别存在加密漏洞和可预测密码问题。该漏洞已修复,但提醒开发者应谨慎使用`Random()`函数,并在需要安全随机数时使用`Random.secure()`。

开发

颠覆性设想:将Magit理念应用于jj版本控制系统

2024-12-13

作者提出了一种新颖的思路,将Emacs的Magit版本控制界面(以文本文件为UI)应用于新兴的jj版本控制生态系统。文章指出,Magit的文本化UI具有高效性和可移植性,通过LSP协议,可以在多种编辑器中实现类似Magit的体验,避免重复开发。作者设想通过生成特定文本文件(如.jj/status.jj),并利用LSP的语义标记、折叠范围和跳转定义等功能,实现与Magit类似的版本控制操作,最终目标是创建一个跨平台、高效的jj版本控制用户界面。

开发 jj Magit

最终一致性:分布式系统中的挑战与模式

2024-12-13
最终一致性:分布式系统中的挑战与模式

在分布式系统中,最终一致性是无法避免的。文章探讨了四种处理最终一致性的常用模式:基于事件的最终一致性、后台同步最终一致性、基于Saga的最终一致性以及基于CQRS的最终一致性。每种模式都各有优劣,例如基于事件的模式强调系统松耦合和可扩展性,但一致性需要时间;而基于Saga的模式则适用于复杂的长事务,通过补偿事务保证最终一致性。选择合适的模式取决于系统的具体需求和权衡。

Ruby 调试技巧:从 puts 到专业工具

2024-12-13
Ruby 调试技巧:从 puts 到专业工具

JetBrains RubyMine 博客文章深入探讨了 Ruby 代码调试的各种方法,从简单的 puts 语句到交互式控制台(IRB 和 Pry)再到强大的调试器(byebug、debug 和 RubyMine 调试器)。文章通过一个真实的 bug 案例,阐述了不同工具的优缺点,并指导开发者选择合适的调试工具,提升调试效率。文章强调,有效的调试不仅在于修复错误,更在于深入理解代码,编写更健壮的 Ruby 代码。

Rust编译器:基于查询的增量编译架构

2024-12-13

Rust编译器为了解决传统流水线式编译带来的效率问题,采用了基于查询的增量编译架构。该架构将编译过程分解成一系列相互依赖的查询,并利用编译数据库缓存中间结果,从而只重新计算必要的代码部分。这类似于构建系统的依赖管理机制,显著提升了编译速度,尤其在IDE集成等场景下效果显著。虽然该架构引入了复杂性,但相比传统方法的逐步改进,它为Rust带来了更稳定、高效的增量编译体验,目前已成为开发构建的默认模式。

开发 增量编译

C++代码重构:技巧与最佳实践

2024-12-13
C++代码重构:技巧与最佳实践

本文介绍了C++代码重构的常用技巧和最佳实践。重构是指在不改变代码功能的前提下,改进代码的可读性、效率和可维护性。文章涵盖了重命名变量和函数、提取函数、简化条件语句、优化循环以及消除代码重复等技术,并强调了使用IDE自动重构工具的重要性,以及逐步重构、使用版本控制系统和自动化测试等最佳实践。 通过这些方法,可以有效减少技术债务,提升代码质量。

开发

Git项目陷入Rust语言引入困境

2024-12-13

Git项目内部就是否引入Rust语言展开了激烈的讨论。支持者认为Rust的内存安全性和易于重构等特性将提升Git的安全性及开发效率。然而,反对者担忧引入Rust会影响Git对NonStop等特定平台的支持,并限制其长期发展。NonStop平台在金融领域广泛应用,其对Git的依赖关系以及缺乏Rust编译器使得这一问题变得复杂。最终,讨论未能达成一致,Git项目面临着在广泛平台支持和提升安全性及开发效率之间的艰难抉择。

2
开发 平台支持

Trinity桌面环境R14.1.3发布,轻量高效,支持旧硬件

2024-12-13

Trinity桌面环境(TDE)项目团队发布了R14.1.3版本,这是一个轻量级的、免费的桌面环境,旨在为偏好精简高效体验的用户提供服务。该版本支持多种Linux发行版、BSD和DilOS,对系统要求低,非常适合旧硬件。R14.1.3包含诸多改进,例如集成XDG桌面门户API、新的触控板设置模块、新的主题和颜色方案,以及对各种应用程序和编程语言(如Python 3.13)的支持。该项目呼吁用户捐赠以支持其持续发展。

Elixir/Erlang 热代码替换:实现零停机部署

2024-12-13

本文深入探讨了 Elixir/Erlang 的热代码替换技术,这种技术允许在运行时加载和卸载代码,无需重启系统即可升级应用。文章通过一个简单的 KV 模块示例,演示了如何手动进行热替换,并介绍了 iex 的 c/1 和 r/1 命令以及 Relups 工具,用于更便捷地管理应用和发行版升级。 文章最后阐述了 Erlang 应用、发行版、appups 和 relups 的概念,并详细讲解了使用 Distillery 工具生成应用发行版和升级发行版的方法,最终实现零停机部署,有效避免服务中断。

驯服大型语言模型:开源软件实用指南

2024-12-12

本书《驯服大型语言模型》深入探讨了构建基于大型语言模型(LLM)的应用过程中工程师和技术产品经理面临的关键局限性和实现陷阱。它并非只关注LLM的能力,而是着重于实际问题,例如处理非结构化输出、管理上下文窗口以及控制成本等。书中提供了可复现的Python代码示例和经过实战检验的开源工具,帮助读者理解并解决这些问题,从而更好地利用LLM的强大功能,避免其固有局限性。

Stripe排查DNS错误峰值:一次复杂的网络调查

2024-12-12
Stripe排查DNS错误峰值:一次复杂的网络调查

Stripe公司近期遭遇了DNS错误峰值,文章详细描述了他们如何利用Unbound、tcpdump、iptables等工具追踪问题根源。调查发现,Hadoop集群中一个分析网络日志的作业,因大量反向DNS查找请求(PTR记录)并重试机制导致流量放大,最终超过了AWS VPC解析器的处理能力限制。Stripe通过调整Unbound转发配置,将负载分散到各个Hadoop主机,有效解决了问题。这个案例强调了完善监控和多角度排查的重要性,以及在高可用系统中应对流量激增的策略。

开发 故障排查
1 2 206 207 208 209 210 211 213