| @労働

会社、antipop さんという有名なプログラマーの人がいる。去年、はてな社からペ社に移籍してきた。antipop さんともう一人の有名プログラマー hsbt さんが旗振り役になって(人事部長を巻き込んで)スクラムを会社に定着させようとしている。

アジャイル開発とか、受託開発の会社にいる激務薄給な感じのプログラマーがウォーターフォール開発に絶望してたどり着くものというイメージがある。だからはてなのようなモンスター級のスーパープログラマーばかりいる自社サービスの会社にいた antipop さんがアジャイルに開眼するのは不思議な感じがした。なんですごい人たちばかりの会社にいてアジャイル良いと思ったんですか、と antipop さんに質問したことがある。すごいプログラマーがたくさんいてもすごいサービスができるとは限らない、はてなにもうまくいかなかったサービスはある、すごい人たちがおりゃーと開発するより凡人だらけでもアジャイルなやり方で開発した方がよいものができるのではないか、と思ったからアジャイルに傾倒し始めた、ということらしい。

なるほどなー、と思った。

| @技術/プログラミング

Capybara + Selenium でテストしていて、JavaScript の alert() の中身を調べたいとき、 ただ単に

it 'alert の中身は「うんこ」' do
  find('#unko').click
  page.driver.browser.switch_to.alert.text.should == 'うんこ'
end

とかやるだけでは Selenium::WebDriver::Error::UnhandledAlertError が発生する。

it 'alert の中身は「うんこ」' do
  find('#unko').click
  page.driver.browser.switch_to.alert.text.should == 'うんこ'
  page.driver.browser.switch_to.alert.accept
end

というように最後に OK ボタンを押す操作を追加してあげないといけない。

| @技術/プログラミング
[1] pry(2.0.0-p195)> require 'open-uri'
[2] pry(2.0.0-p195)> require 'active_support/core_ext/hash/conversions'
[3] pry(2.0.0-p195)> Hash.from_xml(open('http://www.portalshit.net/index.atom').read)
=> {"feed"=>
  {"xmlns"=>"http://www.w3.org/2005/Atom",
   "id"=>"http://www.portalshit.net/",
   "title"=>"portal shit!",
   "updated"=>"2013-06-18T19:07:44+09:00",
   "link"=>
    [{"type"=>"text/html",
      "rel"=>"alternate",
      "href"=>"http://www.portalshit.net/"},
     {"type"=>"application/atom+xml",
      "ref"=>"self",
      "href"=>"http://www.portalshit.net/index.atom"}],
   "entry"=>
    [{"id"=>"tag:www.portalshit.net,2013-06-18T19:04:33+09:00",
      "title"=>"Alfred で Chrome のブックマークを検索する",
      "published"=>"2013-06-18T19:04:33+09:00",
      "updated"=>"2013-06-18T19:07:44+09:00",
      "link"=>
       {"type"=>"html",
        "rel"=>"alternate",
        "href"=>
         "http://www.portalshit.net/2013/06/18/chrome-bookmark-search-with-alfred"},
      "content"=>
       "<p><img src=\"https://resources.portalshit.net/945-chrome-bookmark-search-with-alfred.png\" alt=\"945-chrome-bookmark-search-with-alfred.png (708×295)\
      "author"=>{"name"=>"morygonzalez"}},

で XML の内容を Hash にできる。ActiveSupport 便利。

| @技術/プログラミング

jQuery Validation で特定のイベントに対してだけバリデーションを無効にする方法が分からなくて困ってた。例えばフォームの中の送信ボタンではなくキャンセルボタンが押されたときにはバリデーションを行わずにフォームを送信したいということがあると思う。

調べていたら以下の記事がひっかかった。

input タグの class に "cancel" を指定すれば validate されないとある。ほかに、ボタンの click イベントとかで

$("form").validate().cancelSubmit = true;

と書いてやっても良いみたい。こちらは JavaScript で form を submit() するタイプのやつにも使えて使い勝手良さそう。

jQuery Validation 、便利だけどドキュメントが充実してなくてつらい。あとどれが公式か分からないのもつらい。去年くらいまで jQuery Plugin のサイトにドキュメントあった気がしたんだど今は別のサイトに単独で存在してる。

| @Mac/iPhone

945-chrome-bookmark-search-with-alfred.png (708×295)

みんなやりたいようで検索したらいっぱい出てきた。一番上に出てきたのは中の人が作ってるやつ。

ただソース見たら php で作られてた。あまり変なもん入れたくないのでスルーして別のを探したらこういうのを見つけた。

これは Python 製らしい。偏見かもだけど Python 製なら大丈夫そうだなと思ってこっちを使ってみることにした。

一応ちゃんと動いている。

| @雑談

ヤフオクドームのリレーマラソンに参加してきた。

去年の冬、週二回ずつくらい走ってたんだけど、真冬になって寒くなってからは走るのお休みしてた。暖かくなってきたのに一向に再開する気配のない自分にハッパかけるために会社の人達と一緒にリレーマラソンに参加してきた。42.195km を10人のリレーで走るもので、1周 3km 。なので10人のうち4人は2周走らないといけない。一瞬の気のゆるみで2周走ると宣言してしまい、2周走らないといけなくなってしまった。1回目の出番を終えた後、想定外にきついことに気がつき、絶望的な気分になりながら2回目を走った。

3km くらい余裕でしょうと思われるかもしれない。自分もそう思ってた。いつも走ってる大濠公園は1周 2km でだいたいいつも2周 4km くらい走ってるので大丈夫だと思ってた。しかしヤフオクドームリレーマラソンのコースは球場のほか立体駐車場のスロープを利用しており結構きついアップダウンがある。加えて周りの人が毎日走り込んでるような人達ばかりでまじで速い。そうなるとつられてこちらも飛ばしてしまうので 1km くらい走ったところでばてばてになってた。自分はまだこういう大会に出場するほどの走力はないのだと悟った。公園で夜にのんびり走るのが気楽で良い。とはいえ打ち上げで行ったビアガーデンで飲んだビールはここしばらくで一番うまかった。みんなと走るとこういう打ち上げがあるのがいいですね。

途中5ヶ月くらいブランクがあったけど、走るようになって以下のようなメリットがあったと思う。

  • 体が丈夫になる
    毎年、冬の間に一回は風邪をひいてしまうんだけど、今年は牡蠣で食あたりはしたものの風邪はひかなかった。
  • よく眠れる
    一日中イスに座ってプログラミングしてると精神的には疲れるけど肉体的に疲れなくて心身の疲労感がアンバランスになってると思う。走ることで肉体的にも疲れるので平均がとれて良いような気がする。
  • ストレス発散
    走ってる間は肉体的につらいので余計なことを考えなくなり嫌なことを忘れられる。

梅雨が本格化したり真夏になったりしたらまた公園から足が遠ざかってしまうかも知れないけどなるべく習慣化させて継続的に走って健康診断で良い結果たたき出したい。

| @技術/プログラミング

Lokka を Ruby 2.0 で動かすために bundle update してたら newrelic_rpm.gem もアップデートされて、バージョンが 3.6.2.96 から 3.6.3.111 に上がった。Newrelic にはサーバーサイドのモニタリングとクライアントサイドのモニタリングがあるんだけど、Sinatra (一部 Padrino)で動いている Lokka に関してはクライアントサイドのモニタリング(Rack アプリケーションに JavaScript を埋め込んで JS とか HTML のパフォーマンスを調べるやつ)が動いてなかった。しかし最新バージョンでは Sinatra と Padrino をサポートした模様。

Newrelic 、まじでイノベーティブだなーと思いながら使ってるけど、クライアントの gem も頻繁に更新されてて本当にすごい。一般のウェブアプリケーションエンジニアがあったら便利だなーと思うものがオールインワンでセットになってる。最初に heroku を知ったときのような感動がある。Eat their own dog food してると思う。