前々回,前回に続き,本レポートでは,(株)はてなのはてなサマーインターン2009の第二週(2009年8月10日~13日)に行われた,エンジニア向け講義の様子を中心にお届けする。
第二週:6日め~9日め
インターンシップの6日め~9日め(8月10日~8月13日の4日間)のテーマは「大規模化」。はてなのサービス開発で必要になる大規模な環境,大規模なデータへの基本的なアプローチを学ぶ。第二週は,以下のテーマで講義が行われた。
- 第二週の講義:
- 6日め:id:naoya氏の「はてな流大規模データ処理」
- 7日め:id:motemen氏の「はてなのデータでアルゴリズムを実用化する」
- 8日め:id:r_kurain氏の「はてなのデータで検索エンジンを作る」
- 9日め:id:stanaka氏の「はてなのインフラストラクチャ」
いずれも,大規模なWebアプリケーション環境を稼動させる現場であるからこそ本格的に学べる内容である。6日め~8日めの講義では,はてなで実際に動いているシステム/機能をベースとした大規模なWebアプリケーション環境を想定し,そこで必要とされる知識,考え方について,次の2つの面から取り上げられた。
- 大規模なWebアプリケーションシステムを構築する現場でとられる種種の技法,という「実務サイド」からのアプローチ
- アカデミックな場でのセオリーを実際の問題にいかに適用していくのか,という「教科書サイド」からのアプローチ
6日めの講義メモ
6日めの講義は,id:naoya氏による「はてな流大規模データ処理」。はてなにおけるサービス設計,大規模データの規模感,取り扱う感覚および注意点と,その内容は盛りだくさん。Webアプリケーションシステムが大規模になると何が変わるのか? どのように問題を切り分けるのか? 大規模なデータの処理で必要とされる考え方とは? など,さまざまな着眼点を提示しながら,以下の枠組みに沿って丁寧に解説された。
- 大規模なデータとは
- OSのキャッシュのしくみ
- 分散を考慮したMySQLの運用
- 大規模データアプリケーションの開発の第一歩
刻々と変化する大規模なWebアプリケーションシステムを動かし続ける難しさ,おもしろさは,学生の参加者とって未知の領域。低レイヤからアプリケーション設計に至るまで幅広く言及され,大規模なサービス環境となると問題に幅広い関連分野の技術知識が一挙に投入される,その様子を切り取りながら解説され,参加者にとってはかなり刺激になっていた様子だった。
7日めの講義メモ
7日めの講義は,id:motemen氏による「はてなのデータでアルゴリズムを実用化する」。冒頭では「教科書に掲載されているアルゴリズムを製品に応用する楽しみ,考え方を学ぶ」という講義の目的が説明され,以下の流れで解説が進められた。
- アルゴリズムの基礎的な解説
- はてなの中のアルゴリズム
- 課題(はてなキーワードリンク)に関連した解説
Suffix Array(接尾辞配列)やTrie(トライ木)などの基礎知識の解説では,参加者の質問を受けながら図解満載で説明された。また,アルゴリズムの応用例としては,実際にはてなではどのような機能がどのくらいの性能を求められているのか,そこではどのようなアルゴリズムやしくみが使って実現されているのか,などについて事例を交えて解説が進んだ。
途中,アルゴリズムの応用例の解説では,id:birdie7氏が登場し,「うごメモはてな」(※1)を対象として,動画の機械学習による自動判定で実装されている手法について紹介された。実際に用いられているアルゴリズムを中心に,うごメモのカメラ特有で見られる画像の特徴を押さえる検出方法,実験方法や検出結果など,平易に解説された。
- ※1
- ニンテンドーDSiの無料ソフト「うごくメモ帳」で作成した絵/ぱらぱらマンガ(動画)を公開できるPCブラウザ向けコミュニケーションサイト。「うごメモシアター」と連係してニンテンドーDSiからの動画の投稿/公開をサポートする。2009年8月のインターン期間中に,海外版の「Flipnote Hatena」が北米,欧州でそれぞれ公開された。

