basyura's blog

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

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

ゼルダの伝説 ブレス オブ ザ ワイルド - 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 を取り入れる風でもないしテンプレートに力を入れ始めたりで終わりも近いのかもしれない (フリープランで惰性で使ってるけど)。

休み

ひさびさ。

大きめのシステムアップデートして 1 週間常駐。問題がいくつか発生して延長。そうなるだろうなとは思っていたもののテストはかなりしていたので残念。ひとまずの対策で回避して退却。そして休み。さすがに働きすぎたが一番辛かったのはパイプ椅子生活と食生活。

  • 朝 : コンビニのサンドイッチ
  • 昼 : コンビニのおにぎり
  • 夜 : コンビニのおにぎり

が続いたことか。対応で忙しかったのもあるけど周りにこれといった飯屋がなく青いコンビニに行っても飽きてきて食べたいと思えるものがこれといってなく「これでいいか」とおにぎりを食べてごまかす。最後の最後でカレーを食べに行けたのが良かった。美味しかった。

今回分かったこと。

  • 現地にいても何が問題なのかを把握するのに時間がかかる (ヒアリングしても本当の問題点がぼやける)
  • 現地にいてもシステムが動いてる実感がやっぱりない (なんでだろう)
  • いくらテストしても不具合は出る

関わる人たちの負荷を考えないとすると小さい修正をちょっとずつあててやり過ごしたいのだけど敷居が高い (ぐらい身動きがとりずらいシステムになってしまった)。

正規表現判定

ログをゴニョゴニョして変換したいことがあって C# で書いてたのだけど激しく遅いので golang で書き直した。 golang は正規表現が遅いと書いてあるのだけど諸事情により exe で渡して済ませたいのでひとまずこれで。 でも書き方によって早くならないかなと思って試してみる。

go version go1.10.1 darwin/amd64

package main

import (
    "fmt"
    "regexp"
    "time"
)

func main() {
    line := "[100][200][300][400][500][600][700][800][900]"
    // 194.370089ms
    //regex := regexp.MustCompile(`\[(.*?)\]\[(.*?)\]\[(.*?)\]\[(.*?)\]\[(.*?)\]\[(.*?)\]\[(.*?)\]\[(.*?)\]\[(.*?)\]`)
    // 172.41378ms
    //regex := regexp.MustCompile(`\[(\d*?)\]\[.*?\]\[(\d*?)\]\[.*?\]\[(\d*?)\]\[.*?\]\[(\d*?)\]\[.*?\]\[(\d*?)\]`)
    // 167.32932ms
    //regex := regexp.MustCompile(`\[(.*?)\]\[.*?\]\[(.*?)\]\[.*?\]\[(.*?)\]\[.*?\]\[(.*?)\]\[.*?\]\[(.*?)\]`)

    start := time.Now()
    i := 0
    for {

        regex.FindStringSubmatch(line)
        i++
        if i >= 100000 {
            break
        }
    }

    fmt.Println(time.Since(start))
}

ruby 2.0.0 で試してみる。

line = "[100][200][300][400][500][600][700][800][900]"
# 94.829ms
regex = /\[(.*?)\]\[(.*?)\]\[(.*?)\]\[(.*?)\]\[(.*?)\]\[(.*?)\]\[(.*?)\]\[(.*?)\]\[(.*?)\]/
# 85.917ms
#regex = /\[(\d*?)\]\[.*?\]\[(\d*?)\]\[.*?\]\[(\d*?)\]\[.*?\]\[(\d*?)\]\[.*?\]\[(\d*?)\]/
# 96.525
#regex = /\[(.*?)\]\[.*?\]\[(.*?)\]\[.*?\]\[(.*?)\]\[.*?\]\[(.*?)\]\[.*?\]\[(.*?)\]/

start = Time.now

for i in 0..100000

  if line =~ regex
  end

end

puts (Time.now - start) * 1000