タグ

ブックマーク / passingloop.tumblr.com (3)

  • Rails アプリケーションの中で例外を投げていはいけない.ただし,ステータスコード 500 を返すときは除く.

    Rails アプリケーションの中で例外を投げていはいけない.ただし,ステータスコード 500 を返すときは除く. Rails に限らず Ruby プログラム一般にあてはまる原則です. ただし,私のところで使っている原則なので,正式なルールではありません. Ruby の例外は重いので,アプリケーションを停止させるとき以外は使ってはいけない.Ruby は例外を raise するときにスタックトレースを作成します. このスタックトレースの作成処理が重いので, 通常の処理の流れの中で使うとアプリケーションが重くなります. ですので,予期せぬ事態によりアプリケーションを停止させるとき以外は, 例外を使わないようにします. Rails アプリケーションについて考えると, 予期せぬ事態が起きたときにはステータスコード 500 internal server error を返すはずですから,この場合におい

    Rails アプリケーションの中で例外を投げていはいけない.ただし,ステータスコード 500 を返すときは除く.
  • Linux のオーバーコミットについて調べてみた

    Linux のオーバーコミットについて調べてみた Linux のオーバーコミットのはなし(これを書いたのは Linux 2.6.38 のとき) Linux カーネルは実メモリ以上にメモリをプロセスに割り当てることができる この仕組みをオーバーコミット (over-commit) と呼ぶ オーバーコミットでは,とりあえずメモリを malloc させて仮のアドレスを返しておき, 実際に使われる段になってはじめて実メモリを確保する. 実験ただ malloc し続けるだけのプログラムを作って実験してみる. このプログラムをメモリ 1 GB + スワップ 1 GB のホストで実行してみると, $ free -t total used free shared buffers cached Mem: 1022404 82992 939412 0 4172 12280 -/+ buffers/cache:

    Linux のオーバーコミットについて調べてみた
  • passingloop, Ruby の class_eval でスコープゲートを乗り越えるもの、乗り越えられないもの

    Ruby の class_eval でスコープゲートを乗り越えるもの、乗り越えられないもの Ruby の class_eval はスコープゲートを乗り越えるときに便利だが,乗り越えられないものもある. 乗り越えられるもの ローカル変数メソッド乗り越えられないもの インスタンス変数たとえば,次のようなファイル foo.rb: # foo.rb class Foo; end @x = 'x' y = 'y' def z 'z' end Foo.class_eval do p @x p y p z end を実行すると, % ruby foo.rb nil "y" "z" となる. また,乗り越えられるものは,class_eval のレシーバのコンテキストに同名のものがあっても,レシーバのコンテキストを上書きして乗り越えてしまう.たとえば, # foo_1.rb class Foo @x = '

    passingloop, Ruby の class_eval でスコープゲートを乗り越えるもの、乗り越えられないもの
  • 1