私の歴史と今

振り返ると恥ずかしくなるのが私の歴史。だけどそのときは真面目に書いていた訳でね。そんな今の私を書いていく。

最近、英語の発音の勉強をしている

今まで意味さえ分かっていればいいと思っていたが、読み方(発音とアクセント)がわからず話す段になって困ってしまった。ということで、簡単な単語も調べている。中学単語も調べないといけない状況。

読み方と意味を覚えた単語

  • countermeasure
  • malicious
  • fixation

もっとあったはずだけど、思い出せない。。。

読み方を覚えた単語

  • opposite
  • asynchronously
  • redirection
  • security
  • vulnerable
  • vulnerability
  • interpreter (preがむずい)
  • disadvantage (tが発音されない場合があるようだ。どっちが米国英語で主流なのだろう)
  • executable
  • popular
  • upload
  • download
  • process
  • parameter
  • sanitizer
  • possibly
  • attack
  • consortium
  • Intranet
  • document

「あ」の発音が間違っているケースが多い。「お」だと思ったら「あ(æ)」だった、という感じ。 interpreterのreがほとんど発音されない。インターピターと聞こえる。

アクセントが間違っている、あるいは、全く認識していない単語も多かった。例えばintranet。日本語では棒読みしているからその習慣がついてしまっていて最初にアクセントが来るという認識が全くなかった。

意味だけ覚えた単語

  • take over
  • tailor-made
  • eventually

もっとあったはずだけど。。。

雑感

アクセントを調べていて困ったのは、recordのアクセントが名詞と動詞で変わるように、調べたアクセントが名刺だけのものなのか、動詞もそうなのか、あるいは両方なのか、ハッキリしなかったこと。

chrome拡張機能を入れたからかわからないけど、コンテキストメニューで単語意味とネイティブの音声が流れるようになっているのはいいけど、発音記号が表示されないのが面倒。別途weblioで調べ直している。全部わかるchrome拡張機能はないものか。

中学の時から正確に覚えておくべきだった。

Firefox + iMacrosの組み合わせ

Firefoxがマルチプロセス化してからiMacrosの使い勝手が悪くなった(window.contentを使用できない)ので私にとっての最適なバージョンをメモ。

Firefoxについて
  • Firefox 47?48? マルチプロセス化(「Electrolysis」通称“e10s”)
  • Firefox 50 古過ぎて、最新技術を使用しているサイトが表示できなかったりするので個人的にNG
  • Firefox 57 旧式の拡張機能を使用できなくなる
  • Firefox 59 2018/04/05時点の最新

51〜56が要件を満たす。

iMacrosについて
  • iMacros 8.9.7 最新よりも一つ前のバージョン(マルチプロセスに対応していない)
  • iMacros 9.0.3 マルチプロセスに対応したがwindow.contentにアクセスできない。(Error: Accessing content window is not supported in multiprocess Firefoxが発生)

8.9.7一択。

組み合わせ

Firefox 56 + iMacros 8.9.7の組合せになる。

ただし、基本認証が正常に動作しない(ダイアログに入力してくれない)ので、URLに入れ込む必要がある。

また、たまーに、遅延ロードされたときかな、TAGコマンドが機能しない。(場合によっては、致命的かもしれない・・・)

なお、正常にページを表示できるのであれば、もっと古いFirefoxの方が良い。そんな時は、Firefox46.0.1 + iMacros8.9.7。

RubyやRailsについて調べることが多かった

トランザクション中の例外について

トランザクションを使いたい時は、ActiveRecord::Base.transactionメソッドにブロックを渡せばいい訳だけど、その中で例外を発生させて、かつ、コミットしたい場合があった。

以下、イメージ。

ActiveRecord::Base.transaction do
  # 何かしらの処理
  if a_conditions1
    # 何かしらの処理
    record.save!
    if a_conditions2
      raise MyError.new
    end
  end
end

このままだと、save!後の例外発生でロールバックしてしまう。ロールバックされないように例外を発生させることはできないのか、と調べてみたが、結論、見つからなかった。

結局、以下のようにしたが、

ActiveRecord::Base.transaction do
  # 何かしらの処理
  if a_conditions1
    # 何かしらの処理
    record.save!
    if a_conditions2
      error = MyError.new
    end
  end
end
raise error if error.present? # トランザクションの外に出した。

以下のように例外をラップしてくれて、コミット後、ラップされた例外をraiseしてくれるようなもの(ActiveRecord::NoRollback)がフレームワークに用意されててもいいのになあと思う。

ActiveRecord::Base.transaction do
  # 何かしらの処理
  if a_conditions1
    # 何かしらの処理
    record.save!
    if a_conditions2
      raise ActiveRecord::NoRollback.new(MyError.new)
    end
  end
end

なお、transactionメソッド内のソースは以下となっている。

transactionメソッド

普通はelseが処理されてwithin_new_transactionメソッドが呼ばれる。rescueして亡き者にするのはActiveRecord::Rollbackのみ。

within_new_transactionメソッド

rescueされたら必ずロールバックされてしまう。ここでActiveRecord::NoRollbackの場合はロールバックしないようにしてくれたらいいのだけどなー。そんな単純な話ではないのだろうか。

Rubyのローカル変数が宣言されるタイミング

私はJavaから入ったのでいつも違和感がある。Rubyの場合はソースを上から解析していって、実行されなかったとしても変数宣言されているコードが存在していれば実際に宣言される。

if false
  a = 1
end
p a #=> 1

以下のようにしたくなる。

a = nil
if false
  a = 1
end
p a #=> 1

transactionメソッドに出てきた以下のようなコードも違和感。

begin
rescue Exception => error
ensure
  unless error
    #
  end
end

慣れだけの問題だけど。

Arelについて

そろそろ学んだ方がいいのかな、と調べたところ、

Arelでクエリを書くのはやめた方が良い5つの理由(Rails 5.0以前の場合)を読んで今はやめようと思いとどまった。

学ぶのはRails5.1がリリースされてからだ。

今日の所感

  • 久々にブログを書いたら、ちょっとした記事なのにめっちゃ時間かかる。
  • 従業員への要求が鏡のように自分に返ってきて勉強しなくっちゃという意欲(プレッシャー?)に変わる。
  • 久々に与沢翼の動画を見て少し感動した。彼のまっすぐなところは好きだ。
  • 去年から株と投資信託に手を出した。勧めてくる営業マンに好感を持ったからという理由だけで購入した。でも与沢翼の動画を見て、ちょっと調べてみることにした。
  • 従業員のソースレビューをした。2メソッドで1ページ半くらいのボリューム。動けばいい、というのは嫌なのできっちりレビューしたら、その修正に3時間以上かかった。必要以上な修正指示を出してしまったのかと今でも揺れている。コードが綺麗だからといってそれだけでお金を生む訳ではない。結局、動きさえすればお金を生んでくれる。修正に1時間程度かかるレベルのレビューだけをして、残りの2時間は新規のコード作りに費やした方がよかったのだろうか。