Sooey

2013-06-08 23:53:45 +0900

Internet Explorer 9以下に存在する「1つのCSSファイルで認識されるセレクタは4,096個まで」という制限に突然引っかからないようにするための方策。

対策ではなく、突然の遭遇を予防する方策を色々と調べてみたところ、Atomic Spin - Atomic Object's Blog On Software Design & DevelopmentというブログにGetting Around IE's 4,096 CSS Rule Limitという記事があり、Railsアプリのfeature specで「セレクタ数が4,096個以下である」ことをテストするアプローチが紹介されていたので、それを導入することにしました(実際に導入する際は4,096の箇所にマージンを持たせておくとよさそう)。

CapybaraがHEAD要素内のLINK要素を参照できるようにするために、以下の設定が必要でした。

Capybara.ignore_hidden_elements = false

また、同記事のコメント欄で紹介されていたQuick lines to get the number of selectors in each CSS to make sure that IE is not breakingというJavaScriptも役に立ちそうです。

また、個人的にこの問題を回避する一番いい対策だと思うのは、4,096を超えないようにスタイルを制限する=サイトから無駄な機能を削り続ける、という視点を持ち続ける、ということかなと思います。

2013-06-04 01:57:44 +0900

Hashrocketではどのようにペアプログラミングを実践しているのか(HashrocketはObie Fernandez氏が創業したWeb開発会社)。

Hashrocketでは常にペアプログラミングを行なっており、受託案件の重要な機能を開発するときも、オープンソースフライデー(毎週金曜日にオープンソースコードを書く的な催し?)でオープンソースのコードを書くときも、常に2人体制だそうだ。

1つの頭よりも2つの頭で考えるほうがより良い、という当然の理由のほかに以下のような理由がある。

  • 間違ったやりかたにはまってしてしまう前に、パートナーが別な解決策を提示してくれる
  • 正しい解決策がずっと目の前にあるのに、それとは別の難問に取り組み続けてしまうような時、解決策がそこにあることをパートナーが教えてくれる
  • スペルミスのような単純な部分にはパートナーが注意を払ってくれる
  • 1人で作業をすると自分にとって快適な道具を使い続けてしまうが、ペアなら新しいアイデアやツール、スタイルを導入し合って、ソフトウェア開発者として成長し続けていける

ツールとしては以下のものを使っているようだ。

  • Vim - 全員がTerminalのvimかMacVimを使っている
  • iMac - 1つの27インチiMacに2つのキーボードとマウスを繋ぎ、2人で使う
  • Tmux - 半分くらいがTmuxを使い、残りの半分はタブだけを使う。どちらを使うかはペア次第だけど、全員がTmuxを使いこなせるレベルにはある
  • Dotmatrix - すべてのdotfileをGitHubリポジトリに公開している。すべてのiMacがこのリポジトリと同期していて、部屋を移ったりしても環境が変わる心配はない

2013-06-04 01:36:04 +0900

ポートランドが拠点のTech系カンパニー11社のオフィス紹介PV。有名どころでは、SimpleやUrbanAirshipなんかが登場しています。

This is the collaboration of 11 Portland tech companies, showcasing Portland's office culture. We are proud to have provided the aerial shots for yet another great timelapes produced by Uncage the Soul Productions.

これ系のビデオだとニューヨークのスタートアップシーンが結構かっこいいのを出しているイメージがあるけど、ポートランドもなかなか。

2013-05-17 00:00:59 +0900

rake specでの冗長な出力を止める方法。

rspec-railsを組み込んだRailsプロジェクトでrake specを実行すると、以下のように(specタスクが依存している)test:prepareタスクの出力や、実行するspecファイル名などがずらずらと表示されます。

$ bundle exec rake spec
SET
SET
CREATE EXTENSION
COMMENT
(snip)
INSERT 0 1
INSERT 0 1
INSERT 0 1
/Users/juno/.rbenv/versions/2.0.0-p195/bin/ruby -S rspec ./spec/controllers/admin/castings_controller_spec.rb ./spec/controllers/admin/characters_controller_spec.rb
........................................................***...

これを黙らせてシンプルな出力にするには、Rakefileあたりに以下のコードを記述しておきます。

これによって、デフォルトのspecタスクをいったんクリアし、

  • rake spec前にtest:prepareを実行しなくなる
  • 実行するspecファイル名などを表示しなくなる

という挙動が再定義されます。

test:prepareが暗黙的には実行されなくなるため、あらかじめ実行しておきます。

$ bundle exec rake db:create RAILS_ENV=test
$ bundle exec rake test:prepare

そしてspecタスクを実行すると、余計な出力のない状態でテスト結果が表示されます。

$ bundle exec rake spec
........................................................***...

specタスクをクリアしないでverbose = falseを設定するいい方法はないかな…。

2013-02-06 22:55:21 +0900

ActiveSupportのassert_valid_keysHashのキーをチェックする。

ActiveSupportで提供されているHash#assert_valid_keysを使うと、メソッドの引数として渡されたHashに必要なキーが含まれているかどうかを容易にチェックできる。

{ :name => "Rob", :years => "28" }.assert_valid_keys(:name, :age) # => raises "ArgumentError: Unknown key: years"
{ :name => "Rob", :age => "28" }.assert_valid_keys("name", "age") # => raises "ArgumentError: Unknown key: name"
{ :name => "Rob", :age => "28" }.assert_valid_keys(:name, :age) # => passes, raises nothing

上の例のように、selfとなるHashassert_valid_keysの引数で指定されたキーが含まれていない場合にArgumentErrorが発生します。キーはSymbolStringで区別して判定されるので注意。