8/2に京都に到着、8/3からインターンが開始されたはてなインターンですが無事全日程終了しました。後半に進めるのが決まったのが二週間前だとか信じられません。
というわけで興奮覚めないままの感覚で書いていこうと思います*1。
インターン後半戦
インターンの前半戦は毎日出される課題を倒していくという感じの日々でしたが、後半は実際にプロダクトの作成、改善、追加などを行ないました。チームも前半とは違って再配置となり、僕はid:mi_kattun、id:mroriiと一緒にid:onishiさん、id:antipopさん、id:ninjinkunさんの運用チームでやらせてもらいました。
このチームにて
- コメントスパム
- コメント日記
の撲滅を目指してスパムフィルタの作成をしました。以前は結構簡単なルールでフィルタリングしていたのですが、最近とにかく(本当に!本当に本当に!!本当に本当に本当に!!!)スパムが多いので、ルールベースではなく機械学習を使って削減しよう!!という感じでやりました。こんな風に判定されます。
学習させるためにはどういう素性(特徴)が効きそうかを知らねばならないので生データ、つまりスパムコメントの山を見ていました。発狂したくなりました*2。。
id:reposeは研究所でインターンにいっていて理論とかをやったらしいですが、僕らが使っている手法自体はすごい単純なものです。しかし
- すっごい精度がよいアルゴリズムを使っても計算時間かかりすぎてたら使いものにならない
- データ量が延々増え続けていっても大変なので、ある程度でデータを削減したい
- コメントは逐次的にくるという性質上、バッチじゃなくてオンライン学習的なもののほうが望ましい
などなど「実際に運用する」となるとアカデミックなところとは違う難しさが出てきます。が、この難しさも面白さの一つ。アルゴリズム的にはcpanに上っているモジュールを使えばできるところもありましたが、上記のような仕様を満たさないものもあったので、車輪の再発明のようなこともやっていましたとさ。perldoc -mをやりまくってました。
リリース!!
スパムフィルターはこんな感じの経緯で本日(書いたのは28日だったのです)リリースされました。今回のインターンの素晴しいところとして、3チーム全てのチームがインターン期間中にリリースできた、というところがあると思います。素晴しい!!!
- スパムコメント、スパムブログ対策を強化しました - はてなダイアリー日記
- はてなブックマークプラス:マイブックマーク全文検索機能に、スコア順検索機能などを追加しました - はてなブックマーク日記 - 機能変更、お知らせなど
- うごメモシアターに「★コメント」ページを追加するなど、コメント機能の強化を行いました - うごメモはてな日記
インターンとして僕らが経験しただけではなく、僕らが書いたコードがこうしてはてダの上で動いているわけです。はてダは本当によく使っているサービスであることもあってすっごいうれしいです。インターンに参加してよかったと思えることの一つでした。
なお、各チームの最終発表後ほたて*3にて投票があり、僕たちのチームが一位となることができました!!賞品おいしいです><。
個別面談
チームでの評価があった後は、インターン生一人一人への面談がありました。エンジニア社員さんからの評価シートを元にid:jkondoさん、id:naoyaさん、id:stanakaさんとの面談*4がありました。インターン中にフィードバックをいただける機会がすごい多くてうれしかったです(自分のコードを見てもらうとか評価してもらう機会がなかなかないので余計)。
前半はid:nanoliaさんに相談させてもらっていたのですが、「相談しすぎか。。。」と思っていたのですが、マネイジメンする人にとっては自分から色々言ってきてくれる人のほうが把握しやすいなどの面もあるとのことで、積極性などが評価されていて自分としてはちょっと驚きました。自重はダークサイドですね、分かります*5。
インターンに行く前の目的は果せたか?
僕がはてなインターンに行こうと思った目的の一つに「自分がエンジニアな職場でやっていけるか」を見てみたい、というのがありました。来年からNLPな研究室に行く自分としては博士に行って研究の道でやっていくか、それとも?という判断できるものが自分の中に欲しかったからです。
で、結論としては
- インターン後半に残れて、リリースまで行きつけたんだ!という自信
- エンジニアとして「活躍していく」ためにはまだまだ努力が足りないんだという自覚
という一見矛盾しているような感覚が自分の中で残りました。
一つ目に関しては、もう全くこれに書いてある通りです。id:naoyaさんの狙い通り(ry。
我々は,“はてならしい”インターンシップを考えました。結果として目指したのは「学生が成功体験を持ち帰ること」です。はてなのエンジニアとしての成功体験は,実際にコードを書き,リリースすること。若いうちに,大きなシステムを相手にコードを書いて,リリース,それがユーザーに利用される---このような体験ができれば,参加した学生のその後のエンジニア人生において,大きな意味を持つことになるでしょう。
はてなインターン日記 - コードを書いてリリースする はてな流成功体験:ITpro
二つ目に関しては、id:suztomoが去年感じていたようなことを僕も感じました。
gitのことはid:motemenさんに聞けばいいしemacsやperlのことはid:antipopさんに聞くことができて,はてなのフレームワークのことはid:onishiさん,JavaScriptやActionScriptのことはid:secondlifeさんが詳しいし,デザインのことならid:tikedaさんやid:nagayamaさんに聞けばいい,といったようにはてなの社員の方々はそれぞれが専門分野を持っています.
僕はこれまで新しい技術(Flex, iPhoneOS, Google App Engine)がでてきたらそれをちょっと触ってはまたすぐ別の技術を学んでという,ことを何度もやってきましたが,はてなのインターンシップに参加して今後自分は何かしら専門分野を持つべきであるということを実感しました.
9月のはてなインターンシップを終えたまとめ - suztomoの日記
後半のチームでの作業にしてもid:mi_kattunは綺麗な設計考えられるし、id:mroriiはいつの間にかプラグインをいくつも作っていたりするし、ということで僕は一体何の役に立てただろうか、、、という劣等感に襲われたことが何回あったことか。もっともっと尖ったところが必要だし、それを場面に応じた形でアウトプットできるという能力が必要だなと思いました。
まとめ
8月は本当に充実した夏でした。親身に講義や説明をしてくださったスタッフの皆さん。僕らの元気の源であるオフィスランチを作ってくださっていたid:macanaiの皆さん。そして、一ヶ月ひーひー言いながらも一緒に頑張ったインターン生のみんな。本当にありがとうございました!