分类: 开发

Verona 的基于进程的沙箱:安全地运行不受信任的代码

2025-02-10
Verona 的基于进程的沙箱:安全地运行不受信任的代码

Verona 项目开发了一个基于进程的沙箱机制,用于安全地执行不受信任的外部代码。该沙箱利用进程隔离,无需修改操作系统,即可在共享内存区域中运行不受信任的库,并通过精心设计的IPC机制与可信的父进程进行交互。该机制支持回调函数和系统调用模拟,保证了父进程的安全,即使沙箱内部代码被攻破,也无法访问父进程的内存或系统资源。目前,该沙箱支持 Capsicum 和 seccomp-bpf 等沙箱技术,并致力于提高效率和兼容性。

开发 沙箱 Verona

Rust vs. Ada:内存安全之战

2025-02-10

本文比较了Rust和Ada在防止常见的内存错误方面的能力。Rust在阻止内存错误方面表现更好,但Ada避免动态内存分配和支持形式化正确性证明的特性使其能够完全避免许多常见错误。文章详细分析了内存泄漏、缓冲区溢出、使用后释放、双重释放和竞争条件等常见内存错误,并比较了两种语言如何处理这些错误。虽然Rust的编译时检查更严格,Ada凭借其静态分析能力和对指针的严格控制,在安全性方面也毫不逊色。最终,作者认为两种语言各有千秋,Rust更注重编译时安全,Ada更注重避免错误的发生。

开发

七宗罪:避免架构图设计的常见错误

2025-02-10
七宗罪:避免架构图设计的常见错误

本文列举了七个在创建技术架构图时常见的错误,并提供了相应的改进建议。这些错误包括:创建理论而非具体的架构图;混合抽象层次;包含过多重叠的关注点;箭头未标记;构成具有误导性;缺少上下文;缺少补充说明文本。文章强调了清晰、准确地传达系统信息的重要性,并建议使用多个图表来解决信息过载的问题,以及在图表中添加标签和解释性文本,以提高架构图的可理解性和有效性。

开发 技术图表

Frupidity:生产力和创新的隐形杀手

2025-02-10
Frupidity:生产力和创新的隐形杀手

节俭是美德,但过度节俭(Frupidity)却可能扼杀生产力和创新。文章以一个名为PennyTech的公司的案例为例,说明了公司为了节省成本而忽视工程师效率和士气,最终得不偿失。Frupidity的表现形式多种多样,例如购买廉价硬件、削减云计算成本导致性能下降、限制差旅预算导致效率低下等。文章指出,真正的效率在于明智的投资,而不是盲目节省,并建议企业重视工程师的时间成本,避免因小失大。

开发

告别静态生成器:我的博客用原生HTML编写

2025-02-10

我厌倦了静态网站生成器不断更新换代带来的兼容性问题。我的博客经历多次迭代,最终选择使用原生HTML编写,辅以md-block解析Markdown和highlight.js实现语法高亮。浏览器内置的音视频播放器和HTML的持久性,让我摆脱了主题适配的困扰,确保博客内容的长期可用性。

开发

致谢Bootstrap:一个开发者的心声

2025-02-10

作者在个人项目中大量使用Bootstrap,特别是用于Anki Books和Larder两个项目。他赞扬Bootstrap简化了交互式UI小部件的创建,并分享了在Larder项目中使用Bootstrap颜色变量自定义主题的经验。作者将Bootstrap的主题色设为变性人旗帜的颜色,并对结果感到满意。他特别提到Bootstrap节省了大量工作,只需修改少量CSS变量就能轻松改变网站整体颜色风格,避免了复杂的色彩设计工作。

开发

py3-TTS-Wrapper: 一款强大的跨平台文本转语音工具

2025-02-10
py3-TTS-Wrapper: 一款强大的跨平台文本转语音工具

py3-TTS-Wrapper是一个Python库,它提供了一个统一的接口,可以轻松地与多个文本转语音(TTS)服务集成,例如AWS Polly、Google TTS、Microsoft Azure TTS等。它支持SSML,允许自定义语音、语言、音量、音调和语速,并提供流式播放、文件输出等功能。该库还支持离线引擎,例如eSpeak-NG和PicoTTS。无论你是需要在项目中集成TTS功能,还是想探索不同的TTS引擎,py3-TTS-Wrapper都是一个不错的选择。

开发

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

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

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

开发

终端用户痛点调查:资深用户也头疼

2025-02-09

一项针对1600名终端用户的调查揭示了他们长期使用终端后仍然面临的诸多痛点。资深用户(40%使用终端21年以上)普遍反映,记忆命令语法(awk、jq、sed等)、快捷键(tmux、文本编辑器等)以及处理不同系统(OS差异、编辑器差异等)的差异是主要困扰。此外,颜色配置、复制粘贴(跨SSH、tmux等)、工具发现难度、陡峭的学习曲线、Shell历史管理以及文档匮乏等问题也频繁出现。调查结果表明,即使是经验丰富的用户,也仍在与终端的诸多细节问题作斗争,这凸显了改进终端用户体验的必要性。

从Python工具到网页应用:三天血泪史

2025-02-09
从Python工具到网页应用:三天血泪史

作者花了三天时间,尝试将一个简单的Python工具转换为网页应用,最初尝试使用Flask和Bottle框架,但最终因为CORS问题和异步请求的复杂性而放弃。作者尝试使用JavaScript的Fetch API和Node.js搭建REST API,但发现维护成本过高,最终回到最初的Bottle应用,虽然用户需要等待请求完成,但代码简洁易维护。这个故事说明了技术选型的重要性,有时简单的方案才是最佳方案。

开发

PostgreSQL最佳实践:构建强大可靠的数据库系统

2025-02-09
PostgreSQL最佳实践:构建强大可靠的数据库系统

本文总结了PostgreSQL数据库的最佳实践,涵盖数据库设计、性能优化、安全、备份恢复、维护监控以及开发实践等方面。从命名规范、模式设计到索引策略、查询优化,再到访问控制、密码策略、备份策略以及监控指标,文章提供了详尽的指导,并辅以代码示例,帮助开发者构建一个健壮、高效、安全的PostgreSQL数据库系统。 文章还强调了高可用性配置,包括复制设置和负载均衡,确保数据库系统的可靠性和可扩展性。

开发

Ada/SPARK年度最佳代码库奖项揭晓

2025-02-09
Ada/SPARK年度最佳代码库奖项揭晓

2024年Ada/SPARK年度最佳代码库奖项结果公布!Lionel Draghi凭借其命令行工具BBT(黑盒测试器)荣获Ada最佳代码库奖。BBT使用易于理解的Markdown格式行为规范,实现自动化测试。Kevin Chadwick的日志库elogs凭借其内存安全特性(SPARK银牌认证)赢得SPARK最佳代码库奖,并支持自定义消息长度。Brent Seidel的嵌入式Lisp解释器bbs_lisp则摘得嵌入式最佳代码库奖,展现了Ada在嵌入式系统中的强大优势。

开发 SPARK

Rust入侵Linux内核:一场旷日持久的“圣战”?

2025-02-09
Rust入侵Linux内核:一场旷日持久的“圣战”?

Rust语言正试图攻占Linux内核,但这场“革命”注定漫长。尽管Rust在内存安全方面拥有显著优势,并得到Google等巨头的支持,但在Linux内核社区内部却引发了激烈的争议。一部分维护者对Rust的陡峭学习曲线和与C语言的整合问题表示担忧,甚至出现了“宗教战争”般的对抗。然而,Rust阵营也获得了众多支持者,他们认为Rust能提升内核的稳定性和安全性,吸引更多开发者参与。最终,Rust能否完全取代C语言,仍取决于技术的成熟度和社区的共识。

开发

在Steam Deck上使用Nix和Home Manager管理软件包

2025-02-09
在Steam Deck上使用Nix和Home Manager管理软件包

Steam Deck的不可变文件系统使得安装在系统升级后仍然存在的软件包变得棘手。本文介绍如何使用Nix和Home Manager巧妙地解决这个问题。Nix是一个声明式包管理器,通过配置文件列出所需软件包即可安装。Home Manager则简化了Nix的使用。文章详细讲解了在Steam Deck上安装Nix和Home Manager的步骤,以及如何使用它们来安装、管理和删除软件包,并提供了一些实用技巧,例如创建桌面快捷方式和定期运行垃圾回收。

开发

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

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

arXivLabs是一个开放平台,允许开发者与arXiv社区合作,直接在arXiv网站上开发和分享新功能。参与者必须遵守arXiv的开放性、社区性、卓越性和用户数据隐私等核心价值观。如果你有提升arXiv社区价值的项目创意,欢迎了解更多关于arXivLabs的信息。

开发

API请求签名:安全陷阱与最佳实践

2025-02-09

本文深入探讨了API请求签名的安全挑战,特别是JSON对象签名中的难题。作者指出,简单的HMAC签名虽然安全,但直接在JSON对象内部签名会引发各种问题,例如JSON的多种等价表示导致签名验证失败。文章对比分析了多种签名方法,包括规范化JSON、添加冗余签名数据以及使用替代格式等,并以AWS和Flickr的签名方案为例,说明了错误实践可能带来的安全风险。最终,作者建议优先使用TLS,并尽量避免在JSON对象内部进行签名,而是采用外部签名的方式,以确保API请求的安全性。

PostgreSQL 高并发下的诡异问题及解决方案

2025-02-09
PostgreSQL 高并发下的诡异问题及解决方案

本文总结了高增长初创公司在使用 PostgreSQL 数据库时遇到的常见问题,例如锁竞争、索引膨胀、TOAST 存储等。作者针对每个问题提出了多种解决方案,包括调整数据库参数、使用并发工具、优化数据访问模式等。文章还讨论了垂直和水平扩展、追加式表与更新密集型表、DDL 变更、版本升级以及多租户等高级主题,并提供了相应的解决方案和注意事项。 通过本文,读者可以学习到如何有效地解决 PostgreSQL 在高并发场景下的性能瓶颈,并提升数据库的可扩展性。

开发

Kanata:跨平台键盘映射器,让你的键盘更舒适

2025-02-09
Kanata:跨平台键盘映射器,让你的键盘更舒适

Kanata 是一款跨平台的键盘重新映射软件,支持 Linux、macOS 和 Windows。它允许你创建多层键盘功能,自定义按键行为(例如点按保持、宏、Unicode 字符)。该项目受到 kmonad 的启发,但使用 Rust 编写,并提供更广泛的平台支持和更易于使用的界面。Kanata 的目标是将 QMK 的强大自定义功能带给所有键盘用户,无论其硬件如何。

开发

世代垃圾回收的价值主张:一个令人困惑的实验

2025-02-09

作者进行了一系列实验,以验证世代垃圾回收的性能优势。然而,结果出乎意料:在不同的基准测试中,世代垃圾回收反而比整堆垃圾回收花费更多时间。文章探讨了多个可能原因,包括写屏障的开销、苗圃大小的选择、基准测试的代表性以及垃圾回收频率等。作者承认目前尚无明确结论,并计划进一步研究以找出原因。

开发

用僵尸启示录理解细胞式架构

2025-02-09
用僵尸启示录理解细胞式架构

本文用一个生动的僵尸围城故事来解释细胞式架构。作者将城市比作一个系统,每个街区作为独立的“细胞”,即使一个街区沦陷,也不会导致整个城市崩溃。这种隔离策略,如同细胞式架构的设计理念,能够有效降低单点故障的影响,保证系统的稳定运行。通过这个例子,文章清晰地阐述了细胞式架构的优势和重要性。

GPU中的条件分支:误解与真相

2025-02-09

本文揭穿了一个长期存在于计算机图形学领域的误解:GPU中的三元运算符并非条件分支。作者通过代码示例和汇编代码分析,指出三元运算符或if语句在GPU中实现的是条件移动指令,而非改变指令指针的分支跳转。这种条件移动指令效率更高,而使用step()函数进行的“优化”反而会降低性能。文章呼吁纠正这一长达20年的误解。

开发

FlashLearn示例目录:快速上手AI模型

2025-02-09
FlashLearn示例目录:快速上手AI模型

FlashLearn提供了一系列示例脚本,方便用户快速上手其AI模型。只需安装FlashLearn、设置API密钥,然后运行提供的Python脚本(例如sentiment_classification.py),即可体验情感分类等功能。运行结果将输出到控制台和results.jsonl文件中。

开发 FlashLearn

枯燥的魔法:在科技行业中拥抱“重复性工作”

2025-02-09
枯燥的魔法:在科技行业中拥抱“重复性工作”

本文以一个魔术表演为引子,讲述了在科技行业取得成功的秘诀:拥抱枯燥的“重复性工作”。魔术师通过花费大量时间整理成百上千盒茶叶,并在每包茶叶中放入同一张扑克牌,最终完成看似不可能的魔术表演。这与科技行业中一些看似无法解决的问题异曲同工。作者以自身经历为例,讲述了如何通过处理两千多个未分类的bug报告,最终扭转项目困境的故事。他花了数周时间整理、分类和优先排序这些报告,最终使团队得以高效解决问题。文章强调,有时看似不可能完成的任务,只需要我们愿意去做那些枯燥乏味的工作,就能创造出“魔法”般的效果。

无需付费,远程访问Home Assistant:ZeroTier 的妙用

2025-02-09

文章介绍了如何使用免费的ZeroTier服务远程访问Home Assistant,即使没有公网IP地址。作者首先解释了为什么许多家庭无线网络用户无法直接远程访问其家庭服务器,然后详细介绍了ZeroTier的配置步骤,包括账户创建、虚拟网络创建、Home Assistant插件配置以及手机端连接。最后,作者提醒ZeroTier依赖第三方基础设施,建议长期方案还是获取公网IP并搭建VPN。

开发 ZeroTier

LLM对软件工程师的影响曲线

2025-02-09
LLM对软件工程师的影响曲线

本文探讨了大型语言模型(LLM)对不同经验水平的软件工程师的影响。作者认为,LLM 的效用呈现曲线变化:初级工程师受益最大,LLM 可帮助他们快速学习和解决问题;中级工程师的提升较为有限,LLM 无法处理复杂问题;高级工程师的提升最小,他们更依赖自身经验;而资深工程师则可以利用 LLM 快速创建概念验证项目。总而言之,LLM 的影响取决于工程师的经验水平和工作任务,并非万能药。

开发

daily-notes.nvim:强大的Neovim周期性笔记插件

2025-02-09
daily-notes.nvim:强大的Neovim周期性笔记插件

daily-notes.nvim是一个Neovim插件,用于创建用于日记和计划的周期性笔记,灵感来自Obsidian的同名功能和Journal.nvim。该插件支持自定义日期格式、多种日期解析策略,并提供:DailyNote和:FuzzyTime命令方便用户创建和管理笔记。它支持每日、每周笔记,并能处理各种模糊日期表达,例如“下周二”、“两周前”等。该插件目前主要在Arch Linux上测试,但应该也适用于其他UNIX系统。

开发

Go语言接口:编译时静态检查,运行时动态调度

2025-02-09

Go语言接口是其最令人兴奋的特性之一,它巧妙地结合了静态类型检查和动态调度。本文深入探讨了Go编译器(gc)中接口值的实现细节,包括接口值在内存中的表示、itable(接口表)的生成和缓存机制,以及针对不同数据大小的内存优化策略。通过代码示例和图示,作者清晰地解释了Go如何实现编译时类型安全和运行时高效的接口调用,并与其他语言的接口实现方式进行了比较,凸显了Go接口的独特之处。

开发

工程管理的幕后:一位工程经理的反思

2025-02-09
工程管理的幕后:一位工程经理的反思

本文是一位工程经理的个人反思,分享了他多年来的经验教训和挑战。文章强调了工程管理不仅仅是技术管理,更是人员管理。优秀的工程经理需要了解团队成员的个性,平衡个人目标与组织目标,并营造积极的工作氛围。文章还探讨了技术选型、团队建设、风险管理等方面,并通过多个案例阐述了如何更好地管理团队和技术。

开发 团队建设

用书签小程序和扩展程序重新掌控你的浏览器

2025-02-09

作者厌倦了浏览器日渐臃肿、以开发者和公司利益为优先的现状,开始通过书签小程序(bookmarklets)和浏览器扩展程序(WebExtensions)来定制自己的浏览器体验。他创建了各种小程序,例如一键发布博客文章、更新文章标签、从网页文本创建博客文章等,并利用自定义URL方案与其他应用集成。他还开发了扩展程序,例如添加RSS图标、自定义日历提醒、以及去除特定网站的广告和推荐内容等,以更好地满足个人需求。作者呼吁用户积极参与,通过个性化定制,重新掌控自己的浏览器使用体验。

开发

软件抽象会毁灭文明吗?一个游戏开发大牛的争议性观点

2025-02-08

游戏开发者Jonathan Blow认为软件抽象会导致文明的终结,他认为过度抽象导致低层编程知识的丧失,最终危及关键软件的维护。本文作者详细驳斥了Blow的观点,指出Blow的论据存在诸多错误和误解,例如对“五九”(99.999% uptime)指标的误用,以及对现代软件健壮性和开发者生产力的低估。作者认为,虽然过度抽象确实存在问题,但软件和硬件技术仍在不断进步,并且开源社区和教育资源的普及也在培养新的低层开发者。最终,作者认为Blow的观点更多是基于个人经验和怀旧情绪,而非客观事实。

开发 软件抽象
1 2 164 165 166 168 170 171 172 213 214