2011/06/24

アプリケーションの速度には処理系の速度よりも組み込み関数やメソッドの性能のほうが重要

Ruby 1.9 で Web アプリを想定したベンチマークをとってみた
Ruby1.8とRuby1.9でベンチマークを取ってくれています。ボトルネックって、実測してみるとへぇーって思うところにあったりすることが多々ありますよねぇ。

2011/06/18

Fiber と Proc ―― 手続きを抽象化する二つの機能

Fiber と Proc ―― 手続きを抽象化する二つの機能
おぉぉぉぉ!
ネットワーク処理をするメソッドがあって、どうすればうまくメインの処理・ディレイ・処理回数の3つをうまく分離するかわからなかったのですが、これは美しい。Fiberを使ってコルーチンの考え方を導入すれば解決したんですねぇ…。Herokuも1.9使えるし、1.9に移ろうかなぁ。うーん…。

その他のFiberの例:
Ruby勉強会@関西でFiberについて勉強してきた
Fiberを使いやすくする仕掛け

2011/06/08

指定文字数での切り捨て

大量の文字出力があるコマンドラインアプリを作りました。その中の数行の出力結果が非常に長い場合、結果が見にくくてしょうがない問題に襲われました。
そこで、指定文字数だけ出力して残りを切り捨てるsnippetを追加。split(//)で1文字ずつhitさせるのが、multi-byte文字を扱うときの定石らしいですね。なんとなく実装しましたが、もっとうまい方法ないかなぁ...

def truncate(string, width)
  if string.length <= width
    string
  else
    abbr_symbol = "..."
    string = string[0, width - abbr_symbol.length]
    # Even if string consisted multi-byte characters,                                            
    # number_of_character would work well.                                                       
    number_of_character = string.split(//).size
    # Last character may be broken.                                                              
    string = string.split(//)[0, number_of_character-1].join

    (string || "") + abbr_symbol
  end
end

2011/06/23追記:
こういうときはjustified(揃える)という英単語を使うらしい。この場合だとleft_justifiedか。適切な名前がすぐに思いつくようになりたいなぁ...orz

2011/07/01追記:
String.ljustでもっと簡単に実装できる気がしてきました...。

2011/06/05

Rubyでも型チェック

Rubyでも型チェック
Rubyって、大規模システムに使えるのかなぁという懸念は、勉強していて頭のどこかにあります(実際使われてるんですが)。で、型チェックのサンプルを公開してくれてる人をハッケソ。こうやって見ると、Rubyで型チェックって冗長ですねw悩ましい。