最後の数字だけ違う文字列をグループ分けしたかったんですが、自分で書いてみるとこんな面倒くさい感じになって (´・ω・`)ショボーン a1 = %w(foo1 foo2 foo3 bar1 bar3 buz2) a2 = a1.map{|v| v.sub(/[0-9]$/,"")}.uniq tmp = Array.new(a2.size) a2.each_with_index do |v2, i| a1.each do |v1| if v1.sub(/[0-9]$/, "") == v2 tmp[i].nil? ? tmp[i] = [v1] : tmp[i].push(v1) end end end p tmp # => [["foo1", "foo2", "foo3"], ["bar1", "bar3"], ["buz2"]] なので、調べてみたら非常に簡単な方法が見つかりました。 a1 = %w(foo1 foo2 foo3 bar1 bar3 buz2) p a1.group_by{|x| x[/[a-zA-Z]+/] }.values Rubyすげぇ! 参考 [arrays – Group strings with similar pattern in Ruby – Stack Overflow][1]

続きを読む

wgetで同じファイル、例えばfoo.zipをもう一度ダウンロードすると foo.zip.1と自動的に別名でファイルを保存してくれるんですが、自動処理の中で使う時に毎回ダウンロードしたくない時にはちょっとめんどくさい。 既に存在する時はダウンロードをスキップ方法 wgetには--no-clobberもしくはそれの省略形 -nc という上書きを禁止するオプションがあるのでそれを使いましょう。 ちなみに “clobber” は「不注意に上書きをしてファイルを破壊してしまう。」という意味の英単語です。 参考 [wget – skip if files exist? – Stack Overflow][1]

続きを読む

かなりハマったのでappend()などを使って動的に追加したHTMLの要素にhoverイベントを追加する方法を残しておきます。説明は全部 coffee script で書いてるので生のJSが良い人は自動変換サービスでもをつかってください。 前提となる知識 まず基本として $('#foo').click -> console.log "押された!" のように #foo に対して click イベントが追加されているわけですが、このイベントの追加はページの読み込み時に行われるために append() などで後から動的に追加された要素にはイベントの登録がされません。 なのでそれを解決するために昔の delegate(), 今なら on() メソッドがあるわけです。簡単でわかり易い名前に統一されたので見た目はスッキリしたのですが、代わりにサンプルコードを探すのが大変になりました。 on って単語短すぎやしません…? 後から追加された要素に click イベントを追加 前置きが長くなりましたが $('#foo').click -> console.log "押された!" を動的に追加された要素に適用させるには $(document).on 'click', '#foo', -> console.log "押された!" とします。document 内部の要素がクリックされるたびにイベントが発火され、クリック対象が #foo ならメソッドが実行されます。もちろん document ではなくページ読み込み時に存在する #foo の親に当たる要素なら何でも構いません。無駄なイベントを発生させないためにできるだけ近い親が良いでしょう。 後から追加された要素に hover イベントを追加 同様に hover イベントも click イベントのように簡単に書き換えれたらいいのですが、hover イベントを on() を使って割り当てると hover は mouseenter と mouseleaveという複数のイベントを受け取っており、このように複数のイベントを受け取ってる関数を on メソッドで割り当てるためにはどのイベントを受け取ったのかを判別して処理する必要が出てきます。 記述が間違っていたので修正しました。 onイベントの引数として "hover"を使った場合、それは単なる "mouseenter mouseleave" の別名であって hover() 関数とは無関係であり、またこの記述方法は jQuery1.

続きを読む

StackOverflowで昔もらった回答が思い出せない時に自分の質問内を検索したい時がありますよね。 試しに User 知りたいこと みたいにユーザー名をそのまま入れてみたんですがうまく行きませんでした。 解決策 Stack Overflow自体についてわからないことがある時は Meta Stack Overflow を使えばだいたいのことは解決します。 Search 欄に user:me 知りたいこと で検索すると自動的に me が自分のユーザーIDに変更されて目的の情報を取り出すことができます。ひゃっほーい! 参考 [How can I search my own questions? – Meta Stack Overflow][1]

続きを読む

画像編集をRailsでしたかったので ImageMagick を Railsから使うgem rmagick をインストールしようと思ったらこんなエラーが出てしまった。環境は Maverick。 Can't install RMagick 2.13.1. Can't find the ImageMagick library or one of the dependent libraries. Check the mkmf.log file for more detailed information. *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. 解決策 最新版の 2.13.2 をインストールすればOK。ちなみにライブラリのリンクを作るという方法も紹介されてましたがこっちは失敗。 gem install rmagick -v '2.13.2' でインストールしましょう。

続きを読む

rspec書いてる時にEmacsから簡単に呼び出せたら便利だと思ってsmart-compileの設定をこんな風に書き換えたんだけど、 (setq smart-compile-alist (append '(("\_spec.rb$" . "rspec %f")) '(("\\.rb$" . "ruby %f")) '(("\\.php$" . "php %f")) '(("\\.coffee$" . "coffee -p %f")) '(("\Gemfile$" . "bundle install")) smart-compile-alist)) でちゃんとCompile command: rspec foo_spec.rbは呼び出せるものの実行すると -*- mode: compilation; default-directory: "~/dev/zombie/spec/lib/" -*- Compilation started at Thu Jan 23 16:50:59 rspec zombie_spec.rb /bin/bash: rspec: コマンドが見つかりません Compilation exited abnormally with code 127 at Thu Jan 23 16:51:00 な感じでエラーになってしまう。 どうやら rbenv の環境がEmacs側で認識されてないので rbenv で入れた gem のコマンドも使えないのが原因らしい。 解決策 [rbenv.el][1] をインストールすれば解決しました。

続きを読む

yntax error, unexpected ':', expecting keyword_end といつもの見慣れたようなTypoのエラーが出たのでControllerを確認したけどない。何度見てもちゃんとカッコ閉じてるし end も使ってる。なのにエラーが消えない! 解決 モデルのほうで has_many: words って書いてました。 正しくは has_many :words ですね。悲しい。こんなものに結構な時間を着いたしたのが悲しい。

続きを読む

「Rspecよくわかんねー。」という思いを胸に抱き続けてきましたが、やっぱりやらないとダメっぽいので使おうとしたら早速 undefined method 'visit'と言われて困る。 原因 このエラーの原因はCapybaraが最近のアップデートでこっそりと対象のディレクトリを requests から features に変えたのが原因らしいです。やめてほしいそういうの。 しかも [Google group][1] にこっそり報告してるだけ。もっと こえを おおきく。 解決策 spec_helper.rb に以下をたす解決策もあるそうですが、将来的に requests じゃなくてfeatures を使うという意向ならそうしたほうが楽そうなので mv spec/requests/ spec/features して自分は対策しました。 ちなみに spec_helper.rbに足す場合はこちら。 require 'capybara/rails' require 'capybara/rspec' include Capybara::DSL 参考 [ruby on rails – Capybara: undefined method 'visit' – Stack Overflow][2] [rails 3.2でRspecを導入したけど NameError – undefined method `visit' って出るときの対策 – どぶんけーブログ][3]

続きを読む

ruby 2.1.0 も出たことだし、とりあえずさくらVPSにおいてるCentOS上に入れておこうと思ったけど、ちょっと古いバージョンしか rbenv install --list で出てくれない。 rbenv updateという便利なコマンドはないようなのでアップデート方法を調べてアップデートしてみた。 アップデート方法 どうやってインストールしたかは全く覚えてなかったけど調べてみるとどうやら git clone でインストールしたっぽいので cd ~/.rbenv; git pull するだけでOKらしい。 無事にアップデートできたのでもう一度インストールできるrubyのバージョンを確認したら ない。ない。 どうやらrubyのインストールには ruby-buildを使ってるのでそっちをアップデートしないとインストール可能なバージョンは更新されないらしい。ちなみに存在しないバージョンのインストールを試みるとこんな感じに教えてくれる。 ironsand@SarakuVPS ~$ rbenv install 2.0.0-p247 ruby-build: definition not found: 2.0.0-p247 You can list all available versions with `rbenv install --list'. If the version you're looking for is not present, first try upgrading ruby-build. If it's still missing, open a request on the ruby-build issue tracker: https://github.com/sstephenson/ruby-build/issues ruby-build のアップデート ruby-buildもgit cloneしてるだけなので、 cd .

続きを読む

Railsのrequest.fullpath だと param 以降も受け取ってしまうので、paramの値を使わない時の方法。 解決策 splitで邪魔なものをとる方法 request.fullpath.split("?")[0] path を使う方法。こっちのほうがよさそう。 request.path 参考 [ruby on rails – request.fullpath with no parameters – Stack Overflow][1]

続きを読む

プロフィール画像

ironsand

語学好きのプログラマーです

Railsエンジニア

Yokohama