Pensieve: 2003

2020-03-27 19:13

所观所读

和好友闲聊, 得知这位认识了近十年的同学现在仍在努力读书. 感觉很惭愧很寄生虫, 所以翻出了高中时读过的华盖集重读. 相对于很多网上的评论说鲁迅的文章对现在社会更有意义, 我倒是觉得如果要说从文章里抽取出名言警句, 那么这些内容在当下也许是有意义的, 但是大部分讨论已经完全脱离现在的社会了. 例如手上这本华盖集, 一部分是和人吵架, 一部分是在说救亡图存的问题, 还有一部分是说社会热点(比如北师大学潮). 和人吵架的内容有现实意义吗? 那时的社会热点对现在有意义吗? 救亡图存的内容中也许确能拾取一些只鳞片爪来证明先生的高瞻远瞩, 但是如果放回原文, 你也会发现这些拾遗往往更应该生活在那个已经消逝的年代.

所玩

这个月主要玩了三个游戏, 马里奥奥德赛, 暗黑三和Automachef.

Mario通关了之后就放下了. 一方面, 这个游戏我是有实体卡, 换卡虽然不算太麻烦, 但终究是一个事情. 另外, 这个游戏也算是小解密类, 但是相比塞尔达, 我总觉得这个解密的设计不如绿帽子大气, 有些地方甚至是怀着恶意. 游戏中的收集元素不算特别吸引人, 就算了.

暗黑三这个赛季用了巫医, 也算是我最喜欢的角色, 用梦魇宝石顺利刷到了70大秘境. 送的太古是杀猪刀, 不过巫医没什么用(似乎可以留给追求攻速的法师用). 70后的进度却是很慢, 久久刷不到一个远古的祭祀刀. 后来转变思路用新套装, 直接由70跳到了95, 而且也出了一个远古神圣收割者, 后面磨蹭磨蹭也就到了100, 按要求毕业了.

Automachef是一个让我眼睛一亮的游戏. 相对于传统的编程游戏(明天公司的两款), 这个游戏更潜移默化一些. 有些关卡的挑战性设计得恰到好处, 你必须在多个限制条件中作出权衡. 总体来说, 玩这个游戏有点学习一门新编程语言的感觉. 目前玩了十几关, 后面会继续.

psyml和buildkite

本来想这个月开源psyml, 但是本月花了大量时间在buildkite上, 所以psyml的计划只能暂缓, 因为我们至少得先吃吃自己的狗粮不是? :)

关于buildkite, 我已经完成了一篇blog, 接下来应该还会有一两篇blog产出, 不过这几篇应该会是英文的, 原因是buildkite在中文世界受众真的很小. 然而, 这部分工作如果不写出来, 又有点浪费, 所以下面简单谈下我们是怎么设置buildkite, 让整个系统更安全的.

首先简单介绍下, buildkite是一个CICD工具. 类似Jenkins, 不过各种API比Jenkins要好用很多. 它的官网在这儿, 文档在这儿. 有一个安全设置的页面在这儿.

接下来吐槽下Buildkite里面默认的基于S3的秘密管理方案. 首先, 用S3来管理秘密就是一个很蠢的事情, S3是用来放文件的, 有着极其繁复的权限控制条例, 稍一不下心就会犯错, 而且犯下这种错误后后果很严重, 那些版本控制系统里的部署密钥被盗还算其次, 因为大多数正常人都会给那个密钥设上只读的权限, 但是如果有其他API token之类的东西放在S3里面被盗了就可能出大事了. 相比之下, 用Parameter Store来管理这些秘密是明显更合理的做法. 其次, 这个S3的安全插件速度很慢, 就我的理解应该一两秒钟就能完成的事情, 它需要十秒左右. 注意, 是每个构建的步骤都多了这十秒, 实际上还是挺浪费时间的. 再次, 这个插件的内部设计也不算太合理. 正常情况下, 一个代码库可能有一个或多个pipeline, 但是在S3插件里面, 每个pipeline都需要一个部署密钥, 本应该是绑定到代码库的部署密钥在插件里硬生生被要求成每个pipeline有一个key, 就我来看, 可以算是一个bug.

这次我们有机会重做Buildkite配置, 我们做了这样几件事情.

之前, 在过程改进过程中, 我新加了一个代码库叫Buildkite manager, 用来管理我们的Buildkite实例们. 当时, 我们有default, knapsackdocker-builder三个队列, 每个队列对应于一个Buildkite实例, 这个实例是一个AWS Cloudformation stack, 里面有ASG等资源来启动EC2服务器做计算. 我当时做的事情是写了一个Python脚本来收集一些信息. 例如, 所有这些EC2都使用了spot instance以节省费用, 但是这个spot instance的竞价应该是多少, 我写了简单的逻辑来抓取历史平均价格, 乘上我们自定义的溢价值(120%), 就是竞价价格, 这样我们在配置文件里面只需要给出实例类型, 不用去操心价格了. 这次, 我们将default拆成了三个队列, 分别是cde, infradefault. (CDE是Card Data Environment的缩写). 我们在IAM级别限制了每个agent能够访问到的Parameter Store的命名空间. 即, default队列上运行的任务没有权限读取到infra命名空间下的秘密.

另外, 我们用自己编写的一个在agent上的插件替换掉了默认的S3插件, 这个插件能够保证, 即使一个坏用户强行修改了自己的pipeline步骤中的队列, 我们也能判断出这个构建所在的pipeline是否在白名单里, 如果不在白名单里, 这个构建仍会失败. 所以, 只要我们在Bitbucket里控制好权限, 只给部分人员以碰infra/cde的权限, 另外在Buildkite里面控制好访问权限(实际上, 我们是在okta里面控制这些权限的), 其他人就完全没法读到这些秘密.

这个插件目前是开源的, 可以在这儿找到, 我们仍在不断完善这个插件, 让他更清晰, 更易懂, 也更安全.

写到这儿, 仍有些意犹未尽的感觉, 更多详细信息留到下个月吧 :)

SETI

偶然看到SETI@Home将要关闭的消息, 写点自己的回忆吧.

开始玩这个是本科高年级和研究生时, 当时玩Linux时偶然看到了这样一个计划, 觉得很有意思, 就把自己实验室的台式机和自己的笔记本都接了进去. 那个时候, 台式机不关机通宵挂着跑, 也顺便百合挂站. 后来有段时间SETI哪儿拿不到活, 还转去rosetta跑了一点东西. 自己当时后台任务, 计划任务以及系统启动脚本, 都是拿boinc当实验学会的. 回头看看自己当年的机器, 满满的回忆.

新冠下的日常

我在上旬每天新增只有个位数, 没什么人回国的时候曾打算过坐飞机回国避疫, 也找过单位同事讨论这样一种情况会如何, 但是后来被家人劝服了. 总体来说, 现在的单位对个人选择的确很是支持, 包括当时我提出的work from China都没什么异议. 后来, 我看到每日新增确诊达到十位数的时候就直接WFH了几天, 那几天公司都还在正常办公, 直到又过了几天, 公司才要求大家尽量在家办公. 为此, 还提出如果需要借用公司显示器的可以搬回家, 如果需要购买显示器或其他装备的可以通过公司, 用税前工资购买.

现在我太太仍旧每天需要戴着口罩去上班. 我自己大概八点一刻起床, 洗漱后吃过早饭九点钟开始干活, 中午十二点左右午饭, 饭后会小睡一会儿到1:45醒来, 处理一下事务后2:15参加每日的standup. 下午会一直坐在床上办公到四点左右, 起来继续做事到五点左右下班. 最近事情多, 所以晚上偶尔还会花半小时到一小时左右做做事情, 写写东西. 岳父母和我们住一起, 所以娃没怎么对我的工作带来问题. 只是偶尔会乱入Zoom会议而已(你好, 这位是我的项目经理).

我们在车库里预备了一些食物应急, 今天买的一个二手冰箱也到货了. 目标是努力降低去超市的频率. 即使去超市, 也是认为那儿会遇到的每个人都是患者, 尽力减少各种接触. 到家后先在车库拿有消毒湿巾擦拭所有物品的表面才放进家门. 到家后第一件事就是洗澡, 减少污染. 我希望这些看来比较偏执的做法能够减小我们被感染的几率.

平常会看的媒体不算太多, 朋友圈转载偶尔会翻一下, 主要看看reddit上的新冠/墨尔本和澳大利亚频道, 另外也看下Twitter. 中文的媒体这个时候的偏向性比较强, 看起来不舒服.

另外, 小姑娘前一周有点发烧, 腹痛, 我们当时很着急, 担心她在托儿所被传染了. 尤其是在就医开了抗生素后第一次服药没什么作用早上起床仍有发烧时, 有点慌神, 后来经同学指点, 找到微医, 挂了一个同济的儿科专家号, 聊了几句, 放下心来, 第二天娃也就完全正常了. 感谢这个应用给我们带来的诊疗和安慰.