this better be 3 hours long 🤩
https://www.youtube.com/watch?v=5VYsnngkS_U
https://www.youtube.com/watch?v=5VYsnngkS_U
YouTube
Project Hail Mary | Official Trailer 2
An unlikely friendship. An impossible mission. Watch the new trailer for #ProjectHailMary — starring Academy Award® nominee Ryan Gosling and directed by Academy Award®-winning filmmakers Phil Lord & Christopher Miller. Screenplay by Drew Goddard. Based on…
Forwarded from Lancern's Treasure Chest
你怎么能在生产环境里直接 unwrap() 啊?!Rust 不是这样用的!你应该先认真设计一个靠谱的错误类型,用 thiserror 或 anyhow 包装好上下文信息,然后在每一层调用链里用 ? 把错误优雅地向上传递。遇到可能出现网络抖动、I/O 超时、序列化失败这种情况,你要先写好健壮的重试逻辑、退避策略和熔断机制,并且在日志里带上 trace id,这样 SRE 才能在凌晨三点定位问题。然后你要写单元测试,把所有可能失败的路径都测一遍;集成测试里还要模拟网络异常和依赖服务挂掉的情况,确保你的代码不会一言不合就 panic。接着你要跑一下 clippy,把所有 “consider handling the Result instead of unwrapping” 的警告都修干净;还要跑 rustfmt,让代码风格保持一致。之后你才可以 commit 然后 push 。你 push 上去之后,CI 会跑 cargo test、cargo check、cargo clippy、cargo fmt –check,还有压力测试确保你的服务在压力下不会因为一个 unwrap() 就直接把整个服务集群带走。等 PR 至少经过两位 reviewer、三个 LGTM,并且 SRE 点头同意这个改动不会再次导致全球范围的 5xx 风暴之后,我才会考虑把你的分支 merge 进去。你怎么上来就直接在关键路径 unwrap()?!Rust 根本不是这样写的!我拒绝合并!
😁1
但是一旦非正常情况导致内存占用飙升 超出了预分配的空间,就既不能增加内存分配、也不能 gracefully fail,必须整个线程完全 panic 然后 crash
https://t.iss.one/SukkaChannel/1033
??? sukka 不会完全没写过也没了解过 rust 吧,正经语言怎么可能不让你 realloc,分明是写代码的人决定超出预期值后不增加分配而是 panic。gracefully fail 在这个例子下也是完全取决于代码怎么写,又不是 oom,怎么会必须 panic?
边界条件之场
但是一旦非正常情况导致内存占用飙升 超出了预分配的空间,就既不能增加内存分配、也不能 gracefully fail,必须整个线程完全 panic 然后 crash https://t.iss.one/SukkaChannel/1033 ??? sukka 不会完全没写过也没了解过 rust 吧,正经语言怎么可能不让你 realloc,分明是写代码的人决定超出预期值后不增加分配而是 panic。gracefully fail 在这个例子下也是完全取决于代码怎么写,又不是 oom,怎么会必须 panic?
从 cf 给出的片段上看,
正常应该温和一点,发现不符合预期的值先打 log,然后超得不离谱就 realloc 继续跑,宁可吃一点 performance degradation 也不该返
.append_with_names(..) 在判断超限后返回的确实是 Err, 扔给上游处理。只不过上游反手就是 unwrap 🤷正常应该温和一点,发现不符合预期的值先打 log,然后超得不离谱就 realloc 继续跑,宁可吃一点 performance degradation 也不该返
Err
边界条件之场
从 cf 给出的片段上看, .append_with_names(..) 在判断超限后返回的确实是 Err, 扔给上游处理。只不过上游反手就是 unwrap 🤷 正常应该温和一点,发现不符合预期的值先打 log,然后超得不离谱就 realloc 继续跑,宁可吃一点 performance degradation 也不该返 Err
总之就是不要对 明显不被逻辑保证 的 条件 进行类同 assert 的操作。在生产环境、关键服务上更是如此
Forwarded from 卡卡大声喵喵 (盐粒 Yanli)
很多人认为 unwrap 是这次事故的问题所在,我认为本质原因在于配置下发不够防御性,没有拦住错误配置。对于异常处理来说,unwrap 或 ? 其实是可以等价的,最终都会显示出一个 500 的页面。
https://blog.yanli.one/ideas-about-exception-catch
https://blog.yanli.one/ideas-about-exception-catch
blog.yanli.one
关于异常处理的总结和思考 | Yanli 盐粒
两种不同的异常处理的优劣,以及编程实践中面临的不同场景。
Forwarded from 小桂桂的回忆录 📒
写代码真的好容易破坏作息
明明之前和家人旅游的两周已经养好了很规律的十点睡七点起的作息,已经适应到只要到晚上十点就会困了,但是 hyper focus 着写了两天代码之后又变成凌晨才睡了...🤗
明明之前和家人旅游的两周已经养好了很规律的十点睡七点起的作息,已经适应到只要到晚上十点就会困了,但是 hyper focus 着写了两天代码之后又变成凌晨才睡了...
Please open Telegram to view this post
VIEW IN TELEGRAM
#rust iced 想要 mutate 程序状态必须通过它的 message 系统,然而 Msg 类型要求 Clone。遇到不支持 Clone 的第三方类型怎么办?只能
-
-
-
靠
iced 作者表示虽然目前并不是必须要求
Arc<Mutex<Option<T>>> 🤮-
Arc 为了 clone-
Option 为了能 .take() 拿所有权-
Mutex 为了能 Option::take靠
Arc::into_inner 拿所有权是不行的,万一 Msg 被 iced runtime 内部 clone 了就拿不到了 🥴iced 作者表示虽然目前并不是必须要求
Msg: Clone, 但这是 Elm 架构的设计理念,不打算修改: https://github.com/iced-rs/iced/pull/418#issuecomment-650637125
边界条件之场
#rust iced 想要 mutate 程序状态必须通过它的 message 系统,然而 Msg 类型要求 Clone。遇到不支持 Clone 的第三方类型怎么办?只能 Arc<Mutex<Option<T>>> 🤮 - Arc 为了 clone - Option 为了能 .take() 拿所有权 - Mutex 为了能 Option::take 靠 Arc::into_inner 拿所有权是不行的,万一 Msg 被 iced runtime 内部 clone 了就拿不到了 🥴 iced 作者表示虽然目前并不是必须要求…
If a type isn't Clone, then it means it's not made of pure immutable data, therefore it shouldn't be wrapped in a message.
深表不赞同。例如我的程序需要访问数据库,初始状态下我手上只有鉴权信息没有数据库 handle:
State {
user: "qwer", passwd: "zxcv",
db: None,
}现在我拿着鉴权信息去连接数据库,按照 Elm 的状态管理架构就是:连接成功通过 message 系统传过来一个
Msg::DbConn(DbHandle), 处理这个 Msg 拿到 DbHandle 的所有权放到 State 里:State {
user: "qwer", passwd: "zxcv",
db: Some(DbHandle),
}非常正常的需求,但是由于要求
Msg: Clone, 在第三方 DbHandle: !Clone 的情况下就只能 Arc Mutex 体操
边界条件之场
The Last Night 什么时候出啊 😫,2017 宣传片的风格现在已经到处都是了(不 https://t.iss.one/steamsteam/818
YouTube
Replaced - Official Release Date Trailer
Check out the latest trailer for Replaced, a 2.5D narrative driven action-platformer!
Set in an alternate history 1980s America, after a nuclear disaster has devastated the land. You play R.E.A.C.H, an AI trapped in the body of a human, as they uncover…
Set in an alternate history 1980s America, after a nuclear disaster has devastated the land. You play R.E.A.C.H, an AI trapped in the body of a human, as they uncover…
I really like the Helix editor.
另:这网站有股报纸的感觉 👀
Meanwhile, in the world of Vim you find Github repositories that self-describe as ‘minimal neovim configuration’ and contain over a dozen files of Lua and a few hundred lines of code full of side effects.
Needless to say, I’m not much of a fan of fancy ‘Vim-with-batteries-included’ setups like LunarVim either.
LunarVim essentially stacks a ton of plugins on top of Neovim to make it look like VSCode. I’ve never been a fan, honestly. When I used Neovim, even a moderate amount of plugin resulted in some performance issues, whereas Helix just feels a lot snappier, and less brittle.
If you’re into this, more power to you. It’s just not for me.
另:这网站有股报纸的感觉 👀
Intel 在给 11th gen 笔电的最新核显驱动中移除了 "Display Power Saving Technology" 开关,改为将用户指向 windows 系统设置。
不知道 win11 的系统设置是不是真的集成了这个开关,反正我 win10 没有 🤷。
于是在某次重置显卡驱动后我发现这个辣眼睛的傻逼 D.P.S.T. 变回了开启状态,并且没地方关。好在这篇 9 年前的文章仍然有效: Disable Intel Display Power Saving Technology on Surface Pro 4
TLDR:
取决于机型,其中一个目录下会有
把这个键值的第四个比特位设为 1 即可关闭 D.P.S.T. 。
换句话说就是
#tips #windows #intel #wintel
不知道 win11 的系统设置是不是真的集成了这个开关,反正我 win10 没有 🤷。
于是在某次重置显卡驱动后我发现这个辣眼睛的傻逼 D.P.S.T. 变回了开启状态,并且没地方关。好在这篇 9 年前的文章仍然有效: Disable Intel Display Power Saving Technology on Surface Pro 4
TLDR:
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\] 这个注册表目录下有一些四位数字子目录。取决于机型,其中一个目录下会有
FeatureTestControl 键值。把这个键值的第四个比特位设为 1 即可关闭 D.P.S.T. 。
换句话说就是
FeatureTestControl |= (0b1 << 4) 。#tips #windows #intel #wintel
Forwarded from kxxt's channel
Finally we could have newlines and trailing commas in inline tables in TOML
https://github.com/toml-lang/toml/pull/1073
https://github.com/toml-lang/toml/blob/main/CHANGELOG.md#110--2025-12-18
https://github.com/toml-lang/toml/pull/1073
https://github.com/toml-lang/toml/blob/main/CHANGELOG.md#110--2025-12-18
GitHub
Release TOML 1.1 by arp242 · Pull Request #1073 · toml-lang/toml
Fixes #928
iced 貌似支持多点触控 (
懒得自制控件了,不支持就不支持吧 🫠
iced::touch),但是没找到利用这个特性的预置控件。 iced::widget::MouseArea 对多点触控的反应类似于 "始终只有一个鼠标指针,瞬移到最新触控事件的位置"。懒得自制控件了,不支持就不支持吧 🫠
边界条件之场
I really like the Helix editor. Meanwhile, in the world of Vim you find Github repositories that self-describe as ‘minimal neovim configuration’ and contain over a dozen files of Lua and a few hundred lines of code full of side effects. Needless to say, I’m…
neovim 要内置插件管理器了 🤔
希望能改变 "什么都要插件,但插件管理器本身也是第三方插件" 的局面
希望能改变 "什么都要插件,但插件管理器本身也是第三方插件" 的局面
🤯1
AM5 插槽的 ASUS 和 ASRock 消费级主板竟然支持 unbuffered ECC 内存 👀
并且网友反馈这个「支持」是指 ECC 正常工作,能观测到纠错事件,而不是仅仅能开机。
但是这两家的主板其它方面都有点问题:
- ASRock 有概率烧 AMD 9000 系列 cpu,根据 r/asrock 上的统计数据,已经大半年了仍然没有彻底解决。
- ASUS 默认设置下会利用 WPBT 向系统注入各种各样的 ASUS 程序,卸载了还会重新注入。这种华为联想行为虽然恶心,但好在 1. 可以从 bios 里关闭; 2. linux 内核压根就不支持 WPBT, 不受影响。
#computer #desktop
PS: 趁着现在显卡还没跟着内存一起涨价,想装机又不打算再等一年两年后价格也许回落的话建议现在就忍痛入手。
并且网友反馈这个「支持」是指 ECC 正常工作,能观测到纠错事件,而不是仅仅能开机。
但是这两家的主板其它方面都有点问题:
- ASRock 有概率烧 AMD 9000 系列 cpu,根据 r/asrock 上的统计数据,已经大半年了仍然没有彻底解决。
- ASUS 默认设置下会利用 WPBT 向系统注入各种各样的 ASUS 程序,卸载了还会重新注入。这种华为联想行为虽然恶心,但好在 1. 可以从 bios 里关闭; 2. linux 内核压根就不支持 WPBT, 不受影响。
#computer #desktop
PS: 趁着现在显卡还没跟着内存一起涨价,想装机又不打算再等一年两年后价格也许回落的话建议现在就忍痛入手。