破いて捨てたノート

Webやテクノロジーやそれ以外に関する思いつき

pluckがmapより速いからと言って、いつでも使って良いわけではないそうです

Rails3.2から導入されたpluckメソッドのパフォーマンスが素晴らしい件 こちらの記事にも代表されるように、 User.map(&:id)と書くよりUser.pluck(:id)と書いたほうが方がパフォーマンスは速いと言われている。(実際速い ただ、APIをみるとpluckはArrayを返…

gitで指定期間のコミット回数や総追加行数などを取得する

Git

# コミット数 git log --since=2013-12-01 --until=2014-02-28 --author='yachibit' --oneline --no-merges | wc -l # 追加行数 git log --since=2013-12-01 --until=2014-02-28 --author='yachibit' --oneline --shortstat --no-merges | grep files | cut …

validationに`:if` optionを渡すと、viewの`requuired: true`が自動でつかなくなる?

Railsのmodelでpresence validationを書いて、 # model validates :username, presence: true そのattributeに対応するformの入力欄をこんな風に書くと # view - form_for @user = f.text_field :username だいたいこんなようなHTMLが生成される。 <input id="user_username" name="user[username]" required="required" size="30" type="text" /> validati…

甲子園

美味しそうな日本酒 甲子園 #日本酒

2014年2月に読んだ本

技術書 Crafting Rails 4 Applications: Expert Practices for Everyday Rails Development Crafting Rails 4 Applications: Expert Practices for Everyday Rails Development (The Facets of Ruby)作者: José Valim出版社/メーカー: Pragmatic Bookshelf発…

Ruby 仮引数の * と実引数の *

よく混乱してしまうので整理。 仮引数の * は可変長引数 def greet name, *messages messages.each do |message| puts "#{message}, #{name}." end end greet 'Ruby', 'Hello', 'こんにちは' # => "Hello, Ruby." "こんにちは, Ruby." # 単に引数を無視した…

列挙型の値を保存するときはintegerで保存しとけActiveRecord::Enum

列挙型とは、有限集合として持つ抽象データのことで例えばstatusなんかがそうです。 stasus: [:active, :archived] みたいなやつ。 例えば、Conversationクラスにstatusカラム(active, archived)を持っている場合を考えてみましょう。 主な保存方法として…

Rubyの`Enumerable#each_with_object`を使ってみた

attr_accessorで生やしたattributes達とそのvaluesをハッシュとして欲しいことがあり、最初はこんな感じに書いた。 hoge_attributes = {} %I(user_name first_name last_name email).each do |attr| hoge_attributes[attr] = @hoge.send(attr) end 次の日に…

【MySQL】MySQLはtrailing spaceを無視する【クソ仕様】

まずはこのコードを見てください。 User.where(user_name: 'yachibit ') User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`user_name` = 'yachibit ' => [#<User id: 1, first_name: "Bit", last_name: "Yachi", user_name: "yachibit", ... >] 予想として、'yachibit'さんは存在しますが、'yachibit 'さんはいないので、レコ</user>…

scp コマンド便利

Linuxのコマンドです。SSHを使ってリモート・ホスト間で安全にファイルのコピーができるらしいっす。 # ローカルのtrans_fileファイルをリモートのホームディレクトリへコピー $ scp trans_file user@remote.host.com:~/ # リモートのhoge/ディレクトリ以下…

Railsでsessionを空にしたり削除したり

# 空ハッシュにする session[:hoge] = {} # sessionが多重配列になっている場合、 session[:hoge][:fuga] # => nil # nilにする session[:hoge] = nil # sessionが多重ハッシュになっている場合、 session[:hoge][:fuga] # => NoMethodError: undefined meth…

Railsのmigrationでdefault valueをrollbackしたい

Railsでカラムにデフォルト値を設定するmigrationを書いた際、 class AddDefaultValueOfEmploymentTypeOnUser < ActiveRecord::Migration def up change_column :users, :employment_type, :integer, default: 1 end def down change_column :users, :employ…

RubyでArrayからHashを生成するいろいろ

Hash['hoge', 1, 'fuga', 2] # => {"hoge"=>1, "fuga"=>2} Hash['hoge', 1, 'fuga', 2 , 3] # ArgumentError: odd number of arguments for Hash array = ['hoge', 1, 'fuga', 2] Hash[array] # warning: wrong element type String at 0 (expected array) #…

left outer joinのコスト

Railsではjoinsメソッドを使ってSQLのJOINを表現できる。これは基本的にINNER JOINだが、こうするとLEFT OUTER JOINも書ける。 User.joins("LEFT JOIN bookmarks ON bookmarks.bookmarkable_type = 'Post' AND bookmarks.user_id = users.id") => SELECT "us…

HEADの代わりに@が使える、Git 1.8.5

Git

Git 1.8.5から、HEADのエイリアスとして@が使えます。 git reset @ ってな具合に。 タイプ数が3文字減って幸せです。 新しいことはいいことだ。(レガシーなバージョンのGitを使っている人は、さすがにもういませんよね Git v1.8.5 Release Notes What’s new…

2014年1月に読んだ本

2014年1月に読んだ本。 技術書 パーフェクトRuby パーフェクトRuby (PERFECT SERIES 6)作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一出版社/メーカー: 技術評論社発売日: 2013/08/10メディア: 大型本この商品…

delayed_jobで非同期実行指定したメソッドをデバッグ時に即座に実行する

Rubyで処理を非同期実行したい場合に使うgemはいくつかありますが、自分はdelayed_job(以下、DJ)を使ったります。 DJではメソッドを常に非同期で実行したい場合、handle_asynchronouslyを使って次のように書きます。 class Device def deliver # long runn…

Webサービスが成長するために重要なこと

webサービスが成長するには、意味のあるデータをいかにたくさんデータベースに入れることができるかが重要である。 弊社プログラマのa氏が言った言葉らしく、非常に本質的だと感じた。 データベースにコンピュータリーダブルな形式でデータが入ってしまえば…

initial commit

Hello, my new bolg!