けんちゃんくんさんの Web日記

仕事始め

会社的には昨日(1/4)が仕事始めだったのですが、帰りの新幹線が取れなかったので有給をとってました。

初仕事は昨年末に倒したと思っていた、CIでcukeが失敗する現象が再発と、なぜかcukeが落ちているのにexit codeが0になる現象との戦い。

最終的には、cucumberのWikiにあるRails2.x用のバージョンに固定して、cucumberコマンドを直接実行していたところをrake cucumberにしたら解決したのでした。 このあたりは年末にCapybaraがらみで誰かが言ってたような気がするんですが、同じ原因だったのかしら。

東京へ

ひどい二日酔いの中、いつもの蕎麦を食べてから東京へ。

新幹線が東京駅に着いたときは「東京あったかい!」と思ったのに、夜にはずっと人がいなかった我が家の寒さを噛み締めておりました。

家に帰ってからはゆっくりFF11をやったりやらなかったり。だいぶ日常が戻ってきた感じでした。

雪だるま業

正月三が日の最後は息子と雪だるま業。 スノーダンプで運ばれてきた雪を固めて胴の上に、雪玉を転がしてつくった頭をのせたのですが、頭を遠くで作ってしまってもってくるだけで疲労困憊。

去年は外に出るのを嫌がっていたのに、今年は家に帰るのを嫌がって大変でしたとさ。

来年はスキーに連れていく計画らしいのだが大丈夫だろうか…(主に私の体力が)

お年玉業

親戚を一通り回って、お年玉配布と回収という任務を行ったおかげで、財布の中身がリアルに空っぽになったので一回やすみ。

散髪

いつものところが予約できなかったので、別のところで。(hsbtのを見て思いだした。早速わすれていた…)

WEB+DB PRES Vol.66を読みました

今月も技術評論社様から献本頂きました。ありがとうございます!

今号で一番ぐっと来たのはアルゴリズムの話ですかね。 オライリーのザリガニのやつも持っていて、アルゴリズムの勉強をしたいと常日頃思ってはいるんですが、ついつい流行りのライブラリとかに流れてしまう私には丁度いいボリュームでした。

ただ、特集1のHTMLはちょっとアレだと思います。

  • ブロック要素とインライン要素を揃えるためにいっぱいdivを使ったり
  • フォームのラベルがh4になっていたり

と、導入部からだいぶ横道が気になってしまいました。HTML5なら簡潔に意味付けできる要素が沢山あるので、そのあたりに少しでもふれてもらえるとよかったんじゃないかなぁと思いました。

WEB+DB PRESS Vol.66
WEB+DB PRESS Vol.66

アルゴリズムクイックリファレンス
アルゴリズムクイックリファレンス

DevLOVEでJenkins(というかCIとインフラ)についてお話ししました

同僚の@papandaからの依頼とあれば断わる理由はないので、DevLOVE HangarFlight - Snow Barrage -で、Jenkinsを中心としたCIとそのインフラについてお話ししてきました。

Jenkins勉強会で発表した内容に、それから半年の動きを足した内容となっています。

  • 主たるコミュニケーションツールであるIRCを中心として開発者が開発に集中できること
  • 有限のサーバリソースをどう使って快適なCI環境を手にいれるか

ということが、ここ1年くらいホットなトピックだったので、そのために私たちがやっている取り組みをお話させていただきました。

何人かの方から、JenkinsとIRCと会話するのは面白い、GanetiやTravisは知らなかったけど興味が湧いたという声を頂いて、発表してよかったなぁと思いました。 また、懇親会では、Vundleの記事やWeb+DBの特集がよかったと言ってくれる方もいて嬉しかったです。

DevLOVEには初参加だったのですが、参加者のバックグラウンドや年齢の幅がすごく広くて、話の幅が広いなぁと感じました。 オブラブも結構広い方だと思っていたのですが、DevLOVEの方が若者が元気な感じがしましたね。オブラブもがんばらないと。

最後に、「次の一手」の進捗があったらまたどこかでお話したいと思いますので、@kenchanの次回作にご期待ください。

Hello Galaxy Nexus!

(これは2011/12/26に書きました)

HT-03AとGalaxy Nexus

2年ちょっとお世話になったHT-03Aから、Galaxy Nexusに機種変しました。

思ったよりよかったことは、

  • 大きいけど薄いのでポケットに入れても思ってたより邪魔にならない
  • ガリガリ使ってもホッカイロにはならない

思ったより辛いことは、

  • 片手では対角線が届かないのはやっぱりきつい
  • UI(アプリ毎の設定画面への動線)の変更がけっこうきつい
  • Android 4.0対応していないウィジェットがけっこうある

という感じですかね。

また、結構罠だったのが「Xi端末じゃなくてもXi契約はできるけど、そうすると月々サポート割の対象ではなくなる」というところですね。(月々サポート割の条件が、FOMA端末はFOMA契約をしていることなんです)

つまり、Xiプランでのデザリング定額と、月々サポート割の24000円くらい(2年継続時)を天秤にかける必要があります。

日常的にデザリングをするなら、月1000円程度なんて誤差なので捨てればいいんですが、たまーに使いたい時があるというくらいだと迷うところです。(結局、今もFOMAプランで使っています) なので、デザリング目的の方は今一番HOTなスマホでも買うといいんじゃないでしょうか。

HT-03Aもそうだったんですが、やっぱり綺麗なAndroid端末はいいですね。また、2年後にいい端末がでますよーに☆

俺アドベントカレンダー1日目「git logでタグ名を表示する」

折角なので俺アドベントカレンダーをやります。テーマは特になくて、私が便利だと思うものやちょっとした小ネタを書くつもりです。いつまで続くかしら…

gitに限らず以前のリリースからの差分を知りたいときなど、コミットログにタグやブランチ名が出たら便利ですよね。gitではlogに--decorateオプションを付けるだけで簡単に表示できます。

(画像がどこかに消えてしまった…)

これはtappでgit log --decorate --onelineした結果ですが、色もいい感じで見やすいですよね。 とくに邪魔になることもないので、私はlog系のエイリアスにすべて--decoreateをつけています。 https://github.com/kenchan/dotfiles/blob/master/dot.gitconfig#L21

初日はこれくらいで。

「パブリックスピーカーの告白」を読みました

DevLOVEも近づいてきたので、まだ読んだことのなかった「パブリックスピーカーの告白」を@hsbtに借りて読みました。

「プレゼンテーションZenなんて読んでないでこっちを読め」と言う人が多いのも納得のとてもいい本でした。すぐにはじめられること、やったほうがいいことが沢山書いてあるし、タイトル通り著者の「告白」がすごく共感できる。 とにかく発表の練習します。がんばります。

人前で話すのが苦手だと思っている人は、是非一度読んでみるといいと思います。「話す」ということの考えかたが変わるくらいインパクトのある内容です。

パブリックスピーカーの告白 ―効果的な講演、プレゼンテーション、講義への心構えと話し方
パブリックスピーカーの告白 ―効果的な講演、プレゼンテーション、講義への心構えと話し方

プレゼンテーションzen
プレゼンテーションzen

「Jenkinsではじめるビルド職人入門」を読みました

なんと11月中ならebookが無料という「Jenkinsではじめるビルド職人入門」を読みました。

JenkinsでJavaのプロジェクトをビルドできるようにするまでの手順がかなり詳細に書かれているので、これからJenkinsの導入を考えている人はまず読んだほうがいいのではないでしょうか。 ありがちなハマりどころの解決方法も綺麗にまとまっているのもいいですね。

ただ、Java、Ant、JUnitという組み合わせにかなり特化した内容が多いので、例えば「RubyのプロジェクトをJunkinsでビルドする」みたいな人はかなりの読み替えが必要ですね。

とはいえ、Jenkinsさんに気分よく仕事をしてもらうためのお作法の話もたくさんあるので、一度目を通すといろいろ参考になると思います。

Campfireを試しています

IRCの代替サービスを探す旅の一環として、少し前から37SignalsのCampfireを使っています。

やりたことはだいたいできるんですが、Macの専用クライアントを使わないと全体的にあと一歩という印象。

  • Roomから勝手に出てたりする(Chromeとの相性?Webインタフェースだけ?)
  • ブラウザ開きなおすと全Roomから出てたりして泣ける
  • mentionがイマイチ
    • するのもイマイチ
    • されても気付きにくい

いいところは

  • Githubのhookとかの表示がいい
  • 画像とかtwitterのURLとか、いくつか展開してくれるやつがある
  • ペーストした内容にパーマリンクがつく
  • chrome-extensionで通知できる
  • chorme-extensionでアイコンをつけることができる

Roomの扱いがもうちょっといい感じなるとIRCの変わりには使えるかなぁというところですけど、この旅の終着駅にはならなそうな感じです。

勤労に感謝して海浜幕張まで

服を買いにいく服がない状態だったので、海浜幕張のアウトレットパークまで。

幕張本郷からバスで行こうと思ってバス停にいったら、千葉駅伝であと1時間くらい通行止めですと言われて一回休み。 さすがに幕張本郷で1時間とか無理ゲーなので西船経由で海浜幕張まで移動して買い物して帰ったのでした。

あまりにレアなイベントに遭遇したので、そのうち何かいいことないかなぁ。

DevLOVE HangarFlight - Snow Barrage - でRailsとCIについてお話しします

同僚となった@papandaからオファーをいただきまして、12/10のDevLOVE HangarFlight - Snow Barrage -でお話させていただくことになりました。

「弊社でのJenkinsの運用を中心にRailsとCI(とサーバ仮想化)について」というJenkins勉強会でお話しした内容の最新版をお届けしようと思います。

私以外にも永和からは@haru01、@m_pixy、@papanda、そしてチェンジビジョンから@kompiroが登壇予定ですので皆さん奮ってご参加ください!

「Restoring Function and Form to Patterns」を読みました

原文ではなく、和智さんが翻訳してくださったものを読んだのですが、これはすごいものが出てきてしまいました… 前半は「Alexandeその人」と「Alexandeのパターン」に馴染みのない人(たとえば私)にはかなり読みにくいのですが、DCIアーキテクチャに興味を持っている方はぜひ最初から読むのを強くお勧めします。

p23の「機能の型」からは比較的身近な話が多くなるので、そこからまず読んでDCIアーキテクチャと実際のシステムの関連を把握するのもいいかもしれません。

さすがにこれを英語で理解できるとは思えないので翻訳してくださった和智さん、本当にありがとうございます。

読み終わってから、これは「音読会」が必要だと思ってメールを出そうとしたら、先に@kakutaniが音読会のメールを出していてふいたのが数日前の話。社内での音読会が楽しみでしかたありません。

tappについてそろそろ一言言っておくか

弊社で(総力を上げて)メンテナンスしているtappというライブラリがあるのですが、思ったより認知度が低いようなのでここで紹介させていただきます。

まとめ

tappは、従来のPrint Debugの問題点を解決する画期的なライブラリです。 次のような経験がある方は、いますぐGemfileにtappを追加することをお勧めします。

  • メソッドチェーンの間のオブジェクトの状態を見るためだけに一時変数を使ったことがある
  • ppやp、putsを消し忘れてリポジトリにコミットしてしまった

tappとは

tappは、Print Debugを簡単に行うためのRubyライブラリです。

リポジトリはhttps://github.com/esminc/tappになります。

tappの歴史

tappの作者である@ursmは、2008〜2009年頃に社内向けのモンキーパッチとしてtappを生みだし、Rails勉強会41.1回(Rails勉強会@東京第41.1回にいってきた - ayumin)や、InactiveSupportのご紹介により、一部のRubyistに広まることとなりました。

そして、その1年後の2010年7月7日にバージョン1.0.0がgemとしてリリースされました。

現在はリポジトリをesminc(会社の公式アカウント)に移し、開発を継続しています。

tappの機能

2011/11現在、tappは次の3つのメソッドを提供しています。

  • Object#tapp
  • Object#taputs
  • Object#taap

出力の形式に違いはありますが、要は「レシーバをpp(puts,ap)して返す」というだけです。

>> require 'tapp'
=> true
>> "hoge".tapp
hoge
=> "hoge"

これだけだとpp "hoge"と何が違うのかわかりませんね。tappを使いこなすには、「レシーバを返す」というところを上手く使えるようにならなければいけません。

tappの使い所

tappがあれば、急に次のようなコードのメンテナンスを依頼されても慌てることはありません。 {%img /images/kakutani_slideshare.png %} (SlideShareのページ指定埋めこみがうまくいかなかったので画像にしています)

Rubyでプログラムを書いていると、ArrayやHashに対してメソッドチェーンを使う場合が非常に多いと思います。そんなとき、メソッドチェーンの途中の状態を見たくなりませんか?

そこでtappの「レシーバを返す」というのが効いてきます。

例えば、「1から10までの数字で奇数だけを合計する」ような処理では、tappを使って次のようにメソッドチェーンの途中の状態を見ることができます。

>> (1..10).tapp.select(&:odd?).tapp.inject(&:+)
1..10
[1, 3, 5, 7, 9]
=> 25

tappを使わずに同じようなことをしようとすると、途中の状態を一時変数に入れなければなりません。tappがあれば処理の流れを切ることなく、自然にPrint Debugを差し込むことができます。

また、tappはBlock引数を受けとることができるので、Symbol#to_procと組合せることで任意の属性だけを出力することも簡単です。

>> User.first.tapp(&:name)
"kenchan"
=> #<User id: 1, name: "kenchan">

Print Debug消し忘れ対策としてのtapp

みなさん一度はリポジトリに対してppやpをコミットしてしまったことがあるのではないでしょうか。書き方によっては、ppやpはgrepで見つけることが困難になり、探すのに苦労することもあります。

そんなときもtapp系を使っていれば安心です。間違いなくgrepで見つけることができます。

また、v1.3.0からはtappのコマンドラインツールが同梱されており、バージョン管理にGitを使っている場合は簡単にtappを検索できるようになっています。

$ bundle exec tapp grep
Gemfile:  gem 'tapp'
Gemfile.lock:    tapp (1.3.0)
Gemfile.lock:  tapp

tappの落とし穴

Rails(ActiveModel)でtappを使う際には、AssociationProxyやScopeに注意しなければいけません。

普通に使っている分にはArrayのように見える彼等ですが、チェーンの間にtappを差しこんでしまうとそこでチェーンが切れてしまうため、その先がエラーになってしまう場合があります。

どこまでがScopeやAssociationProxyのチェーンになっているか見極めてtappを差し込みましょう。

おわりに

tappはオープンソースプロダクトです。みなさんからのpull requestをお待ちしています!

https://github.com/esminc/tapp

達人出版会1周年記念にDevLOVE本を購入

まずはじめに、達人出版会1周年おめでとうございます!

お祝いとして、買おう買おうと思っていたけど買っていなかったDevLOVE HangarFlight Experiencesを購入しました。

ざっと読んだところだと石沢ケントさん、こしばさん、gaoryuさんの話がぐっときました。 この業界の日本人のエッセイがこれだけ集まった本は他にないので、とても楽しく読めました。

ただ、同じ人の話が3、4個続くのは結構しんどいですね。1つ目の話が好みじゃないとついつい流してしまいそうになるので…

通販生活

コナミスタイルは「まとめて配送」を選ぶとどれだけ発売日がはなれていても一緒に配送されるという罠をすっかりわすれていて、TatshとTЁЯRAのアルバムが一緒に届いたのが数日前の話。 それでもちゃんと初回限定盤を確保しておいてくれるのはいいんですけど。

Tatshの方は全体的に短めですけどイイ感じ。GENOCIDEとLove Again…がお気に入り。

TЁЯRAの方は良くも悪くも期待通りという感じ。ただアルバム名の頭文字がアレすぎてソート順で混乱します…

Tatsh「MATERIAL」

TЁЯRA「ЁVOLUTIΦN」初回限定盤

てけてけの会

@m_pixy家御用達のお好み焼き屋さんのてけてけに行ってきました。 子連れが3組(3人とも2歳児)に@ngtyk、@ursmというめずらしい感じでとても楽しかったです。

毎月開催という噂もあるので、また機会があれば行きたいなー。

Kernel 3.1にアップデート

gentoo-sourcesに3.1が降ってきたのでとりあえずインストール。

さくらVPSの方は何事もなく完了したのですが、仕事のマシン(Lenovo T410)で無線LANが認識されなくなりました\(^o^)/

wlan0ができなくて、dmesgはこんな感じ。

wlagn 0000:03:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
iwlagn 0000:03:00.0: setting latency timer to 64
iwlagn 0000:03:00.0: pci_resource_len = 0x00002000
iwlagn 0000:03:00.0: pci_resource_base = ffffc900117b0000
iwlagn 0000:03:00.0: HW Revision ID = 0x35
iwlagn 0000:03:00.0: pci_enable_msi failed
iwlagn 0000:03:00.0: PCI INT A disabled
iwlagn: probe of 0000:03:00.0 failed with error -1

@ursmはまだアップデートしてないらしく、まさか人柱になるとは…

解決しました! 【解決】Kernel 3.1にアップデート

capybara-webkitでAjax後のsave_and_open_page

capybara-webkitでsave_and_open_pageを使ってデバッグをするとき、その前にAjaxを使っているとレスポンスを待たずにブラウザが立ちあがってしまいます。 例えば、下のように書くと意図しない動作に頭を悩ませることになります。

もし "送信する"ボタンを押す # ここでAjax
かつ デバッグ # レスポンスが返ってきてたり、返ってきてなかったりする

ならば "hogehoge"と表示されていること # ここでは処理が終わるまで待つ

Capybaraでは、画面の検証をする場合はデフォルトで2秒までAjaxでの書き換えを待ってくれるのですが、save_and_open_pageではそれを待ってくれないようです。 とりあえず検証しさえすれば待ってくれるので、以下のようにするといいかもしれません。

もし "送信する"ボタンを押す

ならば "送信する"と表示されていること # 絶対マッチするやつ
かつ デバッグ # やった!原因がわかったぞ!

ただ、これはsave_and_open_pageがJavascriptの処理を待ってくれればいいような気がするので、そのうちちゃんと深追いすることにします。

WEB+DB PRESS総集編とVol.65

総集編はAmazonで注文したら見事にKonozamaを食ってしまったのでアキヨドで、Vol.65は献本いただきました。ありがとうございます。

総集編は、書き下ろしエッセイのためだけに買っても満足しそうなすばらしい内容でした。 一番ぐっときたのは、中島拓さんのイノベーションについてですね。見えてない競争軸で勝負できるようになりたいものです。

Vol.65では、「CoffeeScriptから学ぶJavaScriptプラクティス」がよかったですね。 まだCoffeeScriptを本気で使えてはいないので、その背後にあるプラクティスから、なぜそうなっているのかがわかりやすく書かれていてすばらしい。

PostgreSQL9.1の話は、いつか使うことなったときにまず目を通すところとして覚えておきます。