分类: 开发

微软开源Multilspy:简化语言服务器客户端构建

2024-12-17
微软开源Multilspy:简化语言服务器客户端构建

微软开源了一个名为Multilspy的Python库,旨在简化围绕语言服务器构建应用程序的过程。Multilspy支持多种语言(Java、Rust、C#、Python),自动处理服务器二进制文件的下载和语言服务器的设置/拆卸,并提供简易API。它主要用于与语言服务器进行交互,获取静态分析结果,例如代码补全、符号定义和引用等,这在AI辅助代码生成(如Monitor-Guided Decoding)中非常有用。

SQL Server数据库继承关系的最佳实践

2024-12-17
SQL Server数据库继承关系的最佳实践

本文探讨了在SQL Server数据库中表示继承关系的最佳实践。作者提出了三种常见方法:单表继承、具体表继承和类表继承,并详细比较了它们的优缺点。单表继承简单易懂,但存在扩展性和数据完整性问题;具体表继承解决了这些问题,但查询效率较低;类表继承则兼顾了简单性和效率,被认为是大多数情况下的最佳选择。文章还讨论了使用JSON存储子类型特定字段的替代方案,以及使用规范化数据库设计方法的方案。

开发

QEMU 性能提升十倍的奇技淫巧

2024-12-17

Linus Heckemann 在调试 NixOS 测试套件时,发现 QEMU 虚拟机中复制数据耗时过长(超过 2 小时)。通过使用 perf 工具进行性能分析,他发现 QEMU 的 9p 服务器在查找文件时使用了效率低下的链表结构(O(n) 复杂度)。他将查找结构改为了 glib 提供的哈希表(O(1) 复杂度),从而将测试时间缩短到 7 分钟,并成功将此优化贡献到 QEMU 开源项目。

开发 9p协议

任天堂DS上的Advent of Code:在嵌入式系统上编写Rust代码的挑战

2024-12-16

作者在任天堂DS上使用Rust语言完成了Advent of Code 2024挑战。这篇文章详细描述了整个过程,从搭建交叉编译环境,编写能在无运行时环境的嵌入式系统上运行的Rust代码,到处理内存管理、中断和屏幕输出等一系列难题。作者克服了诸多挑战,最终成功地在DS屏幕上显示了Advent of Code的答案。文章展现了作者扎实的编程功底和对嵌入式系统的深入理解,同时也体现了在资源受限环境下进行编程的技巧和乐趣。

开发 任天堂DS

教育编程语言设计原则:为何难以达成共识?

2024-12-16
教育编程语言设计原则:为何难以达成共识?

本文探讨了数十年来教育编程语言设计原则的演变。尽管Wirth等人的工作强调了简洁性、模块化等原则,但教育工作者对适合初学者的编程语言仍存在分歧。文章分析了当前技术环境下这些原则的诠释变化,以及为什么没有一种面向教育且全球广泛使用的编程语言。作者认为,教学语言和工业语言各有优劣,每一代学习者都需要自己的语言。

OpenAI大规模集群故障:一次由新监控服务引发的意外

2024-12-16
OpenAI大规模集群故障:一次由新监控服务引发的意外

OpenAI于12月11日遭遇重大服务中断,根源在于新部署的遥测服务。该服务意图提升可靠性,却意外地向Kubernetes API服务器施加了巨大负载,导致API服务器饱和,进而使大多数大型集群的Kubernetes控制平面瘫痪,最终破坏了基于DNS的服务发现机制。这次事故凸显了复杂系统中意想不到的交互作用以及全负载条件下才能暴露的问题。OpenAI通过缩减集群规模、阻止对Kubernetes管理API的网络访问以及扩展Kubernetes API服务器等手段恢复了服务。

Go Protobuf 推出新的不透明 API

2024-12-16

Go 语言团队发布了 Go Protobuf 的一个新 API——不透明 API。此 API 与现有的开放结构 API 并存,不会移除旧 API。新 API 的主要改进在于解耦了生成的代码与底层内存表示,从而提高了性能、减少了内存分配,并支持延迟解码等优化。它通过隐藏结构体字段,仅通过访问器方法访问,避免了指针相关错误和意外共享。迁移到新 API 可以通过启用混合 API,使用 `open2opaque` 工具以及选择不透明 API 完成。

(go.dev)
开发

GRUB2不兼容更改导致BIOS设置死循环

2024-12-16
GRUB2不兼容更改导致BIOS设置死循环

作者的Debian和Kali Linux系统因GRUB2更新后添加的`fwsetup --is-supported`命令导致启动循环,旧版GRUB无法识别该参数。问题源于系统中存在旧版`efifwsetup.mod`模块,该模块在旧系统备份恢复后遗留下来,导致新版GRUB配置与旧模块冲突。最终,通过安装`grub-efi-amd64-bin`包解决问题。此事件凸显了软件更新中向后兼容性的重要性,以及在复杂软件中进行部分更改时需考虑潜在副作用。

Ruby 大会信息汇总:全球各地精彩纷呈

2024-12-16

Ruby Video Talks 网站汇集了全球众多 Ruby 开发者大会的信息。从 2024 年的 RubyConf(70 个演讲)、Rails World(46 个演讲)到规模较小的地区性会议,应有尽有。网站还列出了知名讲师如 Matz 的演讲安排,并提供按日期、地点和演讲主题搜索的功能,方便开发者查找感兴趣的活动。未来还将有更多会议信息陆续更新,例如 2025 年的 Balkan Ruby 和 Friendly.rb 等。

Guile赋能Emacs:一个野心勃勃的重写计划

2024-12-16

Emacs编辑器因其可扩展性而闻名,但其核心语言Emacs Lisp(Elisp)的性能和表达能力已成为瓶颈。为解决这个问题,Guile-Emacs项目应运而生,它计划用Guile Lisp替换Emacs中的Elisp。Guile-Emacs项目已历经多年,几经沉浮,如今在开发者Robin Templeton和Larry Valkama的努力下再次焕发生机,目标是在保持Elisp兼容性的前提下,利用Guile的编译器和性能优势,提升Emacs的运行效率和可扩展性,甚至最终用Lisp重写Emacs的大部分C代码,这将显著增强Emacs的可定制性。虽然面临着技术和政治上的挑战,但该项目为Emacs的未来发展提供了令人兴奋的可能性。

开发

Rust重写SQLite:Limbo项目实现100倍尾部延迟降低

2024-12-16

芬兰赫尔辛基大学和剑桥大学的研究人员通过使用异步I/O和io_uring技术,以及存储解耦,对SQLite进行了Rust重写,创建了名为Limbo的项目。该项目显著提升了SQLite的性能,在多租户无服务器运行环境下,尾部延迟降低了高达100倍。研究人员通过替换同步字节码指令为异步指令,实现了异步I/O,从而避免了阻塞,提高了并发性。Limbo的改进主要体现在高百分位延迟的改善上,这对于需要高可靠性的应用至关重要。

(avi.im)
开发 Limbo

Converge招募资深全栈工程师:打造百万年收入级营销测量平台

2024-12-16
Converge招募资深全栈工程师:打造百万年收入级营销测量平台

Y Combinator孵化的Converge公司,一家年收入超过百万美元的B2C营销测量平台,现招聘资深全栈工程师。团队规模仅4人,已拥有180多个客户,处理数十亿美元的年销售额和每月数十亿次事件。你将参与构建统一的营销测量栈,包括客户数据收集、身份解析、营销归因等功能,并直接与客户互动,拥有极高的自主权和影响力。公司重视行动力、持续学习、积极乐观和简洁性。要求拥有丰富的全栈经验,精通React和后端开发,了解生产软件的部署和扩展。

开发 营销测量

小米智能家居Home Assistant集成组件正式上线

2024-12-16
小米智能家居Home Assistant集成组件正式上线

小米官方正式推出小米智能家居Home Assistant集成组件,允许用户将小米IoT智能设备接入Home Assistant。该组件支持多种安装方式,包括Git克隆、HACS和手动安装。用户需使用小米账号登录,支持多用户登录和区域选择。组件支持大多数小米智能家居设备,但暂不支持蓝牙、红外和虚拟设备。控制方式包括云端控制和本地控制(需小米中央网关或具备中央网关功能的设备),并实现了MIoT-Spec-V2与Home Assistant实体的映射。组件还支持多语言和调试模式,保障用户隐私安全,但配置文件需妥善保存。

程序员的百万美元错误:一个充满戏剧性的Bug故事

2024-12-16
程序员的百万美元错误:一个充满戏剧性的Bug故事

一位名叫Trey的程序员为一家3G电信初创公司工作。他编写了一个自动化支付测试程序,本意是进行小额测试交易,却因程序中三个Bug导致程序每五分钟向测试账户注入100美元。由于缺乏存活性检查,一个网关故障导致程序持续运行数小时,最终累积了巨额款项。第二天早上,Trey面临着安全团队的质询,直到部门主管解释清楚才化险为夷,但测试账户余额也被清零。

Modelica协会:高效建模复杂系统的利器

2024-12-16

Modelica协会致力于推广Modelica语言及其相关工具,Modelica是一种面向对象的建模语言,用于构建和模拟复杂系统,尤其擅长对基于数学方程的、可重用的组件进行非因果连接建模。该协会提供语言规范、工具、库以及社区支持,助力用户高效地进行系统建模。

极简NAS:基于Alpine initramfs的frood系统

2024-12-16
极简NAS:基于Alpine initramfs的frood系统

作者介绍了一种名为frood的NAS系统,其独特之处在于它是一个包含完整Alpine Linux系统的巨大initramfs镜像。这种设计使得系统启动迅速,并减少了对存储设备的磨损。配置管理简洁明了,所有文件都直接存放在镜像中,无需复杂的DSL或配置工具。系统状态通过Git进行跟踪,每次启动都相当于一次“擦除”,避免了累积的配置混乱。文章详细介绍了系统的构建过程,包括alpine-make-rootfs脚本的使用、常用软件包的安装和启动脚本的编写等。作者还介绍了使用qemu进行测试的方法和更新系统镜像的流程。总而言之,frood是一个轻量级、易于维护和部署的NAS系统,其简洁的设计理念值得借鉴。

开发 initramfs

HTTP/3 发展现状:普及之路上的挑战与机遇

2024-12-16
HTTP/3 发展现状:普及之路上的挑战与机遇

HTTP/3 规范已完成,但正式发布仍需等待。目前服务器端支持率出乎意料地高,尤其是在顶级网站中。Cloudflare等大公司已启用HTTP/3,浏览器也普遍支持。然而,curl等客户端软件的HTTP/3支持仍不完善,主要受限于QUIC支持的TLS库发展滞后。OpenSSL的QUIC支持被推迟,而其他选择如BoringSSL和quictls则存在各自的局限性。虽然HTTP/3有望提升速度,但实际效果取决于网络环境。未来HTTP/3的广泛采用,仍依赖于规范发布和TLS库的成熟。

开发

Rust 的 Vec::drain 方法:巧妙利用 Drop 特性保障安全

2024-12-16
Rust 的 Vec::drain 方法:巧妙利用 Drop 特性保障安全

本文深入探讨了 Rust 的 Vec::drain 方法及其 Drop 实现,以此为例展示了所有权机制如何防止细微的内存错误。Vec::drain 通过保持对原始向量的可变引用,并仅读取和更新原始存储来优化性能。关键在于 Drain 结构体的 Drop 实现,它使用 DropGuard 来确保即使迭代器提前丢弃,也能安全地将未处理的元素移回原始向量,从而保障内存安全。这篇文章详细解释了 Drain 和 DropGuard 的实现细节,并讨论了零大小类型和指针来源等特殊情况的处理。

开发 Vec::drain Drop

GNU Make新增--shuffle模式:发现并解决并行构建中的隐藏bug

2024-12-16

十一年来,GNU Make的并行构建中一直存在一些难以重现的bug。作者受到启发,开发了`--shuffle`模式,该模式随机打乱makefile中目标的执行顺序,从而模拟非确定性构建,有效地发现了30多个软件包(包括gcc、vim、ghc等)中的隐藏bug。该模式已集成到GNU Make 4.4版本中,可以通过`make --shuffle`或设置环境变量`GNUMAKEFLAGS=--shuffle`使用。这个功能不仅能帮助开发者发现并解决并行构建中的问题,更体现了持续改进软件开发工具的重要性。

开发

谷歌新型负载均衡器PReQuaL:告别CPU负载均衡

2024-12-16

谷歌研究团队在NSDI 2024会议上发表论文,介绍了新型负载均衡器PReQuaL。不同于传统的CPU负载均衡,PReQuaL通过探测服务器延迟和活跃请求数来选择服务器,从而显著降低了YouTube等系统的尾部延迟、错误率和资源消耗。PReQuaL已在YouTube上线一年多,极大地提升了系统利用率。这项创新挑战了传统的负载均衡理念,为高性能分布式系统的设计提供了新的思路。

开发 PReQuaL

软件工程师的CAD和3D打印之旅:一个过度设计的摄像头支架

2024-12-16

一位资深软件工程师,厌倦了虚拟世界的编程,渴望在现实世界中创造。他入手了Bambu Lab X1C 3D打印机,并迅速掌握了3D打印技巧。随后,他开始学习Fusion 360 CAD软件,惊讶地发现其约束概念与iOS UI约束类似,参数化CAD设计也与函数式编程异曲同工。他的第一个项目是一个过度设计的摄像头支架,旨在解决摄像头遮挡屏幕的问题。这个项目不仅让他体验了3D打印和CAD设计的乐趣,也让他深刻认识到设计中需要考虑制造、材料等细节。

开发

Adélie Linux 1.0-BETA6发布:兼容性更强,功能更丰富

2024-12-16
Adélie Linux 1.0-BETA6发布:兼容性更强,功能更丰富

Adélie Linux发布了1.0-BETA6测试版,该版本支持32位和64位ARM、POWER和x86架构,兼容范围涵盖智能手机、游戏机和超级计算机等。本次更新包含35多个新软件包,更新了GCC 13、LLVM 18、Rust 1.80和Linux内核6.6 LTS分支,并改进了GRUB支持和Wayland支持。此外,还修复了大量bug,提升了用户体验。虽然还存在一些已知问题,但Adélie团队正积极寻求解决方案,并欢迎用户提交bug报告和反馈。

Cyphernetes:云原生 Kubernetes 集群自动化管理利器

2024-12-16

Cyphernetes是一个自动化管理云原生Kubernetes集群的项目,它通过简化部署、升级和管理流程,大大降低了运维复杂度。想象一下,你无需手动操作就能轻松扩展集群规模,应对突发流量,还能自动修复故障,保障服务的稳定性。Cyphernetes就像一位经验丰富的Kubernetes集群管理员,全天候守护你的应用,让你专注于业务创新。

开发

Dillo浏览器:25年风雨兼程,涅槃重生

2024-12-16

Dillo网页浏览器,自1999年诞生以来,经历了25年的风雨洗礼。它曾数次停滞,却始终顽强生存。最初由Jorge Arellano Cid领导开发,历经GTK和FLTK两个主要阶段,期间核心开发者几经更迭,项目也几度沉浮。2024年,Rodrigo Arias Mallo接手项目,在社区的帮助下,成功发布了3.1.1版本,将这款老牌浏览器带回了人们的视野。Dillo的故事,是开源精神的最佳诠释,也是技术传承与创新的传奇篇章。

Hyperbola GNU/Linux-libre:一款坚持自由与长久支持的轻量级操作系统

2024-12-15

Hyperbola GNU/Linux-libre是一个社区驱动的操作系统项目,致力于提供一个完全自由、稳定、安全、简单、轻量级的长期支持发行版。它基于Arch Linux的包管理系统和Debian的安全补丁,遵循GNU自由系统发行指南。Hyperbola支持i686和x86_64架构,并计划推出基于BSD的HyperbolaBSD系统。项目近期新闻包括:继续支持32位系统,停止使用Debian 12之后的补丁集,以及对自由软件基金会关于机器学习的声明表达担忧。

开发

GitHub项目地图:40万+项目可视化探索

2024-12-15
GitHub项目地图:40万+项目可视化探索

程序员Anvaka利用GitHub公开数据,创建了一个包含40万多个项目的交互式地图。该项目通过Jaccard相似度算法计算项目间的关联,并使用Leiden聚类算法将项目分组,最终呈现出一个直观的可视化效果。用户可以搜索项目,并探索项目间的联系,展现了GitHub项目生态的复杂性和丰富性。

开发 项目关系

Vercel 推出本地 Serverless 函数开发运行时 ƒun

2024-12-15
Vercel 推出本地 Serverless 函数开发运行时 ƒun

Vercel 发布了 ƒun,一个本地 Serverless 函数开发运行时,允许开发者在本地环境模拟 AWS Lambda 的运行环境。ƒun 支持多种运行时环境,包括 Node.js 和 Python 等,开发者可以使用它快速测试和调试 Serverless 函数,无需部署到云端。虽然 ƒun 尽可能模拟真实的 Lambda 环境,但仍存在一些差异,例如进程沙盒和用户权限方面。

开发 函数计算

Bevy 0.15 Web端拖放图像功能实现

2024-12-15

本文介绍了如何在Bevy 0.15 Web应用中集成Web原生API,实现拖放图像的功能。文章详细讲解了使用wasm-bindgen、gloo和bevy_channel_trigger等工具,在Rust代码中处理DOM事件、提取文件数据、并将数据传递给Bevy引擎进行图像加载和渲染的过程。整个过程类似于JavaScript中的实现,但使用了Rust的特性,并解决了错误处理和事件监听器内存泄漏等问题。最终实现了将拖放的PNG图片加载到Bevy应用中并显示的效果。

开发

程序员专注状态指示灯:FlowLight 的诞生

2024-12-15

程序员Shae Erisson受到一篇关于工作中断影响的研究启发,DIY了一个名为FlowLight的系统,用于指示程序员是否处于专注的“心流”状态。该系统通过监测Emacs编辑器的空闲时间,当程序员长时间未操作时,系统会通过Adafruit MagTag板上的LED灯变为绿色表示空闲,红色表示忙碌。Erisson还在CircuitPython中编写了HTTP服务器,使得系统能够远程控制LED颜色和显示状态。虽然该系统目前还有一些改进空间,例如更精细的空闲时间监测和更美观的显示效果,但它已经能够有效地帮助程序员避免被打扰,提高工作效率。

开发

WASM程序绕过node:wasi文件沙箱限制

2024-12-15
WASM程序绕过node:wasi文件沙箱限制

该项目展示了一个概念验证,说明WASM程序如何绕过node:wasi的预打开目录限制,访问外部文件。通常情况下,WASM程序只能访问预先指定的目录,但通过巧妙地利用符号链接替换文件,并在精确的时间点运行外部进程,可以突破这一限制。这并非node:wasi的实际安全漏洞,而是其在极端情况下可能存在的边缘情况。该项目强调了在使用node:wasi时,不应依赖其完全阻止恶意代码访问外部文件。

开发 node:wasi
1 2 206 207 208 209 211 213 214