半空洞男女関係

思ったこととかプログラミングしてるときのメモとか色々かいてます。メールはidそのままgmail

enumはswitchingのために使い、値として使うのであれば、structにするのが良い

2017年の記事。

matt.diephouse.com

enumを使って分析用のイベントを表現するケースが記事だと出てくる。IDだけなら良いけど、メタデータとか、他にも付与したい情報が出てくるが、structで表現するともっと改善できるよ。と書いてある。

extension AnalyticsEvent {
    var name: String {
        switch self {
        case .loginScreenViewed, .loginAttempted,
             .loginSucceeded, .messageListViewed:
            return String(describing: self)
        case .loginFailed:
            return "loginFailed"
        case .messageSelected:
            return "messageSelected"
        case .messageDeleted:
            return "messageDeleted"
        }
    }

    var metadata: [String : String] { … }
}

enumは何かを網羅するのには便利だと思うけど、分析用のイベントは別に網羅したいわけではない。

今回の例だとstructはイベントごとに個別に定義して、情報を受け取るためのprotocolを用意するのかと思っていた。けれども、イベントを表現するstructを作り、initメソッドを隠蔽する代わりに、structを得るためのメソッドやプロパティを生やしているという感じだった。

struct AnalyticsEvent {
    var name: String
    var metadata: [String : String]

    private init(name: String, metadata: [String: String] = [:]) {
        self.name = name
        self.metadata = metadata
    }

    static func loginFailed(reason: LoginFailureReason) -> AnalyticsEvent {
        return AnalyticsEvent(
            name: "loginFailed"
            metadata: ["reason" : String(describing: reason)]
        )
    }
    static let loginSucceeded = AnalyticsEvent(name: "loginSucceeded")
    …
}

方式はなんでもいいと思うんだけど、この形式にすると分析ログを送信する際にどういう情報が必要なのかが明らかになって良いなと思う。

ここ一年くらい品質やテストについて考えながら仕事をしている中で、値の網羅性を担保するというのはめちゃめちゃ大事だなと思って網羅という言葉がキーワードになりつつある。

追記

この記事に対するレスポンスでDave Delongという人が別の提案をしている記事を見つけた。protocol使えばよくて、enumでも、structでもなんでも好きにできるよと。

davedelong.com

Kindleでライセンスの上限に達してしまった場合の対処法: 端末とアカウントのリンクを解除する

Kindleは6端末までしか同時に本をインストールできないので、何年も使っていると、古いマシンや使っていない携帯にKindle本が入ったままになっていて、よく参照したい本はライセンス上限に到達してしまう。

前はちまちまアクセスできる端末を立ち上げて本を削除していたのだけど、それでも解決できなかったことがあったのでやり方を調べた。最終的には、端末とアカウントのリンクを解除すれば良い。

アカウントサービス > コンテンツと端末の管理 > Kindle > 端末 に飛んで、使わなくなったデバイスと登録の解除をすれば問題ない。

https://www.amazon.co.jp/hz/mycd/digital-console/devicedetails?deviceFamily=KINDLE_APP

バイス詳細画面に入って、本を削除してしまうと、そもそもの本自体がアカウントから削除されてしまうみたいなので注意した方がいい。

家事

 

僕も洗濯を忘れがちだけど、洗濯していることを忘れてない時もあるなとおもって、どういう時に忘れないかをかんがえてみたのだけれど、洗濯している間に家事をしていることが多いなと思った。

 

  • 溜まったあらいもの。
  • 洗濯物をたたむ。
  • 部屋を片付けて掃除機を動かす準備をする。
  • 読書をする。

 

逆に、忘れやすい時。

 

  • なんか面白いコンテンツを見てしまう。
  • ご飯を食べてる。(食べおわって、片付けのキューが入ってしまう)
  • プログラミングをしてる。(かんがえごと)
  • 選択を仕掛けた合間に出かける。

 

アラームが鳴ったときに、すぐやめられる、あるいはあと少しで区切りがつけられるといったタスクをしていると、わすれにくそう。

 

書いていて思ったけど、優先度みたいなのはありそう。食器は次の食事の時には綺麗にしたいし、取り込んだ洗濯物は放置されると目に入るのでいずれたたむことになる。洗濯は日々の導線に入りにくく、気付くのは風呂に入る前とかだったりするので悲惨なことになりやすい。

 

洗濯周りってのはいち早く取り組むべきタスクなのかもしれない。

 

ちなみに、買い物に行くときは必ず必要なものなどを家のチャットにメモってから出かけている。この習慣ができるまでにだいぶ時間がかかった。やっちまったー。を繰り返さないと自分は習慣化しないな。