dogwood008の開発メモ!

最近のマイブームは機械学習, Ruby on Rails。中でも機械学習を使った金融商品の自動取引に興味があります。

【git】カレントブランチをpushするワンライナー

要旨

git push origin `git rev-parse --abbrev-ref HEAD`

詳細

git rev-parse --abbrev-ref HEADは、現在居るブランチの名前を返してくれる。下記がその例。

$ git rev-parse --abbrev-ref HEAD
feature/add_comission

git push origin ${BRANCH_NAME} は、 origin に対し、 ${BRANCH_NAME} をpushする。

なのでこれを組み合わせると、ワンライナーで現在居るブランチをリモートにpushできる。

ちなみに、筆者は下記のようにエイリアスに登録して使っている。

alias gpuo-='git push origin `git rev-parse --abbrev-ref HEAD`'

参考

git-scm.com

git-scm.com

【JavaScript】classの使い方、Rubyとの対比

要旨

class Person {
  constructor(name, height, weight) {
    this.name = name
    this.height = height
    this.weight = weight
  }

  getData () {
    return {
      name: this.name,
      height: this.height,
      weight: this.weight,
    }
  }
}
taro = new Person('taro', 180, 60)
console.log(taro.getData())  // => {name: 'taro', height: 180, weight: 60}

classをJSで使用する例
classをJSで使用する例

詳細

Rubyで書いたらこんな感じ。

class Person
  def initialize(name, height, weight)
    @name = name
    @height = height
    @weight = weight
  end

  def getData
    return {
      name: @name,
      height: @height,
      weight: @height,
    }
  end
end

taro = Person.new('taro', 180, 60)
taro.getData  # => {:name=>"taro", :height=>180, :weight=>180}

classの定義はホイスティングされないので注意。

参考

developer.mozilla.org

【Ruby】正確な小数の計算をするなら、FloatではなくBigDecimalを使う

要旨

[1] pry(main)> 1.1-1.0
=> 0.10000000000000009
[2] pry(main)> require 'bigdecimal'
=> true
[3] pry(main)> BigDecimal('1.1') - 1.0
=> 0.1e0

詳細

1.1 - 1.0 の結果は、Float の場合は誤差が出てしまっている。これは2進数で計算するときに生じる誤差である。なぜ誤差が生じるのかは、下記のサイトでビット列を見ると知ることができるが、詳細は割愛する。

tools.m-bsys.com

BigDecimal を使うと、(精度を指定して)正確な小数計算をさせることができる。

なお、BigDecimalFloat 値を渡してはいけない。 必ず String に変換が必要である。これは BigDecimal オブジェクトが作られる前に誤差が発生することを回避するためである。 Integer ならこの問題は起こらない。

[4] pry(main)> BigDecimal(1.0)
ArgumentError: can't omit precision for a Float.
from (pry):4:in `BigDecimal'

参考

docs.ruby-lang.org

github.com