Dropbox工程职业发展框架详解
Dropbox发布了其工程职业发展框架,这份框架并非晋升清单,而是帮助工程师明确不同级别(例如软件工程师IC1至IC7)的职责和影响力范围,并定义了核心职责和专业技能。框架以业务影响力为核心,强调每个级别工程师应具备的结果、方向感、人才培养和团队文化方面的行为表现。工程师需要与管理者协商,设定季度目标,并根据框架指引,不断提升自身能力,创造长期影响力。
Dropbox发布了其工程职业发展框架,这份框架并非晋升清单,而是帮助工程师明确不同级别(例如软件工程师IC1至IC7)的职责和影响力范围,并定义了核心职责和专业技能。框架以业务影响力为核心,强调每个级别工程师应具备的结果、方向感、人才培养和团队文化方面的行为表现。工程师需要与管理者协商,设定季度目标,并根据框架指引,不断提升自身能力,创造长期影响力。
mitmproxy2swagger是一个强大的工具,可以自动将mitmproxy捕获的流量转换为OpenAPI 3.0规范。这意味着你可以通过运行应用程序和捕获流量来自动逆向工程REST API。它支持mitmproxy流量文件和浏览器开发者工具导出的HAR文件。使用它,你需要先用mitmproxy捕获流量,保存为文件,然后运行mitmproxy2swagger,指定输入文件、输出文件和API前缀。第一次运行会生成一个初始schema,你需要手动编辑它,移除不需要的路径。第二次运行会根据编辑后的schema生成完整的OpenAPI规范,包括示例数据(可选)。
Zasper 是一款为数据科学设计的全新 IDE,它以高并发性、低内存占用和极速运行著称。它完美支持类似 REPL 的数据应用程序,例如 Jupyter Notebook。目前,Zasper 已在 Mac 系统上得到全面支持,并在 Linux 系统上提供有限支持。与 JupyterLab 相比,Zasper 的 RAM 和 CPU 占用率分别降低了 75%。该项目由 Prasun Anand 创建,旨在提供一个免费、开源且可在本地运行的解决方案,充分利用现代电脑的资源。
Autodesk论坛宣布将删除十年以上的内容,引发开发者社区强烈抗议。大量宝贵的代码示例、解决方案和经验分享将不复存在,这对依赖论坛资源的开发者来说是巨大的损失。Autodesk解释称是为了优化搜索和用户体验,但开发者认为此举是“愚蠢的举动”,不仅破坏了社区的知识积累,也损害了与用户的长期关系。 许多开发者表示将转向其他平台,如TheSwamp和GitHub。
Kotaemon是一个开源的基于检索增强生成(RAG)的工具,允许你与自己的文档进行对话。它拥有简洁易用的界面,支持多种大型语言模型(LLM),包括OpenAI、Azure OpenAI等,也支持本地LLM。无论是最终用户进行文档问答,还是开发者构建自己的RAG管道,Kotaemon都能提供便捷的工具和可定制的界面。它支持多种文件类型,并提供高级功能,如多模态问答、复杂推理和可配置的设置。
Mercure是一个开源的、易于使用、快速、可靠且省电的实时通信解决方案,用于将数据更新推送到Web浏览器和其他HTTP客户端。它特别适用于发布通过Web API服务的资源的异步和实时更新,以及响应式Web和移动应用程序。Mercure协议及其参考实现均可在GitHub上找到,并提供Go语言编写的生产级服务器实现、各种库以及Docker镜像。此外,还提供一个托管的、高可扩展性的Mercure.rocks中心。
一位程序员在他的网站上写道:博客就像过时的商品,最终会腐烂;而维基则像一个无尽的深渊,等待着人们去探索和书写。他将自己的网站迁移到一个全新的维基系统,并分享了他对博客和维基的看法,以及他构建新网站的旅程。他认为维基更能体现内容的动态性和社区性,而博客则更像是一个静态的陈列橱。他邀请大家加入他的新维基,共同创造一个充满活力和变化的在线空间。
2024年对于AROS操作系统而言是丰收的一年。其核心系统Deadwood实现了32位和64位版本的重大更新,并开发了64位模拟器以兼容32位程序。AROS One和Tiny AROS两大发行版也进行了更新,提供了更完善的软件和游戏支持。硬件方面,推荐硬件列表得到扩展,并新增了A600GS。软件方面,Odyssey浏览器更新了WebKit引擎,Final Writer文本编辑器发布了新版本,并移植了众多经典游戏,例如Wipeout Rewrite和Doom 3。总之,AROS在2024年取得了显著进展,并为未来64位时代的到来奠定了坚实基础。
SvarDOS,一个基于DR-DOS的开源操作系统,近期完成了从FreeDOS发行版的转变,拥有了独立的EDRDOS内核。它可以运行在8086或8088 PC上,并具备网络功能的包管理器。虽然默认安装非常小巧,但其强大的软件仓库包含400多个包,包括网络驱动、编辑器、游戏等。SvarDOS需要更多手动配置,但其强大的功能和在线更新机制使其成为一个值得关注的复古操作系统。
本文探讨了软件工程中的“粘合性工作”(Glue Work)问题。这种工作虽然对团队效率至关重要(例如文档更新、技术债务处理),但却常常被忽视,导致负责此类工作的工程师在晋升时处于劣势。作者认为,公司不奖励粘合性工作是因为他们希望工程师专注于交付功能,而非提升整体效率。高效的策略是将粘合性工作战术化地应用于自身负责的项目,以确保项目成功,而非在所有项目中都投入大量时间。这并非消极的职场策略,而是基于大公司效率普遍较低的事实,以及公司增长优先于短期效率提升的考量。
最近使用Rails 8构建并部署了一个新应用后,我发现它对小型单人项目非常友好。新的入门指南非常出色,即使是新手也能轻松上手,并快速构建包含身份验证、缓存、富文本编辑器、持续集成和数据库的完整应用。Rails 8还简化了数据库设置,SQLite可以直接用于生产环境,无需额外配置PostgreSQL或Redis。此外,内置的CI配置和Github Actions的免费额度让持续集成变得异常简单。新的身份验证生成器也易于使用和理解,部署过程也变得轻而易举。总之,Rails 8让开发变得高效便捷,让小型项目的构建不再是难题。
ClearSpace 是一款旨在帮助用户减少手机使用时间的应用。它通过设置应用使用时间限制、阻止干扰应用、提供专注管理工具以及基于挑战的习惯养成机制等功能,帮助用户对抗手机成瘾。应用还包含屏幕时间报告、问责伙伴等功能,以促进用户养成良好的数字习惯,提升数字健康水平。
作者在处理大量矢量图形路径的联合运算时,发现Skia的内置优化函数性能瓶颈。最初的逐个路径联合方法效率低下,而Skia提供的路径构建器虽有优化,但仍不够快。作者深入分析Skia路径运算的内部机制,发现路径的曲线数量对性能影响巨大。通过分段处理路径联合,并采用分治法递归处理,大幅提升了效率,最终实现比Skia默认方法更快的路径联合。这其中一个令人惊讶的发现是:即使增加了联合运算的次数,通过分段和递归反而可以获得更快的速度。
作者在新的工作中,为了避免本地开发环境因众多服务和依赖项而变得混乱不堪,选择在macOS系统上使用虚拟机进行开发。他使用VMWare Fusion Pro运行Ubuntu 24.04虚拟机,所有开发工具和扩展程序都安装在虚拟机中,从而有效隔离了开发环境,提升了安全性。虽然牺牲了部分便利性,例如无法直接在虚拟机和主机之间复制粘贴,但整体体验非常流畅,并且虚拟机对主机性能的影响微乎其微。作者认为,这种方式在长期使用后,能显著提升系统的稳定性和安全性,值得推荐。
Meta开源了其大规模代码索引系统Glean,该系统能够高效地收集、处理和查询源代码信息,为开发者工具赋能。Glean采用独特的Angle查询语言,支持多种编程语言和自定义数据模式,并通过增量索引技术有效应对大型代码库的挑战。Glean已广泛应用于Meta内部,用于代码导航、代码搜索、文档生成等,极大地提升了开发效率。
一家公司将内部集成服务外包给SaaS提供商,后因成本原因决定自主研发替代系统SVC。优秀工程师X10独立完成了SVC的开发,但后续接手的团队却难以维护和修改系统,效率极低。文章分析了原因:软件开发的产出并非代码,而是工程师对系统及其业务逻辑的理解——一种“理论”。X10离职后,团队缺乏这种“理论”,导致系统维护困难,如同“鬼屋”。作者认为,软件设计应注重知识构建,方便后续团队理解和维护,避免成为“遗产系统”。
ComfyDeploy团队将他们的仪表盘从Next.js迁移到纯React,构建时间从3分钟缩短到18秒,热重载速度低于200毫秒。这源于Next.js在项目增长后带来的构建速度缓慢、测试API困难以及Vercel高昂的API费用等问题。迁移到React后,他们使用了TanStack Router和Rspack,提升了开发效率,并促使他们优化了API设计和代码结构。虽然放弃了Next.js的一些特性,但他们认为这种权衡是值得的,因为最终获得了更快的构建速度、更愉悦的开发体验和更优化的架构。
本文深入探讨了Common Lisp中时间处理的复杂性,以及作者开发的LOCAL-TIME库如何解决这些问题。文章回顾了人类对时间的表达方式的演变,从简略的、依赖语境的记法到精确的科学记法,并指出了政治因素(如夏令时)引入的混乱。LOCAL-TIME库采用了一种基于fixnum的、高效的时间表示方法,并整合了世界时区信息,能够处理各种时间计算和格式转换,从而避免了因时间表示不精确而造成的错误,例如臭名昭著的Y2K问题。
Ruby 3.4 发布了!博主Chris Sinjakli重点介绍了三个令人兴奋的新特性:首先是默认的块参数名称`it`,简化了代码;其次是实现了RFC8305(Happy Eyeballs Version 2),改进了TCP套接字连接处理,尤其在IPv4和IPv6双栈网络环境下表现出色;最后是更清晰的异常回溯,方便开发者调试。这些改进提升了开发效率和体验,展现了Ruby团队对开发者体验的重视。
API Parrot 是一款强大的工具,可以轻松逆向工程任何网站的 HTTP API。它内建 HTTP 代理,能记录网络流量,分析数据并识别相关端点,理解不同端点间数据的关系。用户可以自定义函数,指定输入输出参数,排除无关数据,并将自定义函数导出为 JavaScript 代码,方便集成到应用中。API Parrot 可用于自动化业务流程、系统集成和数据抓取,即使网站没有公开 API 也能轻松应对。
本文探讨了元编程(metalinguistic programming)的强大之处,特别是通过编写解释器来简化复杂问题的代码。作者以Lisp表达式简化为例,说明如何通过构建一个80行代码的Scheme解释器和30条规则,实现原本需要成千上万行代码才能完成的任务。这种方法的关键在于改变编程范式,将问题转化为数据驱动的规则匹配,从而避免了大量重复的代码。作者认为,这种元语言抽象虽然并非魔法,但它是一种强大的工具,值得进一步探索。
Eric Hellman 在 tilde.zone 上发布消息,提到他长期致力于开发的项目,并提示用户使用 Mastodon 网页应用需要启用 JavaScript,或者考虑使用 Mastodon 的原生应用。这暗示着该项目可能与 Mastodon 的网页端或用户体验改进有关。
Notion 是一款一体化工作区,将笔记、任务管理、Wiki 和数据库功能整合在一个平台上。它提供灵活且强大的工具,帮助你组织信息、管理项目、协作团队,并构建自定义的工作流程。无论是个人笔记还是团队协作,Notion 都能满足你的需求,提升你的工作效率。
Keeper,一家由Y Combinator孵化的为会计师提供软件的公司,正在招聘一名资深全栈工程师。该职位要求具备3年以上使用React和Node.js开发Web应用程序的经验,熟悉TypeScript、REST API、数据库等技术。Keeper为员工提供有竞争力的薪酬和股权,致力于帮助会计师更高效地管理工作。
ShredOS是一个基于Buildroot的轻量级Linux发行版,用于安全地擦除磁盘数据。它内置了nwipe工具,提供多种擦除方法,包括符合DoD 5220.22-M标准的算法,并支持多种处理器架构。ShredOS可从USB或CD启动,无需安装,界面友好,操作简便。此外,它还集成了一些磁盘工具,如smartmontools和hdparm,方便用户进行磁盘诊断和维护。
本文介绍了一种名为“螺旋法则”的技巧,可以帮助C程序员轻松理解复杂的C语言声明。该方法通过沿螺旋形方向逐个分析声明中的元素,并根据元素类型(数组、指针、函数等)进行替换,最终得到清晰易懂的解释。文章通过多个例子,详细演示了该方法的应用,包括简单的指针数组、指向函数的指针以及复杂的嵌套函数指针声明等,并解释了如何处理`const`和`volatile`关键字。
作者在两年内两次晋升为资深软件工程师,分享了宝贵经验。晋升的关键不在于技术能力有多强,而在于为公司创造价值,完成公司优先级高的项目。作者强调,要密切关注公司战略方向,积极参与重要项目,并获得管理层和团队成员的认可。 良好的经理支持也至关重要。 文章总结了晋升的关键因素,包括:完成公司重视的项目,不必过度关注指导和领导能力,拥有支持你的管理者。
Lucy 是一种用于描述有限状态机的简洁语言,它允许用单行代码表达复杂的事件、保护条件、动作和目标状态。Lucy 支持嵌套机器,从而创建分层状态机。它编译成 XState(一个优秀的 JavaScript 有限状态机库),支持 XState 的所有核心功能。此外,Lucy 使用 C 语言编写并编译成 WebAssembly,使其在 JavaScript 项目中速度极快(比之前的 JavaScript 编译器快 15 倍)。
近期,一款名为Ghostty的新终端模拟器发布了1.0版本。安全研究员David Leadbeater发现,Ghostty存在一个与2003年发现的CVE类似的安全漏洞(CVE-2024-56803),攻击者可利用终端的标题查询功能执行任意代码。该漏洞利用了终端内带信号的特性,以及Zsh在vi模式下的行为。攻击者可以通过精心构造的转义序列,在用户不知情的情况下执行恶意命令,甚至通过SSH连接进行远程攻击。Ghostty已发布1.0.1版本修复此漏洞,并建议用户升级或使用提供的缓解措施。
本文介绍了一种用于高吞吐量排序数据搜索的静态搜索树(S+树),其速度比二分查找快 40 倍。作者从 Algorithmica 的代码出发,通过一系列优化,包括向量化、SIMD 指令和批量处理,最终实现了显著的性能提升。优化过程涉及对汇编代码的深入分析,并尝试了多种树结构布局和内存布局策略,最终选择了一种高效的内存布局和查询策略,在 1GB 数据集上将查询时间从 1150ns 降低到 24ns。