Pensieve: 2407

2024-07-28 16:47

所读所观所玩

这个月游戏玩得多, 书读得少, 只有两本. 一本是韩寒的光荣日, 挺没趣的, 满眼都是往下三路招呼, 恕我欣赏不来. 另一本是冯骥才的一百个人的十年, 这本已经没有豆瓣链接了. 里面的故事不少很难读下去, 故事都是鲜活的, 作者功底更不用说, 但是不少故事的细节实在让人太痛惜, 只好放下书缓一缓. 吹牛五千年文明, 谁给我解释一下文明古国怎么会有这么野蛮的事情发生?

借着出游的机会看完了Netflix上的Spy x Family, 标准泡面番, 杀时间可以看, 没大意思, 机械降神太多了. 另外看完了About Time这部电影, 这个更有意思一点, 人生如果可以这样回溯, 我也大有可能和男主的父亲一样, 靠反复看书来遣有涯之生了. 里面关于心态的tip也很厉害, 每天你遭遇到的事情都可能是一定的, 但是你的心态是自己可以控制的, 过得积极向上一点利人利己.

原神继续攒彩球, 看着4.8上半的武器池还行, 捞了几把西弗斯, 给万叶的武器加了一点精炼, 没出金. 现在限定的pity是50多, 限定武器有60, 常驻也有50多, 彩球有一百一. 4.8这个新版本的地图开得差不多了, 长期历练点的改进真不错, 可以放心游玩不用攒地图/宝箱了. 目前5.0的trailer没太吸引我, 几个人物都不像是原神世界里走出来的一样. 除了原神外还玩了回到未来1999宋上繁华. 前者我沉迷地玩了两周左右, 很有意思的是, 这个游戏有两个服务器, 国服比我玩的世界服要快大概半年左右, 所以有不少东西可以参考已有攻略. 这也让我看到数值膨胀比较严重, 所以零氪的我就主动退坑了. 退坑前拿到了曲娘/伊索尔德/兔毛手袋/远旅/温妮弗雷德这几个六星, 回合制战斗技巧要求也没那么高(计数和加减法就行), 没太多意思. 话说回来, 故事剧情, 配音和音乐都值得好评, 游戏的调性是在的. 后者是一个宋朝2D版的都市:天际线. 剧情模式目前卡在了卜算子这一关, 深恨乱折腾, 乱往下摊派的官家(皇上). 游戏数值系统设计不算太好, 很多建筑组合是简单粗暴地翻倍, 不过中国风的画面还是勉强让人能够继续玩下去.

Marysville

月初的时候, 我们一家从墨尔本开车去Marysville玩了几天. 这个小镇曾在2009年被山火摧毁, 但是我们这次去的时候已经完全看不到山火痕迹了. 这个小镇不大, 镇里最显眼的建筑可能就是我们这次住的Peppers酒店了. 我们这次去的主要目的是带着娃去附近的Lake Mountain Alpine Resort玩雪. 我们待的这几天运气不好, 气温略高于零度, 所以也没算见过雪花绽放的气候. 但是Resort里面提供了人造雪坡, 娃可以在里面玩平底雪橇, 也还行. 主要问题是住在镇上的时候, 实在没有合适的餐饮, 天天吃炸鱼薯条不是长久之计, 只能挖空心思地拼凑. 我们本来预备了一周左右的行程, 也就因为没有真雪和没有吃饭的地方而提前下山了. 倒是镇上没有吃饭的地方让我想着, 如果山上开一个中餐饺子馆, 生意应该不会太差.

kubectl cp

这个月工作中接到一个需求, 要给我们的一个内部传文件的工具加上进度条, 这样在传大文件的时候, 我们可以更好地估计时间. 这个工作看起来不算太难, 但是实际钻进去才发现是个坑. 我们这个文件的传输实际上是在调用kubectl cp, 而这个命令不支持提供进度条. 再往底层了说, 你在容器里怎么把文件传输出来的同时能够把文件的大小给出来? 现在kubectl cp的实现实际上是tar然后在本地解压, 这样处理的好处是容器里只需要有tar, 客户端可以不做任何要求, 传输就可以完成. 但是tar本身不支持进度条.

2010年刚毕业的我, 在翻译SCP原理这篇文章的时候, 不会想到, 我能够帮到十多年后的自己. 否则你在IT行业泡很多年, 也大概率不会碰到需要了解scp协议的场景, 或者即使读到了这个实现的原理, 转眼就可能忘了, 不会将kubectl和scp联系起来. 不卖关子了, 这个命令可能长这样:

kubectl exec pod-name -- sh -c 'file=/tmp/test1; name=$(basename $file) ; size=$(wc -c $file | cut -d " " -f 1); echo "C0644 $size $name"; dd if=$file bs=8192 2>/dev/null; printf "\0"' | scp -t /tmp

这个命令会在当前的kubectl context里面, 在pod-name这个pod内执行一个系统命令. 这个命令是一个shell脚本, 它会读/tmp/test1这个文件, 拿到文件名和大小后拼成一个SCP协议消息:

C0644 $filesize test1
$(file content)
$(EOF)

上面这个执行的结果会通过管道传递给本地的一个scp命令. 这个scp命令启动时使用了一个隐藏flag, -t, 表明它是一个文件的接收端. 收到上面的协议消息后, scp会创建这个文件, 并且把收到的$(file content)写进去. 另外, 那个单行shell脚本里使用了dd来分块文件而不是直接用cat, 这样可以避免一次将文件全部读入内存.

对容器来说, 上面这个hack要求容器里有coreutils, 而在客户端方面, 要求客户端有scp命令. 幸好, 对于我来说, 这两点都能成立.