タグ

ブックマーク / blog.mirakui.com (6)

  • 2枚の画像のdiff(差分)を超簡単に調べる方法 - 昼メシ物語

    Githubで画像の差分を見られるモードが話題を呼びましたが、このように2枚の画像の差分を調べたいときって時々ありますよね。 そんなときImageMagickのコマンドラインツールを使えば、たった1行で実現できます。 $ composite -compose difference A.jpg B.jpg diff.jpg とすれば、A.jpg と B.jpg の差分画像 diff.jpg が作られます。この差分画像は以下のようになります。 さらにこの差分画像(diff.jpg)が「真っ黒な画像」かどうかも、コマンドラインで調べることができます。 # 差分がなかった場合(=diff.jpgは黒一色の画像) $ identify -format "%[mean]" diff.jpg 0 # 差分があった場合 $ identify -format "%[mean]" diff.jpg 960.8

    2枚の画像のdiff(差分)を超簡単に調べる方法 - 昼メシ物語
  • Unicornを同期的に再起動する - 昼メシ物語

    Unicornの再起動はシグナル(USR2等)を発行することで非同期的に行われるので、成功したのか失敗したのかがわかりづらい。 例えばCapistrano等でアプリケーションをデプロイしたあと、Unicornの再起動を行い、その再起動が成功か失敗かを判断したいことがある。 というわけで、 Unicorn を 同期的に restart するスクリプトを書いた。 使い方と仕組み 上記スクリプトを unicorn_restart.rb みたいな名前で保存し、以下のように Unicorn の PID ファイルを与えて実行します。 $ unicorn_restart.rb /tmp/unicorn.pidこれは以下のように動作します。 unicorn の master プロセスに USR2 シグナルを送る unicorn.pid.oldbin を監視し、再起動が終わるのを待つ 再起動が終わったら、

    Unicornを同期的に再起動する - 昼メシ物語
  • Railsで遅いMiddlewareを探す - 昼メシ物語

    AさんはRailsで書かれたある遅いコードの検証をしていました。 X-Runtimeヘッダを見ると $ curl -Is localhost:3000/hello | grep X-Runtime X-Runtime: 5.008580 5秒もかかってる。 しかしRailsのログを見ると Started HEAD "/hello" for 127.0.0.1 at Tue Apr 03 13:04:11 +0900 2012 Processing by HelloController#index as */* Rendered text template (0.0ms) Completed 200 OK in 10ms (Views: 9.7ms) こんな感じで10msで返していることになっている。なんだこれは? こういう状況で疑わしいことの一つとして、Rack等のMiddlewareのど

    Railsで遅いMiddlewareを探す - 昼メシ物語
  • unicornのタイムアウト時にもRailsのログをちゃんと出力させる - 昼メシ物語

    unicornはconfで timeout 20 とかやっとくと、20秒以上かかったらそのworkerが殺される。それはいい。問題はその殺され方にあって、タイムアウトしたunicorn workerはmasterにKILLシグナルで強制的に殺される。KILLで殺されてしまうと、worker側でtrapして安全に終了処理をすることができない。 一番困るのは、Railsloggerは(production環境のデフォルトだと)リクエストが終了するまでバッファリングしているので、リクエストの途中でKILLされてしまうとloggerがflushされない。つまり、unicornのタイムアウト時には、リクエストのログは一切production.logには出力されない。異常時のログが出ないとか、まじで困ると思うんだけど、みんなどうしてんだろ。 これに対処するためにはunicornのコードに手を入れるの

    unicornのタイムアウト時にもRailsのログをちゃんと出力させる - 昼メシ物語
  • gem管理の新標準ツール"Bundler"のTips - 昼メシ物語

    Bundlerは、rubygemsのラッパーです。Rails3のgem管理に採用されています。 Bundlerを使うことで、 このgem、手元にはインストールされているのに、番環境にインストールされてない! 開発環境にgemを入れまくったら、プロジェクトにどのgemが必要なのか分からなくなった! みたいな問題を解決できます。 詳しくは公式サイトをご覧ください。 今日はそんなBundlerについて色々分かってきたので、Tipsをいくつか紹介したいと思います。 前提知識 この記事は、このへんが理解出来ていることが前提です。 Bundler: The best way to manage Ruby applications Rubygems に /usr/bin を触らせないためには gem をユーザーディレクトリで運用する++ - きたももんががきたん。 Bundlerは1.0系以降を使おう

    gem管理の新標準ツール"Bundler"のTips - 昼メシ物語
  • rvm: 複数のRubyを共存させる最新のやり方 - 昼メシ物語

    http://favotter.net/status.php?id=13069973879 こんにちは、4月からついに職業Rubyエンジニアになったmirakuiです。 あまり認めたくありませんが、Rubyは事実上、いまだに1.8系から1.9系への移行期にあります。 現在の安定版である1.8.7と1.9.1を開発環境に共存させている人も多いんじゃないでしょうか。 もううんざりだ 俺のMacBookに入ってるRubyをざっと調べてみました。 /usr/bin/ruby 1.8.7。多分MacOSX(SnowLeopard)に最初から入ってたやつ? /usr/local/bin/ruby 1.8.7。多分自分でビルドしたやつ /opt/local/bin/ruby 1.8.7。MacPortsで入れたやつ /opt/local/bin/ruby1.9 1.9.1。MacPortsで入れたやつ

    rvm: 複数のRubyを共存させる最新のやり方 - 昼メシ物語
  • 1