読者です 読者をやめる 読者になる 読者になる

u16suzuの blog

u16suzu のブログです。

リトライ処理のメモ

Rubyでリトライ処理をする際のテンプレ。再帰を使って綺麗に書ける。 class RetryException < StandardError; end def foo p Time.now raise RetryException end def retry_foo( rc = 3) begin foo rescue RetryException => ex # RetryException以外はretry…

Object#methodについてメモ

この書き方ができるの知らなかった. # レシーバがself. (Object#methodはレシーバとメソッドの実態を封入する.) [1,2,3].each( &self.method(:puts) ) [1,2,3].each( &method(:puts) ) # selfを省略できる [1,2,3].each{|i| puts(i) } こちらはたまに使う. #…

定数を定義する

module Constants GOLD_DEFAULT = 100 ITEM_MAX_COUNT = 255 end p Constants::GOLD_DEFAULT, Constants::ITEM_MAX_COUNT # => 100 # => 255 p Constants.constants # => [:GOLD_DEFAULT, :ITEM_MAX_COUNT] 定数は初めだけ大文字であればよいのだが、全部大…

実引数側でのアスタリスク(*)の使用例メモ

実引数側でのアスタリスクの使用例メモ。配列オブジェクトを展開してメソッドの各引数に入れてくれる。便利。 def foo(name, val) "#{name}: #{val}" end ar = [[:a, 1], [:b, 2], [:c, 3]] ar.each do |elem| puts foo(*elem) # here end こちらの記事のsci…

scopeの使い方メモ

よくググるのでメモ scope :available, -> { where('deleted = false') } scope :available, -> { receivable.opened.showable } # 引数あり scope :find_by_friend_ids, -> friend_ids { where( target_id: friend_ids ) }

[キーワード引数] キーワード引数の使い方メモ

よく忘れるのでキーワード引数の使い方のメモ. 2.1からarg1のようにキーワード引数のデフォルト引数は省略できるようになった. def foo( arg1: , arg2: "arg2") puts "#{arg1} #{arg2}" end # 定義時に省略したarg1は呼び出し時には省略できない.(ArgumentEr…

enumのメモ

定義 class Log < ActiveRecord::Base enum reason: { login: 0, purchase: 1, finish_game: 2 } end 呼び出し 以下のように書いておくと、後から変更が必要になった時にわかりやすい pry(main)> Log::reasons[:login] => 0 全部欲しい場合 pry(main)> Log::…

Rubyのメタプログラミングメモ

Classをインスタンス化する時にHashで渡した値でInitializeするクラスのテンプレート class Person attr_accessor :name, :age, :address def initialize( hash={}) if block_given? yield( self ) else hash.each do |k, v| public_send("#{k}=", v) if res…

Rubyの特殊変数メモ

$! : 最後に発生した例外オブジェクト $: : Rubyライブラリの検索パス, $LOAD_PATH $0 : 実行中のRubyスクリプトのfile名 $/ : 区切り文字 $, : デフォルトの出力フィールド区切り文字列 参考: module Kernel (Ruby 2.1.0)

Classをインスタンス化する時にHashで渡した値でInitializeする

Classをインスタンス化する時にHashで渡した値でInitializeする class Person attr_accessor :name, :age, :address def initialize( hash={}) if block_given? yield( self ) else hash.each do |k, v| public_send("#{k}=", v) if respond_to?("#{k}=") en…

Hash.newにブロックを渡す

以下の記事を読んで初めて知ったのでメモ。 Ruby で メモ化カッコカリ( #rubytokai 発表メモ) - 名古屋で数学するプログラマ(仮) Hash.new にブロックを渡すことができる。 このブロックはすぐには実行されずに、h["key"] と言う形で参照されたキーがhash…

オブジェクトのパラメーターとメソッドの引き数名が同じ時は、メソッドの引数が優先される

オブジェクトのパラメーターとメソッドの引き数名が同じ時は、メソッドの引数が優先される。 もしも、パラメーターを呼びたい時はselfをつける。 class Foo attr_accessor :name def bar(name) p name # => "aaa" 引数が優先されている p self.name # => "do…

2016/8/1(mon)の日記

プロジェクトで使っている bundler で入れたgemの調査をするためのコマンドをbashで書いた。 Ruby 書くときは atom がメインエディタになりつつある。 RubyMineは重いので、コードリーディングの時だけ使っている。 ### bundler でインストールした gem を編…

「Rubyのしくみ」(Ruby Under a Microscope)を読んだ

「Rubyのしくみ」(Ruby Under a Microscope)を読みました。 Rubyのしくみ -Ruby Under a Microscope-作者: Pat Shaughnessy,島田浩二,角谷信太郎出版社/メーカー: オーム社発売日: 2014/11/29メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を…

2つの proc を合成して1つの proc にする

# 2つの proc を合成して1つの proc にする def foo(arg1, arg2) Proc.new do arg1.call arg2.call end end p1 = Proc.new { p 123} p2 = Proc.new { p 456} res = foo( p1, p2 ) res.call # => 123\n456

Rubyで行列とベクトルの演算

固有ベクトルは任意の行列m を適用した際に,向きが変わらないベクトルのこと require 'matrix' m = Matrix[ [2,1], [1,2] ] v1 = Vector[1, 1] v2 = Vector[1, -1] # v1は m の eigen vecotr p m * v1 # => Vector[3, 3] # v2 is eigen vector of matrix m t…

Rubyで設定系DSLを書いてみた

こちらのスライドを参考にしてRuby で設定系のDSLを書いてみました。 sixeight.hatenablog.com ところどころ、コメントを書いて理解しながら書いてみました。 # 設定系DSL class Awesome class Config attr_accessor :hoge, :fuga # (a) attr_accessor :method …

よく使うクエリパラメータ系のメソッドを使い回せるようにする

ページネーションがあるAPIを作るとき毎回書くのが大変なので共通化した。 base_controller.rb に書いておくと、他のコントローラから使い回せて便利。 def params_page params[:page].try(:to_i).presence || 1 end def params_site_ids params["site_ids"].tr…

自分で作ったクラスで Enumerable モジュールを include して使う

class CatList include Enumerable def initialize(*cats) @cats = cats end def each for v in @cats yield v end end end cats = CatList.new( "mike", "cha", "tora" ) p cats.map(&:upcase) # => ["MIKE", "CHA", "TORA"]

セッターを定義する

何も代入していないけれどもw class Man def age=(value) p "I am #{value}years old" end end Man.new.age = 3 # => "I am 3years old" Rubyをまたやることになりそうなのでリハビリ中。

あるクラスのインスタンスメソッドの一覧を取得する

class Human def say p "hello" end end p Man.instance_methods(false) # => [:say, :age=] 任意のクラスが include しているモジュール一覧を表示 p Array.included_modules # => [Enumerable, Kernel]

画像ファイルの名前に @2x をつけるスクリプト

# rename.rb # ex. hoge.png => hoge@2x.png require 'pathname' require 'fileutils' Dir.entries('.').each do |entry| if Pathname(entry).extname == '.png' FileUtils.mv entry , Pathname(entry).sub_ext('@2x.png') end end

Rubyの変数 Ruby variable

ローカル変数 hoge インスタンス変数 @hoge クラス変数 @@hoge グローバル変数 $hoge

macにVagrantをインストールしてみる

Vagrantは VirtualBox をCUI からつかえるようにするツール 方法 VirtualBoxをダウンロードしてインストール https://www.virtualbox.org/wiki/Downloads Vagrant をダウンロードしてインストール http://www.vagrantup.com/downloads.html インストールでき…

素のRackを使ってみる

simpleapp.rb class Hoge def call(env) [200, {"Content-Type" => "text/plain"}, ["Hello, world!"] ] end end simpleapp.ru require './simpleapp' run Hoge.new 起動すると Rails でおなじみの WEBrickが起動する. ポート番号は 9292 $ gem install rack…

Ruby でマルチスレッドプログラミングなど

一番シンプルな例. forkしてみる. th = Thread.fork do p 33 end th.join マルチスレッドで出力 def multi_thread threads = [1, 2, 3, 4].map do |e| Thread.fork(e) do |i| p i end end threads.each {|th| th.join} end multi_thread Process pid = fork …

Create json from hash with using Ruby

require 'json/pure' h = {'dog'=> 'bow', 'cat'=> 'meow'} puts JSON.pretty_generate(h)

rubyのワンライナーで連番のファイル名と画像サイズをを一括変換する.

そろそろワンライナーに手を出そうと思いましてメモです. ファイル 1.png, ....を hoge1.png, ... にリネームする. $ ruby -e '(1..5).each { |i| system "mv #{i}.png hoge#{i}.png" }' ファイル1.png, ... を 一括で 100x60 にサイズ変換する $ ruby -e '(1…

ディレクトリ内のファイル名を一括で変更する

rubyの場合 # 1.jpg => pict1.jpg に変更 Dir.foreach('.') do |f| if f =~ /.*jpg/ puts f system "mv #{f} pict#{f}" end end shellの場合 1.jpg => pict1.jpg に変換. {}にfindの値が入る. {}は -I{}で指定している. $ find * -print0 -type f | xargs -0…

配列を小さい配列に分割する

a = [1,2,3, 4,5,6, 7,8,9, 10] res = [] while a.size > 0 res << a.slice!(0, 3) end p res # => [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

gem shenzhenで ターミナルからアプリをビルドしtestflightを投げる

iphone アプリのビルドとテストフライトの配布をコマンドラインで行なってくれる shenzhen という gemがあります。 日本語情報が見当たらなかったので、記事にしてみました。ちょっとしたハマりポイントがいくつかありました。 ちなみに shenzhen という名称…

後ろから4つとって、作成日を今日から1日ずつずらす。

後ろから4つとって、作成日を今日から1日ずつずらす。 >> Post.last(4).each_with_index{|p, index| p.created_at = index.days.ago; p.save }

like search

1.9.1 :052 > Post.where('name like "%hoge%"') こっちでもよい 1.9.1 :008 > User.where('user_name like ?', "%hoge%" )

rails runner で条件分岐

rails runner (one liner) で無理やり条件分岐 spring rails runner "if true; p 'true'; else; p 'false' end;" セミコロンをつけていくだけだが、なかなか苦しい。(汗 ruby script の場合は -e が必要 ruby -e " if true; p 4; else; p 3 end;"

read_attribute and write_attribute can use both symbol and string as arguments.

In ruby on rails read_attribute and write_attribute can use both symbol and string as arguments.If you use attributes method you can use only string as argument.via: http://blog.eiel.info/blog/2012/12/17/read-attribute-activerecord/

Ruby のArrayの要素を入れたり取り出したりするメソッドについて

This is memorandum about Ruby's Array class' instance methods. Take some notes for my understand. I still haven' store them.Manipulate to tail push: add to tail pop: remove from tail Manipulate to head unshift: add to head shift: remove fr…

therubyracerとexecjsをインストールしたのに execjsがないというエラーが出る場合の解決方法

こんなエラー Could not find a JavaScript runtime . See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)node.js入れて, therubyracerと execjsをGemfileから消して bundle updateしたら治りまし…

layoutの中で複数の yield を使う

viewでcontent_forメソッドを使用すればよい。multi_layout.html.erb (layout) <%= yield :extend_menu %> <%= yield %> <%= yield 'extend_menu' %>multi.html.erb (view) 文字列とシンボルは区別される。 <% content_for :extend_menu do %> header <% end…

Method#source_locationで メソッドの定義場所を探す

Method#source_location が便利だと @ikm さんに教わったので使ってみた。method(:method_name).source_location とすると, メソッドを定義しているファイル名と行数を返してくれる。 #hoge.rb require './fuga' def mel; end p method(:mel).source_locatio…

ブロック引数を使う場合の haml のシンタックスエラー

ブロック引数 なのに、インデントができていないこと が原因 以下の例で発生する。 = form_for @book do |f| # ブロック引数 -# この行でインデントなし以下のエラーが全て発生する。 syntax error, unexpected ')' unterminated string meets end of filesy…

Ruby on Rails Naming Conventions (Rails の命名規則というか命名規約というか)

いわゆる Railsの基本理念の1つ CoC (Convention over Configuration, 設定より規約) の規約部分です。Railsではファイル名、クラス名などを規約通りに書かないと動きません。(そして rails vim でも Rcontroller book とかやって怒られる。ただしくは Rcont…

AbstractController::DoubleRenderError

Rails で AbstractController::DoubleRenderError が出た時の対処法。 2回render しちゃってるので、 and return をつけて、終了させる。 redirect_to(...) and returnエラーメッセージに書いてあります。親切。

rails のカラムの型一覧

string 文字列型。 text テキスト(不定長文字列)型。 integer 整数型。 float 浮動小数点数型。 decimal 固定長整数型。 datetime 日時型。 timestamp タイムスタンプ型。 time 時刻型。 date 日付型。 binary バイナリ文字列型。 boolean 真偽値型。 refe…

Procオブジェクト生成方法の3種盛り合わせ

メタプロより。 inc = Proc.new { |x| x+1} p inc.class p inc.call(33) dec = lambda { |x| x-1} p dec.class p dec.call(33) def fuga(&the_proc) the_proc end mul = fuga{|x, y| x*y} p mul.class p mul.call(4,5) 結果 Proc 34 Proc 32 Proc 203番目の…

ゆるふわなRuby の正規表現まとめ

Ruby の正規表現のゆるふわなまとめです。 ^ 行頭 $ 行末 \d 数字 \w 数字と英数字とアンダーバー \s 空白文字 \A 文字列の先頭にマッチ \z 文字列の末尾にマッチ \Z 文字列の末尾にマッチ. ただし末尾が改行ならばその前の文字にマッチ ### 後方参照 $1, $2…

Ruby map メソッドの便利な使い方

Ruby でコードを書くときに、ハッシュの値を取り出して配列に入れたい時が多々あります。 例えば、こんなふうに。 h = {:key1 => "dog", :key2 => "cat", :key3 => "rat"} a = [] h.each { |key, val| a << val } p a # => ["dog", "cat", "rat"]自前で配列…

Memo: About git merge and git show command

git merge: 指定したブランチの変更点を現在のブランチにマージする。 例. ブランチ hoge の変更点を適用 # git merge hoge (git)-[master] Updating b158f90..6a3d8c4 Fast-forward README | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) create…

Rails.vim の使い方メモ

:R controller と view の入れ替え gf カーソル位置のモデルに飛ぶ :bn 前のバッファに戻る。gfで飛んでから戻るとき使う。 以下の機能は、Rmodel で補完ができます。 model名などは単数形、複数形は区別されます。 Rmodel model名 modelに飛ぶ Rcontroller …

Yokohama.rb #14 に行って来ました

今日、Yokohama.rb 第14回に行って来ました。 この会に参加するのは今回で、5回目になります。 今回、私は、主に もくもくルームで、Rails のチュートリアルをやっていました。 デフォルトの英語から、ja.yml を書いて、日本語化とかですね。 途中、@sakairy…

TDDBC Yokohamaに行って来ました

TDDBC Yokohama に行って来ました。 といいつつも、TDDペアプロを体験する前に、寝不足による体調不良でまさかの途中退室でした。(泣 残念すぎる。せっかくの参加枠を無駄にしてしまって申し訳ないです。。 前回のtokyu.rb kaigi といい、最近、勉強会楽しめ…