Pensieve: 2106

2021-06-24 21:37

Horizon Zero Dawn

这个月花了一共一百多个小时在这个游戏上, 终于全成就通关了. 感谢Youtube上的无伤通关视频给了我很多启发, 让我这个迟钝的选手能够安全撞线.

几点小杂感:

  1. 主要玩法是猎杀各种动物, 虽然名义上它们都是机器, 但是你知道的, 大多数机器都能对应到一种动物(野牛/鳄鱼/马/熊/老虎), 这样你可以名正言顺地打猎而不用担心道德上的谴责了.
  2. 相比于荒野之息, 这个游戏更偏动作一点, 不用太动脑. 而且深度比荒野之息要浅一些, 塞尔达里面除了一百多个神庙外还有九百个种子, 如果HZD要做到类似的内容, 那么花/杯子等收集物还需要大大增加. 另外, HZD音乐也就主题曲还好听, 其余的没什么让人印象深刻的配乐(荒野之息里碰到守卫者的音乐估计很多人都有阴影吧?)
  3. 不花钱的游戏(Play at home送的)最好玩.

vapor

这个月花了一点点时间在vapor上, 至少让它能够跑起来了, 有个大致的样子了. 为了简单说明这个库是用来干什么的, 我们一起来看这个例子:

from vapor import S3, Stack


class Bucket(S3.Bucket):
    VersionControlConfiguration = {"Status": "Enabled"}
    PublicAccessBlockConfiguration = {
        "BlockPublicAcls": True,
        "BlockPublicPolicy": True,
        "IgnorePublicAcls": True,
        "RestrictPublicBuckets": True,
    }
    BucketEncryption = {
        "ServerSideEncryptionConfiguration": [
            {"ServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}
        ]
    }


class S3Bucket(Bucket):
    BucketName = "website-bucket-name-o1dc0de"

为了定义一个S3资源, 我们这儿定义了两个类, 其中我们设想中的用户层的定义是S3Bucket, 而企业层的定义是Bucket. 可以看到, 用户层面只需要继承企业层的定义, 就可以很好地继承安全方面的最佳实践, 而不需要自己额外定义. 另外, 如果需要, 用户层的类也可以覆盖企业层的定义. 这是一个比较典型的企业级解决方案里的治理方法, 两者基本是正交的.

我们定义这个资源的目的自然是希望将它放到一个Cloudformation的Stack里面去, 为此, 我们定义下面这样的类:

class MyStack(Stack):
    Description = "Minimal stack with a single S3 bucket."
    Resources = [S3Bucket]

如果你对Cloudformation比较熟悉的话, 你会看到Cloudformation的影子, 而这又是实实在在的Python类. 最妙的部分是, 每一个这样的Stack类都能完全映射出一个Cloudformation的模板来, 这样可以唯一地定义一个Stack. 具体使用就是:

stack = MyStack()
print(stack.yaml)
print(stack.json)

另外, 我现在本地有一个分支是能够添加方法实现stack.deploy()来部署这个Stack. 后面也会添加那些基本功能, 比如定义模板参数, 使用Cloudformation内置函数等等.

功能上大致说到这里, 回头来看顶层的import:

from vapor import S3, Stack

实际上, 在vapor里我没有写一个S3的类, 每次有人尝试import的时候, 这个类都是动态生成的. 这样我可以避免自己陷入到troposphere得不断更新来跟进AWS变化的状况. 事实上, 如果你高兴, 你可以把上面import里面的S3换成S4, 这样所有的逻辑仍然能正常工作, 只不过最后生成出来的模板里的资源会变成AWS::S4::Bucket而已.

后续开发计划在TODO里面有提到. 除了上面提到正在做的deploy功能外, 还希望引入cfn-lint来做语法检查, 并添加一个命令来将一个已有的Cloudformation模板, json/yaml模板转换成一个python文件, 降低用户尝试的成本.

小家电

这个月买了两个小家电, 一个是在CostCo买的Sony的电视音箱, 接电视效果还可以, 而且很方便就能将手机上的音乐蓝牙外放到音响上去. 另外还趁Amazon Prime下手买了一个松下的面包机, 准备这个周末试试效果. Amazon Prime + shopback + 礼品卡打折等一众优惠算下来后, 这台机器价格是$185, 不算是史低不过也还不错了.

所观所读所听

拜Apple Music更新所致, 这个月加了不少新专辑:

HZD的原声, 里面就一首歌Aloy主题曲. 给岁月以文明. The Masked Pianoman的Magic, 钢琴曲, 做事的时候可以听. Rosey Chan的Sonic Apothecary, 就觉得普通好听, 哪天听腻了再删吧. Ludovico Einaudi的Cinema, 好像没几首新曲子不过还是收着吧(反正不花钱不是) Pentatonix的Auld Lang Syne, 感觉没有Betsy Phillips & Robby Hecht的版本好听.