capistranoで今タスクを実行中のホスト名を取得する

問題 $ cap hoge ROLES=app HOSTS=app-01,app-02,app-03 としたときに、各ホストに、ホスト名をファイル名にしたファイルをtouchするようなタスク hoge を記述せよ。ただし、/etc/hostnameを参照してはならない。 こたえ task :hoge do run "touch $CAPISTRA…

ActionView::Templateのcompile済み中間コードをキャッシュする

まずRailsのviewについて説明する。Railsのviewはerbとかhamlとかで書く。この人間が書いたviewファイルはtemplateと呼ばれ、ActionView::Templateクラスで扱われる。一つのviewファイルが一つのTemplateオブジェクトになる。 このTemplateクラスはTemplate#…

unicornのタイムアウト時にもRailsのログをちゃんと出力させる

unicornはconfで timeout 20 とかやっとくと、20秒以上かかったらそのworkerが殺される。それはいい。問題はその殺され方にあって、タイムアウトしたunicorn workerはmasterにKILLシグナルで強制的に殺される。KILLで殺されてしまうと、worker側でtrapして安…

bundlerでgithub上のunicornを強引に入れる

みんな、unicornをカスタマイズして使う時は、オフィシャルのgithubリポジトリ(defunkt/unicorn)からforkしていじると思う。 そしたらそれを↓こんな感じにbundlerから入れてみたいと思うのが人情 gem 'unicorn', :git => 'git://github.com/mirakui/unicor…

rails runner的なことをrails runnerを介さずに直接やる

rails runner コマンドを使うと、各modelsとか、config.autoload_pathsに指定したファイルとかをロードした上でスクリプトを実行できる。 $ rails runner hoge.rb ただ、毎回 rails runner とか書くのはだるいので、hoge.rbを独立したスクリプトにしちゃいた…

プログラマと爪の手入れ

一日中キーボードを叩く仕事なので、爪の手入れには気を使っています。ちょっとでも爪が伸びてると指先が気持ち悪くて良いコード書けない気がしてきますね。最近ガラスの爪やすりを買ったんですが、すごくいいっすこれ。それまで爪切りについてるヤスリを使…

WEB+DB PRESS Vol.66 に寄稿しました

Web業界のエンジニアは全員読んでるWEB+DB PRESSですが、本日12月23日発売のVol.66に寄稿しました。 特集3「クックパッド開発ノウハウ大公開」ということで、クックパッドのエンジニア5名で開発スタイルやノウハウを書いてます。 僕が書いたのはインフラにつ…

ActiveRecordのSQL実行をフックしていろいろやる

ActiveRecordで、あるSQLが発行された時に、そのSQLが実行されるDBのコネクション情報を調べたいときがある。Hoge.find() したときにどういうSQLが発行されているのかというのはdevelopment環境ならデフォルトでdevelopment.logにクエリログが出る。 このロ…

S3のダウンロード速度を1.5〜4.5倍高速化する怪しげな方法

aws

バケットのIPアドレスを適切なものに固定することで、期待値でいうと1.5倍、最大で4.5倍程度高速にダウンロードできます。 この方法は非常に効果が高いですが、非公式なものであり、ある日突然破綻する可能性もありますので自己責任でお願いします。 S3のバ…

putsに日付時刻を付ける

で、putsすると puts "hello" [2011-12-07 23:49:14 #21891] hello となる。 何に使うの? daemonsっていうお手軽デーモン化のgemがあってよく使ってるんですが、これのロガーはLoggerとかじゃなく、デーモンの中で標準出力に書いたものをそのままログファイ…

Rackのミドルウェアをconfig.ruやapplication.rbじゃないところでuseする

RackのMiddlewareを書いたらどこかでuseしなくちゃいけないんだけど、どこでuseするのかという話になる。 Rails3だと、 config.ru config/application.rb その他(ただし Application.initialize! より前) っていうパターンがある。 config.ruとかapplicati…

gist貼れるの?

は、貼れた〜

super pre記法 syntax highlighting テスト

[STDOUT, STDERR].each do |io| io.instance_eval do def puts_with_format(*arg) print "[#{Time.now.strftime("%Y-%m-%d %H:%M:%S")} ##{$$}] " puts_without_format *arg end alias puts_without_format puts alias puts puts_with_format end endシンタ…

#RubyKaigi 2011で気になったgem 13選

Rubyist達の夏フェスであるところのRubyKaigiが今年も開催され、猛暑の練馬が大いに盛り上がりました。今回が最後の開催とのことで、関係者各位は素晴らしい会議を本当にどうもありがとうございました。 さて、今年のRubyKaigi2011での各セッションで紹介さ…

私がクックパッドの画像配信野郎です

一年ほど前にヤフーを退職した私ですが、その後なにをやっているかというと、クックパッドに入社して画像配信をしています。私が入社する前から動いていた画像配信の仕組みは設計が古くてなにかと困っていたので、より良いシステムを開発してリプレースとい…

2枚の画像のdiff(差分)を超簡単に調べる方法

Githubで画像の差分を見られるモードが話題を呼びましたが、このように2枚の画像の差分を調べたいときって時々ありますよね。 そんなときImageMagickのコマンドラインツールを使えば、たった1行で実現できます。 $ composite -compose difference A.jpg B.jp…

「※この発言は個人の見解であり、所属する組織の公式見解ではありません」をリリースしました

http://この発言は個人の見解であり.所属する組織の公式見解ではありません.tsuyabu.in/ 「※この発言は個人の見解であり、所属する組織の公式見解ではありません」は、発言専用のTwitterクライアントです。これを使って発言すると、その発言があくまで個人の…

facebookにtwitterのフィードを流してる男の人って…

twitterへの投稿は、見たい時に見たい奴がtwitter上で見ればいいのであって、わざわざfacebookにマルチポストする意味が分からない。でもfacebookはその辺がよくできていて、見たくないものは簡単にオフにできます。発言の×ボタンをクリックして、「Twitter…

本当は速いImageMagick: サムネイル画像生成を10倍速くする方法

一般的に ImageMagick のサムネイル画像生成は遅いとされており、パフォーマンスが求められるシーンでは Imlib2 などのより高速な画像処理ライブラリが使われることが多いです。 Imlib2 の高速さについては、以前「Imlib2でImageMagickより3倍高速かつ美しい…

Amazon EC2インスタンスに簡単にSSHできるようになるツールec2sshを公開しました

みんなが大好きなクラウドホスティングサービスのAmazon EC2ですが、インスタンスをバンバン立てたり落としたりしていると、ホスト名の管理が面倒になってきますよね。たとえば「さっき立てたインスタンスにSSHしたい!」と思ったら、consoleをひらいて、「e…

query_trace: SQLが発行されたファイルと行番号を調べる

Railsで、ActiveRecordがSQLのログを吐いてくれるんですが、これだとどのクエリがどこから呼ばれたのか分からなくて、デバッグがしにくい。 Schedule Load (0.023687) SELECT * FROM schedules WHERE (schedules.id = 3) LIMIT 1 Resource Load (0.001076) S…

function hoge(){} と var hoge=function(){} の違い

javascriptはあまり得意ではなくて、この件について、定期的に忘れて同じ質問を人にしてしまっているので、ここに書いておく。 function hoge(){} と var hoge=function(){} に違いはあるのか? という問題について。結論から書くと、hogeのスコープが違う。…

自転車のコグを交換した

俺の自転車はピストと呼ばれるタイプで、変速機がついていないので、ギアを重くしたい場合にはコグというパーツを交換する必要がある。 自転車を買ってからこれで片道12kmくらいの距離を通勤しているので、だんだん慣れてきてもうちょっと重いギアにしたくな…

ブロック引数つきのObject#presenceというのを考えた

以下のような処理をしたい。name という名前のユーザを探し、その年齢を出力する。 def age(name) Persion.where(:name => name).age end 上のコードはまずいところが一箇所ある。 name というユーザがいなかった場合に、例外になるという点だ。 def age(nam…

RailsじゃなくてもActiveSupportの自動require機能を使う

Railsでは、 config/application.rb で config.autoload_paths << Rails.root.join("lib") と書いておくと、例えば $ cat lib/my_library.rb class MyLibrary : endみたいなファイルが置いてあれば、Railsアプリ内で MyLibrary クラスを特にrequireしなくて…

ruby-profとKCacheGrindでプロファイル野郎になる

速さが足りない!!!!! そんな時はプロファイリングの時間ですね。 Rubyには標準添付ライブラリとして profile というプロファイラがついてくる。でもこのライブラリはあまりに遅すぎて実用に耐えないから、多分誰も使っていない。ほとんどのRubyistは ru…

capistranoでbundle installする

Capfileで run "cd #{release_dir}; bundle install vendor/bundle --without test development --deployment" とか書いてたけど、bundlerの公式サイト見てたら、capistrano用のbundle installタスクが用意されてることに気づいた。 使い方 Capfileの中で re…

doppelkunを復活させた

doppelkun( http://twitter.com/doppelkun )というtwitter-botを運営しているのですが、このたびBASIC認証の廃止を受けて死んでいたので、OAuth対応させることで復活させました。 当時やっつけで書いたコードだったので、直すのに苦労しました。かと言って…

Imlib2でImageMagickより3倍高速かつ美しいサムネイル画像の生成

この記事の概要 Imlib2を使って画像のサムネイルを生成してみたところ、ImageMagickより3倍速かった。 また一般的には、Imlib2の方が画質が悪いとされているが、パラメータを調整することで、十分に美しいサムネイル画像を得ることができた。 はじめに Imlib…