basyura's blog

あしたになったらほんきだす。

2018 年振り返り

諸事情による組織変更に伴って 4 月ごろからチームを横断して改善を進めるチームに参加することになった。現状を分析してボトルネックを見つけて改善案を提示し、担当を決め、担当とあーでもないこーでもないと進め、レビューを通してリリースする立場になった。

長年 PG 中心の活動をしていたのだけど、今年は例年に比べると実装量は 1 割以下だったように思う。コードレビューはするし、状況によってはデバッグもするし、良い案がないか試してみることはあるけれど “実装した” という手応えはなかった。今年は “特別な” 年なので割り切ってやっているけど、来年もやるのは勘弁してほしいと思っている。

複数案件が同時に動くし割り込みもあるし判断を求められるし上からはワーワー言われることもあるので忙しい上に精神的にもしんどかった。戦略とは、と何回思ったことか。打ち合わせが多すぎて1日中椅子に座ったままになっていることもザラだったので運動不足をあからさまに実感する。

気がつけば関わりたくないとずっと距離をとっていたオフショアにどっぷり。コミュニケーションに疲れる毎日。実際のところは知らないけど、基本的に良い人達なので真面目にやってくれる。それなりに信頼関係を築けたのはいいけど、メリットがあるのかというと正直よく分からなかった。「この人なら任せられる」というのがなかったのが大きいと思うが、今までの関わり方を知らないのでどっちもどっちなのかもしれない。「ここはどういうことなのだろうか?」という意図を聞くことがよくあるのだけど、こちらの質問を理解していないのかわざとなのかひたすら主張が続いて時間が過ぎることが多々あったのが一番辛かった。ある程度誘導しつつ簡潔に質問することを心がけた。できあがるコードがあまりにひどいのでレビューしまくった結果、意識を変えてくれたようなのは大きかった。「こういうときはこうした方がいい、こういう時はこう書いたほうがいい」といったことは一気に横展開していくので、パワーはすげーなと思った。来年はテックリード的なめだつ人が出てきたらいいのだけど。

国内の若者がよく活動してくれたのは良かった。最近の若者は自分が若者の頃よりできるやつばっかりだよなと改めて思う。経験値があるのでまだまだわかいもんにh(略

今年はプロジェクトのためと割り切って活動しているのもあってスキル向上が感じられないのが一番辛い。打ち合わせスキルが多少上がったぐらいか。とはいえ何もしないのも辛いので、ログを収集するツールを go で書いてみたり、解析するツールを C# で書いて kibana に突っ込んで可視化してみたりを現実逃避気味にやってプロジェクトに投入してみたりした。社内の GitLab を docker に移行してみたりとか。

去年の振り返りと、今年の抱負をみると「のんびりする」がキーワードだったのに、今年も疲れたなぁ。働き方改革とは何だったのか。

golang - elasticsearch

go で elasticsearch に接続。

package main

import (
    "context"
    "encoding/json"
    "fmt"

    "github.com/olivere/elastic"
)

func main() {
    client, err := elastic.NewClient(
        elastic.SetURL("http://127.0.0.1:9200"),
        elastic.SetSniff(false))

    if err != nil {
        panic(err)
    }
    defer client.Stop()

    ctx := context.Background()
    termQuery := elastic.NewMatchQuery("hoge", "fuga")
    searchResult, err := client.Search().
        Index("log-*").
        Query(termQuery).
        From(0).Size(10).
        Do(ctx)

    if err != nil {
        panic(err)
    }

    fmt.Println("total:", searchResult.Hits.TotalHits)

    for _, hit := range searchResult.Hits.Hits {
        var dict map[string]interface{}
        err = json.Unmarshal(*hit.Source, &dict)
        if err != nil {
            fmt.Println(err)
            continue
        }
        fmt.Println(dict)
    }
}

json.Unmarshalstruct を指定すれば map を使わなくていいんだけど @timestamp でフィールド名を定義してるので struct が定義できない難点。そもそも @timestamp でフィールドを定義するのが一般的なのかよく分かってない。

まだまだ ruby で書いてるほうが楽だけど、vim-go のサポートが嬉しい。

英傑たちの詩 (マスターモード) クリア

ゼルダの伝説 ブレス オブ ザ ワイルド - Switch

ゼルダの伝説 ブレス オブ ザ ワイルド - Switch

謎解きはそれほど詰まることは無かったのだけど、それぞれのカースガノンがなかなか倒せず。 結局、英傑の加護を有効かつツルギゴイで割と余裕の撃破。逆にこれがない場合は倒せなさそう・・・。 最後のミィズ・キョシアはツルギゴイ無しで挑んだので叩いても叩いてもライフが回復していしていくものの、受けるダメージは回数の割に強くはないので倒されることもない状態で途中でだるくなる (倒せれんわという諦め)。途中で休みに入っていたマスターソードの回復で気を取り直して矢を打ち込みまくりで撃破。ハヤブサの弓は真っ直ぐ飛ぶので攻撃力が若干低いもの使いやすくて良い。最後のムービーも良かった。いくつか取得していないアイテムがあるのとマスターモードでのガノンを討伐していないのがあるけど若干の燃え尽き感あり。

Ruby - attr_accessor

今更だけど attr_accessor で気持ち悪いところ。

class Hoge
  attr_accessor :attr1, :attr2, :attr3

  def initialize(map)
    attr1 = map[:attr1]
    @attr2 = map[:attr2]
    self.attr3 = map[:attr3]
  end

  def to_map
    { attr1: attr1, attr2: @attr2, attr3: self.attr3 }
  end
end

hoge = Hoge.new(attr1: "one", attr2: "two", attr3: "three")

p hoge.attr1 #=> nil
p hoge.attr2 #=> "two"
p hoge.attr3 #=> "three"

p hoge.to_map #=> {:attr1=>nil, :attr2=>"two", :attr3=>"three"}

attr_accessor で定義しているのだから attr1 = の代入はできて良さそうなのだけどできない。でも attr1 で取得することはできる。地味にハマることがある。というほど書いてないのだけどたまに書くとどうだったっけなと確認が必要になる。クラス内で扱うときは素直に @ 使えと覚えておけば良いのかな。

https://docs.ruby-lang.org/ja/2.5.0/method/Module/i/attr_accessor.html
attr_accessor(*name) -> nil[permalink][rdoc]
インスタンス変数 name に対する読み取りメソッドと書き込みメソッドの両方を 定義します。

このメソッドで定義されるメソッドの定義は以下の通りです。

def name
@name
end
def name=(val)
@name = val
end

[PARAM] name:
String または Symbol を 1 つ以上指定します。

マニュアルもできそうに読めるのだけどな。

剣の試練 極意 (マスターモード ) クリア

ゼルダの伝説 ブレス オブ ザ ワイルド - Switch

ゼルダの伝説 ブレス オブ ザ ワイルド - Switch

予想外に 2 回目の挑戦でクリア。ライネルは古代の弓で一掃。 マスターソードがキラキラしててバシンバシンなって気持ちいい。神獣がまだなのでどれから開放していくか。

剣の試練 中位 (マスターモード ) クリア

ゼルダの伝説 ブレス オブ ザ ワイルド - Switch

ゼルダの伝説 ブレス オブ ザ ワイルド - Switch

中位クリア。続けて極意をやったら最後のライネルで死亡。事前情報無しでやっていたので古代矢を一本残せてれば勝てただろうなぁ。その前の階の空を飛ぶガーディアンが落とせなくて矢を使いまくってしまった。古代矢ミスったし。最後はビーム跳ね返しで倒してたどり着いたのだけど。惜しかった。

Bear - Markdown compatibility mode

Markdown compatibility mode - Bear - Faq and support

いまいち違いが分からなかったのだけど設定を切り替えて入力方法のヘルプを確認してみた。

compatibility mode not compatibility mode
f:id:basyura:20181004230637p:plain:w300 f:id:basyura:20181004230648p:plain:w300


主に太字、斜体、下線、打ち消し線の記法の違いのようだ。Markdown 互換モードのままにしておく。

英字(半角)と日本語(全角)が混ざると行間が変わるという QA を出したら直ぐに直るよっていう回答がすぐ来たのだけど未だに直ってないのはもう一度問い合わせをした方がいいのだろうか。

Bear の Windows 版出ないかなぁ。InkDrop もいいのだけど windows 版はフォントが微妙感。Bear も移植されたら一緒なのかもしれないけどインラインで markdown が書けるのは非常に魅力的。

Evernote はいっこうにエディタが改善されないし Markdown を取り入れる風でもないしテンプレートに力を入れ始めたりで終わりも近いのかもしれない (フリープランで惰性で使ってるけど)。