logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

npm 生态遭遇供应链攻击:color 包被投毒,每周 3200 万次下载全部受影响

这次事件是供应链安全问题的又一次教科书级别的演示。攻击者不需要攻破 npm 的服务器,也不需要给每个项目单独注入恶意代码——只需要控制一个高影响力的 npm 账号,就可以把毒素注入到整个依赖树中。收到"请重置 2FA"的邮件,先停下来,去官网自己登录,不要点邮件里的链接。自动化的依赖更新 PR(比如 Dependabot、Renovate)需要认真审查,而不是一看测试绿了就合并。尽可能使用或yar

#npm#前端#node.js
一行命令毁掉整个 Kubernetes 集群,然后我花了一天时间把它找回来

yq在多文件传入-i时静默合并到第一个文件,这是个反直觉的 API 设计,没有任何警告k3s reconciler 没有 dry-run 或 plan 功能,操作是不可逆的,且异步执行没有在运行命令前读 man page只看了git status而没看git diff疲劳状态下操作生产基础设施AI 给出的命令看起来很合理,但有一个非显而易见的致命副作用。

#kubernetes#容器#云原生
一行命令毁掉整个 Kubernetes 集群,然后我花了一天时间把它找回来

yq在多文件传入-i时静默合并到第一个文件,这是个反直觉的 API 设计,没有任何警告k3s reconciler 没有 dry-run 或 plan 功能,操作是不可逆的,且异步执行没有在运行命令前读 man page只看了git status而没看git diff疲劳状态下操作生产基础设施AI 给出的命令看起来很合理,但有一个非显而易见的致命副作用。

#kubernetes#容器#云原生
Rust 中的递归迭代器:一次让编译器教你理解 impl Trait 与生命周期的旅程

既然不能返回一个自引用的 opaque type,那就换一个思路:自己手写一个迭代器结构体。有了正确的结构体定义,再来实现next()// 如果当前节点自己的值还没取完// 直接返回Some(val)} else {// 自己的值取完了,看看还有没有子节点// 有子节点,就把 viter 替换成该子节点的值迭代器// 然后递归调用 next():// 如果子节点有值,立即返回;// 如果子节点为空

#rust#开发语言#后端
Async Rust 近况补课:从 `async-trait` 到原生 async trait

Async Rust 正在进入一个更舒服的阶段。过去我们常常需要解释:为什么 trait 里不能写 async,为什么要用,为什么一写就多了。现在,很多普通场景已经可以直接写,这是一大步。但 Rust 仍然坚持它一贯的原则:抽象不能模糊成本,类型系统必须知道边界,异步状态机里捕获了什么、能不能跨线程、能不能被动态分发,都要讲清楚。所以,今天的 async Rust 不是“已经完全简单了”,而是“终

#rust#网络#算法
一个让我调试一周的 Rust match 陷阱

这篇文章揭示了一个 Rust 中相当隐蔽的行为:match表达式的 scrutinee 中产生的临时值,生命周期会被延长到整个match块结束。在普通代码中,这个特性使引用穿透变得优雅自然。但当临时值是一个MutexGuard时,它就变成了隐患:如果在任何一个 match arm 内再次尝试获取同一把锁,就会死锁。使用(而不是标准库的Mutex在异步代码中(持有同步锁跨越 await 点)使用Rw

#rust#开发语言#后端
在 Async Rust 中实现请求合并(Request Coalescing)

异步基础方面,我们从阻塞 I/O 出发,理解了多线程的局限性,进而引入了 Tokio 异步运行时。通过 GDB 调试揭示了epoll_wait是异步 I/O 的底层基础,只是对运行时构建的语法糖。可观测性方面,我们系统地了解了 Rust 的 tracing 生态:从基础的tracing,到的层级化展示,再到结构化 JSON 日志、OpenTelemetry/Jaeger 分布式追踪,以及这个运行时

#rust#开发语言#后端
做一个 Rust 优化 quiz,背后其实是一堂工程课

Dioxus 0.7.0-rc.1 当时宣传了 WebSocket 自动重连能力,作者临时升级,希望它能解决连接稳定性问题。但测试下来还不够。于是他加了更直接的兜底逻辑:如果 WebSocket 出错,或者 ping 几秒内没有收到 pong,就刷新页面。这不是最优雅的方案,但在现场前一天,它是合理方案。工程现场常常如此:优雅方案需要时间,兜底方案需要判断力。最后一次部署发生在上台前 40 分钟。

#rust#开发语言#后端
Rust 能帮你捕获什么,又不能捕获什么

现在把bar的定义删掉,但调用还留着。for (i = 0;i < 3;return;bar();main();foo 0foo 1foo 2由于return在前,bar()从未执行到,JavaScript 完全不在乎bar存不存在。如果去掉returnfor (i = 0;i < 3;// 去掉了 returnbar();

#rust#开发语言#后端
Rust 模块和文件不是一回事:一次讲清 `mod`、`use`、`pub use`

不行。必须有mod把它接入模块树。mod math;Rust 模块系统一开始看起来麻烦,是因为它没有把“文件系统”和“命名空间”强行绑定在一起。这其实是好事。你可以按照实现需要拆文件,也可以按照 API 设计重新导出符号。内部文件结构可以很细,外部 API 可以很简洁。crate 是编译单元。main.rs / lib.rs 是默认入口。mod 把模块接入模块树。use 只是缩短路径。pub 控制

#rust#开发语言#后端
    共 85 条
  • 1
  • 2
  • 3
  • 9
  • 请选择