Hatena::ブログ(Diary)

備忘録

2010-08-30

はてなインターンに行ってきた

はてなインターンに参加してきた。

モノ作りに対する熱意が評価されて採用されたらしい。(たぶん)

概要

はてなインターンは前半パートと後半パートに分けて行われた。

前半パートでははてな社員の方が各々好きな内容で講義を行い、講義が終わるとその講義内容に関する課題が提示され、それをインターン生がこなしていくというカリキュラムであった。

後半パートでは実際にはてなのサービスの一部を作る事になるが、条件があり、前半パートの課題の点数が6割以上でないとサービス製作には参加できないというものである(レベルが低すぎる人は流石に…^^;という当たり前の条件である)。

以下で詳しく見ていく。

前半パート

全部で9回の講義があり、最後の講義以外には課題が設定されていた。

という順番で講義は毎日(月から金)行われた。

ソフトウェア製作の経験しかない私にとって前半のデータベース操作が一番の困難であった。

課題は次の日に採点され、結果が公表される。その際に、インターン生全ての成績が公開されるので自分の位置も分かるだろう。ちなみに、私は真ん中ぐらいだった。そんなものだろう。

後半の内容がインターンとしては珍しい(他のインターンに行ったことがないので確証はないが)と思う。

大学でやるような内容が展開されるあたり、はてなの技術力の高さが垣間見えるだろう。

また、上記URLをたどれば分かるが、今回のインターンの講義の一部(はてな内部に関する講義は公開されないが)はUstreamを通して中継された。先日もはてな技術勉強会が行われその時にもUstreamを用いて中継が行われた。

オープンに出来ることは出来る限りオープンにしていこうという、はてなの姿勢の表れだろう。

録画もされているので興味のある人は参照されたし。

後半パート

実際のサービス製作である。

無事に後半パートに進むことが出来た人は(今回のインターンで脱落者はいなかったが)、はてなのサービスチームのプレゼンテーションを受け、どのサービス製作に携わるかを選ぶことになる。今回のインターンでは以下の6つの内容から選ぶものであった。

前半の成績が良ければ希望のチームに配属されやすい、といったことはない。はてなのチームから逆指名を受けることはあるが。

私は、キーワードフィードバックのチームを選び、配属された。

はてなキーワードトレンド

ここからの作業方針はチームにより異なるので参考程度に思っていただきたい。

チームメンバーは、

の計6名である(私を含めると)。

やる内容は「キーワードページ内にある統計ページの修繕」であった。それだけである。

どういった機能を追加したい、どういった見た目(構成)にするかといった事も決まっていない、自由度の高いものであった。

まず始めに行われたのがブレスト(ブレインストーミング)である。

簡単に言えば、少し時間を与え各自の考えを箇条書きにして発表するというものである。

キーワードチームでは1つのポストイットに1つのアイデアを書いていく方法で行われた。

そこで出るアイデアには全体で見ると同じものがあったり、対立するものもある。それがブレストのいい点であると思う。

(単純な提案形式であれば、同じ意見は出ないし、対立意見が述べられにくい)

出たアイデアをマージして、さらにデザインも決定していないのでデザインのイメージもブレストした。

エンジニアなのにここまでするのか、と思う人もいるだろうが(私もそう思った)、それがはてななのである。

ブレストした結果、やらなければならないこととして以下の3つがあげられた。

  • UI(主にJavaScript)
  • API(グラフのデータなど)
  • 集計(日ごとのデータが数GB単位で放置されていたので)

ちょうど、インターン生は3人ということで各自が自分の担当持つようにした。私はAPI担当になった。

ここからは後はひたすら開発を続けた。もちろん自分の担当が無くなれば他の担当を手伝った。

1週間ほど開発を続け、デザイナーのデザインをあててほぼ完成に近くなった状態でQA(Quality Assurance)をしてもらう。

はてなにはQA専門の人がいて、各サービスのリリース前にチェック(バグクロスブラウザ)を行い品質保証をあげるようにしている。

QAで出た問題を解決し、再度チェックを行いリリースという形になった。

最優秀賞

最終日には、作ったサービスに対してプレゼンテーションを行う。

そのプレゼンを見て、はてな社員の方による投票が行われ、最も得票数が多かった成果物を作ったチームに対して賞品が与えられる。

そして、なんとはてなキーワードトレンドが最優秀賞に選ばれた(はてなココチームと同順位で)。

賞品が半分になるかと危惧されたが、そんなことはなく安心した。

福利厚生

フリードリンク、フリーフードである。

コードが思うようにかけない時に、水分を取りすぎてしまいがちになるので要注意。

昼食にはおいしいオフィスランチが振舞われる(木曜日を除く)。

インターン期間中に、とある新聞社の記者が取材に来ていたが、オフィスランチが振舞われない木曜日に来てしまったので、オフィスランチが振舞われる日に再度取材に来たとか。

TGIF(Thank God It's Friday)が隔週金曜日(インターン期間中は変則的)に行われる。インターン期間中は、歓迎会と、打ち上げを兼ねて行われた。

簡単に言えば、2週間お疲れ様会である。食べ物が出る、お酒も出る。(私はお酒が飲めないのでさほど喜ばしいことではないのだが)


さらに(福利厚生か分からないが)、なんと五山の送り火を見た後にid:jkondoid:jkondo(はてなの社長)の家で飲み会が行われた(話を聞く限り、例年行われる)。

社長と話すことができる。id:hatenacinnamonid:hatenacinnamonに会える。行くべき。

最後に

1ヶ月のはてなインターンを通して、沢山のことを学び、沢山の事を得たと思う。

Webサービスがどういったものであるかを理解し、多くの人が利用するサービスを製作したという実感を得ることができた。

そういった意味ではてなインターンは非常に充実していて、人生において忘れられない夏になるだろう。

はてなインターンに参加しようか迷っている人の参考になれば幸いである。

ここまで長々とした駄文を読んでいただき、感謝。

備忘録的な9回目

・NotepadNeue

さんざんdisられていた改行コードの自動検出を実装した。オプションで検出するかどうか指定できるようにした。ついでに、混ざった改行コードがある場合に統一するかどうかを聞いて直す機能もつけた。

・名前

Notepadが名前に入っているとネタにしか思われないらしい。アイコンも然り。

名前変えるか…NTでいいかな。NotepadNeue->NN->N2->NTwo->NTという感じで。ニュータイプの意味もこめられている。呼び方はエヌツーかエヌティー。

アイコンもNTをデザインしたものに変更しようと思う。まだ1ヶ月あるが忙しい夏になりそうだ。

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-12

備忘録的な6回目

Visual Studio 2008 SDKを見習おうと思い、ダウンロードインストールした。

サンプルは充実している、しかし、量が多くて中々(全く)進まない。

夏休み丸々使ってなんとかなるレベルだろう、たぶん。

VSではツールウィンドウだけでなく、メニューも追加出来るらしい(メニューバー内、右クリックメニュー)

これを今度は採用しようと思う。"Googleで検索"とか誰が得するのかわからないメニューを追加したり、言語のヘルプファイルを参照できるとうれしい、だろう。

2010-07-09

備忘録的な5回目

パーサマネージャーの設定がたまにNotepadNeueのディレクトリ外に行くことがある

ちゃんとカレントディレクトリ(正確にはNotepadNeue.exeのあるディレクトリ)を取得してセーブするようにしていなかった。

他のエクステンションはちゃんとそうなっているのにこれだけ忘れていたようだ。

次はC++のパーサー(みたいな)ものを書こうか

構文解析(にわか)みたいなものを書かないといけないのだが

世の中にはそういうのをやるのがあるらしい(yaccとかlexとかいう)

そういえばVisualStudioにも似たようなことをすることができるaddinがあるらしいが

それがどんな風になっているのか分かれば、少し変えるだけでNotepadNeueでも使えるのではないかと思う。