<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>ドワンゴ 研究開発ブログ</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/" />
    <link rel="self" type="application/atom+xml" href="http://info.dwango.co.jp/rd/atom.xml" />
    <id>tag:info.dwango.co.jp,2008-06-28:/rd//1</id>
    <updated>2012-01-31T07:23:41Z</updated>
    <subtitle>株式会社ドワンゴの研究開発活動をご紹介するブログです。</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.2rc5-ja</generator>

<entry>
    <title>みゆっき☆Think 第11回  「ソフトウェア開発 ～個人からチームへ～」</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2012/01/think-11.html" />
    <id>tag:info.dwango.co.jp,2012:/rd//1.41</id>

    <published>2012-01-31T07:20:41Z</published>
    <updated>2012-01-31T07:23:41Z</updated>

    <summary>こんにちは。ドワンゴの荒木です。 弊社若手エンジニア鳥居みゆっきと一緒に技術を学...</summary>
    <author>
        <name>荒木 真一</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[こんにちは。ドワンゴの荒木です。<br>
弊社若手エンジニア鳥居みゆっきと一緒に技術を学ぶ生放送「みゆっき☆Think」！<br><br>

第11回のテーマは「ソフトウェア開発 ～個人からチームへ～」<br>
放送内で使用されたスライドと、みゆっきノートを公開します。<br><br>

放送内で使用された資料はこちら↓<br>
<div style="width:425px" id="__ss_11328524"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/think11-11328524" title="みゆっき☆Think#11「ソフトウェア開発 ～個人からチームへ～」" target="_blank">みゆっき☆Think#11「ソフトウェア開発 ～個人からチームへ～」</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/11328524" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango" target="_blank">techtalkdwango</a> </div> </div>
<br><br>

みゆっきノートはこちら↓<br>
<div style="width:425px" id="__ss_11328542"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/11-11328542" title="みゆっきノート#11「ソフトウェア開発 ～個人からチームへ～」" target="_blank">みゆっきノート#11「ソフトウェア開発 ～個人からチームへ～」</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/11328542" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango" target="_blank">techtalkdwango</a> </div> </div>
<br><br>

放送を見逃された方は、<br>
<u><a href="http://www.nicovideo.jp/watch/1327652568" target="_blank">
チャンネルのアーカイブ動画</a></u>
で視聴いただけますので、是非ご覧下さい！<br><br>
 
第12回みゆっき☆Thinkは、2月上旬の放送を予定しております。<br>
是非、次回もご覧下さい！

]]>
        
    </content>
</entry>

<entry>
    <title>スマートフォンWebアプリ開発研修&amp;ハッカソン</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2011/12/smartphone-hackathon.html" />
    <id>tag:info.dwango.co.jp,2011:/rd//1.40</id>

    <published>2011-12-27T12:15:13Z</published>
    <updated>2011-12-28T06:51:45Z</updated>

    <summary> はじめまして、ドワンゴモバイル事業のエンジニア、入木田と申します。 今回は12...</summary>
    <author>
        <name>入来田萌</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[<p>
はじめまして、ドワンゴモバイル事業のエンジニア、入木田と申します。<br />
今回は12月19日(月)に<a href="http://www.asial.co.jp/">アシアル株式会社</a>とドワンゴ社で共同開催した「スマートフォンWebアプリ開発研修＆ハッカソン」の様子をお届けします。
</p>

<h2>対象読者</h2>
<ul>
<li>スマートフォンWebアプリを作ってみたい方</li>
<li>HTML5で何ができるのか知りたい方</li>
<li>objective-Cに挫折したけど、スマートフォンアプリ作成の夢を諦めていない方</li>
</ul>

<h2>はじめに</h2>
<p>スマートフォン、これを見ている方だったら、iPhone/Android、どちらかは持ってますよね。開発してる方もいらっしゃいますか？<br />
objective-C,Java,どちらも一から作るとなると、結構な労力です。
</p>

<p>
ところで、HTML,JavaScriptは書いたことありますか？<br />
Web系エンジニアやデザイナーなら、仕事で書いてるかもしれません。手軽ですよね。
</p>

<p>
スマートフォンにはブラウザも載ってるのはご存知だと思います。
実は、ブラウザアプリもなかなかあなどれません。
</p>

<p>
今まで携帯端末のブラウザアプリは、フォームアプリしか現実的ではありませんでしたが、スマートフォン(HTML5対応)が登場してからは、
<ul>
<li>音、映像を乗せられる</li>
<li>動的なグラフィックを描画できる</li>
<li>位置情報を取得できる</li>
<li>ローカルに大きなデータを残せる</li>
</ul>
など、いろいろできるようになりました。
</p>

<p>
ちなみに、なぜスマートフォンはHTML5に対応しているかというと、
Webkit(オープンソース製品)をベースとしたブラウザを採用しているからです。
</p>

<p>
「携帯端末のアプリは、ブラウザのフォームアプリしか作ったことないよ」というあなた。HTML5に触れて、スマートフォン開発の可能性を拡げてみませんか？
</p>

<p>
今回は、スマートフォンWebアプリ開発研修と題して行った、HTML5を中心とした研修講座の様子をお伝えします。HTML5をあまり知らないという方は、載っているサンプルコードを実際に写経して、動かしてみてください。新たなアイデアが浮かぶかもしれません。
</p>

<p>
では、お楽しみください。
</p>

<h2>目次</h2>
<ol>
<li>オーディオと映像</li>
<li>描画(canvas,svg)</li>
<li>位置情報</li>
<li>ストレージ</li>
<li>Lightning Talks</li>
</ol>

<h2>1.オーディオと映像</h2>

<p>
HTML5が登場し、オーディオと映像の扱いが手軽にできるようになりました。
簡単なタグでオーディオ/映像の指定をすると、用意された 再生/停止/プログレスバー が描画されます。
</p>

<p>
従来のように、UIコンポーネントボタンを並べて、リスナーを紐付けて...、という手間がいりません。さくっとムービーをwebに乗せたい、という時にも便利です。
</p>

<p>
CSSを乗せる(jQueryが便利)こともできるので、おしゃれなプレーヤーにもできます。
</p>

<h4>オーディオ・映像 例</h4>
<pre class="bb-code-block"><code>
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;meta charset="utf-8" /&gt;
  &lt;title&gt;オーディオ・映像 テスト&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1>オーディオ・映像 テスト&lt;/h1&gt;
&lt;section&gt;
  &lt;h2&gt;オーディオを再生する&lt;/h2&gt;
  &lt;audio controls&gt;
    &lt;source src="./onmyoji.mp3" /&gt;
  &lt;/audio&gt;
&lt;/section&gt;
&lt;hr /&gt;
&lt;section&gt;
  &lt;h2&gt;映像を再生する&lt;/h2&gt;
  &lt;video width="640" height="480" controls&gt;
    &lt;source src="./onmyoji.mp4" /&gt;
  &lt;/video&gt;
&lt;/section&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>
こちらの結果はこうなります。
</p>

<p>
<a href="http://info.dwango.co.jp/rd/2011/12/27/html5training_img1.png"><img alt="html5training_img1.png" src="http://info.dwango.co.jp/rd/assets_c/2011/12/html5training_img1-thumb-320x480.png" width="320" height="480" style="border: 4px solid grey" /></a>
<br />
スマートフォンでも見ることができます。
</p>

<h2>2.描画(canvas,svg)</h2>

<p>
canvasは、命令によってラスタ画像を描くものです。
svgは、ベクタデータを格納したXMLです。
</p>

<p>
2つの違いといいますと、
canvasは拡大すると、ギザギザが出てしまいますが svg はベクタ画像
(Illustratorのように、点の位置や長さをデータに持って画像を描くもの)
なので、拡大しても線がきれいです。
</p>

<p>
また、svgで描画した文字列は、文字列としてコピペが可能です。
</p>

<p>
canvasやsvgをプログラムから操作すると、アニメーションやゲームが作れます。
</p>

<h4>canvas 例</h4>
<pre class="bb-code-block"><code>
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset="utf-8" /&gt;
&lt;title&gt;canvas テスト&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;canvas テスト&lt;/h1&gt;
&lt;canvas id="a_canvas" width="640" height="480" border=4>&lt;/canvas&gt;
&lt;script&gt;
var canvas = document.getElementById("a_canvas");
var context = canvas.getContext("2d");
context.strokeStyle="orange";
context.fillStyle = "#ffffcc";
context.fillRect(50,50,210,80);
context.strokeRect(50,50,210,80);
context.strokeStyle="blue";
context.fillStyle = "black";
context.font = "50px 'Times New Roman'";
context.fillText("dwango",70,106);
context.strokeText("dwango",72,108);
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>
こちら動かすとこうなります。<br />
<br />
<a href="http://info.dwango.co.jp/rd/2011/12/27/html5training_img2.png"><img alt="html5training_img2.png" src="http://info.dwango.co.jp/rd/assets_c/2011/12/html5training_img2-thumb-320x480.png" width="320" height="480" style="border: 4px solid grey" /></a>
</p>

<h4>svg 例</h4>
<pre class="bb-code-block"><code>
&lt;svg width="640" height="480" xmlns="http://www.w3org/2000/svg"&gt;
  &lt;rect x="0" y="0" width="400" height="400" fill="black" /&gt;
  &lt;polygon points="200,100 350,350 50,350" fill="red" stroke="black" /&gt;
  &lt;rect x="40" y="350" width="320" height="30" fill="white" /&gt;
  &lt;circle cx="200" cy="110" r="20" fill="white" /&gt;
  &lt;text x="10" y="180" style="font-family:Arial;font-size:28px;stroke:white;fill:black;"&gt;Santa Claus is coming to here!&lt;/text&gt;
&lt;/svg&gt;
</code></pre>

<p>
こちら動かすとこうなります。<br />
<br />
<a href="http://info.dwango.co.jp/rd/2011/12/27/html5training_img3.png"><img alt="html5training_img3.png" src="http://info.dwango.co.jp/rd/assets_c/2011/12/html5training_img3-thumb-320x480.png" width="320" height="480" style="border: 4px solid grey" /></a>
</p>

<p>
ここで少し時間を取って、各々が好きな絵を描く時間がありました。みなさん面白い絵を描いていたようです。
</p>

<p>
ちなみに、HTML5からは、DOCTYPE宣言が
<pre class="bb-code-block"><code>&lt;!DOCTYPE html&gt;</code></pre>
だけでOKになりました。
</p>

<p>
また、&lt;script&gt;タグのデフォルトタイプがJavaScriptになったので、JavaScriptを書くときの&lt;script&gt;タグの宣言は、従来のように
<pre class="bb-code-block"><code>&lt;script type="text/javascript"&gt;</code></pre>
と書く必要がなくなり、
<pre class="bb-code-block"><code>&lt;script&gt;</code></pre>
だけでよくなりました。楽になりましたね。
</p>

<h2>3.位置情報</h2>

<p>
GPS機能が無い機器でも、位置情報が取得できるってご存知ですか？私は知りませんでした。
GPSはもちろん、携帯基地局/wifiスポット/IPアドレスから、位置情報が取得できます。
位置情報を生かしたアプリをつくるもよし、マーケティングのデータとして取得するもよし。<br />
※位置情報の精度は厳密ではない場合があります。<br />
</p>

<h4>位置情報 例</h4>
<pre class="bb-code-block"><code>
&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="utf-8" /&gt;
    &lt;title&gt;位置情報 テスト&lt;/title&gt;
  &lt;/head&gt;
&lt;body&gt;
&lt;h1>位置情報 テスト&lt;/h1&gt;
&lt;img id="map" width="640" height="480" src="" /&gt;
&lt;script&gt;
navigator.geolocation.getCurrentPosition(
     function (position){
          var url = "http://maps.google.com/maps/api/staticmap?center="
               + position.coords.latitude
               + ","
               + position.coords.longitude
               + "&zoom=16&size=640x480&sensor=false";
          var map = document.getElementById('map');
          map.src = url;
     },
     function (){
          alert('失敗');
     }
);
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>
こちらを実行した結果は以下になります。<br />
<br />
<a href="http://info.dwango.co.jp/rd/2011/12/27/html5training_img4.png">
  <img alt="html5training_img4.png" src="http://info.dwango.co.jp/rd/assets_c/2011/12/html5training_img4-thumb-320x480.png" width="320" height="480" style="border: 4px solid grey" />
</a>
</p>

<p>
ドワンゴ浜町本社の地図が表示されました。<br />
※httpサーバー上に置かないと動かないので、ファイル経由ではなく
xampp,vmware,サーバなどに置いて、そこからhttp経由で見てみてください。
</p>

<h2>4.ストレージ</h2>

<p>
ストレージのような機能は、cookieが、HTML5より前からありましたが、
それよりずっと大きい容量(5MB)をローカルに永続的に持てるストレージ機能が、HTML5から追加されました。<br />
キーバリュー型のストレージです。<br />
ウインドウ(タブ)を消すとデータが消えてしまうもの(sessionStorage)と、消してもデータが永続的に残るもの(localStorage)があります。
</p>

<h4>ストレージ 例</h4>
<pre class="bb-code-block"><code>
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset="utf-8" /&gt;
&lt;title&gt;storage テスト&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;storage テスト&lt;/h1&gt;
&lt;script&gt;
var storage = window.localStorage;

if(storage["counter"] == null){
     storage["counter"] = 1;
} else {
     storage["counter"]++;
}
document.write(storage["counter"] + "回目の訪問です。");
&lt;/script&gt;
&lt;br /&gt;
&lt;input type="button" value="F5" onClick="location.reload();" /&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>
こちらを実行した結果は以下になります。<br />
<br />
<a href="http://info.dwango.co.jp/rd/2011/12/27/html5training_img5.png">
  <img alt="html5training_img5.png" src="http://info.dwango.co.jp/rd/assets_c/2011/12/html5training_img5-thumb-320x480.png" width="320" height="480" style="border: 4px solid grey" />
</a>
</p>

<h2>5.Lightning Talks</h2>
<p>スマートフォンWebアプリ開発研修と並行して各自の選択制でハッカソンが行われていたのですが、そこでの成果発表を中心としたLightning Talksが最後にありました。
</p>

<h3>Lightning Talks 目次</h3>
<ol>
<li>Short Social RPG : ドワンゴ 福田考行</li>
<li>TwitterとWebSocketを組み合わせた何か : ドワンゴ 清水俊博</li>
<li>HTML5とブラウザでスマホ向けミニゲームを作る : アシアル 久保田様</li>
<li>iPhoneのSafariで動画をインライン再生をなんとかできないか試してみた : ドワンゴ 右京和馬</li>
<li>SVGでファインマンダイアグラムを描く: ドワンゴ 小宮山純平</li>
<li>お花サプライズ！ : UT Startup Gym 飯塚様</li>
<li>パラパラまんがツールiPhone :ドワンゴ 松前健太郎</li>
<li>散りばメーカー : ドワンゴ 入木田萌</li>
<li>ベジェ曲線を描いてみた : ドワンゴ 塩谷啓</li>
<li>ゲーム作った : ドワンゴ 齊藤宏多</li>
</ol>

<h3>1.Short Social RPG : ドワンゴ 福田考行</h3>
<p>
友達と一緒に遊ぶ、RPGを作ったり遊んだりできるWebサービスの紹介です。
</p>

<p>
<a href="http://info.dwango.co.jp/rd/2011/12/27/html5training_img6.png">
  <img alt="html5training_img6.png" src="http://info.dwango.co.jp/rd/assets_c/2011/12/html5training_img6-thumb-320x480.png" width="320" height="480" style="border: 4px solid grey" />
</a>
</p>

<ul>
<li>1回のゲームは数時間～数日で終わる。</li>
<li>ソーシャルゲームのように時々５分ぐらいアクセスするだけで遊べる</li>
</ul>
という特徴を持つゲームを、現在制作中です。

<p>
ソースコード：<a href="http://dl.dropbox.com/u/5110891/ShortRPG.zip">http://dl.dropbox.com/u/5110891/ShortRPG.zip</a>
</p>

<h3>2.TwitterとWebSocketを組み合わせた何か : ドワンゴ 清水俊博</h3>
<p>
Node.jsとjQuery mobile、GeoLocation APIとTwitter OAuthを組み合わせて、
今この瞬間にその場にいる人のTwitterアカウントを、
相互にfollowしあう事のできるアプリケーションの紹介です。
<p>

<p>
現在執筆中のNode.js本のサンプルの、先行実演を行いました。
詳細はご紹介できませんが、本が出版されるのを楽しみにお待ちください、とのことです。
</p>

<h3>3.HTML5とブラウザでスマホ向けミニゲームを作る : アシアル株式会社 久保田様</h3>
<p>
HTML5講座を担当された講師の岡本さんが所属するアシアル社の製品を、久保田様が発表なさいました。
HTML5+JavaScriptで作ったアプリを、iPhone,Androidで動くネイティブアプリのイメージに変換してくれるサービスを開発しています。
</p>

<p>
<a href="http://info.dwango.co.jp/rd/2011/12/27/html5training_img7.jpg">
  <img alt="html5training_img7.jpg" src="http://info.dwango.co.jp/rd/assets_c/2011/12/html5training_img7-thumb-320x245.jpg" width="320" height="245" style="border: 4px solid grey" />
</a>
</p>

<p>テレビで紹介され、その際はシューティングゲームをデモされたそうです。<br />
製品サイト : <a href="http://monaca.mobi/">http://monaca.mobi/</a>
</p>

<h3>4.iPhoneのSafariで動画をインライン再生をなんとかできないか試してみた : ドワンゴ 右京和馬</h3>
<p>
iPhone向けSafariでは動画をインライン再生できないため、独自でイメージを利用した動画再生を行うJavaScriptの紹介です。
</p>

<p>
現在公開されているiPhone版HTML5ニコニコ動画開発の(趣味の範囲ではありますが)延長線上のものです。社外秘ですので、現時点では詳細は秘密にさせていただきます。
</p>

<h3>5.SVGでファインマンダイアグラムを描く : ドワンゴ 小宮山純平</h3>

<p>
SVGでファインマンダイアグラムを生成するアプリケーションの紹介です。
</p>

<p>
<a href="http://info.dwango.co.jp/rd/2011/12/27/html5training_img8.png">
  <img alt="html5training_img8.png" src="http://info.dwango.co.jp/rd/assets_c/2011/12/html5training_img8-thumb-320x499.png" width="320" height="499" style="border: 4px solid grey" />
</a>
</p>

<p>
次数を設定すると、このような模様が自動生成されます。<br />
<br />
<div style="width:425px" id="__ss_10695563"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/irimo/svg-10695563" title="Svgでファインマンダイアグラム">Svgでファインマンダイアグラム</a></strong><object id="__sse10695563" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=svg-111226235952-phpapp02&stripped_title=svg-10695563&userName=irimo" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><param name="wmode" value="transparent"/><embed name="__sse10695563" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=svg-111226235952-phpapp02&stripped_title=svg-10695563&userName=irimo" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/irimo">Moe Irikida</a>.</div></div>
</p>

<p>
ソースコード：<a href="https://github.com/dekosuke/FeynmanDiagram/blob/master/src/feynman.py">https://github.com/dekosuke/FeynmanDiagram/blob/master/src/feynman.py</a><br />
サンプル：<a href="https://github.com/dekosuke/FeynmanDiagram/blob/master/data/display.html">https://github.com/dekosuke/FeynmanDiagram/blob/master/data/display.html</a>
</p>

<h3>6.お花サプライズ！ : UT Startup Gym 飯塚様</h3>
<p>
facebook上で、みんなでネット上で花を買い、誕生日にお花を届けるサービスの紹介です。
</p>

<p>
<a href="http://info.dwango.co.jp/rd/2011/12/27/html5training_img9.jpg">
  <img alt="html5training_img9.jpg" src="http://info.dwango.co.jp/rd/assets_c/2011/12/html5training_img9-thumb-320x245.jpg" width="320" height="245" style="border: 4px solid grey" />
</a><br />
サービス：<a href="https://hanasup.jp/">https://hanasup.jp/</a>
</p>

<h3>7.パラパラまんがツールiPhone : ドワンゴ 松前健太郎</h3>
<p>
フリーハンドで描いた絵から、簡単にパラパラまんがが作成できるアプリケーションの紹介です。
</p>
<a href="http://info.dwango.co.jp/rd/2011/12/27/html5training_img10.png">
  <img alt="html5training_img10.png" src="http://info.dwango.co.jp/rd/assets_c/2011/12/html5training_img10-thumb-320x480.png" width="320" height="480" style="border: 4px solid grey" />
</a>
</p>

<p>
アプリケーション(iPhoneから見られます)：<a href="http://kenmaz.net/html5/animemaker/">http://kenmaz.net/html5/animemaker/</a><br />
スライド：<a href="http://kenmaz.net/html5/animemaker/2011-12-19_dwango_hackathon_kenmaz.pdf">http://kenmaz.net/html5/animemaker/2011-12-19_dwango_hackathon_kenmaz.pdf</a><br />
ソースコード：<a href="http://kenmaz.net/html5/animemaker/src.zip">http://kenmaz.net/html5/animemaker/src.zip</a>
</p>

<h3>8.散りばメーカー : ドワンゴ 入木田萌</h3>
<p>
過去にC++,PHPで書いてきた画像処理プログラムを、HTML5で書いたものです。
</p>

<p>
<a href="http://info.dwango.co.jp/rd/2011/12/27/html5training_img11.png">
  <img alt="html5training_img11.png" src="http://info.dwango.co.jp/rd/assets_c/2011/12/html5training_img11-thumb-320x480.png" width="320" height="480" style="border: 4px solid grey"  />
</a>
</p>

<p>
ソースコード : <a href="https://github.com/irimo/inlaysetstud">https://github.com/irimo/inlaysetstud</a>
</p>

<h3>9.ベジェ曲線を描いてみた : ドワンゴ 塩谷啓</h3>
<p>
ベジェ曲線を描くアニメーションをHTML5で書いたものです。
</p>

<p>
<a href="http://info.dwango.co.jp/rd/2011/12/27/html5training_img12.png">
  <img alt="html5training_img12.png" src="http://info.dwango.co.jp/rd/assets_c/2011/12/html5training_img12-thumb-320x480.png" width="320" height="480" style="border: 4px solid grey" />
</a>
</p>

<p>
ソースコード：<a href="https://github.com/kwappa/bezier-renderer">https://github.com/kwappa/bezier-renderer</a>
</p>

<h3>10ゲーム作った : ドワンゴ 齊藤宏多</h3>
<p>
「デフラガ」という、PC版で既に公開されているゲームのスマートフォン版の紹介です。
</p>

<p>
<a href="http://info.dwango.co.jp/rd/2011/12/27/html5training_img13.png">
  <img alt="html5training_img13.png" src="http://info.dwango.co.jp/rd/assets_c/2011/12/html5training_img13-thumb-320x480.png" width="320" height="480" style="border: 4px solid grey;" />
</a>
</p>

<p>
アプリケーション：<a href="http://kotas.jp/junk/defragger/smartphone.html">http://kotas.jp/junk/defragger/smartphone.html</a><br />
上記ゲームのPC(オリジナル)版：<a href="http://kotas.jp/junk/defragger/">http://kotas.jp/junk/defragger/</a><br />
ソースコード：<a href="https://github.com/kotas/defragger">https://github.com/kotas/defragger</a>
</p>

<h2>まとめ</h3>
<p>
以上、研修の内容をお届けしました。
</p>

<p>
『HTML5』という言葉は知っているけれど、それ用の本は厚いし、なかなかとっかかりが掴めない、と思っていた方は、今回の内容で、だいぶ夢が拡がったのではないでしょうか。
</p>

<p>
これからは仕事でも、スマートフォン向けWebアプリの需要が確実に広がってきます。
まだ定石が無く、混沌とした分野です。
今から作っていれば、この【スマートフォン向けWebアプリ】分野の数年スパンの発展・発達を追うことができます。
</p>

<p>
趣が深く、楽しいと思いますので、是非始めてみてはいかがでしょうか。
</p>

<h2>関連リンク</h2>
<p>
スペシャルゲストとしてご参加いただいた UT Startup Gym のみなさんが記事を書いてくださいました。講座・ハッカソンの様子が紹介されています。
</p>

<ul>
<li>ドワンゴの社内ハッカソンに行ってきた！ - IT戦記<br />
<a href="http://d.hatena.ne.jp/amachang/20111220/1324362455">http://d.hatena.ne.jp/amachang/20111220/1324362455</a></li>
<br />
<li>ドワンゴの開発研修に行ってきたよ！ - tulog<br />
<a href="http://d.hatena.ne.jp/tushuhei/20111219/1324307754<">http://d.hatena.ne.jp/tushuhei/20111219/1324307754</a></li>
</ul>
]]>
        
    </content>
</entry>

<entry>
    <title>みゆっき☆Think 第10回 「チーム開発 ～脱ぼっちマインド～」</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2011/12/think-10.html" />
    <id>tag:info.dwango.co.jp,2011:/rd//1.39</id>

    <published>2011-12-09T06:32:52Z</published>
    <updated>2011-12-19T11:59:13Z</updated>

    <summary>こんにちは。ドワンゴの荒木です。 弊社若手エンジニア鳥居みゆっきと一緒に技術を学...</summary>
    <author>
        <name>荒木 真一</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[こんにちは。ドワンゴの荒木です。<br>
弊社若手エンジニア鳥居みゆっきと一緒に技術を学ぶ生放送「みゆっき☆Think」！<br><br>

第10回のテーマは「チーム開発 ～脱ぼっちマインド～」<br>
放送内で使用されたスライドと、みゆっきノートを公開します。<br><br>

放送内で使用された資料はこちら↓<br>
<div style="width:425px" id="__ss_10431163"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/akitsukada/think10" title="みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜" target="_blank">みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/10431163" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more presentations from <a href="http://www.slideshare.net/akitsukada" target="_blank">akitsukada</a> </div> </div>
<br><br>

<strike>みゆっきノートは、みゆっきが期末テスト中のためアップロードを延期しています。<br>
しばらくお待ち下さい。</strike>
<br>
期末テストが無事終わったので、アップロードしました。<br>
みゆっきノートはこちら↓<br>
<div style="width:425px" id="__ss_10635788"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/10-10635788" title="みゆっきノート#10「チーム開発 ～ 脱ぼっちマインド ～」" target="_blank">みゆっきノート#10「チーム開発 ～ 脱ぼっちマインド ～」</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/10635788" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango" target="_blank">techtalkdwango</a> </div> </div>
<br><br>

>
放送を見逃された方は、<br>
<u><a href="http://www.nicovideo.jp/watch/1323078451" target="_blank">
チャンネルのアーカイブ動画</a></u>
で視聴いただけますので、是非ご覧下さい！<br><br>
 
第11回みゆっき☆Thinkは年始のお休みの都合により、1/13（金）夜7時からの放送を予定しております。<br>
是非、次回もご覧下さい！
]]>
        
    </content>
</entry>

<entry>
    <title>みゆっき☆Think 第9回 「はじめて学ぶバージョン管理とGit」</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2011/11/think-9-git.html" />
    <id>tag:info.dwango.co.jp,2011:/rd//1.38</id>

    <published>2011-11-09T13:43:55Z</published>
    <updated>2011-11-09T14:05:15Z</updated>

    <summary>こんにちは。ドワンゴの荒木です。 弊社若手エンジニア鳥居みゆっきと一緒に技術を学...</summary>
    <author>
        <name>荒木 真一</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[こんにちは。ドワンゴの荒木です。<br>
弊社若手エンジニア鳥居みゆっきと一緒に技術を学ぶ生放送「みゆっき☆Think」！<br><br>

第9回のテーマは「はじめて学ぶバージョン管理とGit」<br>
放送内で使用されたスライドと、みゆっきノートを公開します。<br><br>

放送内で使用された資料はこちら↓<br>

<div style="width:425px" id="__ss_10067297"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/think9git-10067297" title=" みゆっき☆Think#9「はじめて学ぶバージョン管理とGit」" target="_blank"> みゆっき☆Think#9「はじめて学ぶバージョン管理とGit」</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/10067297" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango" target="_blank">techtalkdwango</a> </div> </div><br>

みゆっきノートはこちら↓<br>

<div style="width:425px" id="__ss_10067377"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/9git" title="みゆっきノート#9「はじめて学ぶバージョン管理とGit」" target="_blank">みゆっきノート#9「はじめて学ぶバージョン管理とGit」</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/10067377" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango" target="_blank">techtalkdwango</a> </div> </div>
<br><br>


見逃された方は、 <br>
<a href="http://www.nicovideo.jp/watch/1320841151" target="_blank">
チャンネルのアーカイブ動画</a>で視聴いただけますので、是非ご覧下さい！<br><br>

また、ニコニコ生放送のタイムシフト視聴について、
ニコニコ生放送の録画不具合の為、タイムシフト動画が途中でみれなくなるという状況になっております。<br>
タイムシフト視聴をご利用の皆様には大変ご迷惑をお掛けいたしました。<br>
対応として、アーカイブ動画を予定より早く公開させて頂きました。<br>
今後とも、みゆっき☆Thinkをよろしくお願い致します。<br><br>

第10回みゆっき☆Thinkは12/3（金）夜7時からの放送を予定しております。<br>
是非、次回もご覧下さい！]]>
        
    </content>
</entry>

<entry>
    <title>みゆっき☆Think 第8回「Javascriptだけでつくるみゆびで！」</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2011/10/think-8javascript.html" />
    <id>tag:info.dwango.co.jp,2011:/rd//1.37</id>

    <published>2011-10-17T12:21:00Z</published>
    <updated>2011-10-17T12:29:37Z</updated>

    <summary>こんにちは。ドワンゴの荒木です。 弊社若手エンジニア鳥居みゆっきと一緒に技術を学...</summary>
    <author>
        <name>荒木 真一</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[こんにちは。ドワンゴの荒木です。<br>
弊社若手エンジニア鳥居みゆっきと一緒に技術を学ぶ生放送「みゆっき☆Think」！<br>
10/7（金）に、第8回「Javascriptだけでつくるみゆびで！」を放送いたしました！<br>
第6回、第7回でJavascriptについて学んだみゆっきが、<br>
今回はJavascriptだけを使って、動画サービス「みゆびで！」を制作！<br>
番組内では自らサービスについて解説し、<br>
第6回第7回の講師からのコードレビューも受けたりもしました。<br><br>

第8回でみゆっきが使用した資料とソースコードを公開しております。<br><br>
みゆっきの頑張りをぜひご覧ください！<br><br>

みゆっきのプレゼン資料はこちら！<br>
<div style="width:425px" id="__ss_9677208">
 <strong style="display:block;margin:12px 0 4px">
<a href="http://www.slideshare.net/techtalkdwango/think8javascript" title="みゆっき☆Think#8「Javascriptだけでつくるみゆびで！」" target="_blank">
みゆっき☆Think#8「Javascriptだけでつくるみゆびで！」</a></strong> 
<iframe src="http://www.slideshare.net/slideshow/embed_code/9677208" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango" target="_blank">techtalkdwango</a> </div> </div><br><br>

みゆっきの作ったサービス「みゆびで！」のソースコードはこちら！<br>
<a href="https://github.com/toriimiyukki/miyuvide">https://github.com/toriimiyukki/miyuvide</a><br><br>

また、ニコニコ生放送のタイムシフト視聴について、<br>
ニコニコ生放送の録画の不具合のため、視聴が正常に行えない状況になっておりました。<br>
またそれにあわせて、アーカイブ動画のアップロードも遅れております。<br>
大変申し訳ありませんが、もうしばらくお待ち下さい。 <br><br>

第9回みゆっき☆Thinkは11/4（金）夜7時からの放送を予定しております。<br>
是非、次回もご覧下さい！！<br>
]]>
        
    </content>
</entry>

<entry>
    <title>みゆっき☆Think 第7回 「本気で学ぶJavascript」</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2011/09/think-7-javascript.html" />
    <id>tag:info.dwango.co.jp,2011:/rd//1.36</id>

    <published>2011-09-09T14:12:14Z</published>
    <updated>2011-09-09T14:15:23Z</updated>

    <summary>こんにちは。ドワンゴの荒木です。 弊社若手エンジニア鳥居みゆっきと一緒に技術を学...</summary>
    <author>
        <name>荒木 真一</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[<p>こんにちは。ドワンゴの荒木です。<br><br />
弊社若手エンジニア鳥居みゆっきと一緒に技術を学ぶ生放送「みゆっき☆Think」！<br><br></p>

<p>第7回のテーマは「本気で学ぶJavascript」<br><br />
放送内で使用されたスライドと、みゆっきノートを公開します。<br><br></p>

<p>放送内で使用された資料はこちら↓<br></p>

<div style="width:425px" id="__ss_9144271">
 <strong style="display:block;margin:12px 0 4px">
<a href="http://www.slideshare.net/techtalkdwango/think7-javascript" title="みゆっき☆Think#7 「本気で学ぶJavascript」" target="_blank">
みゆっき☆Think#7 「本気で学ぶJavascript」</a></strong>
 <iframe src="http://www.slideshare.net/slideshow/embed_code/9144271" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
 <div style="padding:5px 0 12px"> View more 
<a href="http://www.slideshare.net/" target="_blank">presentations</a>
 from <a href="http://www.slideshare.net/techtalkdwango" target="_blank">
techtalkdwango</a> </div> </div>

<p>みゆっきノートはこちら↓<br></p>

<div style="width:425px" id="__ss_9158572"> 
<strong style="display:block;margin:12px 0 4px">
<a href="http://www.slideshare.net/techtalkdwango/7-javascript" title="みゆっきノート #7 「本気で学ぶJavascript」" target="_blank">みゆっきノート #7 「本気で学ぶJavascript」</a>
</strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9158572" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> 
<div style="padding:5px 0 12px"> View more 
<a href="http://www.slideshare.net/" target="_blank">presentations
</a> from <a href="http://www.slideshare.net/techtalkdwango" target="_blank">techtalkdwango</a> </div> </div>
<br><br>
見逃された方は、 <br>
<a href="http://nico.ms/lv61934868" target="_blank">
生放送のタイムシフト</a>、
<br>もしくは<a href="http://www.nicovideo.jp/watch/1315569331" target="_blank">チャンネルのアーカイブ動画</a>でも視聴いただけますので、是非ご覧下さい！<br><br><br>

<p><br />
第8回みゆっき☆Thinkは10/7（金）夜7時からの放送を予定しております。<br><br />
次回は、第6回第7回で学んだ成果をみゆっき自身がお見せする回になります。<br><br />
ご期待下さい！</p>]]>
        
    </content>
</entry>

<entry>
    <title>みゆっき☆Think 第6回 「Node.jsってなあに？」</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2011/08/think-6-nodejs-1.html" />
    <id>tag:info.dwango.co.jp,2011:/rd//1.35</id>

    <published>2011-08-11T08:53:53Z</published>
    <updated>2011-09-09T14:02:52Z</updated>

    <summary>こんにちは。ドワンゴの荒木です。 弊社若手エンジニア鳥居みゆっきと一緒に技術を学...</summary>
    <author>
        <name>荒木 真一</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[<p>こんにちは。ドワンゴの荒木です。<br>
弊社若手エンジニア鳥居みゆっきと一緒に技術を学ぶ生放送「みゆっき☆Think」！<br><br></p>

<p><b>8/5（金）第6回放送より、放送元を「ドワンゴ研究開発チャンネル」に変更いたしました！</b><br><br></p>

<p>第6回のテーマは「Node.jsってなあに？」<br>
放送内で使用された資料のあるアドレスと、みゆっきノートを公開します。<br><br></p>

<p>放送内で使用された資料はこちら↓<br>
<a href="http://miyukki.mesolabs.com/">
http://miyukki.mesolabs.com/</a><br><br></p>

<div style="width:425px" id="__ss_8816067">
 <strong style="display:block;margin:12px 0 4px">
<a href="http://www.slideshare.net/techtalkdwango/think6nodejs" title="みゆっき☆Think#6「Node.jsってなあに？」" target="_blank">みゆっき☆Think#6「Node.jsってなあに？」</a></strong>
 <iframe src="http://www.slideshare.net/slideshow/embed_code/8816067" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
 <div style="padding:5px 0 12px"> View more
 <a href="http://www.slideshare.net/" target="_blank">presentations</a>
 from <a href="http://www.slideshare.net/techtalkdwango" target="_blank">techtalkdwango</a> </div> </div>

<p><br><br></p>

<p>見逃された方は、
<a href="http://live.nicovideo.jp/gate/lv58958398 ">
生放送のタイムシフト</a>、<br>
もしくは<a href="http://www.nicovideo.jp/watch/1313051884">チャンネルのアーカイブ動画</a>
でも視聴いただけますので、是非ご覧下さい！<br><br></p>

<p>次回、第7回みゆっき☆Thinkは9/2（金）夜7時からの放送を予定しております。<br>
次回もよろしくお願いします！</p>
]]>
        

    </content>
</entry>

<entry>
    <title>みゆっき☆Think 第5回「iPhoneとAndroidをならべてみたよ！」</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2011/06/iphoneandroid.html" />
    <id>tag:info.dwango.co.jp,2011:/rd//1.33</id>

    <published>2011-06-29T12:32:30Z</published>
    <updated>2011-06-29T12:42:10Z</updated>

    <summary>こんにちは。ドワンゴの荒木です。 弊社若手エンジニア鳥居みゆっきと一緒に技術を学...</summary>
    <author>
        <name>荒木 真一</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[<p>こんにちは。ドワンゴの荒木です。<br />
弊社若手エンジニア鳥居みゆっきと一緒に技術を学ぶ生放送「みゆっき☆Think」！<br />
6/24（金）第5回「iPhoneとAndroidをならべてみたよ！」と題しまして、<br />
第３回でiPhone、第4回でAndroidについて学んだみゆっきが、<br />
今度は自分で作ったアプリを自ら解説しました！<br />
タイムシフトでもご覧いただけますので、見逃された方はそちらをどうぞ！</p>

<p>今回は、みゆっきのプレゼン資料だけでなく、<br />
みゆっきの作ったアプリのソースコードも公開しております。<br />
みゆっきの頑張りをぜひご覧ください！</p>

<p>みゆっきのプレゼン資料はこちら！<br />
<div style="width:425px" id="__ss_8434598"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/think5-iphoneandroid" title="みゆっき☆Think#5 「iPhoneとAndroidをならべてみたよ！」" target="_blank">みゆっき☆Think#5 「iPhoneとAndroidをならべてみたよ！」</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8434598" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank"><br />
presentations</a> from <br />
<a href="http://www.slideshare.net/techtalkdwango" target="_blank">techtalkdwango</a> </div> </div></p>

<p>ソースコードの公開場所のアドレスはこちら！<br />
<a href="https://github.com/toriimiyukki/mChat">https://github.com/toriimiyukki/mChat</a><br />
<br><br />
第3回、第4回の資料も公開し、当ブログ内にて案内ておりますので、<br />
見逃した方はそちらも合わせてご覧ください！<br />
<br><br />
次回「第6回みゆっき☆Think」は、7/29（金）に放送予定です。<br />
是非、ご覧ください！</p>]]>
        
    </content>
</entry>

<entry>
    <title>みゆっき☆Think 第四回 「今度はiPhoneに触ってみるよ！」</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2011/06/think-iphone.html" />
    <id>tag:info.dwango.co.jp,2011:/rd//1.32</id>

    <published>2011-06-03T11:33:07Z</published>
    <updated>2011-06-03T12:31:39Z</updated>

    <summary>こんにちは。ドワンゴの荒木です。 鳥居みゆっきと一緒に技術を学ぶ生放送、「みゆっ...</summary>
    <author>
        <name>荒木 真一</name>
        
    </author>
    
    <category term="みゆっき☆think　iphone" label="みゆっき☆Think　iPhone" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[<p>こんにちは。ドワンゴの荒木です。<br />
鳥居みゆっきと一緒に技術を学ぶ生放送、「みゆっき☆Think」<br />
5/27(金)に、第四回「こんどはｉＰｈｏｎｅに触ってみよう！」を放送いたしました。<br />
その放送内で使用されたスライドと、みゆっきのノートを公開します。</p>

<div style="width:425px" id="__ss_8193547"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/think4-iphone" title="みゆっき☆Think#4 「こんどはiPhoneに触ってみるよ！」">みゆっき☆Think#4 「こんどはiPhoneに触ってみるよ！」</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8193547" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango">techtalkdwango</a> </div> </div>

<div style="width:425px" id="__ss_8193507"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/4iphone" title="みゆっきノート #4「こんどはiPhoneに触ってみるよ！」">みゆっきノート #4「こんどはiPhoneに触ってみるよ！」</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8193507" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango">techtalkdwango</a> </div> </div>
<a href="http://www.slideshare.net/techtalkdwango/4iphone/download">元ファイルはこちらです(PDF)。</a>

<p><br />
<a href="http://live.nicovideo.jp/watch/lv51117018">生放送のタイムシフト番組</a>でもご覧いただけますので、是非ご視聴ください！</p>

<p>次回「みゆっき☆Think」は、6/24（金）にAndroidとiPhoneの両方を使った授業になる予定です。<br />
是非、ご覧ください！<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>みゆっき☆Think 第三回 「Androidに触ってみるよ！」</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2011/05/think-android.html" />
    <id>tag:info.dwango.co.jp,2011:/rd//1.31</id>

    <published>2011-05-25T09:15:24Z</published>
    <updated>2011-05-25T09:25:20Z</updated>

    <summary>こんにちは。ニコニコ事業本部の高橋です。 鳥居みゆっきと一緒に技術を学ぶ生放送、...</summary>
    <author>
        <name>高橋 峻彦</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[<p>こんにちは。ニコニコ事業本部の高橋です。<br />
鳥居みゆっきと一緒に技術を学ぶ生放送、「みゆっき☆Think」。<br />
先日放送しました第三回の資料を公開いたします。大変遅れてしまい、申し訳ありません。</p>

<p><br />
<div style="width:425px" id="__ss_7947202"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/android0422-7947202" title="みゆっき☆Think#3 「androidに触ってみるよ！」">みゆっき☆Think#3 「androidに触ってみるよ！」</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/7947202" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango">techtalkdwango</a> </div> </div></p>

<p>恒例のみゆっきノートはこちらです<br />
<div style="width:425px" id="__ss_7920746"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/think3" title="みゆっきノート #3「Androidに触ってみるよ！」">みゆっきノート #3「Androidに触ってみるよ！」</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/7920746" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango">techtalkdwango</a> </div> </div><br />
<a href="http://www.slideshare.net/techtalkdwango/think3/download"><br />
元ファイルはこちら(PDFです)</a></p>

<p><br />
<a href="http://com.nicovideo.jp/community/co400360">次回、5/27(金)みゆっき☆ThinkはiPhoneの授業です。</a><br />
みなさま、是非お見逃しなく！</p>]]>
        
    </content>
</entry>

<entry>
    <title>みゆっき☆Think 第二回 「HTML5でできる！あんなこと、こんなこと」</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2011/02/think-html5-1.html" />
    <id>tag:info.dwango.co.jp,2011:/rd//1.30</id>

    <published>2011-02-24T09:02:31Z</published>
    <updated>2011-02-24T09:11:04Z</updated>

    <summary>こんにちは、最近所属が変わりました、ニコニコ事業本部企画開発部、草野です。 弊社...</summary>
    <author>
        <name>草野 翔</name>
        
    </author>
    
    <category term="勉強会" label="勉強会" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[<p>こんにちは、最近所属が変わりました、ニコニコ事業本部企画開発部、草野です。</p>

<p>弊社新人若手エンジニア、鳥居みゆっきと一緒に技術を学ぶ生放送、「みゆっき☆Think」お楽しみいただけましたでしょうか？<br />
見逃した！という方には<a href="http://live.nicovideo.jp/watch/lv40606066" target="_blank">タイムシフト</a>もありますので、ぜひぜひ、ごらんください！</p>

<p>実際に放送内で披露されたデモは<a href="http://tool.applest.net/trash/html5_video.html" target="_blank">こちらのURL</a>になっています。利用させて頂いた動画は<a href="http://www.nicovideo.jp/watch/sm10031805" target="_blank">こちら</a>です(動画のうｐ主さんに許可は頂きました)。</p>

<p>放送内で使用した資料はこちらです！<br />
<div style="width:425px" id="__ss_6969660"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/think-2-presentation" title="みゆっき☆Think #2 「HTML5でできる! あんなこと、こんなこと」">みゆっき☆Think #2 「HTML5でできる! あんなこと、こんなこと」</a></strong><object id="__sse6969660" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=think2presentation-110218021551-phpapp01&stripped_title=think-2-presentation&userName=techtalkdwango" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6969660" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=think2presentation-110218021551-phpapp01&stripped_title=think-2-presentation&userName=techtalkdwango" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango">techtalkdwango</a>.</div></div></p>

<p>今回のみゆっきノートはこちら<br />
<div style="width:477px" id="__ss_6971331"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/2-html5" title="みゅっきノート #2 「HTML5でできる! あんなこと、こんなこと」">みゅっきノート #2 「HTML5でできる! あんなこと、こんなこと」</a></strong><object id="__sse6971331" width="477" height="510"><param name="movie" value="http://static.slidesharecdn.com/swf/doc_player.swf?doc=2r-110218052238-phpapp02&stripped_title=2-html5&userName=techtalkdwango" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6971331" src="http://static.slidesharecdn.com/swf/doc_player.swf?doc=2r-110218052238-phpapp02&stripped_title=2-html5&userName=techtalkdwango" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="477" height="510"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">documents</a> from <a href="http://www.slideshare.net/techtalkdwango">techtalkdwango</a>.</div></div></p>

<p>次回、3/25(金)からは、iOS / Androidなどのスマートフォンについての授業になっていきます。皆様、お楽しみに！</p>]]>
        
    </content>
</entry>

<entry>
    <title>みゆっき☆Think 第一回 「てっとりばやく学ぶHTML5」</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2011/01/think-html5.html" />
    <id>tag:info.dwango.co.jp,2011:/rd//1.29</id>

    <published>2011-01-28T12:32:29Z</published>
    <updated>2011-01-28T12:46:53Z</updated>

    <summary>こんにちは、ドワンゴの草野です。 鳥居みゆっきと一緒に技術を学ぶ生放送、「みゆっ...</summary>
    <author>
        <name>草野 翔</name>
        
    </author>
    
    <category term="html5勉強会" label="html5 勉強会" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[こんにちは、ドワンゴの草野です。<br>
鳥居みゆっきと一緒に技術を学ぶ生放送、「みゆっき☆Think」御覧いただけましたでしょうか？<br>
見逃した！という方は<a href="http://live.nicovideo.jp/watch/lv38486276" target="_blank">タイムシフト</a>も御座いますのでぜひ御覧ください。<br>
<br>
放送内で使用していた、発表資料はこちらです！<br>
<div style="width:425px" id="__ss_6732870"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/miyukki-live" title="てっとりばやく学ぶHTML5">てっとりばやく学ぶHTML5</a></strong><object id="__sse6732870" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=miyukkilive-110128060443-phpapp02&stripped_title=miyukki-live&userName=techtalkdwango" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6732870" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=miyukkilive-110128060443-phpapp02&stripped_title=miyukki-live&userName=techtalkdwango" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango">techtalkdwango</a>.</div></div>
<br>
<br>
鳥居さんがとっていたノートも、参考になりそうなのでスキャンしてみました。<br>
<div style="width:425px" id="__ss_6732924"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/ss-6732924" title="みゆっきノート">みゆっきノート</a></strong><object id="__sse6732924" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-110128060743-phpapp02&stripped_title=ss-6732924&userName=techtalkdwango" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6732924" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-110128060743-phpapp02&stripped_title=ss-6732924&userName=techtalkdwango" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango">techtalkdwango</a>.</div></div>
<a href="http://www.slideshare.net/techtalkdwango/ss-6732924/download" targe="_blank">元ファイルはこちら(PDFです)</a><br>
<br>
次回(2/25(金))は実際にHTML5を使って何かつくってみます！ぜひぜひ御覧ください！<br>
宿題として<b>「HTML5で作られてるっぽいWebサービスを探す」</b>もお忘れなく。見つけたら<a href="http://com.nicovideo.jp/bbs/co400360" target="_blank">コミュニティの掲示板</a>まで、よろしくお願いします。<br>]]>
        
    </content>
</entry>

<entry>
    <title>【資料あり】ドワンゴ技術勉強会(2)</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2010/12/2.html" />
    <id>tag:info.dwango.co.jp,2010:/rd//1.28</id>

    <published>2010-12-10T15:18:59Z</published>
    <updated>2010-12-13T09:32:30Z</updated>

    <summary>こんにちは！先日はドワンゴ技術勉強会生放送をご覧いただき、ありがとうございました...</summary>
    <author>
        <name>草野 翔</name>
        
    </author>
    
    <category term="技術勉強会" label="技術勉強会" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[<p>こんにちは！先日は<a href="http://live.nicovideo.jp/watch/lv33653557">ドワンゴ技術勉強会生放送</a>をご覧いただき、ありがとうございました！</p>

<p>当日は回線トラブル等々ございましたが、タイムシフトはまだ御覧いただけますので、ぜひご覧ください。</p>

<h2>資料公開</h2>

<p>社外講師の方の資料も、ご厚意によって公開させて頂ける手はずとなりました。ありがとうございます。</p>

<h3>「MySQLとPlugin」(鬼海/Dwango)</h3>

<div style="width:425px" id="__ss_6100300"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/my-sqlplugin" title="My sqlとplugin">My sqlとplugin</a></strong><object id="__sse6100300" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mysqlplugin-101210064850-phpapp01&stripped_title=my-sqlplugin&userName=techtalkdwango" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6100300" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mysqlplugin-101210064850-phpapp01&stripped_title=my-sqlplugin&userName=techtalkdwango" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango">techtalkdwango</a>.</div></div>

<h3>「ニコニコニュースと全文検索」(星野/Dwango)</h3>

<div style="width:425px" id="__ss_6100299"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/ss-6100299" title="ニコニコニュースと全文検索">ニコニコニュースと全文検索</a></strong><object id="__sse6100299" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-101210064813-phpapp02&stripped_title=ss-6100299&userName=techtalkdwango" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6100299" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-101210064813-phpapp02&stripped_title=ss-6100299&userName=techtalkdwango" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango">techtalkdwango</a>.</div></div>

<h3>「全文検索 in 着うたサービス」(中村/Dwango)</h3>

<div style="width:425px" id="__ss_6100308"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/in-6100308" title="全文検索In着うた配信サービス">全文検索In着うた配信サービス</a></strong><object id="__sse6100308" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=in-101210064928-phpapp01&stripped_title=in-6100308&userName=techtalkdwango" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6100308" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=in-101210064928-phpapp01&stripped_title=in-6100308&userName=techtalkdwango" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango">techtalkdwango</a>.</div></div>

<h3>「Spiderストレージエンジン」(斯波様/TeamLab)</h3>

<div style="width:425px" id="__ss_6058114"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/Kentoku/introducing-spider-20101206dtt7" title="Introducing Spider 20101206(DTT#7)">Introducing Spider 20101206(DTT#7)</a></strong><object id="__sse6058114" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=introducingspider20101206dtt7-101207031057-phpapp01&stripped_title=introducing-spider-20101206dtt7&userName=Kentoku" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6058114" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=introducingspider20101206dtt7-101207031057-phpapp01&stripped_title=introducing-spider-20101206dtt7&userName=Kentoku" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/Kentoku">Kentoku</a>.</div></div>

<div style="width:425px" id="__ss_6058116"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/Kentoku/spider-ha-20100922dtt7" title="Spider HA 20100922(DTT#7)">Spider HA 20100922(DTT#7)</a></strong><object id="__sse6058116" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=spiderha20100922dtt7-101207031103-phpapp02&stripped_title=spider-ha-20100922dtt7&userName=Kentoku" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6058116" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=spiderha20100922dtt7-101207031103-phpapp02&stripped_title=spider-ha-20100922dtt7&userName=Kentoku" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/Kentoku">Kentoku</a>.</div></div>

<div style="width:425px" id="__ss_6058115"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/Kentoku/charms-of-mysql20101206dtt7" title="Charms of MySQL 20101206(DTT#7)">Charms of MySQL 20101206(DTT#7)</a></strong><object id="__sse6058115" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=charmsofmysql20101206dtt7-101207031058-phpapp02&stripped_title=charms-of-mysql20101206dtt7&userName=Kentoku" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6058115" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=charmsofmysql20101206dtt7-101207031058-phpapp02&stripped_title=charms-of-mysql20101206dtt7&userName=Kentoku" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/Kentoku">Kentoku</a>.</div></div>

<h3>「MySQLねーわｗｗｗｗ」(鳥居/Dwango)</h3>

<div style="width:425px" id="__ss_6100887"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/techtalkdwango/my-sqlw" title="My sqlねーわｗｗｗw">My sqlねーわｗｗｗw</a></strong><object id="__sse6100887" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mysqlw-101210075143-phpapp01&stripped_title=my-sqlw&userName=techtalkdwango" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6100887" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mysqlw-101210075143-phpapp01&stripped_title=my-sqlw&userName=techtalkdwango" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/techtalkdwango">techtalkdwango</a>.</div></div>

<h3>「MySQLを通じた全文検索エンジンSenna/Groongaの利用について」(末永様/未来検索ブラジル)</h3>

<div style="width:425px" id="__ss_6139206"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/TasukuSuenaga/mysqlsennagroonga-6139206" title="MySQLを通じた全文検索エンジンSenna/groongaの利用について">MySQLを通じた全文検索エンジンSenna/groongaの利用について</a></strong><object id="__sse6139206" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=dwango-groonga-101213022805-phpapp02&stripped_title=mysqlsennagroonga-6139206&userName=TasukuSuenaga" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6139206" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=dwango-groonga-101213022805-phpapp02&stripped_title=mysqlsennagroonga-6139206&userName=TasukuSuenaga" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/TasukuSuenaga">Tasuku Suenaga</a>.</div></div>
]]>
        

    </content>
</entry>

<entry>
    <title>2010年度 ドワンゴ研究開発本部 新卒研修の紹介</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2010/10/2010.html" />
    <id>tag:info.dwango.co.jp,2010:/rd//1.27</id>

    <published>2010-10-08T05:59:52Z</published>
    <updated>2010-10-13T10:56:23Z</updated>

    <summary>この春、ドワンゴに技術者として28人の新卒社員が入社しました。 ドワンゴでは、実...</summary>
    <author>
        <name>高橋 峻彦</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[<p>この春、ドワンゴに技術者として28人の新卒社員が入社しました。<br />
ドワンゴでは、実務に入る前に仕事の流れを覚えてもらうための技術者向け研修を行っており、彼らにも研修を受けてもらいました。</p>

<p>本日はその研修について紹介します。</p>

<p>研修の内容は"ニコニコ動画の公開マイリストをカテゴリ分けし、ブラウジング可能とするシステムの開発"としました。<br />
言い換えると、"感覚的にニコニコ動画の公開マイリストを探せるシステムを作る"というものです。<br />
この内容を、1チーム4人、7チームに分かれて行ないました。</p>

<p>期間は4月30日～6月4日までの、およそ1ヶ月。<br />
新卒社員たちはその期間内で、設計から、開発、ドキュメント作成までを行いました。</p>

<p>開発期間終了日の翌日(6月3日)に、各チームが本部長、及び部長の前で出来上がったシステムのプレゼンテーションをしました。そこで優秀だと評価されたチームが研修最終日に表彰されました。</p>

<p>以下9つの項目を評価の基準としました。この項目は研修開始時に新卒社員に配布しました。</p>

<ol>
	<li> 要求をどのように落とし込んだか</li>
	<li> 要求をどこまで作りこむことができたか</li>
	<li> スケジュールどおりに進めることができたか</li>
	<li> 数学的アプローチや使いやすさを求めたロジックが盛り込まれているか</li>
	<li> カテゴリ分け結果の正しさ</li>
	<li> 開発したシステムの使い勝手はよいか</li>
	<li> 開発したシステムのレスポンス速度・負荷は使用に堪えるものになっているか</li>
	<li> バグ・脆弱性はないか</li>
	<li> 仕様書の出来・有無</li>
</ol>

<p>新卒社員たちには、これらの項目について追求することが求められました。</p>

<p>研修に際して、各チームに開発環境として、いわゆる、LAMP(Linux, Apache,MySQL, PHP)環境のサーバが与えられました。<br />
ドワンゴではLAMP環境で多くのWebサービスの開発を行います。</p>

<p>そして、以下の大量の研修用データが提供されました。<br />
<ul><br />
        <li>マイリスト   : 2万件 (マイリストは解析対象であり必要不可欠なデータなので、各チームのシステムが状況の変化に耐えられるかを見るためとして、5月19日にデータ量が2万件→20万件に増加されました)</li><br />
	<li>動画情報     : 135万件</li><br />
	<li>静画情報     : 5千件</li><br />
	<li>タグ         : 903万件</li><br />
	<li>ユーザ情報   : 70万件 (ユーザ情報は個人情報が特定できないように加工済み)<br />
</li><br />
</ul></p>

<p>研修中、彼らは大きく3つの課題ついて考え、どのチームも完遂しました。<br />
<ul><br />
	<li>カテゴリ分けアルゴリズム</li><br />
	<li>ブラウザ間の互換性</li><br />
	<li>パフォーマンス</li><br />
</ul></p>

<p>ここからは、新卒社員たちが3つの課題をいかにして乗り越えたのかを紹介します。</p>

<hr>

<h2>『チーム7：カテゴリ分けアルゴリズム』</h2>

<p>チーム7は、ニコニコ動画に慣れていないユーザにも分かりやすいシステムが作りたい、と考えました。</p>

<p>チーム7内の誰もが、研修のテーマを聞いた時、動画に付けられた"タグ"でカテゴリ分けする事を思いつきました。<br />
同時に、タグだけで分けたのでは、ニコニコ動画に慣れていないユーザには分かりにくいものとなるのではないかと考えました。</p>

<p>タグの中には、ニコニコ動画内だけで使われている言葉もあります。<br />
そういう言葉は、ニコニコ動画に慣れていない人にはとっつきにくいかもしれません。</p>

<h3>ⅰ.「ニコ厨度」</h3>
そこで、5月6日にチーム内でカテゴリ分けの方法をブレストしました。
ブレストから出た一つのとても興味深いアイデアは「ニコ厨度」と名付けた概念でした。この「ニコ厨度」を用いて公開マイリストのカテゴリ分けを行うことに決定しました。

<p>「ニコ厨度」とは、"ニコニコ動画らしさ"にマッチした度合いのことです。<br />
これを使うことで、どのマイリストがどれだけニコニコ動画らしいのか、一目で分かるようにできます。<br />
しかし、「ニコ厨度」の算出方法を決定するまでには試行錯誤がありました。</p>

<h3>ⅱ.「ニコ厨度」算出方法の決定</h3>
「ニコ厨度」をどのように計算すればよいかを考えました。
初め、コメント数/再生数が多い動画が"ニコ厨"(ニコニコ動画に慣れている人のこと)らしい=「ニコ厨度」が高い、という仮説を立てて算出することにしました。
ところが、仮説に基づいてマイリストを集計してみると、さほどニコ厨らしくなりませんでした。
あれこれと試しているうちに、1日が経過しました。

<p>5月7日になり、"ニコ厨"らしいとは何かを考えネットをさまよっていた時に、アンサイクロペディアの"ニコ厨"の項目を発見しました。<br />
そこには、「『ｗ』を打ち続けなければいけないという使命感に駆られている」、「語尾をおもいっきり伸ばす」、という"ニコ厨"のコメントに見られる特徴が書いてありました。※<br />
早速これを参考にして、動画のタグに「ニコ厨度」を付与し、それを基にマイリストの「ニコ厨度」を算出するシステムを試作してみました。<br />
すると、ニコニコ動画らしいと思える動画(が多く含まれるマイリスト)ほど、「ニコ厨度」が高く算出されました。<br />
逆に、ニコニコ動画らしくない動画(が多く含まれるマイリスト)はちゃんと「ニコ厨度」が低く算出されています。<br />
(基本的に、アニメ・絵が多く含まれるマイリストは「ニコ厨度」が高く、実写が多く含まれるマイリストは「ニコ厨度」が低い傾向となった)<br />
ついにチーム7が思い描いていたニコ厨度を算出することができたのです。</p>

<p>※資料:<br />
<a href="http://www.ansaikuropedia.org/wiki/%E3%83%8B%E3%82%B3%E5%8E%A8">アンサイクロペディア「ニコ厨」</a><br />
<a href="http://www.ansaikuropedia.org/wiki/%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E8%AA%9E">アンサイクロペディア「ニコニコ語」</a><br />
       </p>

<p>研修後に感想を聞くと、メンバーは「ニコ厨度については、まだやれたという気もする。しかし、良い結果は出せた。最優秀賞が受賞できなかったことが心残りです」<br />
と語りました。</p>

<hr>

<h2>『チーム3：ブラウザ間の互換性』</h2>

<p>研修の要件では Internet Explorer 8 で動作するシステムを作ることになっていました。</p>

<p>しかしチーム3は、システムを多くのユーザに見てもらおうと思い、主要な6つのWebブラウザ( Internet Explorer 7 および 8 , Firefox, Safari, Chrome, Opera)の上で、きちんと動作させることを目指しました。</p>

<p>5月27日に Internet Explorer 8 でシステムが動く状態になり、他のブラウザでの動作検証を始めました。</p>

<h3>ⅰ.JavaScript対応</h3>
Firefox で動作をチェックしてみると、システムは全く動きませんでした。
原因はブラウザによってJavaScriptの対応状況、記述方法が違うため、エラーが起きていたからでした。

<p>そこで、各ブラウザでエラーの発生する箇所を探し、一つひとつ記述を直していきました。<br />
例えば以下に示す「記述方法の変更」や、「関数の置き換え」などでした。</p>

<p>○記述方法の変更<br />
$関数内の要素名をシングルクォーテーション(')で括る<br />
Firefoxでエラーが発生する $(category_relation).innerHTML = "";<br />
↓<br />
Firefoxで正常に動作する   $('category_relation').innerHTML = "";</p>

<p>○関数の置き換え<br />
querySelectAllからgetElementByIdに変更<br />
IE7でエラーが発生する document.querySelectorAll("ul#category_menu_child li");<br />
↓<br />
IE7で正常に動作する   document.getElementById('category_menu_child');</p>

<p>地道な修正作業に一人で丸一日かかりましたが、JavaScriptの動作の違いによるエラーは全て解決することができました。<br />
こうして、主要な6ブラウザに対応することができたのでした。</p>

<h3>ⅱ.文字コード対応</h3>
JavaScriptの対応が終わりましたが、新たな問題が発覚しました。
URL入力欄に日本語を直接入力した時、システム側に渡ってくるGETパラメータの文字コードが、ブラウザごとにバラバラだったのです。
例えば、OperaではJIS、ChromeではUTF-8、といった具合です。
その問題は、渡ってきたパラメータを全てUTF-8に変換するように実装し、解決しました。

<p>研修終了後、チーム3のメンバーに感想を聞いてみたところ、「予想時間よりは早く各ブラウザ動いてくれたので、頑張ったんじゃないかな、と思います。ただもっとベターな方法はあると思っています。(ブラウザ互換性は)twitterが確かIE6でも動いてたと思うので、まだまだですね」。<br />
チーム3は、対応すべき所はまだまだあったと考えているようでした。</p>

<hr>

<h2>『チーム6：パフォーマンス』</h2>
研修の終盤、チーム6のシステムはマイリストのカテゴリ分け、ブラウジングができる状態になっていました。
しかし、ページの表示にかかる時間がおよそ300ms(ms:ミリ秒)かかっていました。
他のチームはページ表示にかかる時間が10ms程度だったので、30倍以上遅い状態でした。
これがチーム6にとっては耐え難いことだったため、改善を行うことにしました。

<h3>ⅰ.テーブル構成の改善</h3>
まず、SQL周りの調査をすると、ページを表示するために発行するクエリが多すぎて速度の出ない原因となっていることがわかりました。

<p>チーム6のシステムでは構成上、「集計時のカテゴリ」と「Webページ上に表示するカテゴリ」が別の文字列となっていました。<br />
この「集計時のカテゴリ」と「Webページ上に表示するカテゴリ」を別テーブルで保持していたため、大量のクエリ発行が起こっていたのです。<br />
これを改修し、「Webページ上に表示するカテゴリ」に一本化しました。</p>

<p>結果、ページ表示の際に起こるカテゴリに関するクエリ発行回数は、1/2以下になりました。<br />
他にも複合インデックスを適用するなどをして、ページの表示にかかる時間は300ms→110msになりました。</p>

<h3>ⅱ.転送量</h3>
その後も、高速化の調査を行ないました。
調べていく内に、速いチームはAjaxを使ってページの一部のデータをサーバーとやりとりしてることに気がつきました。
それに対しチーム6は、1ページまるまる通信していたので、転送量が大きかったのです。
しかし、システムをAjaxに書き換える時間の余裕はありませんでした。

<h3>ⅲ.転送量/転送効率の改善</h3>
そこで、できる限り転送量を減らすことを考えました。
HTMLソースの改行・インデントのタブを全て削除し、110ms→90msになりました。

<p>次に圧縮を使うことにしました。<br />
転送するWebページをサーバー側で丸ごと圧縮し、ユーザ側のブラウザで展開するようにしたのです。<br />
方法は大きく2つ、Apacheで設定をする方法と、PHP側で関数を呼ぶ方法がありましたが、チーム3はPHP側で関数を呼ぶ方法を取りました。<br />
この研修では、Apacheの設定をするためにサーバー管理担当者に依頼をするルールがあり、それでは時間がかかってしまうと考えたからでした。<br />
圧縮を使った結果、ページの表示時間を90ms→30msにまで短縮することができました。</p>

<p>最後に、メモリキャッシュシステムを使いました。<br />
圧縮したページをキャッシュに乗せることで、サーバー側のHTMLソース圧縮にかかる時間/負荷や、DBへのアクセス時間/負荷を軽減しました。<br />
この時、圧縮の副作用として、圧縮せずにキャッシュに載せた場合に比べて、およそ10倍のページをメモリ上に乗せることができました。<br />
最終的に、キャッシュの効いているページの表示時間については4msと、全チーム中最速になりました。</p>

<p>チーム6のメンバーに感想を聞いてみると、「もう少し初期の段階でパフォーマンスを念頭に置いて作業すべきだったと思います。今後、改善できそうなところは、1カテゴリに表示するマイリスト数を削ることです。5000件程度表示していましたが、もっと少なくしてもよかったかなと思います」<br />
と語りました。</p>

<hr>

<p>研修の紹介は以上です。<br />
ここで紹介できなかったチームも同様に、限られた時間の中で技術的問題を解決しています。</p>

<p>新卒社員たちは、研修をやりとげました。<br />
その中で、課題の本質を考え、解決する方法を考え、実践しました。<br />
研修の一ヶ月間で、新卒社員たちがドワンゴで働く真の心の準備ができたと信じています。</p>

<p>ドワンゴへの就職を考えている方がいれば、ぜひ下記サイトからご登録ください。<br />
<a href="http://info.dwango.co.jp/recruit/index.html">株式会社ドワンゴ 採用情報サイト</a></p>

<p><br />
今回記事の中で紹介した3チームが、自分たちのシステムを紹介する動画が下記サイトにあります。<br />
<a href="http://www.nicovideo.jp/watch/nl11784826">ドワンゴ新入社員の研修結果発表～ニコニコ動画つくってみました～</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>ニコニココメントサーバーにおけるメモリ使用量増大問題の調査と対策</title>
    <link rel="alternate" type="text/html" href="http://info.dwango.co.jp/rd/2010/10/post-3.html" />
    <id>tag:info.dwango.co.jp,2010:/rd//1.26</id>

    <published>2010-10-05T11:57:03Z</published>
    <updated>2010-10-06T04:13:54Z</updated>

    <summary>はじめに コメントサーバーは、ニコニコ関連サービスのコメントを司るサーバーである...</summary>
    <author>
        <name>星一</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://info.dwango.co.jp/rd/">
        <![CDATA[<h2>はじめに</h2>

<p>コメントサーバーは、ニコニコ関連サービスのコメントを司るサーバーである。本稿は、ニコニコ広場で起こったコメントサーバーメモリ使用量増大問題について、我々コメントサーバー担当が行った調査と対策のまとめである。</p>

<p>今回のメモリ増大問題の解決にあたり、<strong>「仮説を立てる + 計測する→修正する→確認する」というパターンを繰り返した</strong>。このパターンは、ソフトウェアの様々な問題を調査するのに適用できる、基本パターンである。</p>

<h2>コメントサーバー概要</h2>

<p>コメントサーバーについて簡単に概説する。</p>

<p>コメントサーバーはニコニコ関連サービスのコメントを管理するサーバーである。基本的な機能は、新しいコメントの保存、およびコメントの出力である。ニコニコサービスのユーザーがコメントサーバーに直接触れることはなく、ニコニコのプレイヤーがコメントサーバーと直接やりとりを行う。ニコニコ動画の例でいうと、コメントサーバーを使用する流れは次のようになる。ユーザーは動画を見るためにプレイヤーを開くわけであるが、プレイヤーのページを開くとき、裏方でコメント取得の処理が行われる。プレイヤーは、その動画に対応するコメント群を、コメントサーバーから取得するのである。プレイヤーは取得したコメント群を適切に配置し、ユーザーに見える形で表示する。</p>

<p>コメントサーバーは非同期型・同期型の両方に対応している。非同期型はコメント書き込みの時間とコメント閲覧の時間が同時でない形態である。同期型は逆に、コメント書き込みと閲覧のタイミングが同時となる形態である。ニコニコ動画、ニコニコ生放送タイムシフトなどは非同期型、ニコニコ生放送、ニコニコ広場などは同期型に分類される。</p>

<p>コメントサーバーのプロトコルは二種類ある。 HTTP と <a href="http://en.wikipedia.org/wiki/XMLSocket">XMLSocket</a> であり、 HTTP は非同期型、 XMLSocket は同期型に対応する。二つはプロトコルが異なるだけで、コメントサーバーとしての機能は同じである。</p>

<p>コメントサーバーは、高速性が求められること、およびシビアなメモリ管理が必要であることなどの理由から、プログラム言語 C++ で記述されている。</p>

<p>コメントサーバーは 1 プロセスあたり複数のセッションを受け持つ。セッションごとにプロセスを生成するのではなく、 1 プロセスのなかで複数のセッションをさばくアーキテクチャである。</p>

<p>コメントサーバーが扱う二つの概念として、コメントとスレッドがある。コメントはコメント文字列や書き込んだユーザーの情報、動画の位置などの記録を含む。スレッドはコメントの集合体で、一サーバーの中でユニークな ID を持つ。スレッドの名前の由来は掲示板である。コメントは必ず一つのスレッドに所属し、コメントサーバーはスレッドを単位としてひとまとめに扱っている。スレッドは、同期型の利用においては、過去ログを一定数キャッシュするという目的で使われる。なお、<strong>本稿内で「スレッド」という場合は、ニコニコの用語としてのスレッドであり、軽量プロセスとしてのスレッドではない</strong>。</p>

<h3>ニコニコ広場</h3>

<p>ニコニコ広場は、コメントサーバーを利用しているサービスの一つである。ニコニコ広場はニコニコ動画のプレイヤーを開いたときに接続され、またプレイヤーを開いている間は常時接続されている。用途は大きく分けて二つである:</p>

<ul>
<li>サービスとしてのニコニコ広場</li>
<li>プレイヤーに対する情報のプッシュ配信のインフラ</li>
</ul>

<p>前者の「サービスとしてのニコニコ広場」は、時報が鳴ったときに強制移動させられる空間である。この「サービスとしてのニコニコ広場」は 2008 年 12 月にサービスインされ、当時は時報がなっていないときにでもコメントできる空間であった。しかし 2010 年 7 月にサービス終了となり、現在は時報が鳴っているときにしかコメントが出来ない。</p>

<p>後者の「インフラとしてのニコニコ広場」について。ニコニコプレイヤーの上部に表示される情報が実は「インフラとしてのニコニコ広場」から配信されている。例えばニコニコミュニティの、現在やっている生放送情報などが配信され、表示される。</p>

<p>これらを実現するために、ニコニコ広場におけるコメントサーバーは、多数のクライアントが長時間接続するという使われ方をしている。</p>

<h2>メモリ増大問題</h2>

<p>コメントサーバーは基本的にずっと起動したまま運用するので、メモリ使用量などは安定していることが求められる。しかし、ニコニコ広場で使われているコメントサーバーのメモリ使用量は時間と共に増大し続けていた。メモリ使用量が物理メモリの最大量に近づいた場合、スワップが発生してしまう前にコメントサーバーを再起動することで対処していた。なお、本稿の対策の前までは一日三回のペースで再起動を行っていた。</p>

<p>改善前のメモリ使用量のグラフを以下に示す。横軸が日時、縦軸がメモリ使用率 [%] を表している。なお、当時の実データは残っておらず、当時見ていたグラフの概形から擬似的なものを作成した。一定時間ごとにメモリ使用量が垂直に回復しているのは、サーバーを再起動しているためである。</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://info.dwango.co.jp/rd/hiroba_memory_init.png"><img alt="hiroba_memory_init.png" src="http://info.dwango.co.jp/rd/assets_c/2010/10/hiroba_memory_init-thumb-320x132.png" width="320" height="132" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span></p>

<p>メモリ増大問題の原因を究明し、定期的な再起動を不要にする、というのが今回の調査の目的である。</p>

<h2>行った対策</h2>

<p>今回のメモリ増大調査より以前の時点である程度の調査が行われていて、メモリ確保数と解放数とがバランスしていることが確認されていた。よって、メモリリークの可能性は低いと考えられていた。</p>

<p>メモリリークではないとすると、メモリを大きく消費している箇所を調査する必要がある。メモリを大きく消費しているであろう箇所は、ある程度目星がついていて、<strong>スレッドのコメントデータ保持部分と、セッションの部分の二箇所である</strong>。今回は、真っ先に修正が可能であったスレッド部分の修正をしたのち、メモリ使用量のプロファイリング、最後にやや修正が難しいセッション部分の修正、という手順で改善を行った。</p>

<p>以下、行った調査および対策の詳細を時系列順に述べる。</p>

<h3>1 スレッドあたりのコメント保持数を減らす</h3>

<p>ニコニコ広場において、同期的なコメント配信サーバーとしてコメントサーバーは利用されている。そのため、この用途に限って言えば、コメントを大量にメモリ上に保持しておく必要はない。ただし全くメモリ上に保存しないわけではなく、ユーザーが広場に新規接続した際に過去のコメントをある程度流す必要があるため、その分保持する必要がある。その過去のコメントは最新のコメントであり、 FIFO で一定数保持している。</p>

<p>当初の実装では、 1 スレッドあたりのコメント保持数は 1000 で固定であった。そこで、 1 スレッドあたりのコメント数を変更できるように、コメントサーバーの起動オプションを追加した。ニコニコ広場においては 10 コメント程度で十分と判断した。</p>

<p>この修正により、メモリ使用量増大は緩やかになり、必要なサーバー再起動回数は一日数回から一日一回に減少した。メモリ使用量の増加量は減少したものの、根本的な解決には至らなかった。</p>

<p>改善後のメモリ使用量のグラフ概形を以下に示す。</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://info.dwango.co.jp/rd/hiroba_memory_thread_modified.png"><img alt="hiroba_memory_thread_modified.png" src="http://info.dwango.co.jp/rd/assets_c/2010/10/hiroba_memory_thread_modified-thumb-320x132.png" width="320" height="132" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span></p>

<h3>Google Performance Tools によるヒーププロファイリング</h3>

<p>コメントサーバーには、 <a href="http://code.google.com/p/google-perftools/">Google Performance Tools</a> が用いられていて、アロケータに tcmalloc が使用されている。これにより、アロケーションの効率が良くなるだけでなく、メモリ使用量に関してプロファイリングすることが可能になる。</p>

<p>tcmalloc を使用するには、コンパイル時に libtcmalloc をリンクするだけでよい。</p>

<pre><code>gcc [...] -ltcmalloc
</code></pre>

<p>ヒーププロファイラを使用するには、環境変数 HEAPPROFILE にログの吐かれる場所を設定してプログラムを実行するだけである。</p>

<pre><code>gcc [...] -o myprogram -ltcmalloc
HEAPPROFILE=/tmp/netheap ./myprogram
</code></pre>

<p>ログは pprof コマンドを使用して閲覧する。テキスト形式はもちろん、グラフ化して表示することも可能である。詳しくは <a href="http://code.google.com/p/google-perftools/wiki/GooglePerformanceTools">Google Performance Tools の使い方のページ</a>を参照されたい。</p>

<p>1 つのセッションを張り、 10000 個のパケットを送ることでスレッドを 10000 個作成した。プロファイルをとったところ、 std::string および std::deque (両端キュー) がかなりメモリを消費していることが分かった。</p>

<p>なお、<strong>ヒーププロファイラは実行に負担がかかり、ニコニコ広場本番のサーバーで動いているものに対して適用するのは難しい</strong>。そのため、テストサーバーで起動し、多めのセッションを作成してなるべく本番に近い環境を再現することによって実験を行った。</p>

<p>ログの例を以下に示す:</p>

<pre><code>Total: 21.8 MB
   13.3  60.8%  60.8%     13.3  60.8% std::_Deque_base::_M_create_nodes
    2.9  13.3%  74.1%      2.9  13.3% std::basic_string::_Rep::_S_create
    2.1   9.8%  83.9%     20.9  95.6% dwango::niwavide::server::CServer::PrepareThreadRoom
    1.1   4.8%  88.7%      1.1   4.8% std::_Rb_tree::_M_insert
    0.9   3.9%  92.6%     14.1  64.7% std::_Deque_base::_M_initialize_map
    0.6   2.8%  95.4%      7.6  34.8% dwango::niwavide::CNiwavideStorage::CreateClickHandle
    0.5   2.5%  97.8%      0.7   3.4% dwango::niwavide::server::CServer::GetDeleteList
    0.1   0.6%  98.4%      0.1   0.6% std::deque::_M_push_back_aux
    0.1   0.6%  99.0%      0.1   0.6% __gconv_open
    0.1   0.4%  99.4%      0.1   0.4% xercesc_2_8::MemoryManagerImpl::allocate
</code></pre>

<p>カラムは、右側からそれぞれメモリ使用量 (MB)、メモリ使用量割合、メモリ使用量割合 (累計)、関数を呼んでいる部分全部のメモリ使用量合計 (MB)、その割合、関数名を表している。</p>

<p>この結果から、 std::deque (両端キュー) および std::string がメモリを大きく消費していることが分かった。</p>

<h3>std::deque を std::vector に置き換え</h3>

<p>std::deque が主に使われているであろう箇所は、スレッドが保持するコメント集合を管理している部分であった。コメントを FIFO で保持するために、 std::deque が使われていた。これを std::vector に置き換え、ヒーププロファイリングを行った。最初のメモリ使用量プロファイリングと同じ時点での結果は以下のとおりで、若干メモリ使用量が削減された:</p>

<pre><code>Total: 11.8 MB
    4.3  36.4%  36.4%      4.3  36.4% std::_Deque_base::_M_create_nodes
    2.9  24.6%  61.0%      2.9  24.6% std::basic_string::_Rep::_S_create
    1.7  14.0%  75.0%     10.8  90.8% dwango::niwavide::server::CServer::PrepareThreadRoom
    1.1   9.0%  84.0%      1.1   9.0% std::_Rb_tree::_M_insert
    0.6   5.2%  89.1%      7.7  64.6% dwango::niwavide::CNiwavideStorage::CreateClickHandle
    0.5   4.5%  93.7%      0.8   6.4% dwango::niwavide::server::CServer::GetDeleteList
    0.3   2.4%  96.1%      4.6  38.8% std::_Deque_base::_M_initialize_map
    0.2   1.8%  97.9%      0.2   1.8% xercesc_2_8::MemoryManagerImpl::allocate
    0.1   1.1%  98.9%      0.1   1.1% __gconv_open
    0.1   0.5%  99.4%      0.1   0.5% my_once_alloc
</code></pre>

<p>この置き換えの過程で、「コメントの集合が解放される際、 std::vector を使用した場合はメモリは解放されるが、 std::deque を使用した場合はメモリが解放されてないように見える」という現象が確認された。コンテナを入れ替えただけで使用方法は全く同じはずであるのに、メモリ使用量の挙動が異なるのはおかしい。そこで、 std::deque のメモリの使用の仕方について詳しく調査をすることになった。</p>

<h3>tcmalloc と std::deque の調査</h3>

<p>先程の流れから、 std::deque のメモリの使い方を調査した。以下の三ヶ所を、 tcmalloc を使用しない場合と使用した場合の二種類について、 statm コマンドで調査した。</p>

<ol>
<li>プログラム開始後</li>
<li>std::deque に要素を追加した後</li>
<li>std::deque のデストラクタ呼び出し後</li>
</ol>

<p>ソースコードは次の通り:</p>

<pre><code>#include &lt;deque&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

using namespace std;

const string genstr(){
  char buf[1024];
  for(int i = 0; i &lt; sizeof(buf); i++){
    buf[i] = random()&amp;0xff;
  }
  return string(buf, sizeof(buf));
}

void memstat(){
  ifstream ifs("/proc/self/statm");
  string s;
  while(!ifs.eof()){
    getline(ifs, s);
    cout &lt;&lt; s &lt;&lt; endl;
  }
}

int main(void){
  cout &lt;&lt; "1. start program" &lt;&lt; endl;
  memstat();
  { 
    deque&lt;string&gt; d;
    const int max = 100000;
    for(int i = 0; i &lt; max; i++){
      d.push_back(genstr());
    }
    cout &lt;&lt; "2. put all elements in the deque." &lt;&lt; endl;
    memstat();
  }
  cout &lt;&lt; "3. deque destructed." &lt;&lt; endl;
  memstat();
}
</code></pre>

<h4>結果</h4>

<p>tcmalloc を使用しない場合:</p>

<pre><code>1. start program
2892 265 228 4 0 85 0

2. put all elements in the deque.
29259 26650 236 4 0 26452 0

3. deque destructed.
2892 304 236 4 0 85 0
</code></pre>

<p>tcmalloc を使用した場合:</p>

<pre><code>1. start program
5551 1567 311 4 0 1649 0

2. put all elements in the deque.
34639 30706 323 4 0 30737 0

3. deque destructed.
34639 30706 323 4 0 30737 0
</code></pre>

<h4>考察</h4>

<p>tcmalloc を使用しない場合、つまり通常のアロケータを使用する場合、デストラクタでメモリが開放されていることが分かる。</p>

<p>一方 tcmalloc を使用した場合、デストラクタ発動後でもメモリが開放されていないことが分かる。 <strong>tcmalloc はプログラム側でメモリを開放しても、すぐには OS に返却しない</strong>。これが、広場コメントサーバーのメモリ使用量増大の一因ではないか。</p>

<p>ならば OS にメモリを強制的に返却するようにすればよい。次節で詳しく述べるが、 tcmalloc で確保したメモリは MallocExtension::ReleaseFreeMemory メンバ関数で意図的に解放できる。</p>

<h3>MallocExtension::ReleaseFreeMemory の使用</h3>

<p>前節で述べたとおり、 tcmalloc は不要になったメモリを OS に即座に返却するわけではない。このためにメモリ使用量が増大しているように見える可能性がある。そこで、 Google Performance Tools にある ReleaseFreeMemory 関数を呼ぶことによって、メモリ解放を強制することが出来る。使い方は以下のとおり:</p>

<pre><code>MallocExtension::instance()-&gt;ReleaseFreeMemory();
</code></pre>

<p>また、詳しくは説明しないが、 SetMemoryReleaseRate 関数によって未使用メモリの返却の頻度を指定することが出来る。詳しくは <a href="http://google-perftools.googlecode.com/svn/trunk/doc/tcmalloc.html">TCMalloc のページ</a>を参照のこと。</p>

<p>スレッドが不要になった時点で ReleaseFreeMemory を呼び出すように修正し、実験を行った。</p>

<p>これで std::deque のメモリの使用の仕方も改善するはずであった。実際に運用してみたところ、メモリ使用量増加グラフはほとんど変化がなく、相変わらず日に一回の再起動を必要としていた。かくして調査は振り出しに戻ってしまった。</p>

<h3>通信バッファと「ゾンビ化セッション」</h3>

<p>最初に述べたとおり、メモリを大量に消費しそうな箇所は、スレッドと通信バッファであった。スレッドの方は最初の段階で最適化を既に行った。そこで続いては通信バッファに着目した。なお、通信バッファは std::string で実装されている。テスト環境のヒーププロファイラで調査したメモリ使用量の結果では、 std::string は std::deque に次いでおよそ二番目であった。</p>

<p>netstat で調査した結果、 Send-Q にデータが 10kB 以上溜まっているセッションが 1700 以上あった。一時的なものとは思えないほどの容量 (10kB 以上) が使用されていた。このようなセッションは、「プレイヤー側の OS のハングアップ」「LAN ケーブルの切断」「無通信状態が続き、プレイヤー側のネットワークの NAT テーブルが expire して送信できなくなったあとに、送信データが発生した」などによって発生しうる。これらのようなセッションを、以下「ゾンビ化セッション」と呼ぶ。</p>

<p>コメントサーバー側はセッション作成の際に KeepAlive タイマーを使用しており、デフォルトで二時間程度で強制的に切断される。そのため通信バッファの容量が無限に増え続けるということはない。しかし、「タイムアウトにより強制切断されて解放されるメモリの容量」が「新たなゾンビ化セッションが消費するメモリ容量」を上回ると、全体のメモリ使用量は増え続けることになる。</p>

<p>以上より、以下のような改善案を検討した。</p>

<ol>
<li>netstat -tno で、ゾンビ化セッションがどれくらいあるのか確認する。ゾンビ化している可能性があるものは、 Timer 情報が unkn-4 となっているはずである。</li>
<li>通信バッファの総容量を数分おきにログ出力し、メモリ使用量を監視する。</li>
<li>もしメモリ使用量が増え続けるならば、上記仮説は正しい可能性が高くなる。各セッションの通信バッファの使用量が大きなもの (100kB 程度) が発生したらログ出力する。</li>
<li>そのようなセッションが頻発するようであれば、強制的に切断するように修正する。</li>
</ol>

<h4>ゾンビ化セッションの数の確認</h4>

<p>Timer が unkn-4 で Send-Q が 10kB 以上となっているセッションは 1600 以上であった。仮に 1 セッション 100KB が通信バッファに溜まっているとすると、160MB ほどが無駄に占有されていることになる。</p>

<h4>通信バッファの総容量の計測</h4>

<p>5 分おきに通信バッファの容量を計測するようにコメントサーバーを修正した。 22 時間運用し、ログの出力結果をグラフにしたものが以下である。横軸が時間、縦軸が確保している通信バッファの容量である。コメントサーバーのプロセスは 10 プロセスあり、グラフでは各プロセス毎に色分けがされている。</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://info.dwango.co.jp/rd/hiroba_buffer_histogram.png"><img alt="hiroba_buffer_histogram.png" src="http://info.dwango.co.jp/rd/assets_c/2010/10/hiroba_buffer_histogram-thumb-320x240.png" width="320" height="240" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span></p>

<p>各サーバーで最大 5000 セッションのうち、約 150 セッションで 150KiB 以上、約 60 セッションで 1MiB 以上のバッファが確保されていたことがわかった。</p>

<h4>通信バッファの改善</h4>

<p>通信バッファ総容量の計測より、「ゾンビ化セッションがメモリ容量を消費している」という仮説は正しいと判断した。そこでバッファの容量に制限を設けることにした。</p>

<p>デフォルトでは 100kB 以上の通信バッファを使用しているセッションを、強制的に切断するようにした。しかしテスト運用において、生きているセッションでも制限を超えることがあることが判明したため、以下のように若干の仕様変更を行った。</p>

<ul>
<li>最大値を設けること自体は変えない。最大値を超えた場合は強制的に切断される。</li>
<li>最大値の 1/10 を超えたセッションは、「無通信タイマー」がオンとなる。無通信タイマーは、送信が行われるたびにリセットされる。</li>
<li>無通信タイマーが設定値 (デフォルト 5 分) を超えた場合には、切断される。</li>
<li>無通信タイマーは、バッファが最大値の 1/10 を下回ったり、空になればオフになる。</li>
</ul>

<p>バッファの最大値を大きめに取ることにより、一時的に最大値を超えてしまう可能性を小さくすることができた。また、バッファが肥大化したまま存在し続けるセッションの数も減らすことができた。</p>

<p>最終的にこれでメモリ増大問題は解決し、運用の際の定期的な再起動が不要となった。コメントサーバーのメモリ使用量は横ばいで安定するようになった。</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://info.dwango.co.jp/rd/hiroba_memory_final.png"><img alt="hiroba_memory_final.png" src="http://info.dwango.co.jp/rd/assets_c/2010/10/hiroba_memory_final-thumb-320x125.png" width="320" height="125" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span></p>

<h4>補足</h4>

<p>ヒーププロファイラの結果では std::string が占める割合がそこまで高くなく、その点では合致していない。これは、ヒーププロファイラをとった環境がテスト環境であり、テスト環境ではゾンビ化セッションが存在しなかったためである、と考えられる。</p>

<h2>まとめ</h2>

<p>本稿では、ニコニコ広場コメントサーバーにおけるメモリ増大問題の顛末について述べた。コメントサーバーのメモリ使用量が、日に再起動を数回要求するほど増大していた。メモリリークの可能性はないという前提があり、ある程度の目星はつけつつ計測と修正を繰り返し、最終的に通信バッファの改善によって解決に至った。</p>

<p>今回の問題の根本的な原因の一つは、通信バッファであった。この結論に至るためには、メモリ使用量計測結果だけでは分からなかった。ヒーププロファイラの結果からは「おそらくメモリリークしていない」ということ程度しか分からず、間接的にしか役に立っていない。本番で稼働しているサーバーでヒーププロファイリングできたならば早く結論に辿りつけたかも知れないが、それは現実的には難しい。ソケットレベルの知識、今回の場合は TCP の KeepAlive などの知識から、総合的に判断しなければならなかった。ネットワークプログラミングは難しいのである。</p>
]]>
        

    </content>
</entry>

</feed>

