これは圏です(はてな使ったら負けだとおもっていた)

きっと何者にもなれないつぎの読者につづく。

PFIサマーインターンに参加していました

8/1〜9/30 の二ヶ月間、株式会社プリファードインフラストラクチャー(通称 PFI)でインターンに参加して来ました。
報告記事を書かなくては……と考えている内に大分時間が経ってしまってこんな時期になってしまいました。

採用まで

夏休み特に予定がなかったので、何か今までとは違ったことに挑戦しようと思っていたところ、Twitter上で id:pi8027 さんが言及しているのを見掛けて、面白そうだと思って応募したのでした。
履歴書を埋めるのが中々の一苦労で、プログラミングコンテストなども余り実績がないし、開発したものもそんなに大規模なものはない。特に苦労したのが『受賞歴』の欄で、仕方がないので高校時代の演劇での受賞歴とTOEICの点数を書くと云う暴挙に。昔現実逃避に問題を解きまくっていた名残かHaskell ゴルフのランキングで4位だったので、ちゃんと書けた実績としてはそれぐらい。

せめて、と思って志望動機の欄に Haskell への愛を書き連ねて、送信。何かが間違っている気がする。


その後、書類審査は奇跡的に通過していたので、面接へ。
ちょっと書類で Haskell 愛を強調しすぎて居たので、志望動機を真面目に答えようとする……も、気付くと「一番大きいのは Haskell が開発で使えること」「Haskellは使えないという固定観念を打ち殺してやりたい」などと力説している。「他の人達とは別の言語でやりとりすることになりますが、どうですか?」と問われ「ええと……C++は出来ませんが Ruby なら出来ます……」と自分の失言に気付き何とか軌道修正を図ろうとする。だって好きなんだもん……

その後、問題へ。fmfm、花札シャッフルか……と、素直に Haskell で書く。しっかり動いている様に見える……あれ?テストケースを通過していない!?
余裕があった筈が焦る。結果的には返す値を間違えていたと云うショーモナイバグで、何とか時間内に修正出来たものの、やっちまったなぁ……という感じである。
その後、「数学科に行きたいと云うことでしたが、それじゃあこの発展問題を考えてみてください」と、カードの枚数が何万枚に増える、と云う条件での出題。飽く迄参考で解けなくても構わない、と云うことだったんですが、ここでもテンパってしまう。取り敢えず漸化式で考えるんだろうなあ、と云うことはわかる。もうその時点で解けている様なものなんですが、何故か一般項を出そうと考えて泥沼に嵌りタイムアウト。

この分じゃあ多分落ちてるだろうなぁ……などと思いつつ帰途についたのでした。夏休みなにしよう……


……と思っていたら、

この度は、ご面談に来ていただきありがとうございました。
選考の結果、「採用」と決まりました。よろしくお願いします。

何故か採用!!

奇蹟は重なるものだなぁ……と。これはきっと Haskell 枠で合格したんだ!と前向きに捉えることにしました。 Haskellばんざい!!!

インターン前半

最初の週は大学の講義があったため、初日の顔合せは午前中だけ参加、と云う形に。
会議室で自己紹介。他のインターン参加者は T京大学やT島大学の修士課程・博士課程であることが早晩明らかになり、大学一年の自分が参加してしまって良かったのだろうか……明らかに場違いだどうしよう……などと恐れ戦く。

しかし、ここで引いてしまっては意味がない!!と「Haskell を使っています」「メタがすき」「実際の開発に触れてみたい」「分散処理と自然言語処理に興味があります」「Haskell は unemployed *1 じゃない、私は採用された、 I employed だ!!!」と良くわからないことを喋くり散らす。

なんとかその場を乗り切った後は、環境の setup をして、お昼ごろにやってきたメンターの id:tanakh さんとインターンの課題について打ち合わせをする。

自然言語処理・分散処理、と云うことを考えると、膨大なデータ量があって解析のしがいがありそうな Twitter をテーマに何かサービスをつくろう、と云うことになる。その後二、三日程度の話し合いの結果、「樹形な tweet の自動まとめ生成サービス」をつくろう、と云うことに決定。


インターン同期生の大野さんもついったー関連のサービスを作ろうとしているようだったので、今後の方針についてメンターの方々も交えて話し合い。結果、当面の間僕は Twitter のクローラを作成し、大野さんは in_reply_to で接続されたグラフを生成する方法を模索することに。


あとの資料に書きましたが、中々沢山のついーとを一気に取得すると云うのは大変で、大量のデータを分担して取得して、それを同時に処理しなくてはいけないので、なかなか良い経験になりました。
Haskell はこの辺りの並行処理の機構が充実していて非常に書き易かったです。部分的に Ruby で書かれている部分があるのですが、 MessagePack-RPC を使うことで簡単に Haskell - Ruby 間でも通信することが出来てとても便利でした。MessagePack ++

PFIセミナー

インターン参加者はどんな話題でも良いのでセミナーで発表をすることになっています。

色々迷った挙げ句、僕は "Metaprogramming in Haskell" と云う題目で発表することにしました。下がその発表資料。

スライド中で使われた例は GitHub にあります。コンパイルタイム『交響曲第五番 運命*2』など斬新な試みが沢山!


しかし、PFI でHaskell を使っている方は tanakh さんと nushio さんくらいだったので、もう少し基本的な説明をしてからでないとわかり辛かったかもしれません……。反省です。
一週間近く関連する論文などを読み耽ってスライドを書いていたので作業が滞ってしまう事態に……力を入れすぎましたね……。

後半

クローラはひとまず完成と云うことで、後半は自動まとめ生成サービス logtter の制作に。
Haskell には fgl と云う優れたグラフ用ライブラリがあって、辺や連結部の抽出は割と楽に出来ました。

問題は、どうやって発言同士を繋げるかで、なかなか難しい。単語抽出も、MeCab などを使うより、単語辞書を用意して trie 木に突っ込み、連続最大一致部分を探すのが効率が良かったりして、この辺りは色々と相談に乗っていただきました。

この辺のヒューリスティックスは単純でも思ったより効果があったりするんだなぁ……と感心すること頻り。まだまだ全然初歩だけですが、こういったアルゴリズムやデータ構造をもっと勉強せねば……と。trie 木が本当に速くてびっくりしました。


ところが、終盤に差し掛かったときから クローラ が暴走する様に。その原因究明と解決の模索に一週間半ほど費してしまって、予定が押してしまい、logtter の方に殆んど時間が割けず……

とりあえず、それなりに繋がったグラフが吐ける状態までもっていき、HTML出力部を大急ぎで作成して最終発表と云う運びになりました。

最終発表 & 総括

そうこうしている内最終発表。緊張の余り RedBull を三本も呑んでしまう。日頃でも最大二本くらいまでだったのですが、これで僕も一人前かもしれません。

以下が最終発表資料。

最終発表の模様は PFI Intern 2010 Final Presentation 1 、 PFI Intern Final Presentation 2 にあるようです。

資料でも再三再四強調していますが、今回のインターンを通して『Haskell は実用言語である』と云う仮説は真実である、という確信が持てました。その証拠に、logtterの 実に95%は Haskell (残りは Ruby) で書かれていますし、近々100%になる予定です。
今後もPFIでアルバイトさせて頂けることになったので、logtter をひとまず完成させてデプロイするところまで行く予定です。Twitter でも思った以上の方々に logtter に興味を持って頂けたようで、大変嬉しい限りです。


今回のインターンを通して、プログラマとして大きな成長をすることが出来たと思います。Haskell での開発ノウハウもそうですし、プロの現場に触れてプログラマとしての考え方、ソフトウェアを売るということ、そう云ったものを少しでも学ぶことが出来ました。


今回のインターンで学んだもうひとつのことは、RedBull の偉大さです。僕は、炭酸が飲めません。苦手というのではなく、飲めないんです。小さいころから。ですから RedBull にははじめ大きな抵抗感があったのですが、飲んでいる内に、RedBull は違う、これは素晴しい飲み物である、と云うことが段々と腑に落ちて来ました。はじめの内は一日一缶程度と云う入門者でしたが、後半では一日に二缶飲む様になり、多い時で漸く三本飲むようになってきました。これは偏に今回のインターンのお陰です。もしインターンに参加しなければ、また、インターンの職場がPFIの様な常に冷蔵庫に RedBull が二十本以上常備されているような環境でなければ、僕は RedBull の素晴しさに触れることもなく一生を終えていたに違いありません。炭酸が飲めなかった僕が「こいつ酒の前にRedBullの味覚えやがった」と CTO ことちくわさんに云われるまでになることはなかったのではないでしょうか。RedBull gokgok!


そんなこんなで、最初は長く感じられた PFI サマーインターンでしたが、実際はあっと云う間で、足りないくらいでした。同時に、これだけ中身の詰まった二ヶ月間はなかなか無かったです。


来年以降もインターンは行われる様ですので、気になる人は是非是非参加しましょう!

*1:http://soup.johl.io/post/23925622/Why-Haskell-Community-unemployed

*2:音源は別途ダウンロードのこと