分类: 开发

Go 1.25实验性JSON包:性能提升和严格语法

2025-09-10

Go 1.25 引入了实验性 `encoding/json/v2` 和 `encoding/json/jsontext` 包,旨在改进 Go 的 JSON 编解码功能。新包解决了旧包中存在的语法处理不精确、性能瓶颈以及 API 缺陷等问题,例如对无效 UTF-8 的容错处理、重复键名处理以及空切片/映射的序列化方式等。新版本提供更严格的语法检查,并引入了流式处理,显著提升了性能,尤其是在反序列化方面。虽然新包的 API 与旧包兼容性高,但建议开发者使用 `GOEXPERIMENT=jsonv2` 进行测试,并提供反馈。

(go.dev)
开发

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

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

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

开发

Bottlefire:将容器镜像转换为无需依赖的Linux可执行文件

2025-09-10

Bottlefire 是一款革命性的工具,它能够将容器镜像转换为独立的、无需依赖的 Linux 可执行文件。这些可执行文件捆绑了 Firecracker 并自动启动微型虚拟机 (microVM)。用户无需 root 权限或复杂的系统级设置,即可在任何支持 KVM 的现代 amd64/arm64 Linux 平台上运行。Bottlefire 微型虚拟机具有零配置用户空间网络、端口映射和主机到虚拟机的目录共享等功能,就像普通的容器一样易于使用。通过简单的 curl 命令即可下载并运行,其便捷性令人惊叹。

开发

告别print调试!掌握调试器的七大超能力

2025-09-10
告别print调试!掌握调试器的七大超能力

厌倦了无尽的print语句调试?本文揭示了调试器的七大隐藏优势:查看完整调用栈、动态求值表达式(堪比REPL)、精准捕捉异常、无需改代码即可更改执行流程、标准化项目设置、简化协作流程,以及为新手提供更友好的上手体验。调试器并非仅仅是代码跟踪工具,更是提升开发效率和代码质量的利器,助你告别繁琐的print调试,走向高效开发的康庄大道。

开发

用Rust编写1000行代码的RISC-V虚拟机

2025-09-10

一本在线书籍介绍了如何用Rust编写一个精简的RISC-V虚拟机,能够引导基于Linux的操作系统。作为《1000行代码的操作系统》的续集,本书从裸机编程开始,利用Rust的第三方库简化开发过程,目标是在1000行代码内实现一个类型1的虚拟机。代码示例可在GitHub上下载。

开发

面向对象与函数式设计合成以促进代码复用

2025-09-09

这篇1998年欧洲面向对象编程会议的论文探讨了如何结合面向对象编程和函数式编程的优势,以解决程序演化过程中扩展工具和数据类型的问题。传统方法难以同时支持这两种扩展:函数式编程擅长添加工具,而面向对象编程擅长添加新工具或扩展数据集,但不能同时做到两者。论文提出了一种合成设计模式,结合了两种方法的优点,并提出了一种新的语言机制来支持类系统,从而在无需修改现有代码的情况下,实现对工具和数据类型的扩展。

开发 代码复用

编程语言X的设计笔记:OCaml模块的统一

2025-09-09

作者计划设计一种名为X的新编程语言,旨在结合PolySubML的类型推断和结构化子类型,并支持OCaml的大部分功能,尤其着重于解决OCaml模块系统与普通值之间的语法和概念差异。文章详细阐述了如何在X中统一OCaml模块,包括类型别名成员、struct和sig语法、模块打开和包含、模块扩展以及抽象和存在类型等方面,并提出了改进OCaml模块系统的一些建议,例如避免使用通配符导入等。最终目标是创建一个更简洁易懂、功能强大的编程语言。

开发

AI 编码时代:程序员的未来

2025-09-09

作者在亚马逊从事AI编码助手开发后跳槽至Icon公司,亲身体会了AI对软件开发的革命性影响。在亚马逊,繁琐的流程和内部KPI导向的决策导致开发效率低下。而在Icon,团队成员利用AI工具,将大部分编码工作自动化,专注于产品设计和用户需求。作者预测,未来纯编码技能将不再是核心竞争力,而理解用户需求、产品策略和市场营销将变得至关重要。程序员需要适应变化,提升自身在用户理解、产品策略和市场营销方面的能力,才能在AI时代保持竞争力。

开发

DuckDB npm 包遭恶意软件入侵

2025-09-09
DuckDB npm 包遭恶意软件入侵

DuckDB 的 Node.js npm 包遭到恶意软件攻击,攻击者发布了四个包含恶意代码的软件包版本,这些恶意代码会干扰加密货币交易。幸运的是,在 npm 团队发现并修复问题之前,这些恶意版本似乎没有被下载。DuckDB 团队已采取措施下架恶意版本,并发布了更新的版本。此次事件源于一次成功的网络钓鱼攻击,攻击者伪造了 npm 网站,诱骗管理员重置了 2FA,从而获得了发布恶意软件包的权限。此事件提醒我们,即使是经验丰富的开发者也可能成为网络钓鱼攻击的受害者,加强安全意识至关重要。

开发

NPM 包裹恶意软件攻击及 LavaMoat 防御

2025-09-09
NPM 包裹恶意软件攻击及 LavaMoat 防御

近期,一个名为 `is-arrayish` 的 NPM 包裹被发现包含恶意代码,攻击者试图窃取用户交易中的 ETH。该恶意软件通过覆盖浏览器中的 `fetch`、`XMLHttpRequest` 和 `window.ethereum.request` 等方法实现。文章作者并没有详细分析攻击过程,而是演示了如何使用 LavaMoat 来防止此类攻击。LavaMoat 通过将每个依赖项的模块放入单独的词法全局上下文(称为 Compartment)中,并仅允许访问策略中列出的全局变量和导入来限制恶意代码的访问权限,从而有效阻止了恶意代码修改交易地址。即使恶意软件编写得更好,也难以绕过 LavaMoat 的防御。

Rust 类型系统可视化指南

2025-09-09
Rust 类型系统可视化指南

RustCurious.com 推出一份 Rust 类型系统可视化指南,以交互式图表展示了 Rust 中所有类型的分类。该指南重点关注语言内置的 `lang_items`——用于支持特定语法的类型和特性,旨在揭示哪些功能可以纯粹用库代码构建。例如,`Vec`、`String` 和 `HashMap` 等类型并未包含在内,因为它们只是结构体。Rust 将平台无关的核心与依赖于标准库的功能清晰地区分开来,使得无标准库(no_std)的程序成为可能,这在嵌入式固件和其他系统级环境中非常有用。

开发

驯服遗留代码:迈克尔·菲瑟斯《有效地利用遗留代码》精要

2025-09-09
驯服遗留代码:迈克尔·菲瑟斯《有效地利用遗留代码》精要

本文总结了Michael Feathers的经典著作《有效地利用遗留代码》的核心思想。书中指出,遗留代码的关键在于缺乏测试。为了安全地修改遗留代码,首先需要添加测试。但这并非易事,因为在添加测试之前需要修改代码,形成了一个悖论。书中介绍了识别变化点(Seams)、打破依赖、编写测试和重构的步骤,以及增量式测试方法(Sprout和Wrap)和快速了解代码的技巧(Scratch Refactoring)。作者强调单元测试的重要性,并介绍了表征测试(Characterization Tests)来捕捉现有代码的行为。最终,文章建议避免代码直接依赖库的实现,以降低维护成本。

开发

数据库表名:单数还是复数?

2025-09-09

在关系型数据库设计中,表名是单数还是复数一直存在争议。文章指出,虽然复数表名(例如users)直观易懂,但在SQL查询的JOIN等操作中,单数表名(例如user)更简洁清晰,避免了与ORM框架自动复数化带来的命名冲突,并能保持数据库模式的一致性。因此,文章推荐使用单数表名,以提高代码可读性和维护性。

开发

CRDTs:实现强最终一致性的利器

2025-09-09
CRDTs:实现强最终一致性的利器

CRDTs(冲突免费复制数据类型)是一种能够在多个节点之间复制、独立编辑并最终合并的数据结构。文章深入探讨了CRDTs如何实现强最终一致性(SEC),这是一种比传统最终一致性更强大的模型。SEC保证了即使在多个节点独立更新的情况下,数据也能自动且确定性地解决冲突,从而实现低延迟、高容错和离线功能。作者认为,CRDTs是构建强最终一致性系统的基石,其应用前景远不止协同编辑和多人待办事项列表,而是扩展到分布式数据库等领域。

C语言契约式编程:一个概念验证

2025-09-09
C语言契约式编程:一个概念验证

本文探讨了将C++的契约式编程概念引入C语言的可能性。作者提出了一种基于`contract_assert`和`contract_assume`宏的方案,分别用于预条件和后条件的检查。通过`defer`宏和C23的`unreachable`宏,可以更简洁地表达后条件。作者还展示了如何利用内联函数和辅助函数,在不改变函数核心实现的情况下,添加契约检查,并利用编译器优化。虽然目前仍需进一步完善接口规范,但这篇文章为C语言的契约式编程提供了一个可行的概念验证。

优雅地对抗广告拦截:一个巧妙的提示方案

2025-09-09

作者厌倦了广告对互联网的污染,并认为小额广告收入不足以维持网站运营。文章介绍了一种巧妙的方案:在网站添加一个非侵入式的提示,建议用户使用uBlock Origin等广告拦截器来改善网络体验。该提示仅在检测到未启用广告拦截器且空间足够时才会显示,并提供便捷的关闭按钮和cookie机制,避免重复出现。代码简洁明了,利用JavaScript和CSS实现,并考虑了各种广告拦截方式及浏览器兼容性。

开发

重大安全事件:NPM 包供应链攻击

2025-09-09
重大安全事件:NPM 包供应链攻击

黑客通过网络钓鱼攻击入侵了拥有超过26亿周下载量的NPM软件包维护者的账户,并在其中植入了恶意软件,构成了一起严重的供应链攻击事件。攻击者利用伪造的npm邮件诱导维护者更新2FA,窃取其账户控制权,然后在多个流行的包中注入恶意代码。该恶意代码能够拦截浏览器中的加密货币交易,将资金转移到攻击者控制的钱包地址。虽然NPM团队已删除部分恶意版本,但此次事件凸显了软件供应链安全的脆弱性,以及网络钓鱼和浏览器攻击的日益严重性。

开发

Nova启动器之死:开源承诺落空?

2025-09-09
Nova启动器之死:开源承诺落空?

热门安卓启动器Nova Launcher的创始人Kevin Barry离职,其母公司Branch Metrics似乎并未履行此前承诺的开源计划。去年Nova团队大部分成员被裁,Barry成为唯一开发者。他离职后,Nova官网显示404错误,开源前景不明朗。前员工和用户已发起请愿,呼吁Branch履行承诺,开源Nova Launcher。

Nova启动器创始人离职,开源计划搁浅

2025-09-09

Nova启动器创始人Kevin Barry宣布离开Branch公司,并停止了Nova启动器的开源工作。尽管Branch公司此前承诺在Kevin离职后会开源Nova启动器代码,但这一承诺最终未能兑现。Kevin在过去一年里一直独自维护Nova启动器,并为此进行了大量的开源准备工作,包括代码清理、许可证审查等。此举引发了社区的关注和惋惜,标志着这款流行启动器的未来走向扑朔迷离。

开发 Nova启动器

LLVM IR新增字节类型:原生支持内存操作

2025-09-09

LLVM 编译器基础设施的 Google Summer of Code 2025 项目成功在 LLVM IR 中添加了一种新的字节类型,用于表示原始内存值。此改进原生支持memcpy、memmove 和 memcmp 等内存相关内联函数,修复了现有的不安全转换,并支持新的优化,且性能影响极小。该项目解决了 LLVM 长期以来缺乏表示原始内存值的类型的问题,通过跟踪指针来源和精确表示毒化位,提升了编译器的准确性和优化能力。这项工作还改进了 Clang 对 C 和 C++ 原始内存访问类型的处理,并修复了许多现有的不安全优化。

开发

用CSS、SVG和物理学模拟苹果WWDC 2025的Liquid Glass效果

2025-09-09
用CSS、SVG和物理学模拟苹果WWDC 2025的Liquid Glass效果

本文深入探讨了如何使用CSS、SVG位移贴图和基于物理的折射计算在网页上重现类似苹果WWDC 2025上展示的Liquid Glass UI效果。文章从折射原理出发,解释了光线通过不同介质时如何弯曲,并介绍了如何使用数学函数来描述玻璃表面的形状,以及如何使用SVG位移贴图来模拟折射效果。最后,文章还演示了如何创建具有Liquid Glass效果的UI组件,例如放大镜、搜索框、开关和滑块等。需要注意的是,目前该效果在Chrome浏览器中效果最佳,其他浏览器可能存在兼容性问题。

开发

npm 包供应链攻击:20 亿次下载的恶意软件

2025-09-09
npm 包供应链攻击:20 亿次下载的恶意软件

9月8日,安全研究人员发现18个热门npm包被植入恶意代码,每周下载量超过20亿次。这些恶意软件会在浏览器中拦截加密货币和Web3活动,操纵钱包交互,并将资金和批准重定向到攻击者控制的账户。攻击者通过钓鱼邮件攻陷维护者账户,并在其不知情的情况下更新了这些包。目前部分受影响的包已被修复,但仍需谨慎,建议使用安全的npm包管理工具。

开发

网格感知网站:让你的网站更环保

2025-09-08

本文介绍了“网格感知网站”的概念,旨在根据用户所在电网的清洁能源比例调整网站性能,降低碳排放。作者通过一个电商产品展示页的案例,展示了如何在11ty和Astro框架下实现网格感知,并探讨了其技术实现细节、挑战以及未来发展方向。核心思想是根据电网能源清洁程度动态调整网站功能,在“脏”电网下简化页面,减少资源消耗,从而降低网站碳足迹。虽然面临API成本和跨栈协作等挑战,但该技术有潜力成为提高网站可持续性的重要手段。

开发 绿色环保

在Mac上本地运行LLM:一个谨慎的乐观主义者的实践指南

2025-09-08

作者是一位对大型语言模型(LLM)持谨慎态度的技术爱好者,他分享了在Mac上本地运行LLM的经验和方法。文章既介绍了LLM的优缺点(例如擅长总结文本,但容易出现事实错误),也详细指导读者如何使用llama.cpp和LM Studio等工具安装和运行LLM,并选择合适的模型(考虑模型大小、运行环境、量化和推理能力等因素)。作者强调本地运行LLM的优势在于保护隐私和避免对AI公司的依赖,并提供了一些使用技巧,例如利用MCP扩展LLM的功能,以及管理上下文窗口以避免信息遗失。

开发

包管理器:编程界的潘多拉魔盒?

2025-09-08

本文作者批判性地探讨了编程语言包管理器的弊端。作者认为,包管理器自动化了“依赖地狱”,掩盖了项目复杂性,并导致对第三方代码的过度信任。尤其在缺乏良好标准库的语言中,包管理器定义包的方式不一致,甚至可能导致“包管理器管理器”的出现。作者提倡手动依赖管理,认为这能迫使开发者思考依赖关系,并提高代码的稳定性和可维护性。虽然承认手动管理耗时,但作者认为其带来的安全性及可控性远超自动化带来的便利性,并以Go语言的标准库为例佐证了其观点。

开发

一款强大的照片和视频管理应用:功能对比

2025-09-08
一款强大的照片和视频管理应用:功能对比

本文对比分析了两款照片和视频管理应用的功能。两款应用都支持上传和查看视频和照片,自动备份,防止资产重复,选择性相册备份,下载到本地设备,多用户支持,相册和共享相册,可拖动滚动条,支持RAW格式,元数据查看(EXIF,地图),通过元数据、对象、人脸和CLIP搜索,虚拟滚动,OAuth支持,LivePhoto/MotionPhoto备份和播放,用户自定义存储结构,公开分享,归档和收藏夹,全局地图,合作伙伴分享,面部识别和聚类,回忆(x年前),以及堆叠照片和文件夹视图。但其中一款应用缺少管理功能、后台备份、360度图像显示、标签和离线支持。

基于视觉化表示的交互式故事写作系统

2025-09-08
基于视觉化表示的交互式故事写作系统

一个名为“Visual Story-Writing”的系统,允许用户通过操控视觉化表示来编辑故事。该系统利用GPT-4提取文本信息并建议编辑,例如,移动角色会建议修改文本以反映新的位置,连接两个角色会建议修改文本以反映新的互动。该系统使用TypeScript、React和Vite构建,需要OpenAI API密钥才能运行,并提供了视频教程和arXiv论文。

开发 视觉化

ICEBlock应用开发者忽视严重安全漏洞

2025-09-08
ICEBlock应用开发者忽视严重安全漏洞

一款名为ICEBlock的应用声称能匿名举报ICE(美国移民和海关执法局)的目击信息,下载量超过百万。然而,其开发者Joshua Aaron却忽视了其服务器上Apache软件的严重安全漏洞。安全研究员Micah Lee多次警告并提供了修复方法,但Aaron置之不理,甚至封锁了Lee的账号。这引发了对用户数据安全的严重担忧,也暴露了该应用在安全方面的不负责任态度。

开发

代码阅读:发现Bug的超级能力

2025-09-08

作者分享了其职业生涯中一个重要的转变:从迭代式编程转向主动发现Bug。不再仅仅依赖测试迭代,而是通过仔细阅读代码来提前发现问题。文章指出,仔细阅读代码,构建程序的完整心智模型,并找出模型与代码的差异,是发现Bug的关键。作者建议关注控制流和数据结构,并识别代码中的潜在错误模式。通过这种方式,可以有效减少Bug,提高代码质量。

开发

化解负能量:领导力与团队抱怨

2025-09-08
化解负能量:领导力与团队抱怨

团队成员的抱怨会影响团队士气和效率。文章探讨了抱怨产生的原因,包括行为强化、习得性无助、控制点、认知偏差和归属感等心理学因素。作者提出,领导者应通过提问引导成员参与解决问题,而非简单压制或解决问题。文中介绍了多种提问技巧,以及重塑抱怨、小组讨论、抱怨收集和会议仪式等实用工具,最终目标是将负能量转化为团队建设的动力。

开发
1 2 7 8 9 11 13 14 15 213 214