2011-02-23 00:56:59 +0900
年末に書いた職場環境に関する記事についてSelfkleptomaniacさんのところで反応をいただき、その中でジョエル・テストなどで有名なジョエル・スポルスキー氏の会社 Fog Creek Softwareの様子が垣間見えるビデオが紹介されていました。
素晴らしいですね。このような環境を贅沢と切り捨てるには、オフィス環境の改善にかかるコストほどにはプログラマの生産性が向上しないことを証明する必要がありそうですが、はたして…。
年末に書いた職場環境に関する記事についてSelfkleptomaniacさんのところで反応をいただき、その中でジョエル・テストなどで有名なジョエル・スポルスキー氏の会社 Fog Creek Softwareの様子が垣間見えるビデオが紹介されていました。
素晴らしいですね。このような環境を贅沢と切り捨てるには、オフィス環境の改善にかかるコストほどにはプログラマの生産性が向上しないことを証明する必要がありそうですが、はたして…。
HerokuのDynoにおいてリクエストの処理が30秒を超えた場合、ルーティングメッシュがユーザーにリクエストタイムアウトを返しますが、その際、Dynoのほうが処理を中断せずにゾンビ状態になってしまうことがあります。
対策としてはkch/rack-timeoutを入れておけばいいようです。
GitHubのdefunktが作ったCIサーバ cijoeは、とても簡単に使えるので小さなプロジェクトではおすすめ(Jenkinsのような充実機能はありません)。
ためしに、巷で話題のamatsuda/kaminariのテストをcijoeで実行してみましょう。
まずはcijoe
をインストール。
$ gem install cijoe
手元のSnowLeopard + Ruby 1.9.2だとkaminariのbundle install
中にlinecacheのインストールでコケてしまうので、1.8.7を使います。
$ ruby -v
ruby 1.8.7 (2010-12-23 patchlevel 330) [i686-darwin10.5.0]
まず、ビルド対象のリポジトリをローカルに持ってきて、rake spec
が成功するところまで確認します。
$ git clone https://github.com/amatsuda/kaminari.git
$ cd kaminari
$ bundle install --path vendor/bundle
$ rake spec
...
95 examples, 0 failures
無事にテストが成功したので、cijoeでのビルド時に実行するコマンドをgit config
で設定します。
$ git config --add cijoe.runner "rake -s spec"
cijoe
コマンドの引数にワーキングコピーのパスを指定して起動します。
$ cijoe .
$ open http://localhost:4567/
ブラウザでhttp://localhost:4567/
にアクセスすると、以下のようなページが表示されます。Octocat!
Continuous Integration with CI Joe | Flickr - Photo Sharing!
Build
ボタンを押すとHEAD
が指すコミットに対してビルドが実行されます。適当に待ってからページをリロードしましょう。
Continuous Integration with CI Joe (Success!) | Flickr - Photo Sharing!
worked
と表示され、無事にテストが成功しました。素晴らしいシンプルさ!
master
ブランチ以外を対象にビルドしたい場合は以下のようにcijoe.branch
を設定しておきます。
$ git config --add cijoe.branch deploy
他にもいくつか設定ができるので、README.mdをよく読んでお使いください。
Railsのconfig/locale/*.yml
でgreeting: 'hello %{object}'
のようにするとハマるという話。
Railsでメッセージを国際化するためにconfig/locale/*.yml
を用意する際、
greeting: 'hello %{object}'
のようにInterpolationのキーにobject
という文字列を使うと、
I18n.t 'greeting', :object => 'world'
というコードを実行しても値が置換されません。i18n gemのソースを読んでみたところ、以下のようにいくつかのキーが予約されており、t
メソッド(translate
メソッド)のオプションに含まれていた場合に値が除去されるようになっていました。
RESERVED_KEYS = [:scope, :default, :separator, :resolve, :object, :fallback, :format, :cascade, :raise, :rescue_format]
いつかまたハマりそうなので残しておきます。
PinboardのファウンダーであるMaciej Ceglowskiさん(ポーランドの方ですね)へのインタビュー。
短めのインタビューなのでサラッと読めると思いますが、アプリケーションのパフォーマンスを上げるために心がけていることのうち以下の2点が目を引きました。
キャッシュ機構は最後の手段として設計のベースには含めておかないことと、フレームワークを使うのはプロトタイピングまで(実装すべきものが見えたら一から作る)、と。