如何在跳板机背后的服务器上使用 VS Code Remote - Containers

zh

假设有如下网络拓扑:

LOCALSERVER J202.X.X.XSERVER B10.X.X.XJUSERBUSER

其中 Server J 是跳板机,Server B 是目标服务器。现在需要让 VSCode 经由 Server J 连接到 Server B,并在 Server B 上使用 Remote - Containers 插件开启一个容器。

READ MORE

Cohesive Digests for Ints and Floats

en

On developing sdxtra there comes a problem that is to calculate cohesive digests for numeric values, in a way agnostic to their types. This post discusses the problem and presents solutions in Go, though the ideas are applicable to other languages as well.

READ MORE

Rust 中的隐匿概念 —— Place(位置)

zh

在本文开始前,我们先看一个奇怪的问题。以下两个函数,为什么 reborrow_good 能通过编译,而 deref_bad 不能?

fn reborrow_good(p: *const i32) {
let _p = &raw const *p;
}

fn deref_bad(p: *const i32) {
let _v = *p;
}
READ MORE

一尺之槌,日取其半,1075日而竭

zh

今天的故事源自数月前我在 r/learnpython 上回答的一个问题。以下是对该问题的转述:

将 64 位浮点数 1.0 不断除以 2,多少次后恰好变为 0?

x, i = 1.0, 0
while x:
x /= 2.0
i += 1
print(i) # 1075
fn main() {
let mut x = 1.0f64;
let mut i = 0;
while x != 0. {
x /= 2.0;
i += 1;
}
println!("{}", i); // 1075
}
let x = 1,
i = 0
while (x) {
x /= 2
i++
}
console.log(i) // 1075

古语云:“一尺之槌,日取其半,万世不竭”。但很显然,此话不适用于这个问题。浮点数的精度是有限的,当 x / 2 足够小时,浮点数终无法表示,便会得到结果 0。如以上代码所示,循环将终结在第 1075 次。

1075 次。这表明 64 位浮点能表示的最小数在 $2^{-1075}$ 这个量级,再小的数超出了表示范围,也就归于零了。但 1075 这个数很奇怪,它离 1024 很近,但又多出来一些,有零有整的,这是为什么呢?

READ MORE

老生常谈:使用 Cloudflare 自选 IP 加速站点访问

zh

本站此前是依托 Github Pages 搭建的,即静态文件托管于 Github 上,再将自定义域名 i.hsfzxjy.site CNAME 到 hsfzxjy.github.io。这种方案免费是免费,但国内的访问速度不甚良好,有几个省甚至出现了超时的现象。为了优化访问,本站现将静态文件迁移至 Cloudflare Pages 上,并使用 Cloudflare 的自选 IP 加速访问。

READ MORE

将 Base64 编码的数据快速转换为 Uint8Array

zh

为了方便节省请求数,有时我们会将二进制数据以 Base64 编码的形式嵌入 HTML 或 JavaScript 中,再于运行时解码成 Uint8Array,进行后续运算。然而浏览器没有提供直接的 API 来完成这种解码转换,需要我们自己实现。本文介绍两种快速的解码方法。

READ MORE

新增域名 monad.run

zh

本站将新增一个域名 monad.run,此后旧域名 i.hsfzxjy.site 也将继续保留,与新域名共存,二者皆可用于访问。

新增一个辅助域名,主要考虑到旧域名没有元音不好拼读,不利于读者记忆与传播。此前一位 Reddit 用户 u/Aliics 曾就“hsfzxjy”一名评论道

So many people have problems remembering “xkcd”, but you’ve ramped that up to another level with your username.

就是说,我的用户名如著名的漫画网站“xkcd”一样难记。这当然是戏谑之言,但事实确如此。除了不方便记忆,原域名甚至可能让杀软产生误报。如另一位 Reddit 用户 u/sheepdog69 所说,hsfzxjy.site 被 Bitdefender 列为了钓鱼网站。下面有人追评认为此种行为与域名直接相关,但也只是推测。无论如何,这种潜在的影响也是不利的。

那新域名 monad.run 是怎么选取的呢?我有两方面的考虑。其一当然是经济性。域名说到底只是一个工具,为一个自用的域名花太多钱,有些本末倒置。.run 域名价格普遍在每年100元左右,相对较合理。其二是与站点主题相关。本站发布的多是技术内容,域名多少也要和技术相关。而 Monad 是函数式编程中的一个重要概念,了解 Haskell 的读者应该较为熟悉。run 又有“运行”之意,monad.run 便是一个不错的选择。哪怕是不熟悉 Haskell 或是非技术领域的读者,monad 的拼写也与其预期读音高度一致,从而易于记忆,其也不算过于常见的单词,不致落入俗套。

在部署方面,目前仅是将 monad.run 302 跳转为 i.hsfzxjy.site。本来最理想的情况是将二者皆 CNAME 到 GitHub Pages,奈何 GitHub Pages 不支持多重 CNAME,只好用此折衷方案。未来若有更好的解决方案,将会更新这一架构。

READ MORE