2010-08-30
はてなインターンに行ってきた
モノ作りに対する熱意が評価されて採用されたらしい。(たぶん)
概要
はてなインターンは前半パートと後半パートに分けて行われた。
前半パートでははてな社員の方が各々好きな内容で講義を行い、講義が終わるとその講義内容に関する課題が提示され、それをインターン生がこなしていくというカリキュラムであった。
後半パートでは実際にはてなのサービスの一部を作る事になるが、条件があり、前半パートの課題の点数が6割以上でないとサービス製作には参加できないというものである(レベルが低すぎる人は流石に…^^;という当たり前の条件である)。
以下で詳しく見ていく。
前半パート
全部で9回の講義があり、最後の講義以外には課題が設定されていた。
- no title
- はてなのORMapper
- はてなのWAF
- インターン講義4日目「JavaScript で学ぶ イベントドリブン」 - Hatena::Engineering
- インターン講義5日目「ユーザインターフェース,HTML5」 - Hatena::Engineering
- クローラ
- インターン講義7日目「機械学習」 - Hatena::Engineering
- インターン講義8日目「データ構造」 - Hatena::Engineering
- はてなのインフラ
という順番で講義は毎日(月から金)行われた。
ソフトウェア製作の経験しかない私にとって前半のデータベース操作が一番の困難であった。
課題は次の日に採点され、結果が公表される。その際に、インターン生全ての成績が公開されるので自分の位置も分かるだろう。ちなみに、私は真ん中ぐらいだった。そんなものだろう。
後半の内容がインターンとしては珍しい(他のインターンに行ったことがないので確証はないが)と思う。
大学でやるような内容が展開されるあたり、はてなの技術力の高さが垣間見えるだろう。
また、上記URLをたどれば分かるが、今回のインターンの講義の一部(はてな内部に関する講義は公開されないが)はUstreamを通して中継された。先日もはてな技術勉強会が行われその時にもUstreamを用いて中継が行われた。
オープンに出来ることは出来る限りオープンにしていこうという、はてなの姿勢の表れだろう。
録画もされているので興味のある人は参照されたし。
後半パート
実際のサービス製作である。
無事に後半パートに進むことが出来た人は(今回のインターンで脱落者はいなかったが)、はてなのサービスチームのプレゼンテーションを受け、どのサービス製作に携わるかを選ぶことになる。今回のインターンでは以下の6つの内容から選ぶものであった。
前半の成績が良ければ希望のチームに配属されやすい、といったことはない。はてなのチームから逆指名を受けることはあるが。
はてなキーワードトレンド
ここからの作業方針はチームにより異なるので参考程度に思っていただきたい。
チームメンバーは、
- インターン生:
id:t_a_b_e,
id:takc923, - ディレクター:
id:yosuke, - チーフエンジニア:
id:onishi - デザイナー:
id:kyabana
の計6名である(私を含めると)。
やる内容は「キーワードページ内にある統計ページの修繕」であった。それだけである。
どういった機能を追加したい、どういった見た目(構成)にするかといった事も決まっていない、自由度の高いものであった。
まず始めに行われたのがブレスト(ブレインストーミング)である。
簡単に言えば、少し時間を与え各自の考えを箇条書きにして発表するというものである。
キーワードチームでは1つのポストイットに1つのアイデアを書いていく方法で行われた。
そこで出るアイデアには全体で見ると同じものがあったり、対立するものもある。それがブレストのいい点であると思う。
(単純な提案形式であれば、同じ意見は出ないし、対立意見が述べられにくい)
出たアイデアをマージして、さらにデザインも決定していないのでデザインのイメージもブレストした。
エンジニアなのにここまでするのか、と思う人もいるだろうが(私もそう思った)、それがはてななのである。
ブレストした結果、やらなければならないこととして以下の3つがあげられた。
- UI(主にJavaScript)
- API(グラフのデータなど)
- 集計(日ごとのデータが数GB単位で放置されていたので)
ちょうど、インターン生は3人ということで各自が自分の担当持つようにした。私はAPI担当になった。
ここからは後はひたすら開発を続けた。もちろん自分の担当が無くなれば他の担当を手伝った。
1週間ほど開発を続け、デザイナーのデザインをあててほぼ完成に近くなった状態でQA(Quality Assurance)をしてもらう。
はてなにはQA専門の人がいて、各サービスのリリース前にチェック(バグ、クロスブラウザ)を行い品質保証をあげるようにしている。
QAで出た問題を解決し、再度チェックを行いリリースという形になった。
最優秀賞
最終日には、作ったサービスに対してプレゼンテーションを行う。
そのプレゼンを見て、はてな社員の方による投票が行われ、最も得票数が多かった成果物を作ったチームに対して賞品が与えられる。
そして、なんとはてなキーワードトレンドが最優秀賞に選ばれた(はてなココチームと同順位で)。
賞品が半分になるかと危惧されたが、そんなことはなく安心した。
福利厚生
フリードリンク、フリーフードである。
コードが思うようにかけない時に、水分を取りすぎてしまいがちになるので要注意。
昼食にはおいしいオフィスランチが振舞われる(木曜日を除く)。
インターン期間中に、とある新聞社の記者が取材に来ていたが、オフィスランチが振舞われない木曜日に来てしまったので、オフィスランチが振舞われる日に再度取材に来たとか。
TGIF(Thank God It's Friday)が隔週金曜日(インターン期間中は変則的)に行われる。インターン期間中は、歓迎会と、打ち上げを兼ねて行われた。
簡単に言えば、2週間お疲れ様会である。食べ物が出る、お酒も出る。(私はお酒が飲めないのでさほど喜ばしいことではないのだが)
さらに(福利厚生か分からないが)、なんと五山の送り火を見た後に
id:jkondo(はてなの社長)の家で飲み会が行われた(話を聞く限り、例年行われる)。
社長と話すことができる。
id:hatenacinnamonに会える。行くべき。
最後に
1ヶ月のはてなインターンを通して、沢山のことを学び、沢山の事を得たと思う。
Webサービスがどういったものであるかを理解し、多くの人が利用するサービスを製作したという実感を得ることができた。
そういった意味ではてなのインターンは非常に充実していて、人生において忘れられない夏になるだろう。
はてなインターンに参加しようか迷っている人の参考になれば幸いである。
ここまで長々とした駄文を読んでいただき、感謝。
2010-07-27
備忘録的な8回目
・zen coding
試験勉強が余りにもだるくてつまらなくて、ネットサーフィンに勤しんでいたら
"zen coding"知らないと3倍遅い
とかいう言葉を見付けたので、新種のエディターか何かかと思い調べてみた。
どうやらHTMLとか<>を要素区別に使うマークアップ言語を早く書くために作られたもので
主にエディターやらHTMLを編集するソフトのプラグイン的な位置づけで提供されている。
詳しくはめんどくさいので書かないが
div#hoge
<div id="hoge></div>
に展開してくれるらしい。それだけなら微妙だが
div#hoge>li
とか書くと
<div id="hoge> <li></li> </div>
といった具合に階層構造まで展開してくれる(改行、インデントも含めて)
なかなか便利だな、と思ったのでNotepadNeueでもhtml系のプラグイン(IronPython使用)として実装してみることにした。
3時間後、上見たいな例は出来るようになった。ところが調べてみると他にも様々な構文が存在するらしく、20%〜30%しか実装できていないことに気がついた。もうめんどくさい。
そもそも、これオープンソースだろうからC++のコードとかあるんだろ、と思い本家サイトのsvnを見たら色んなエディター向けにコードが書かれていた。
そして、運のいいことにPythonにおける実装があったので、IronPythonでも動くかやってみたところすんなり動いた。
インデント文字の設定は自分で書く必要がある(NotepadNeueの設定とは別に)。
IronPythonがかなり優秀であることを実感した1日だった。
次のバージョンではデフォルトで.htm,.html,.xmlのプラグインとして採用しよう。MITライセンスだし、問題ない。
なんだかんだでエディターを普及させるためにはそれなりの優秀な初期設定やフレームワークが整っているいる必要があると思う。
これはプログラミング言語でも同じ事で、今の世の中、優秀なライブラリやフレームワークが付随しない言語は恐らく流行らないだろう。(実用的に使われると言う意味で)
2010-07-22
備忘録的な7回目
今回はperlとNotepadNeueについて
perlではコメント行を示すのに#を使う。その行のそれ以降(それを含む)はコメント扱いされる。C系言語の//に対応するものだ、そう思っていた。(実際問題、機能だけなら同等)
ところが、ある問題が発生した。$#arrayのようなリストの最後のインデックスを取得する時に#を使う。
単純に"#以降の文字をコメントとして扱ってね"だけではできない、というエディタ泣かせの問題である。
困っているのは俺だけか?そう思い適当に調べてみると、文字の色変え設定において、単純に文字列を含む場合に行うものと、正規表現にマッチした部分を色変えするという2種類存在することに気がついた。(NotepadNeueは言わずもがな前者)
というわけで、正規表現による色分けを実装した。以下、設定ファイルのフォーマット
[regexhighlight](?<token0>\$#\w+)
0,0,255
\[^$\]?(?<token0>#\[^\r\n\]+\[\r\n\])
i048,186,019
ある行にパターンを書いたら、次の行には少なくとも一つ以上の色の設定が来るようにした。
パターン中のtoken0にヒットするものが色分け設定の一つ目に相当する。token1があれば、もうひとつの色設定を次の行に書けばいい。さらにコメントとして扱う(補完ウィンドウがでないようにする)ために色の設定の頭にiをつければコメント扱いされるようにした。
これで幸せにperlをかけるようになったかもしれない。
ちなみに上記の例は、1個目が$#arrayにヒットし、2個目が#のコメントとして扱われる、ような色分け。
色んな言語に触れるのはいいことですね。
2010-07-09
備忘録的な5回目
パーサマネージャーの設定がたまにNotepadNeueのディレクトリ外に行くことがある
ちゃんとカレントディレクトリ(正確にはNotepadNeue.exeのあるディレクトリ)を取得してセーブするようにしていなかった。
他のエクステンションはちゃんとそうなっているのにこれだけ忘れていたようだ。
次はC++のパーサー(みたいな)ものを書こうか
構文解析(にわか)みたいなものを書かないといけないのだが
世の中にはそういうのをやるのがあるらしい(yaccとかlexとかいう)
そういえばVisualStudioにも似たようなことをすることができるaddinがあるらしいが
それがどんな風になっているのか分かれば、少し変えるだけでNotepadNeueでも使えるのではないかと思う。