21天入坑家用光(三):抓耳挠腮疑无路 峰回路转道又明

局域网已经万兆,接下来就是如何把运营商给的网络带宽用起来了。之前的测试我们都只跑到大概 930Mbps 左右,这主要是因为 PPPoE 和 TCP/IP 都有自己的头部,所以会对速度带来一定的损耗。运营商为了弥补这类损耗,本来就会在签约带宽上增加 10~20% 的余量,所以 1000M 的宽带,跑到 1100Mbps 是没有问题的。

不过运营商送的光猫一般都只有千兆口,那这个事情就很难解决。联通的装维小哥说他那有万兆光猫,结果带来一看,4个千兆电口……总不能 bond 起来用吧(主要是光猫不支持)?

21天入坑家用光(一):宽带活动快又好 剁起手来不得了

前一阵子我搬到了广州,而众所周知搬家之后,首先要解决的就是宽带问题,毕竟这关系到基本的生存需求。这是我第一次和房东直签整租,从而拥有了比较自由的网络改造条件。既然如此,那不如上个面向未来的光纤内网吧,我这么想。谁知道,就这么一个简单的决定,导致我折腾了21天,才堪堪通网。本是想写个简单的短文分享一下,但这其中经历的事情,足以让我写一篇系列文章了。那么这就是《21天入坑家用光》系列文章之第一篇:「宽带活动快又好 剁起手来不得了」。

宽带办理与安装

既然要组光网,那宽带怎么也得拉千兆的,运营商么自然是三大里面选——然后我去问了一圈广州电信的千兆宽带报价,怎么也得近400一个月了,这个价都够我把联通和移动都拉进来了……看了一下,这边屋子是走的明线光纤,门口有个小洞,进两条光纤是没问题了,于是就决定装联通+移动双千兆。

回顾 2021

我其实不擅长写总结展望的文章,不过既然年底拿了三个周末出来翻新自己的博客,那么可以借着这个名义,随便地水一篇文章,也算是为自己的一年收个尾吧。

其实日子一年一年过,感觉每一年都没有干什么事情,颇有一种原地踏步的感觉。这个时候还是要拿出来一些平日里的提交记录,来看看自己都做了些什么,给自己增加一点信心。

我如何用 Windows 开发 —— 2021 我的开发环境

由于搭载 macOS 的设备越来越昂贵且槽点颇多,加上微软近些年开始发力开发者体验,我的工作环境已经从 MacBook 切换到了运行 Windows 系统的非苹果机器。这是多方面因素决定的:平时玩的游戏需要在 Windows 上运行,桌面环境也是 Windows 的比较舒适耐用。

使用 Windows 进行开发工作虽说并不像在 macOS 上那样可以使用诸多 POSIX 标准的工具,但鉴于硬件性能的提升和虚拟化技术的成熟,使用虚拟机或者 WSL2 也未必是不可接受的方案。此外,随着 Visual Studio Code 的 Remote 功能越发完善,在 Windows 的窗口环境下享受和 Linux 一样的开发体验也并非不可能。

一块硬盘的救赎——尝试从无法读取的机械硬盘里拯救数据

一直在我桌面电脑上工作,服役超过4年的一块西数硬盘昨天重启电脑之后突然无法被 Windows 识别了。因为我系统里大量用户数据在这个盘,结果导致我整个 explorer.exe 乃至任务管理器都无法启动,只好打开机箱把它拔掉,才得以进入 Windows。拜此事故所赐,我才意识到原来我有那么多日常使用东西是放在这块机械盘上的——此前我一直以为除了一些下载内容和一些过程产物巨大的 C++ 项目之外别无他物。然而硬盘已经坏掉,此时想这么多已经于事无补,不如想想办法把数据能救多少是多少。

⚠警告:本文包含大量个人经验和未经大规模验证的操作记录,因参考本文操作导致的任何数据损坏或丢失,作者概不负责。数据无价,请三思而后行!

多人游戏的网络实现:帧同步和状态同步

最近在想开发一个多人的 3D 游戏。在多人游戏中,网络同步是一个重要且不可忽视的模块。由于我之前没有做过真正意义的游戏开发,在搞懂游戏的网络编程的路上走了一些奇奇怪怪的弯路,谨以此文记录我的理解与总结,辅助自己消化,也请各位读者斧正。

在多人游戏里,网络同步要实现的目的主要有:

为什么 escape 可以使 btoa 正确处理 UTF-8 编码的字符串?

浏览器在 window 上提供了 atobbtoa 两个 API 用于处理 base64 编码的字符串,然而他们不能处理非 Latin1 字符集的文本:

btoa('hello') // "aGVsbG8="
btoa('你好') // error!
// Firefox: InvalidCharacterError: String contains an invalid character
// Google Chrome: Uncaught DOMException: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.

然而,经常看到有人会这么处理 base64 编码的字符串: