dogwood008の開発メモ!

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

Ruby

【Rails】ActiveSupport::Concernを使うと、お手軽にクラスメソッドとscopeやhas_many等の定義ができる

要旨 module M extend ActiveSupport::Concern included do scope :disabled, -> { where(disabled: true) } end class_methods do ... end end https://github.com/rails/rails/blob/main/activesupport/lib/active_support/concern.rb より 詳細 included …

【Ruby】配列のうち、どれかがtrueかを調べる Enumerable#any?

要旨 [1] pry(main)> [1, nil, false, true].any? => true [2] pry(main)> [nil, false].any? => false 詳細 全てを検査したい場合は、 Enumerable#all? を使えば良い。 参考 docs.ruby-lang.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進数で計算するときに生じる…

【Ruby】binding.pryで気が済んだので以降のbinding.pryで止まらないようにするには、disable-pry

要旨 disable-pry を入力してEnterを押すと、以降の binding.pry では止まらなくなる。 $ ruby test.rb 1 From: /private/tmp/test.rb:5 : 1: require 'pry' 2: 3: (1..100).to_a.each do |i| 4: puts i => 5: binding.pry 6: end [1] pry(main)> 2 From: /p…

【Ruby】「最低〜以上の数」を出すには、maxを使う

要旨 # 10以上の数(=最低で10)が欲しい場合 [1] pry(main)> [3, 10].max => 10 [2] pry(main)> [15, 10].max => 15 関連 blog.dogwood008.com

【Ruby】「〜を超えない数」を出すには、minを使う

要旨 # 10を超えない数(=最高で10)が欲しい場合 [1] pry(main)> [3, 10].min => 3 [2] pry(main)> [15, 10].min => 10

【Ruby】ブロックの中で特定のメソッドを呼ぶだけであれば、省略記法 & がある

要旨 (0..10).to_a.map(&:to_s) => ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"] 詳細 「Proc展開」 "Proc coercion" 等の名前で呼ばれていることがあるが、特定の呼び名は決まっていないようだ。 参考 docs.ruby-lang.org

【Ruby】p だけで出力できる

要旨 [1] pry(main)> p 'test' "test" => "test" 詳細 手っ取り早く表示させるのに便利。 参考 docs.ruby-lang.org

【JavaScript】オブジェクト同士の比較:{} === {} は false

概要 {} === {} // => false 詳細 JavaScriptでの比較は、落とし穴が多い。詳しくは参考に挙げたページを見てもらえるとわかるが、 +0 === -0 が false になったりと良く知っていないとハマりがちである。 ではどうやって object 同士を比較すれば良いか、と…

【Ruby】Object#tapのすすめ

要旨 user_id = params[:user_id].tap { |uid| p User.find(uid).name } contents = Content.made_by(user_id) ... 詳細 Object#tap は self 自身を返す。なので、ちょっと中身を覗いたりするのに便利。上記の例で言えば、 uid に self すなわち params[:use…

【Ruby】Nillableな変数を引数として受け得るなら、Object#to_sしておけば色々と便利

概要 変数に対してメソッドチェインの途中で String#capitalize 等の String クラスのメソッドが挟まる場合、変数の初期段階で Object#to_s を読んでおくと不用意に Nil#some_method が出てしまうことを回避できる。 詳細 Object#to_s は、 Object が nil の…

【Ruby, Active Support】Array#include?(Object) もあるが、 Object#in?(Array) もある

概要 %w[a b c d e].include?('c') == 'c'.in?(%w[a b c d e]) 詳細 Array#include? Ruby 標準のメソッド。一方、 Object#in? は Active Supportを require すると使えるようになるメソッド。 ただし、 Active Support全体を require する必要はなく、下記の…

【Ruby】Hash#fetchがデフォルト値を取る時、ブロックを与える方がパフォーマンスが良い

要旨 ブロックを使うのがおすすめ。 詳細 Hash#fetch は、Hashに指定したKeyが存在する際に、そのValueを返すメソッドである。 このメソッドは、指定したKeyが存在しなかった際、デフォルト値を返すことができる。その際、デフォルト値の与え方は下記の2通り…

【Rails/ActiveRecord】特定のカラムの情報だけ欲しい場合は、pluckかselectを使う

例えば、「特定の条件を持つユーザIDだけ欲しい」といった場合に有効。この時、 pluck を使うと戻り値は Array で、 select を使うと ActiveRecord::Relation が返る。 この時、 map を使うのは無駄なメモリを食ったり動作が遅くなったりするので、やっては…

【RSpec】letは遅延評価、後から上書きできる

RSpecの世界では、 let は遅延評価される。これは宣言した値が本当に必要とされる時まで評価を遅延するということを指す。具体的な例を持って説明する。 例えば下記のようなテストを行うとする。ここでは、あるAPIのエンドポイントにPOSTする際のステータス…

【Ruby, Python】開発時に通信傍受プロキシを設置した時、ルート証明書を与えて、ハンドシェイクエラーを回避する

TL;DR 各言語での設定 Ruby ENV['SSL_CERT_FILE'] = PATH_TO_SSL_CERT_FILE Python import os; os.environ['CURL_CA_BUNDLE'] = PATH_TO_SSL_CERT_FILE この文書は誰向け? サーバサイドの開発者で、通信内容を覗きたい人 暗号化されていないhttpでの通信で…

Google Speech API を手軽に試せる環境を Docker で構築した - Google Speech API on Docker

- [Google Cloud Speech API](https://cloud.google.com/speech/)をサクッと試せる環境を作った - **[github: dogwood008/google_cloud_speech_recognition_sample](https://github.com/dogwood008/google_cloud_speech_recognition_sample)** - Dockerのコ…

Ruby 2.1 と 2.2 における、URI#parseの挙動の違い

Ruby 2.1 と 2.2 における、URI#parseの挙動の違い 症状 Ruby 2.1では、URIに使用できない文字(アンダースコア、アンダーバー)を含んだ文字列( http://abc_def.com/foobar/ ※1)をURI#parseに与えた際にURI::InvalidURIErrorの例外が発生する。 2015/08/15…

gsubで正規表現を用いた置換を行う際、$1でグループの参照がうまくいかない場合は'\1'を使え

結論「gsubで正規表現を用いた置換を行う際、$1でグループの参照がうまくいかない場合は’\1’を使え」というお話。 $1, $2, ..., $nのかわりに\1, \2, ..., \nを使え。$1で良い場合Regexp#matchやString#matchや「=~」を使う場合は$1で参照できる。cool = 'co…

アイディアをカタチにする勉強会

講演情報6/18(木)アイディアをカタチにする勉強会 〜アプリ開発からサーバサイド設計までの全貌〜 @ 渋谷 TECH LAB PAAK https://atnd.org/events/66892概要期限、目標などのゴールを決めて、真剣に取り組む自分でできないことは人を頼ろう「どう継続させる…

Rails4でエラー:You should not use the `match` method in your router without specifying an HTTP method. (RuntimeError)

rails sを実行時に,「You should not use the `match` method in your router without specifying an HTTP method. (RuntimeError)」とエラーが出た際には,routes.rbに「match」メソッドが含まれていることが原因.例えば, root :to => 'thread#index' ma…

Rails3のプロジェクトをRails4へアップグレード

1. Gemfileを編集して,Rails3を使用するよう設定してある部分をRails4を使用するよう変更Rails3を使用する設定を gem 'rails', '3.2.XX'Rails4を使用する設定に変更 gem 'rails', '4.0.2'2. Rails等の依存関係を修正bundle install3. 正しく動作するか確認r…

さくらのVPSセットアップ,Ruby1.9のインストール

1. ユーザの作成(Local)$ ssh root@(IPアドレス)# useradd (ユーザ名)# passwd (ユーザ名)# usermod -G wheel (ユーザ名) ←sudo可能にするため,sudo可能なグループに追加# visudo# %wheel ALL=(ALL) ALL%wheel ALL=(ALL) ALL# exit2. 鍵の追加(Local)$ ssh …

rvm, Ruby1.9をopenSUSE12.1にインストール

1. レポジトリ追加zypper ar http://download.opensuse.org/repositories/devel:/languages:/ruby/openSUSE_12.1/devel:languages:ruby.repozypper ar http://download.opensuse.org/repositories/devel:/languages:/ruby:/extensions/openSUSE_12.1/devel:l…

CentOSでRubyからMeCabを使う

1. ソースをダウンロード,展開$ wget https://mecab.googlecode.com/files/mecab-ruby-0.996.tar.gz$ tar xzvf mecab-ruby-0.996.tar.gz$ cd mecab-ruby-0.9962. インストール$ sudo vim /etc/ld.so.conf.d/mecab-0.996.conf「/usr/local/lib」を追加,:wq…

CentOS(さくらのVPS)にRuby1.9.3pをインストール

1. 依存関係を解決する[root@sakura ~]# yum -y groupinstall "Development Tools"[root@sakura ~]# yum --enablerepo=epel -y install libyaml libyaml-devel readline-devel ncurses-devel gdbm-devel tcl-devel openssl-devel db4-devel libffi-devel※htt…