分类: 开发

Linux OpenZFS 的 zpool import/export 潜在问题

2024-12-26

Linux OpenZFS 版本(截至 2.3.0)在导入或导出 ZFS 池时存在一个潜在问题。即使 ZFS 池中没有设置 sharenfs 属性的文件系统,`zpool import` 和 `zpool export` 命令仍然会运行 `exportfs -ra`,这可能会清除手动添加或修改的 NFS 导出设置,从而影响使用自定义 NFS 导出配置的高可用性系统等环境。这个问题是由于 OpenZFS 代码盲目执行 `exportfs -ra` 造成的,即使无需更改 NFS 导出也如此。

开发 NFS

Go语言安全漏洞处理指南

2024-12-26
Go语言安全漏洞处理指南

本文介绍了如何处理Go语言安全漏洞警报。作者以2024年12月Go团队公布的golang.org/x/net和golang.org/x/crypto两个包的安全漏洞为例,详细讲解了利用govulncheck和Docker Scout工具扫描Docker镜像和Go源码,检测漏洞并更新依赖包的流程。文章强调了区分潜在安全问题和实际安全风险的重要性,并建议将安全测试和修补过程自动化,以提高效率并符合欧盟新的网络安全法规。

开发 Go安全

程序员用1996年Java在OS/2 Warp 4上挑战Advent of Code

2024-12-26

一位程序员在1996年的IBM OS/2 Warp 4操作系统上,使用Java 1.0.1完成了Advent of Code 2024挑战。这并非简单的编程挑战,而是将老旧硬件和软件的极限推向极致的复古之旅。文章详细记录了他在这个过程中遇到的各种挑战,包括Java 1.0.1的bug、性能瓶颈以及老旧系统的限制,以及如何克服这些困难并最终完成挑战。这不仅展现了他精湛的编程技巧,也向我们展示了早期计算机技术的魅力和程序员的执着精神。

开发 Java 1.0.1

W3C HTML工作组:推动HTML标准发展

2024-12-26
W3C HTML工作组:推动HTML标准发展

W3C的HTML工作组致力于将WHATWG的HTML和DOM审查草案转化为W3C推荐标准。该小组由来自全球的专家组成,他们共同努力,确保HTML标准的持续发展和改进,以满足不断变化的网络需求。该工作组拥有明确的任务、参与流程和专利政策,并定期发布更新和活动信息。

开发 HTML标准

Node.js 默认启用 --experimental-strip-types 提升 TypeScript 支持

2024-12-26
Node.js 默认启用 --experimental-strip-types 提升 TypeScript 支持

Node.js 的一个重要更新默认启用了 `--experimental-strip-types` 标志。这意味着开发者现在可以直接运行 TypeScript 文件,无需额外配置。此举旨在提升 TypeScript 的支持,并捕捉更多 bug。虽然此功能仍处于实验阶段,但它标志着 Node.js 在简化 TypeScript 开发方面迈出了重要一步,为开发者带来了更便捷的开发体验。

开发

COBOL打造我的世界服务器:挑战与创新

2024-12-26
COBOL打造我的世界服务器:挑战与创新

一个名为CobolCraft的项目,大胆地使用过时的COBOL语言编写了一个Minecraft服务器。该项目支持无限地形生成、动态区块加载以及多人游戏等功能,甚至能够读取并解析Minecraft的官方数据文件。开发者克服了COBOL语言在处理低级数据操作方面的不足,成功构建了一个可运行的服务器,挑战了人们对COBOL的传统认知,也为学习和探索这门语言提供了新的思路。

Racket编程语言设计暑期学校:构建你自己的语言

2024-12-26

2019年Racket暑期学校的“如何设计语言”课程,带领学员探索Racket语言导向编程和语言构建的精髓。课程涵盖宏扩展、模块、类型检查等核心概念,并通过大量实践练习,例如构建简单的宏和类型化语言,让学员深入理解语言设计的原理。课程采用讲座和实验课结合的方式,保证充足的动手时间,最终目标是让学员能够独立设计和构建自己的语言。

开发

代码搜索查询设计空间:ast-grep 的创新之路

2024-12-26
代码搜索查询设计空间:ast-grep 的创新之路

ast-grep 是一款基于抽象语法树 (AST) 的代码搜索工具,其设计理念注重简洁易用、表达能力强和结果精确性。文章深入探讨了代码搜索查询的设计空间,将查询类型分为非正式查询、基于现有编程语言的正式查询和自定义语言的正式查询以及混合查询等,并分析了每种类型的优缺点。ast-grep 采用混合查询方式,允许用户使用熟悉的编程语言语法编写查询,并通过 YAML 配置文件或编程 API 提供更强大的表达能力,最终实现精确的代码搜索。

国产隐私优先个人知识管理软件SiYuan强势来袭

2024-12-26
国产隐私优先个人知识管理软件SiYuan强势来袭

SiYuan是一款注重隐私、自托管、完全开源的个人知识管理软件,使用TypeScript和Go语言编写。它支持细粒度的块级引用和Markdown所见即所得编辑,拥有强大的功能,例如块级引用、自定义属性、SQL查询嵌入、Web剪辑、PDF批注链接导出等。SiYuan还提供App Store、Google Play、F-Droid等多种安装方式,并支持Docker部署。无论是个人用户还是商业用户,大部分功能都是免费的。

开发

Linux内核开发利器Coccinelle详解

2024-12-26

Coccinelle是一个强大的Linux内核开发工具,用于模式匹配和文本转换。它可以应用复杂的、全树范围的补丁,并检测有问题的编程模式。本文介绍了Coccinelle的安装、使用方法、不同模式(patch、report、context、org)以及高级用法,例如并行化、单个语义补丁的使用、控制处理的文件、调试和.cocciconfig支持等。Coccinelle通过语义补丁(SmPL)实现其功能,并提供多种模式以适应不同的需求,例如生成补丁、报告、上下文和Org模式报告。

开发 Coccinelle

黑糖:一款自托管音乐流媒体服务器

2024-12-26
黑糖:一款自托管音乐流媒体服务器

黑糖是一个自托管的音乐流媒体服务器,你可以把它想象成你个人的音乐中心。它支持Docker一键安装,方便快捷。你可以通过Docker命令轻松部署,并使用初始管理员账户登录。黑糖默认使用SQLite数据库,但也可以配置为使用PostgreSQL。为了持久化数据,你需要挂载/app/storage目录。此外,黑糖还支持Nginx代理以提高音频文件传输效率,并提供移动端应用。

开发

Rust 语言下的即时模式 GUI 库:egui

2024-12-26

egui 是一个用 Rust 编写的即时模式图形用户界面 (GUI) 库。它轻量、高效,并提供简洁易用的 API,让开发者可以快速构建各种交互式界面。不同于传统的保留模式 GUI,egui 在每次帧都重新绘制整个 UI,从而实现更灵活的布局和更简单的状态管理。这使得 egui 非常适合游戏开发、数据可视化以及需要高响应速度的应用场景。其易用性和强大的功能使其成为 Rust 开发者构建 GUI 的绝佳选择。

开发 egui

POSIX时间:并非你想象的“秒数”

2024-12-26

本文揭示了POSIX时间(Unix时间)的一个普遍误解:它并非简单地从1970年1月1日00:00:00开始计算的秒数。由于闰秒的存在,UTC每天的秒数并非恒定的86400秒,导致POSIX时间与实际秒数存在偏差。文章深入探讨了闰秒对时间计算的影响,并建议在需要精确时间计算的场景下,使用CLOCK_MONOTONIC或TAI等替代方案,避免因闰秒带来的错误。

开发 POSIX时间

C语言文件I/O操作的古老Bug:跨越半个世纪的谜团

2024-12-26

一位开发者在改进DOS模拟器时,偶然发现了一个看似简单的文件I/O操作bug:使用`echo`命令向文件追加内容时,结果与预期不符。深入调试后,他发现问题源于C运行时库处理文件读写切换的逻辑缺陷,该缺陷的历史竟可以追溯到1970年代甚至更早的UNIX系统。文章详细探讨了这个问题的历史渊源,从早期的K&R C到现代的C标准,以及不同UNIX和C编译器的实现差异,最终揭示了这个bug的根源在于早期C库对文件更新模式的限制,以及不同操作系统和编译器对这一限制的处理方式各不相同。

PostgreSQL读取操作引发写入:MVCC、页面修剪与HINT位

2024-12-25

本文深入探讨了PostgreSQL中看似矛盾的现象:简单的SELECT查询为何会引发数据写入。文章从多版本并发控制(MVCC)机制入手,解释了行版本、页面、元组等概念,并结合代码示例,详细分析了HINT位更新和页面修剪两种机制如何导致读取操作修改页面,最终需要写入磁盘。文章还阐述了HOT更新优化策略,并通过页面检查工具展示了数据在页面中的存储方式和更新过程。

开发

被低估的服务器发送事件(SSE): 简洁高效的实时数据流方案

2024-12-25
被低估的服务器发送事件(SSE): 简洁高效的实时数据流方案

本文探讨了服务器发送事件(SSE)技术,它是一种比WebSocket更简单、更高效的单向实时通信方案。SSE利用标准HTTP协议,易于实现和部署,兼容现有基础设施,资源消耗低,并具有自动重连功能。文章详细解释了SSE的工作原理、优势、应用场景(如实时新闻、股票信息、进度条等),并以Flask和JavaScript为例展示了其代码实现。此外,文章还分析了ChatGPT等大型语言模型如何利用SSE进行流式响应,并指出了SSE的局限性,例如单向通信和数据格式限制。总而言之,SSE为许多需要单向实时数据流的应用提供了一种优雅的解决方案。

深入了解CPS:一次函数式编程编译之旅

2024-12-25
深入了解CPS:一次函数式编程编译之旅

本文深入探讨了延续传递风格(CPS)及其在函数式编程语言编译中的应用。作者通过一个简单的Scheme-like语言,逐步构建了一个CPS转换器,并阐述了优化策略和代码生成方法。文章详细介绍了如何将整数、变量、函数调用、算术运算符、lambda表达式和if表达式转换为CPS形式,并讨论了元延续和优化技术,例如常量折叠和β归约。最后,文章还概述了将CPS代码转换为可执行代码的几种方法,包括生成C代码、使用蹦床和单一大型开关语句等。

开发 CPS

开源端口伪装工具Portspoof:让端口扫描失效

2024-12-25
开源端口伪装工具Portspoof:让端口扫描失效

Portspoof是一个开源的端口伪装工具,旨在增强操作系统安全性。它通过始终保持所有65535个TCP端口处于打开状态,并为每个连接尝试返回SYN+ACK应答,来迷惑端口扫描器。此外,Portspoof拥有庞大的动态服务签名数据库,能够模拟各种服务的Banner信息,进一步阻碍攻击者识别真实服务。这项技术显著增加了攻击者进行端口扫描和服务识别的时间和难度,有效提升了系统的安全性,无需root权限即可运行。

开发 端口伪装

认知负荷:软件开发的隐形杀手

2024-12-25

本文探讨了软件开发中认知负荷的重要性。认知负荷是指开发者完成任务所需的思考量,过高的认知负荷会导致混乱、浪费时间和金钱。文章分析了内在认知负荷和外在认知负荷,并通过代码示例说明如何减少外在认知负荷,例如使用有意义的中间变量、避免嵌套if语句、优先使用组合而不是继承等。文章还强调了避免过度使用微服务、选择合适的编程语言特性以及遵循单一责任原则的重要性,并指出过度的抽象和分层架构反而会增加认知负荷。最后,文章建议开发者关注代码的可理解性,并通过与初级开发者合作来识别和改进代码中的认知负荷问题。

开发 认知负荷

MDN学习资源全面升级:全新学习体验上线

2024-12-25
MDN学习资源全面升级:全新学习体验上线

MDN于2024年12月对“学习Web开发”板块进行了重大更新,将原先的MDN课程与学习内容整合,创建更流畅的学习路径。此次升级旨在解决原有结构臃肿、学习路径不明确等问题,为初学者提供更清晰、更易于理解的学习体验。新版网站采用模块化结构,包括“入门”、“核心”和“扩展”三个部分,并添加了清晰的学习目标和互动内容。未来,MDN将持续改进内容和设计,力求提供更优质的学习资源。

微软研究院推出证明导向型编程语言F*

2024-12-25

F* 是一种通用的证明导向型编程语言,支持纯函数式和有副作用的编程。它结合了依赖类型的表达能力和基于SMT求解和基于策略的交互式定理证明的自动化证明功能。F* 程序默认编译成 OCaml,还可以通过 KaRaMeL 工具提取到 F#、C 或 Wasm,或使用 Vale 工具链提取到汇编语言。F* 由微软研究院、Inria 和社区积极开发,开源且免费,并广泛应用于安全、加密和系统等领域,例如 Mozilla Firefox 和 Linux 内核等项目。

OKR:利器还是陷阱?

2024-12-25
OKR:利器还是陷阱?

本文探讨了OKR(目标与关键成果)的双面性。作者指出,许多公司错误地将OKR用于绩效考核,导致团队过度关注可衡量指标而忽略实际目标及外部影响。作者以Alexa的例子说明,盲目追求关键成果可能适得其反。而Honeycomb公司则巧妙地利用OKR作为沟通和反思的工具,将关键成果视为观察世界、改进工作的线索,而非最终评判标准,从而避免了指标扭曲行为。

开发

EZRGB:用DBOS技术点亮节假日灯光秀

2024-12-25

EZRGB公司利用DBOS技术打造了EZSequence平台,为用户提供便捷的动画灯光秀服务。用户只需在网站上购买序列,平台会自动将序列映射到用户的房屋布局,实现灯光秀的自动化呈现。该平台采用WordPress前端和DBOS Transact后端,并利用AWS SQS和S3进行任务调度和数据存储,实现了高效、可靠和可扩展的动画灯光秀制作流程,即使面对小型市场也展现出强大的技术实力。

程序员自制火焰图查看器:挑战Xlib,攻克性能瓶颈

2024-12-25

一位Rust程序员为了调试Rust Analyzer,着手打造一款原生火焰图查看器。起初尝试使用各种GUI工具包,但内存占用过高。最终他另辟蹊径,直接使用Xlib进行开发,巧妙地解决了滚动性能瓶颈、海量按钮绘制、鼠标交互等难题,最终实现了一款轻量高效的火焰图查看器。该项目展现了程序员精湛的编程技巧和对性能优化的深入理解,也为其他开发者提供了宝贵的经验。

开发 Xlib

程序员的汇编语言初体验:位向量优化词法分析器

2024-12-25

一位程序员在阅读《用Go编写解释器》后,尝试用Zig和Rust重写,并致力于优化词法分析器的性能。他探索了多种方法,包括分支语句、查找表和位向量。位向量方法通过将ASCII字符映射到位来压缩状态表示,减少内存使用并提高查找效率。虽然尝试使用SIMD指令优化失败,但最终他成功地用Zig实现了位向量,并在基准测试中取得了不错的结果,积累了汇编语言编程和性能优化的宝贵经验。

开发 位向量

Ruby 3.4.0 重大更新:性能提升与语言改进

2024-12-25

Ruby 3.4.0 版本带来了众多令人兴奋的更新!语言层面,新增了块参数引用语法,并对字符串字面量、关键字散列参数和索引赋值进行了改进,同时增强了对异常处理的支持。核心类库方面,Array、Hash、IO::Buffer、Integer、String等类都得到了优化,并新增了多个实用方法。此外,YJIT 进行了大幅改进,提升了性能和内存利用率。标准库也进行了更新,例如JSON解析速度提升了1.5倍。该版本还增强了对多核处理器的支持,并提高了垃圾回收的效率。

开发 3.4.0

Ruby 3.4.0 正式发布:性能提升与新特性详解

2024-12-25

Ruby 3.4.0 正式发布!此版本带来了诸多改进,包括性能显著提升的 YJIT 编译器,新的模块化垃圾回收机制,以及方便易用的 `it` 块参数引用语法。此外,默认解析器切换至 Prism,socket 库增加了 Happy Eyeballs V2 支持,提升网络连接效率。一些核心类库也进行了更新,并修复了一些 bug。此版本还包含对字符串字面量修改的弃用警告,以及对关键字 splatting 的改进。

开发

ScyllaDB开源战略调整:转向单一版本,提供免费企业版

2024-12-25
ScyllaDB开源战略调整:转向单一版本,提供免费企业版

ScyllaDB宣布将专注于单一版本ScyllaDB Enterprise,并终止AGPL许可的开源版本。为社区提供免费的ScyllaDB Enterprise,包含此前仅限企业版的功能,例如性能、效率和安全特性。免费版限制为最多50个vCPU和10TB总存储空间。此举旨在简化产品线,同时为用户提供更强大的免费选项。

开发
1 2 200 201 202 204 206 207 208 213 214