<?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://akibahideki.com/blog/" />
    <link rel="self" type="application/atom+xml" href="http://akibahideki.com/blog/atom.xml" />
    <id>tag:akibahideki.com,2011-04-02:/blog//2</id>
    <updated>2012-05-03T02:52:44Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 5.04</generator>

<entry>
    <title>あのロゴあのパーツ、どんなグラフィックソフトで作ってるんだろう？</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/cat14/abc2012spring.html" />
    <id>tag:akibahideki.com,2012:/blog//2.462</id>

    <published>2012-05-03T02:37:01Z</published>
    <updated>2012-05-03T02:52:44Z</updated>

    <summary> 東京大学で開催された、「ABC2012Spring（Webトラック）」で発表し...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
        <category term="セミナー情報" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="Android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="cg" label="CG" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[<p><img alt="abcvideo.png" src="http://akibahideki.com/blog/2012/05/03/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-05-03%2011.44.08%EF%BC%89.png" width="740" height="409" /></p>

<div><br /></div>

<p>東京大学で開催された、「ABC2012Spring（Webトラック）」で発表した<br />
「あのロゴあのパーツ、どんなグラフィックソフトで作ってるんだろう？」<br />
の映像です。</p>

<div><br /></div>

<p>実際デザイナーは、どんなツールを使い、どんな考え方を持ってユーザにアプリを提供するのか？<br />
という自分なりの考え方を発表し、後半はWebデザイナーにとってあまり馴染みのない3Dグラフィックのライブデモをやりました。<br />
使ったソフトはLightwave。ドロイドくんをつくるデモです。</p>

<div><br /></div>

<div>
<iframe width="640" height="360" src="http://www.youtube.com/embed/GdCWJnQkpng" frameborder="0" allowfullscreen=""></iframe>
</div>]]>
        
    </content>
</entry>

<entry>
    <title>HTML5でできるカメラアプリ・予習（2）-撮影から画像生成まで-</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/htmlcss/html52--.html" />
    <id>tag:akibahideki.com,2012:/blog//2.461</id>

    <published>2012-04-10T13:54:46Z</published>
    <updated>2012-04-10T15:08:40Z</updated>

    <summary> 前回の記事で、はてブにgayouさんが「AndroidのOpera Mobil...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
        <category term="HTML+CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="canvas" label="canvas" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="getusermedia" label="getUserMedia" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="video" label="video" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[<div>
<img alt="main.jpg" src="http://akibahideki.com/blog/2012/04/10/main.jpg" width="740" height="555" class="mt-image-none" style="" />
</div>

<div><br /></div>

<div><a href="http://akibahideki.com/blog/htmlcss/-css-nite-in-osaka-vol30-httposakacssnitejpvol30-html-videocanvaswebrtc-css.html">前回の記事</a>で、<a href="http://b.hatena.ne.jp/gayou/">はてブにgayouさんが「AndroidのOpera Mobile最新版はnavigator.getUserMediaに対応してたと思うけど。TP版じゃなくてもいけたかと。」</a>とコメントされていたので調べてみると本当でした。</div><div>gayouさん、ありがとうございます。</div>

<div>というわけで、Android版Opera Mobile 12.00というバージョンで対応していることをこちらでも確認しました。</div>
<div>ただ、今回お話する「設定」の部分がTP（テクニカルプレビュー、前回から使っているアイコンに「LAB」がついたもの）と違いがあり、ちょっと混乱しそうなので、前回ダウンロードしたLAB付きのOpera Mobileを使ってチャレンジしてみたいとおもいます。</div>

<div><br /></div><div>では<a href="http://osaka.cssnite.jp/vol30/">CSS Nite in OSAKA, Vol.30</a>の予習記事その2ということで挑戦してみましょう。</div><div><br /></div>

<div>さてこれまでで、AndroidのカメラからHTMLベースで写真を撮影することができました。こんどは、撮った画像をサーバにアップするために、img要素を生成しましょう。</div><div><br /></div><div><br /></div><div>まずは前回のとおり、撮影した映像をvideo要素に取り込みます。</div><div>今回は最終的にはそれをPHPに向けて送信するため、「video要素からcanvas要素に描画した画像をPNGやJPEG形式の画像に書き出す」までをおこないます。</div><div>ただし、AndroidのWebブラウザは通常それを許可していません。</div><div>色々な理由、セキュリティやプライバシーの問題もあってのことでしょう。</div><div><br /></div><div><br /></div><div>canvas要素にはtoDataURL()というJavaScriptの命令があります。</div><div>これでcanvas要素から画像を生成することができます。</div><div>しかし、これが許可されてないんです。</div><div>（Android、というよりブラウザで制御している、と言った方が正しいかも）</div><div><br /></div><div><br /></div><div>ただし、これはOpera Mobile上のコンフィグという「設定」で解除することができます。</div><div>実験的にこのtoDataURL()をつかいたい場合、まずはこれを解除しましょう。</div><div><div>URLに「opera:config」と入力します（最後にスラッシュはつけないでください）。</div><div>すると「設定ファイルエディタ」というページが表示されるはずです、下図を参照してください。</div></div><div><br /></div><div><img alt="config01.png" src="http://akibahideki.com/blog/2012/04/10/config01.png" width="481" height="734" class="mt-image-none" /></div><div><br /></div><div><img alt="config02.png" src="http://akibahideki.com/blog/2012/04/10/config02.png" width="481" height="730" class="mt-image-none" /></div><div><br /></div><div><img alt="config03.png" src="http://akibahideki.com/blog/2012/04/10/config03.png" width="481" height="732" class="mt-image-none" /></div><div><br /></div><div>ここでちょっと下にスクロールすると「Security Prefs」というタブがありますので、</div><div>「Allow Camera To Canvas Copy」という項目にチェックをいれます。</div><div>さらにその下の「保存」ボタンを押して下さい（結構忘れがちです）。</div><div>以上でOKです。</div><div>これでtoDataURL()が有効になり、canvas要素からPNGやJPEGのような画像が生成できます。</div><div><br /></div><div><br /></div><div>（注意！）</div><div>これは、テストが終わったらかならず設定で元に戻してください。</div><div>そうすればカメラの映像は外部に漏れることはないので、セキュリティ上、充分注意して使ってください。</div><div><br /></div><div><br /></div>

<h2>ボタンが押されたらvideo要素からcanvas要素に静止画を書き出す</h2><div><br /></div><div>上記の設定が済んだら、撮った写真をcanvas要素に描画します。</div><div>以下のサンプルではbutton要素が押されたらvideo要素の画像をcanvas要素に描画します。</div>



<code data-code="HTML">&lt;!DOCTYPE HTML&gt;<div>&lt;html lang="ja"&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">	</span>&lt;head&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;meta charset="UTF-8"&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;meta name="viewport" content="width=device-width, user-scalable=no"&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;title&gt;カメラの映像を映す!&lt;/title&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;style&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span> html, body, video {</div><div><span class="Apple-tab-span" style="white-space:pre">			</span> margin: 0;</div><div><span class="Apple-tab-span" style="white-space:pre">			</span> padding: 0;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span> }</div><div><span class="Apple-tab-span" style="white-space:pre">		</span> video, canvas, button {</div><div><span class="Apple-tab-span" style="white-space:pre">			</span> display: block;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span> }</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;/style&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span></div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;script&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">			</span></div><div><span class="Apple-tab-span" style="white-space:pre">			</span>function init() {</div><div><span class="Apple-tab-span" style="white-space:pre">				</span>var video = document.getElementsByTagName("video")[0];</div><div><span class="Apple-tab-span" style="white-space:pre">				</span>var canvas = document.getElementsByTagName("canvas")[0];</div><div><span class="Apple-tab-span" style="white-space:pre">				</span>var ctx = canvas.getContext("2d");</div><div><span class="Apple-tab-span" style="white-space:pre">				</span>navigator.getUserMedia("video", function (s){</div><div><span class="Apple-tab-span" style="white-space:pre">					</span>video.src = s;</div><div><span class="Apple-tab-span" style="white-space:pre">				</span>});</div><div><span class="Apple-tab-span" style="white-space:pre">				</span></div><div><span class="Apple-tab-span" style="white-space:pre">				</span>document.getElementsByTagName("button")[0].addEventListener("click", function () {</div><div><span class="Apple-tab-span" style="white-space:pre">					</span>ctx.drawImage(video, 0, 0);</div><div><span class="Apple-tab-span" style="white-space:pre">				</span>}, false);</div><div><span class="Apple-tab-span" style="white-space:pre">			</span>}</div><div><span class="Apple-tab-span" style="white-space:pre">			</span></div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;/script&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span></div><div><span class="Apple-tab-span" style="white-space:pre">	</span>&lt;/head&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">	</span></div><div><span class="Apple-tab-span" style="white-space:pre">	</span>&lt;body onload="init()"&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">	</span></div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;button&gt;撮影&lt;/button&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;video autoplay&gt;&lt;/video&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span></div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;p&gt;▼ここからcanvas&lt;/p&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;canvas&gt;&lt;/canvas&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span></div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;p&gt;▼ここからimg&lt;/p&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;img alt="canvasから書き出された画像" /&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span></div><div><span class="Apple-tab-span" style="white-space:pre">	</span>&lt;/body&gt;</div><br /><div>&lt;/html&gt;</div>&nbsp;&nbsp;</code>

<div>
<img alt="device.png" src="http://akibahideki.com/blog/2012/04/10/device.png" width="320" />
&nbsp;
<img alt="device4.jpg" src="http://akibahideki.com/blog/2012/04/10/device4.jpg" width="320" />
</div>

<div><br /></div><div>もちろん、このとおりvideo要素とcanvas要素のサイズが合ってないので、実際完成させるにはこのサイズを同じにしてしまわないといけません。（今回は省略します）</div><div><br /></div><div><br /></div>

<h2>canvas要素からJPEG画像をつくる</h2>

<div><br /></div><div>それではimg要素にcanvasの画像を出力します。</div><div>canvas要素にはtoDataURL()というメソッドが用意されています。</div><div>これを使うと、Base64と呼ばれる文字列が吐き出されます。</div><div>この長い文字列は、画像だけでなく、PDFファイルなど色々なファイルに置換できます。</div><div><br /></div><div><br /></div><div>ボタンを押されたときに、alert(canvas.toDataURL())を仕込むと下図のようにアラートが表示されます。これがBase64の文字列です。よく見ると、これはPNG形式の画像を文字列にした、ということがわかります。</div>
<div><br /></div>
今回はJPEG画像にするので、canvas.toDataURL("image/jpeg")とします。<br />
省略するとPNG形式になるようです。<div><br /></div>

<div><img alt="device3.png" src="http://akibahideki.com/blog/2012/04/10/device3.png" width="340" /></div><div><br /></div><div>これをこのままimg要素のsrc属性の値にすると、画像が表示されます。</div>

<code data-code="HTML">
<div>&lt;!DOCTYPE HTML&gt;</div>
<div>&lt;html lang="ja"&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">	</span>&lt;head&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;meta charset="UTF-8"&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;meta name="viewport" content="width=device-width, user-scalable=no"&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;title&gt;カメラの映像を映す!&lt;/title&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;style&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span> html, body, video {</div><div><span class="Apple-tab-span" style="white-space:pre">			</span> margin: 0;</div><div><span class="Apple-tab-span" style="white-space:pre">			</span> padding: 0;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span> }</div><div><span class="Apple-tab-span" style="white-space:pre">		</span> video, canvas, button {</div><div><span class="Apple-tab-span" style="white-space:pre">			</span> display: block;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span> }</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;/style&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span></div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;script&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">			</span></div><div><span class="Apple-tab-span" style="white-space:pre">			</span>function init() {</div><div><span class="Apple-tab-span" style="white-space:pre">				</span>var video = document.getElementsByTagName("video")[0];</div><div><span class="Apple-tab-span" style="white-space:pre">				</span>var canvas = document.getElementsByTagName("canvas")[0];</div><div><span class="Apple-tab-span" style="white-space:pre">				</span>var ctx = canvas.getContext("2d");</div><div><span class="Apple-tab-span" style="white-space:pre">				</span>navigator.getUserMedia("video", function (s){</div><div><span class="Apple-tab-span" style="white-space:pre">					</span>video.src = s;</div><div><span class="Apple-tab-span" style="white-space:pre">				</span>});</div><div><span class="Apple-tab-span" style="white-space:pre">				</span></div><div><span class="Apple-tab-span" style="white-space:pre">				</span>document.getElementsByTagName("button")[0].addEventListener("click", function () {</div><div><span class="Apple-tab-span" style="white-space:pre">					</span>ctx.drawImage(video, 0, 0);</div><div><span class="Apple-tab-span" style="white-space:pre">					</span>document.getElementsByTagName("img")[0].src = canvas.toDataURL("image/jpeg");</div><div><span class="Apple-tab-span" style="white-space:pre">				</span>}, false);</div><div><span class="Apple-tab-span" style="white-space:pre">			</span>}</div><div><span class="Apple-tab-span" style="white-space:pre">			</span></div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;/script&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span></div><div><span class="Apple-tab-span" style="white-space:pre">	</span>&lt;/head&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">	</span></div><div><span class="Apple-tab-span" style="white-space:pre">	</span>&lt;body onload="init()"&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">	</span></div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;button&gt;撮影&lt;/button&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;video autoplay&gt;&lt;/video&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span></div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;p&gt;▼ここからcanvas&lt;/p&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;canvas&gt;&lt;/canvas&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span></div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;p&gt;▼ここからimg&lt;/p&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span>&lt;img alt="canvasから書き出された画像" /&gt;</div><div><span class="Apple-tab-span" style="white-space:pre">		</span></div><div><span class="Apple-tab-span" style="white-space:pre">	</span>&lt;/body&gt;</div><br />&lt;/html&gt;</code><div><br /></div><div><img alt="device2.png" src="http://akibahideki.com/blog/2012/04/10/device2.png" width="480" height="800" class="mt-image-none" /></div><div><br /></div><div><br /></div><div>さて、これで「撮影して静止画をimg要素に書きだす」までできました。</div><div>次回はいよいよ、サーバ上にあるPHPにこの画像を送って保存しましょう。</div> ]]>
        
    </content>
</entry>

<entry>
    <title>HTML5でできるカメラアプリ・予習（1）</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/htmlcss/-css-nite-in-osaka-vol30-httposakacssnitejpvol30-html-videocanvaswebrtc-css.html" />
    <id>tag:akibahideki.com,2012:/blog//2.460</id>

    <published>2012-04-06T17:48:02Z</published>
    <updated>2012-04-06T19:10:55Z</updated>

    <summary>こちらのイベント「CSS Nite in OSAKA, Vol.30」で実演する...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
        <category term="HTML+CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="getusermedia" label="getUserMedia" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[<img alt="webrtc.png" src="http://akibahideki.com/blog/2012/04/07/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-04-07%202.55.39%EF%BC%89.png" width="569" height="320" class="mt-image-none" /><div><br /></div><div>こちらのイベント「CSS Nite in OSAKA, Vol.30」で実演する内容です。<div><a href="http://osaka.cssnite.jp/vol30/">http://osaka.cssnite.jp/vol30/</a></div><div><br /></div><div>将来はこういったことは現実に私達の仕事になってくると思われる、HTMLベースのカメラアプリ。</div><div>video要素やcanvas要素を使って撮った写真を加工してサーバに残す、なんてことは特にスマホ案件で依頼が来るかもしれません、そうなって焦らないように今から勉強しておきたいですね。</div><div><br /></div><div>せっかくイベントで発表させてもらうので、これからシリーズでブログに書いていこうと思います、いまから勉強するのは決して早すぎることはないでしょう。</div><div><br /></div><div>


<h2>カメラアクセス、2つの仕様</h2>

</div><div><br /></div><div>まずはHTML5関連で、ブラウザからデバイスのカメラやマイクにアクセスする仕様は大きく2つあるように思えます。</div><div><br /></div><div>WebRTC 1.0: Real-time Communication Between Browsers</div><div><a href="http://dev.w3.org/2011/webrtc/editor/webrtc.html">http://dev.w3.org/2011/webrtc/editor/webrtc.html</a></div><div><br /></div><div>The Media Capture API</div><div><a href="http://www.w3.org/TR/media-capture-api/">http://www.w3.org/TR/media-capture-api/</a></div><div><br /></div><div>どちらともスマホのカメラで写真が撮れて、保存したりできそうです。</div><div>ただしこの2つの仕様の目的はちょっと違うようです。</div><div><br /></div><div>WebRTCのほうは文字どおり、リアルタイムコミュニケーションをブラウザ間にて可能にするというもの、つまりスカイプのHTML版のようなものです。</div><div><br /></div><div>

<h2>壮大なWebRTCのゆくえ</h2>
</div><div><br /></div><div>WebRTCの仕様のページを斜め読みするだけでも、その目的が壮大で、</div><div>カメラにアクセスすることだけが主な目的ではないようですね。</div><div>その目玉といえるのは「Peer-to-peer connections（ペアトゥーペアコネクション）」。</div><div>この仕様は、カメラで録りっぱなしの映像（動画）を、別の人のブラウザに届け、お互い映像のやりとりをおこなうことを目的としてるようです。</div><div><br /></div><div>


<h2>デモを試してみよう</h2>

</div><div><img alt="zuhan.jpg" src="http://akibahideki.com/blog/2012/04/07/zuhan.jpg" width="564" height="642" class="mt-image-none" /></div><div>Opera mobileのテクニカルプレビューをAndroidスマートフォンにインストールしましょう。</div><div>以下のサイトの「Android Build」のリンクをタップしてダウンロードしてください。</div><div><a href="http://my.opera.com/core/blog/2011/03/23/webcam-orientation-preview">http://my.opera.com/core/blog/2011/03/23/webcam-orientation-preview</a></div><div><br /></div><div>「LAB」と書いてあるOperaのアイコンです、起動してください。</div><div>まずはこちらのページにアクセスしましょう。</div><div><br /></div><div><a href="http://www.akibahideki.com/getusermedia/ex01_basic/">DEMO</a></div><div><br /></div><div>これを動画で見るとこうなります。</div><div><br /></div>

<iframe src="http://player.vimeo.com/video/39898511?title=0&amp;byline=0&amp;portrait=0" width="400" height="300" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe><p><a href="http://vimeo.com/39898511">Opera MobileでgetUserMedia</a> from <a href="http://vimeo.com/user11131633">Hideki Akiba</a> on <a href="http://vimeo.com">Vimeo</a>.</p>

<div>最低限ソースコードでカメラ撮影、でも向きを変えると縦横非がおかしくなる...</div><div><br /></div><div>ソースコードもシンプルですし、意外と簡単です。</div><div><br /></div>

<code data-code="HTML">


<div>&lt;!DOCTYPE HTML&gt;</div><div>&lt;html lang="ja"&gt;</div><div>&nbsp; &nbsp; &nbsp;&lt;head&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;meta charset="UTF-8"&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;meta name="viewport" content="width=device-width, user-scalable=no"&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;title&gt;カメラの映像を映す&lt;/title&gt;</div><div>&nbsp; &nbsp; &nbsp;&lt;/head&gt;</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp;&lt;body&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;video autoplay&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;script&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var video = document.getElementsByTagName("video")[0];</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;navigator.getUserMedia("video", function (s){</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; video.src = s; // カメラ接続が成功したら、ストリームをvideo要素に接続</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;});</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/script&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp;&lt;/body&gt;</div><div>&lt;/html&gt;</div>


</code>

<div>navigator.getUserMediaというメソッドがカメラを取得するという役目を担います。</div><div>取得が成功したらvideo要素に映像ストリームを流すというものです。</div><div>注意としては、仕様書と、Opera Mobileの実装がコードを見るとちがいます。</div><div>将来は微妙に変わってくるでしょうが、基本的な原理の部分はほぼこのままでいてほしいです。</div><div><br /></div><div><img alt="zuhan2.jpg" src="http://akibahideki.com/blog/2012/04/07/zuhan2.jpg" width="620" height="275" class="mt-image-none" /></div><div><br /></div><div>動画でもわかるとおりネイティブアプリのカメラ機能とちがい、できないことが多すぎます。</div><div><br /></div><div><br /></div><div>&nbsp; &nbsp;* オートフォーカスの機能がつかえない</div><div>&nbsp; &nbsp;* 撮影する写真の解像度を決めることができない</div><div>&nbsp; &nbsp;* フラッシュなどの機能がつかえない</div><div>&nbsp; &nbsp;* スマホの縦横の向きを変えると、映像の縦横比がおかしくなる</div><div><br /></div><div>この、向きを変えたときに縦横比がおかしいのはちょっと使いにくいので、ちょっと工夫をこらしてみました。</div><div><br /></div><div>もしもデバイスの向きが変わったら、一旦video要素に流れているストリームをとめて、</div><div>video要素のサイズをwindowのサイズにあわせた後にもう一度ストリームを流します。</div><div>どうしても、video要素を全体的に見せたい場合、横向きがこんな感じにしかならなかったんですが、これでなんとかなりそうです。</div><div><br /></div>

<iframe src="http://player.vimeo.com/video/39899072?title=0&amp;byline=0&amp;portrait=0" width="400" height="300" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe><p><a href="http://vimeo.com/39899072">Opera MobileでgetUserMedia2</a> from <a href="http://vimeo.com/user11131633">Hideki Akiba</a> on <a href="http://vimeo.com">Vimeo</a>.</p>

<div>今度は縦横比を修正しました</div><div><br /></div><div>ソースコードは先ほどのものよりちょっと付け足しました。</div><div><br /></div>

<code data-code="HTML">

<div><div>&lt;!DOCTYPE HTML&gt;</div><div>&lt;html lang="ja"&gt;</div><div>&nbsp; &nbsp; &nbsp;&lt;head&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;meta charset="UTF-8"&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;meta name="viewport" content="width=device-width, user-scalable=no"&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;script src="../common/js/jquery-1.7.1.min.js"&gt;&lt;/script&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;title&gt;カメラの映像を映す&lt;/title&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;style&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;html, body, video {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin: 0;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding: 0;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/style&gt;</div><div>&nbsp; &nbsp; &nbsp;&lt;/head&gt;</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp;&lt;body&gt;</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp;&lt;video autoplay&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;script&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var video = document.getElementsByTagName("video")[0];</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var stream = null;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;navigator.getUserMedia("video", function (s){</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; video.src = stream = s;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;});</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$(window).bind('load orientationchange resize', function(e){</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // デバイスの向きが変わったら...</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; video.src = null; //一旦ストリームを解除する</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(Math.abs(window.orientation) === 90){</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;video.width = window.innerWidth; //video要素のサイズを調整</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }else{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;video.height = window.innerHeight; //video要素のサイズを調整</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; video.src = stream; //再度ストリームを接続する</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;});</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/script&gt;</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp;&lt;/body&gt;</div><div>&lt;/html&gt;</div></div>

</code>

<div><br /></div><div>

<h2>まとめ</h2>

</div><div>将来は、撮影機能つきのWebサイト制作があるかもしれません。</div><div>そうなると今までAndroidアプリ開発のために、XMLをコーディングしていたデザイナーも、これからはHTMLやCSSでデザインをする時代がくるわけですね、そう遠くもないでしょう。</div><div><br /></div><div>今は本当にテストビルドなので、簡素な実装です。</div><div>もちろん本格的に実装なんかしたらセキュリティやプライバシーの問題があるので、「あること」をしないと画像として送信できないことになっています。</div><div><br /></div><div>しかし今はこれで充分楽しめます。</div><div><br /></div><div>オートフォーカスもできないのであればちょっと実用はむずかしいかな？と思いますが、こういった部分はどんどん使える実装になっていくんでしょうね、楽しみです。</div><div><br /></div><div>この次は録った画像をcanvas要素に描画して、色々と画像を操作することにチャレンジしてみます。</div><div><br /></div><div>今回の内容は2012年5月4日（金）に大阪で開催されるCSS Nite in OSAKA, Vol.30で実演します。</div><div>他にも、録った写真をサーバにアップしたり、モノクロにしたり、色々なデモをやってみますが、会場に来られた方でAndroidをお持ちの方は是非、今回のテスト版Opera Mobileをダウンロードしてお越しください。</div><div><br /></div><div>結構ディレクターさんとかにも聞いてほしい内容です。</div><div>これからのWeb技術なので知っておいてソンはないと思いますので。</div><div>参加表明はお気軽にFacebookからおねがいします。</div><div><a href="http://www.facebook.com/events/171151843004894/">http://www.facebook.com/events/171151843004894/</a></div>
</div>]]>
        
    </content>
</entry>

<entry>
    <title>CSS3コードジェネレータ「Grad3 - Easy CSS3 gradient editor -」公開</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/htmlcss/css3grad3---easy-css3-gradient-editor--.html" />
    <id>tag:akibahideki.com,2012:/blog//2.459</id>

    <published>2012-03-31T15:16:38Z</published>
    <updated>2012-03-31T15:43:57Z</updated>

    <summary>前にもここで告知しましたが公開しました、Grad2の後継バージョン「Grad3 ...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
        <category term="HTML+CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="grad3" label="Grad3" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="gradient" label="gradient" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[<div><img alt="og_img.png" src="http://akibahideki.com/blog/2012/04/01/og_img.png" width="480" height="480" class="mt-image-none" /></div><div><br /></div>前にも<a href="http://akibahideki.com/blog/css3grad3324.html">ここで告知しました</a>が公開しました、Grad2の後継バージョン「Grad3 - Easy CSS3 gradient editor -」[ <a href="http://grad3.ecoloniq.jp/">http://grad3.ecoloniq.jp/</a>&nbsp;]です。<div><div><br /></div></div><div>円形グラデーションにも対応させてますが、古いWebKitの仕様と新しいWebKitの仕様だと、お互いできることとできないことがあるので、円の中心座標だけ決めてしまうというもので進めていこうと考えてつくりました。</div><div>アイコンも付けられますが実際はみなさんで微調整してください。</div><div>background-positionは暫定でつけていますので。</div><div><br /></div><div>あと、動画をつくってみました。</div><div><br /></div>

<iframe width="640" height="360" src="http://www.youtube.com/embed/Sna6PnL9tf0" frameborder="0" allowfullscreen=""></iframe>

<div><br /></div><div><br /></div>

<div>なお、<a target="_blank" href="CSS Nite in OSAKA, Vol.30">CSS Nite in OSAKA, Vol.30</a>でもちょっとだけ紹介したいとおもいます。</div>

<a href="http://osaka.cssnite.jp/vol30/"><img src="http://osaka.cssnite.jp/vol30/images/cnio30_bnr.jpg" alt="CSS Nite in OSAKA, Vol.30" /></a>

<div><br /></div><div>これからもどうぞよろしくお願いします！</div>]]>
        
    </content>
</entry>

<entry>
    <title>HTML5でできるカメラアプリでサーバアップまでやってみる</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/htmlcss/html5.html" />
    <id>tag:akibahideki.com,2012:/blog//2.458</id>

    <published>2012-03-31T14:44:49Z</published>
    <updated>2012-03-31T15:15:36Z</updated>

    <summary>来る5/4（金曜）の19時から、ほんっと久しぶりにCSS Nite in OSA...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
        <category term="HTML+CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="セミナー情報" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="Android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html5" label="HTML5" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[<div><img alt="keyvisual_30.jpeg" src="http://akibahideki.com/blog/2012/04/01/keyvisual_30.jpeg" width="400" height="266" class="mt-image-none" /></div><div><br /></div>来る5/4（金曜）の19時から、ほんっと久しぶりにCSS Nite in OSAKAでお話します。<div>内容は「HTML5でできるカメラアプリを実際に体験しよう」です。</div><div><a href="http://osaka.cssnite.jp/vol30/">http://osaka.cssnite.jp/vol30/</a></div><div><br /></div><div>以前、たった1回のハッカソンでつくったHTML5でつくったOperaブラウザのカメラアプリの記事を書いたんですが...</div><div><a href="http://akibahideki.com/blog/html5gtug.html">http://akibahideki.com/blog/html5gtug.html</a><br /></div><div>実は撮影した写真をサーバにアップするというところまでやってみようと思います。</div><div><br /></div><div>軽く動画を撮ってみました、これをベースに将来できることを考えたいと思います。</div><div><br /></div>

<iframe width="640" height="360" src="http://www.youtube.com/embed/a_dr1UQh-kY" frameborder="0" allowfullscreen=""></iframe>

<div><br /></div><div>これは自作の簡単なテストアプリですが、HTML+CSS+JavaScriptで写真を撮影し、PHPに画像を送信しています。</div><div>これをもとに、HTMLベースで将来つくれる動画や音声を扱うWebアプリはどこまで進化して、僕らはどこまでその仕事に関われるんだろう？というテーマに突っ込んで触れていきたいと思います。</div><div><br /></div><div><div>WebRTCという仕様があります。</div><div>簡単に言うとちょっと語弊があるけど、将来は映像チャットなどをブラウザとHTMLベースでやってしまおうという仕様で、デバイスのカメラやマイクにブラウザがアクセスしてJavaScriptで操作するものです。</div><div><a href="http://www.w3.org/TR/2011/WD-webrtc-20111027/">http://www.w3.org/TR/2011/WD-webrtc-20111027/</a></div><div><br /></div><div>スマートフォンの標準ブラウザは、まだこの仕様をサポートしていません。</div><div>しかしAndroid版のOpera Mobileとして公開されているブラウザが、この未来の規格を一部実装しています。</div><div>Androidをお持ちの方は、当日までに以下のリンクを実機でタップして、本体にダウンロード＆インストールしてご来場ください、みなさんで楽しんでみましょう。</div><div><br /></div><div>（　↓　Androidでアクセス、ダウンロードがはじまります　↓　）</div></div><div><a href="http://people.opera.com/richt/release/build/Opera_Mobile_11_LABS_device_orientation_preview_20110323.apk">http://people.opera.com/richt/release/build/Opera_Mobile_11_LABS_device_orientation_preview_20110323.apk</a></div><div><br /></div><div>あまりプログラミングよりの話はしませんが、Webディレクターさんやデザイナーさん、フロントエンドの方も是非おこしください！よろしくお願いします。</div><div><br /></div><div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>ABC2012 Springに登壇します</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/abc2012-spring.html" />
    <id>tag:akibahideki.com,2012:/blog//2.457</id>

    <published>2012-03-20T02:29:59Z</published>
    <updated>2012-03-20T02:52:08Z</updated>

    <summary>↑こんなデモをやろうとおもって練習中...国内最大規模のAndroidの祭典「A...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
    <category term="android" label="Android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="セミナー" label="セミナー" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[<div><a href="http://akibahideki.com/blog/assets_c/2012/03/abc2012_demo-82.html" onclick="window.open('http://akibahideki.com/blog/assets_c/2012/03/abc2012_demo-82.html','popup','width=1109,height=642,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://akibahideki.com/blog/assets_c/2012/03/abc2012_demo-thumb-740x428-82.jpg" width="740" height="428" alt="abc2012_demo.jpg" class="mt-image-none" /></a></div><div><br /></div><div>↑こんなデモをやろうとおもって練習中...</div><div><br /></div><div><span>国内最大規模のAndroidの祭典「Android Bazaar and Conference 2012 Spring」に登壇させていただくことになりました。</span></div><div><br /></div><a href="http://www.android-group.jp/conference/abc2012s/">http://www.android-group.jp/conference/abc2012s/ </a><div><br /></div><div>場所は東京大学！本郷キャンパスです。</div><div>そんなとこに入れるなんて一生ないだろうと思ってた...^^</div><div><br /></div><div>僕のテーマは、最近デザインワークでよく考えさせられる「コーポレートアイデンティティ」というか「ブランディング」に大事なロゴについて。</div><div>とくにWebデザイナーがあんまり意識しにくい作り方の部分を実演させてもらおうかな？と。</div><div><br /></div><div>論理的な話ではなく、実際どういうツールを使って作っているの？</div><div>というテーマで、実演をします！！</div><div><br /></div><div>使うツールはデザイナーによって異なります。</div><div>僕は今回、デザインテイストに応じて、Illustratorその他、ほかにLightwaveというグラフックツールにて紹介をさせてもらおうと考えています。</div><div><br /></div><div>講演時間は13時。C会場(工学部新2号館 241教室)という場所です。</div><div><br /></div><div>タイムテーブル</div><div><a href="http://www.android-group.jp/conference/abc2012s/conference/web/">http://www.android-group.jp/conference/abc2012s/conference/web/</a></div><div><br /></div><div>会場地図</div><div><a href="http://www.android-group.jp/conference/abc2012s/access/">http://www.android-group.jp/conference/abc2012s/access/</a></div><div><br /></div><div>参加費無料とのことらしいです、まだ予定が空いている方はぜひどうぞ。</div>]]>
        
    </content>
</entry>

<entry>
    <title>CSS3ジェネレータ「Grad3」を3.24に公開</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/css3grad3324.html" />
    <id>tag:akibahideki.com,2012:/blog//2.456</id>

    <published>2012-03-17T19:16:16Z</published>
    <updated>2012-03-17T19:39:36Z</updated>

    <summary> （画像は開発中のものです）去年の1月あたりに、CSS3のグラデーションを生成す...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
    <category term="css3" label="CSS3" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="gradient" label="gradient" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[<a href="http://akibahideki.com/blog/assets_c/2012/03/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202012-03-18%204.01.54-76.html" onclick="window.open('http://akibahideki.com/blog/assets_c/2012/03/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202012-03-18%204.01.54-76.html','popup','width=1055,height=768,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://akibahideki.com/blog/assets_c/2012/03/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202012-03-18%204.01.54-thumb-740x538-76.png" width="740" height="538" alt="grad3.png" class="mt-image-none" /></a> <div><br /></div><div><div>（画像は開発中のものです）</div><div><br /></div><div>去年の1月あたりに、CSS3のグラデーションを生成するサービス「<a href="http://grad2.ecoloniq.jp/">Grad2</a>」を作ったんですが、色々考えて後継バージョンをリリースすることにしました。</div><div>2012年3月24日に「Grad3」をリリースします。</div></div><div><a href="http://grad3.ecoloniq.jp/">http://grad3.ecoloniq.jp/</a></div><div><br /></div><div>主な追加機能としては、</div><div><ul><li>円形グラデーション</li><li>サンプルボタンを色相で検索できる新しいユーザインターフェイス</li><li>アイコンセットやbackground-imageパターンを商用利用可で提供</li><li>グラデーションだけではなくfont-sizeやcolorなどのプロパティのコードも出力</li></ul></div><div>といったものです。</div><div>基本的ポリシーとしては「低機能で使いやすい」を考えてます。</div><div>世の中にはもっと高機能なCSS3ジェネレータもあるけど、高機能がゆえにちょっと使いにくい、と思える部分もあって、</div><div>自分で使ってみて「こういうの欲しい」というものにしました。</div><div><br /></div><div>基本的にはGrad2の縦グラデーションしか出力できなかったのにちょっと毛が生えたぐらいで、</div><div>「低機能で使いやすい」をそのままコンセプトにしてます。</div><div><br /></div><div>Fireworksでは「Adobe Fireworks CSS3 Mobile Pack」と言われるものがあるそうですが、</div><div>僕らPhotoshopユーザは何か別のツールで作ってたりするんですね、少なくとも僕の場合は。</div><div>そんな理由もあってPhotoshopユーザは特に、もし気に入っていただけたらぜひ使ってください。</div><div><br /></div><div>ちなみに今回のロゴではカメレオンで作ってみました、もちろん僕薫製の3Dモデルでこしらえてます。</div><div><br /></div>

<img src="http://grad3.ecoloniq.jp/common/img/og_img.png" alt="Grad3のロゴ" />

<div><br /></div><div>リリースしたらまたお知らせしますね、よろしくお願いします。</div><div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>家電のインターフェイスを僕らWebデザイナーが作る未来</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/web/web.html" />
    <id>tag:akibahideki.com,2012:/blog//2.455</id>

    <published>2012-01-22T20:21:43Z</published>
    <updated>2012-01-22T20:57:56Z</updated>

    <summary>テレビ放送用のWeb標準規格言語 おことわりですが、、この記事はちょっとした未来...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
        <category term="人のためのWebデザイン" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="html5" label="html5" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[<h2>テレビ放送用のWeb標準規格言語</h2><div>

<p><img alt="テレビのリモコンはどのデバイスでも共通のHTMLベースでできる未来?" src="http://akibahideki.com/blog/assets_c/2012/01/fig01-thumb-740x382-73.png" width="740" height="382" /></p>

</div><div><br /></div><div>おことわりですが、、この記事はちょっとした未来の予想と自分の仕事を重ねてみた「想像」が入ってます。</div><div><br /></div><div>今日は、昨今Web技術が進歩しているなかで僕たちデザイナーがどうやってこのような技術に理解を深めれば良いのか？について考えてみたいと思います。</div><div><br /></div><div>PCブラウザから始まり、現在はスマートフォンや電子書籍がWebにつながる端末として一般的な世の中になりました。</div><div>今年はテレビが来る、とみんな言ってます。</div><div>要はWebにつながるテレビ。</div><div><br /></div><div>実はあまり知られていないことですが、もう10年くらい前に「インターネットテレビ（あえてそう言います）」は発売されていますが、正直普及しているとはいいがたく、例え使っている人にとってはおそらくそのテレビはそのうち使いにくいもの、あるいは使えないものになっているかもしれません。</div><div><br /></div><div>理由はいくつかありますが、大きな理由はいくらテレビ本体（ハード）が魅力的でも、放送用のデータをやりとりするフォーマットがWeb標準に存在しない当時は、独自のフォーマットに頼ることしか手段がない、といったところかと思われます。</div><div>そうなると配信されるコンテンツも豊富になるとは思えません。</div><div><br /></div><div>BML（社団法人電波産業会が策定した放送用のマークアップランゲージ「Broadcast Markup Language」の略）というものがあり、デジタル放送用に使われている言語ですが、世界に普及していません。</div><div>1999年に既に策定されているので、10年以上前の当時にはそういった標準規格があったようですが、世界とつながるWebだけに、日本独自とも言える規格ではせっかくのWebテレビもあまり魅力を感じられないといったところでしょう。</div><div><br /></div><div>家電をWebにつなぐ、ということは、テレビに限らずこういった標準技術がしっかりしていないと、上で説明した通り全く意味をなしませんしビジネスとして成功を収めるのも困難でしょう。</div><div><br /></div><div>しかしW3Cが徐々に家電用の標準規格策定に対する動きを見せています。</div><div>これが策定され勧告されだすと、世界中のWebにつながるテレビは（というより家電メーカーは）一斉にそっちの標準規格を採用すると言われているので、世界中のコンテンツにアクセスしやすい環境が生まれるわけですね。</div><div><br /></div><h2>今後のWebにつながるデバイスとして</h2><div><br /></div><div>上記から言える通りただ「Webにつながる」というキーワードだけではあまり意味がないのです。</div><div>Webにつながっても、それによって生活がどう便利になるか、が問題であり大事なんだと言えるのです。</div><div><br /></div><div>さて、今後のデバイス、、、</div><div>例えばクルマ、電子レンジ、冷蔵庫といったように色々な生活に密着した機器がWebにつながり、僕たち人間が操作する側となる「インターフェイス」が、今のスマートフォンで操作しているタッチパネルと同じような「表層」をHTMLやCSSで構成されて、WebにつながるエンジンがJavaScriptによって情報をやりとりする時代が来ると予想する人も出ています。</div><div><br /></div><div>まあ、今の流れからいうとありえるな、という気もします。</div><div>電子書籍の規格で有名なEPUBもXHTMLで情報が構成されています。</div><div>このバージョンが3.0になりHTML5+CSS3を使えるということらしいのですが、いずれにせよWeb標準フォーマットですね。</div><div><br /></div><div>ある一定のフォーマット（規格）の域から外れずにデータのやりとりが可能なら僕たちのHTMLのスキルもひょっとしたら役に立つかもしれません。</div><div><br /></div><div>あとは、デバイスの特性を考えた対策が可能な技術も必要でしょう。</div><div>例えばクルマを例えてみましょう。</div><div>移動するメディアなので、電波の届かない所にいることを考えないといけません。</div><div>カーナビがGoogleMapsのようなサービスと連動している場合、電波が届かない場所を走っているときは、あらかじめ周囲数10kmの地図情報をデバイスにキャッシュしておくなど対策がないと困るわけですね。</div><div>HTML5ではWebサイト（ページ）を本体にキャッシュしておける機能があります。</div><div>オフライン時、つまりネットにつながっていない環境でも情報を閲覧することが出来るわけで、これと似た機能でカーナビにも採用したりするといいでしょう。</div><div>（そもそもキャッシュとは既に閲覧した情報を貯めるので意味的にはちょっと違いますが...）</div><div>GMailなどはその例ですし、スマートフォンのWebアプリは「オフライン対策は必須だ」という人もいます。</div><div>（くわしくは　<a href="http://www.html5.jp/trans/w3c_offline_webapps.html#offline" target="_blank">http://www.html5.jp/trans/w3c_offline_webapps.html#offline）</a></div><div><br /></div><div>もうひとつ例をあげましょう。</div><div>例えば電子レンジやオーブン、グリルなど「火」を扱う機器。</div><div>今のWeb標準技術には「熱」を感知するAPIは勧告されていません。</div><div>電子レンジのパネルに、料理のレシピサイトから提供されているレシピが表示され、ユーザはそれに従って食材を入れ加熱させるわけですが、その加熱時間はすでにレシピサイトからの情報を受け取っているのでユーザが時間を指定しなくても自動で行ってくれるのです。</div><div>ただ、何かの間違いで、指定外のものを入れてしまい加熱して事故になることも視野に入れなければなりません。</div><div>熱を感知して加熱を停止させる機能がないと、自動化などするべきではありません。</div><div>その機能が家電機器（ハード）に備わっていることも大事ですが、「熱（温度）」を感知する機器を例えばJavaScriptで判定するようなAPIも提供されていないと、Webアプリの開発には常に危険がつきまとうと言っても過言じゃありません。</div><div>このように安全面を考えると、「自動化=便利」の背景には「危険」と背中合わせの部分をどう対応するかが極めて重要です。</div><div><br /></div><div><img alt="前面が全てHTMLでできたUIの電子レンジ？" src="http://akibahideki.com/blog/2012/01/23/fig02.png" width="740" height="269" class="mt-image-none" /></div><div><br /></div><h2>Webにつながる家電に対するデザイナーの仕事として</h2><div><br /></div><div>今僕たちはスマートフォン用のWebサイトの制作に色々知恵を絞っています。</div><div>iPhoneだけなら単独プラットフォームなので、微妙なバージョンの違いでなければMobileSafariのレンダリング結果なんてそう差はないはずですが、Android用のWebサイトともなると、表示するだけならまだ良いとしてもWebアプリの機能が加わると色々手を煩わせられます。</div><div><br /></div><div>この問題はスマートフォンというデバイスにおける問題と考えられがちですが、実はこれらは始まったばかりで、これからの未来を考えると、スマートフォンの悩みは氷山の一角にすぎません。</div><div><br /></div><div>もちろん、こうしている間にもどんどんWebブラウザやそのレンダリングエンジンも整備され改善されていくでしょうから、未来は今程デバイスごとの表示や挙動の違いに悩まされていないかもしれません。</div><div><br /></div><div>ところが、もしテレビのリモコンや電子レンジのパネルがタッチデバイスとなり、そのインターフェイスがHTMLやCSSで表示されている可能性はまったく否定できません。</div><div>テレビのリモコンはスマートフォンでも代替できるようにもなるでしょうが、スマートフォンを持っていないユーザもいることを考えて、やはりテレビ専用の次世代リモコンは付属、もしくは別売りとなるかもしれません、普及当初はスマートフォンがリモコンになる場合、ネイティブアプリが提供されるかもしれませんが、オープンなWeb標準技術で仕様書も公開されているなら、僕らがWebアプリとしてリモコンを作る仕事もあるかもしれません。</div><div><br /></div><div>例えば、お年寄りにはシンプルな「音量」と「チャンネル」と「電源OFF」のボタン機能だけで良いと言う人もいるでしょう。</div><div>逆に多機能に予約録画ボタン、多重放送のプレビューが手元のデバイスでテレビと連動したほうがいいという人もいるでしょう。</div><div>ユーザの好みは多岐に分かれるのです。</div><div>今のテレビのリモコンはご存知のとおり「ハード」です、つまりボタンの位置をユーザ層によって付け替えることはできません。</div><div>しかしタッチパネルとなればそれが可能になるのです。</div><div>ユーザの好みで、インターフェイスデザインをカスタマイズすることなんてもう既にPCでは行われています。</div><div>HTMLやCSSをJavaScriptで操作して動的に表示すればよいわけです。</div><div>あるいは何パターンかユーザーインターフェイスを用意しておいて、まるでブログの「テーマ」のようにユーザが複数のデザインを自分用のリモコン画面として設定保存することが出来るのです。</div><div><br /></div><div>今お話したことは全て僕たちが普段扱っているHTML+CSS、あるいはJavaScriptの知識資産を使って可能なことです。</div><div>もちろん、家電に向けたWeb標準がどう策定され勧告されるかはまだわかりません。</div><div>しかし可能性は否定できません。</div><div>そうなると僕たちの仕事のフィールドがPCからスマートフォンだけでなく、生活に密接な家電にも広がることになります。</div><div><br /></div><div>例えばスマートフォンサイトで必須とも言えるviewportやメディアクエリーなんてもうスマートフォンのため、などと言えなくなる未来があるかもしれません。</div><div><br /></div><div>特に日本の家電メーカーは今韓国などのメーカーに押され、大変な時期です。</div><div>Webがオープンな規格なだけに、他社製と差別化を計るのも以前より困難かもしれません。</div><div>家電がAndroidのようなオープンなOSを搭載する可能性もあるからですが、しかしながら明らかに独自路線を突っ走るよりはユーザへのサービスを充実させることを重点に置くべきことは家電メーカーも充分に分かっているでしょうし、そこを契機とし、起死回生を計ることができるかもしれません。</div><div>iPodやiPhone単体だけの成功ではなく、そこにiTunesというサービスと結びつけたからこそ成功したアップルの例からも言える通り、テレビを始めとする家電も、それだけではもう魅力的ではないのです。</div><div><br /></div><div>そういった新しいサービスには僕たちデザイナーの活躍するフィールドがどこかに無いか？</div><div>と、最近いつもそんなことを考えている毎日です。</div><div><br /></div><div>この可能性には否定的な意見もあると思いますが、明らかに言えることは、「可能性はゼロではない」ということで、</div><div>問題はどこにその可能性が秘められているかを早く見極めること、そしてそれに対する動きをとることが大事で、</div><div>場合によっては家電メーカーに売り込みに行くことも考えた方がいいかな？と思っています。</div> ]]>
        
    </content>
</entry>

<entry>
    <title>HTML上でiPhoneのフリック時刻用ドラムUIを実現するTimeFlickerJS</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/web/htmliphoneuitimeflickerjs.html" />
    <id>tag:akibahideki.com,2011:/blog//2.454</id>

    <published>2011-12-21T11:43:06Z</published>
    <updated>2011-12-21T13:38:52Z</updated>

    <summary> 以前も記事に書いたデザイナー主体のハッカソンプロジェクト「Designers ...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
        <category term="HTML+CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="人のためのWebデザイン" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="Android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="iphone" label="iPhone" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[<p><img alt="iPhoneのフリック時刻用ドラムUIを実現するTimeFlickerJSのサムネイル" src="http://akibahideki.com/blog/2011/12/21/fig01.jpg" width="740" height="400" class="mt-image-none" style="" /></p>

<p>以前も<a href="http://akibahideki.com/blog/cat5/post-22.html">記事</a>に書いたデザイナー主体のハッカソンプロジェクト「<a href="http://designers-hack.net/">Designers Hack</a>」で作っているモックをちょっと作り込みましたので、テストバージョンサンプルと動画をあげておきます。</p>

<p><br />
<a href="http://ecoloniq.jp/TimeFlickerJS/">DEMO</a>はこちら（iPhone, Androidで見てください、PCブラウザでは動作しません）<br /></p>

<div><a href="http://ecoloniq.jp/TimeFlickerJS/timeflickerjs.zip"><img src="http://akibahideki.com/blog/2011/08/10/zip.png" style="vertical-align: middle;" />http://ecoloniq.jp/TimeFlickerJS/timeflickerjs.zip</a><br /></div>

<br />

<iframe width="560" height="315" src="http://www.youtube.com/embed/9q47i4SIYeE" frameborder="0" allowfullscreen=""></iframe>
<p>TimeFlickerJS + iPhone4S</p>
<br /><br />

<iframe width="560" height="315" src="http://www.youtube.com/embed/QgvyuMyVJl0" frameborder="0" allowfullscreen=""></iframe>
<p>TimeFlickerJS + GALAXY S2</p>
<br />
<p>iPhoneのUIで見かける、数字を縦にフリックできる日付用のドラムっぽいあのUI。<br />
あれ、HTMLのフォームなどで作ってほしいという要望がありがちです。</p>

<p>でも、「時」と「分」を同時にクルクル指でフリックさせて数字を合わせるHTMLのUIが無いので、作ってみました。<br />
jQueryのプラグインみたいにしてます。</p>

<p>使い方は簡単です。</p>

<code data-code="HTML"><br />
&lt;head&gt;<br />
&nbsp;&nbsp;&lt;link rel="stylesheet" type="text/css" href="common/css/timeflicker.css"&gt;<br />
&nbsp;&nbsp;&lt;script src="common/js/jquery-1.7.min.js"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&lt;script src="common/js/jquery.timeflicker.js"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&lt;script&gt;<br />
&nbsp;&nbsp;&nbsp;$(function (){<br />
&nbsp;&nbsp;&nbsp;&nbsp;$("#timefrom").TimeFlickerJS();<br />
&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&lt;/script&gt;<br />	&lt;/head&gt;<br />
	<br />
&nbsp;&lt;body&gt;<br />
&nbsp;&nbsp;&lt;div id="timefrom"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;span class="TimeFlickHour"&gt;4&lt;/span&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;span class="TimeFlickMinite"&gt;10&lt;/span&gt;<br /> 
&nbsp;&nbsp;&lt;/div&gt;<br />
&lt;/body&gt;
<br />
</code>
<br />
<p>以上です。
必要なのはHTML上でspan.TimeFlickHourを「時」として、span.TimeFlickMiniteを「分」とします。<br />
これだけは必須なので忘れないように。<br />
あとはその親divをjQueryな書き方でTimeFlickerJS()を付けるだけで準備はOKです。<br />
親div（"4時10分"と表示されている部分）をタップすると、ドラムっぽいUIが降りてきたら成功です。</p>

<h2>メソッド</h2>

<p>一応、OKボタンが押されたタイミングでイベントを発火できます。</p>

<code data-code="JavaScript"><br />
var jikan = $("#timefrom").TimeFlickerJS();<br />
jikan.change(function (e, v1, v2){ console.log(v1+" "+v2); });<br />
</code>

<p>とすると、v1に「時」が、v2に「分」が帰ってきますので、<br />
例えばform要素の中で使う際、<br />
&lt;input type="hidden" name="jikan" value="ここにv1とv2を入れてサブミット" &gt;<br />
とかするとお問い合わせフォームでも使えるので良いでしょう。</p>

<h2>シビアだけどAndroidでは不採用になりそう？</h2>

<p><a href="http://designers-hack.net/">Designers Hack</a>のフロントエンドエンジニアのメンバーと話していると、Android大丈夫？的な声が。。。<br />
確かにiPhoneはレンダリングも強力なので割とフリックなど滑らかなんですが、GALAXY S2やXPERIA ARCなどで試したら結構厳しいところもあります。<br />
クオリティを考えるとAndroidはもっと別のUIを考え、振り分けた方がいいのでは？という意見が続いています。</p>

<p>あと、このUIは今は横幅320pxとハードコーディングしてます。解像度のちがうAndroidではCSSを触らないといけなくなりそうです、というよりボツになりそうです。<br />
例えばhtcとかの機種では横が空いてしまいますので。。。<br />
これはもうちょっと改善できたらいいなと。</p>

<p>ただ、このようなUIの制作を色んな仲間の意見をもとに作れ、勉強しているって恵まれてるなあと感じます。<br />
精進精進。</p>]]>
        
    </content>
</entry>

<entry>
    <title>デザイナー主体のハッカソンをはじめました</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/cat5/post-22.html" />
    <id>tag:akibahideki.com,2011:/blog//2.453</id>

    <published>2011-11-23T01:40:32Z</published>
    <updated>2011-11-23T02:45:56Z</updated>

    <summary> ※ハッカソンとは...プログラマが集まって一日、もしくは連日かけて共同で何かア...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
        <category term="デザインに困った時" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="人のためのWebデザイン" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="デザイナー" label="デザイナー" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ハッカソン" label="ハッカソン" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[
<div><small>※ハッカソンとは...プログラマが集まって一日、もしくは連日かけて共同で何かアプリなどを作る、というイベント。<br />
Hack＋Marathonの造語であるが、エンジニアの会話の中に入れないデザイナーとしては、あまり積極的に参加しにくい傾向があります。<br />
※以降、デザイナーを交えたハッカソンのことを便宜上「デザイナーハッカソン」とここでは言います。</small><br /></div>

<p>このあいだも、Googleのハッカソンに呼ばれて東京に行って思ったんですが、「知識が豊富なエンジニア達の中にデザイナーを投入してハッカソンを行おう」と、最近そんなことを企画するところが増えだしたな、という気がします。</p>

<p>しかし、<strong>企画側の理想は分かるんですが、今までのハッカソンの感覚でやるとまったく意味がない</strong>と感じています。<br />
むしろデザイナーを投入するだけ時間の無駄とも言えます。<br />
エンジニアの会話というのは、エンジニア同士でないとなかなか伝わりません。<br />
だから、その場にデザイナーが入り込むと誰とも会話が出来なくなります。</p>

<p>ただし、アプリ全体の完成度を考えると、デザイナーという分野の力は欠かせません。<br />
なぜなら、単に動くだけでは、コンシューマにとって魅力を感じないからです。</p>

<h2>デザイナーを交えてハッカソンを行おうとするすべての企画側の人へ</h2>

<p><img alt="完成のイメージを明確に話し合う、それがないとデザイナーハッカソンは意味がない" src="http://akibahideki.com/blog/2011/11/23/fig01.jpg" width="740" height="300" class="mt-image-none" style="" /></p>

<p>まず、アイデアソン（アイデアを話し合う）に完成のイメージを明確にしないとデザインは出来ません。<br />
つまり、そのフェーズを踏まない以上、「デザイナーハッカソンは不可能」と考えて下さい。</p>
<p>では、そのアイデアソンのフェーズなんですが</p>
<ul>
	<li>主なターゲット層を明確に（性別／趣味／年齢層／職業など）</li>
	<li>UIやビジュアルデザインのイメージを明確に（上記のターゲット層が決定した後だと決めやすい）</li>
	<li>画面の手書きラフ（遷移図などを思いついたまま、だんだん清書していく）</li>
</ul>

<p>さらに、「これは守りましょう」というルールを設けるのもいいでしょう。<br />
	・アイデアが出来ないうちに、誰かひとりでもコードを書き始めるとNG（多少の検証はしょうがないとして）<br />
	・エンジニアもチーム内すべてが、デザイン面のアイデアソンに加わること</p>
<p>実際の仕事（案件）でも最低限これだけはないと、デザイナーが動けません。</p>
<p>むしろ、将来の私達の業界は、手を動かす人（デザインする人だろうがコードを書く人だろうが）すべてプロジェクトのゴールを明確に見据えるために、発案から参加するスタイルがどんどん必要とされています。<br />
すでにシリコンバレーなど、先進的なITの現場では、このスタイルを導入しています。<br />
「指示が降ってくる」なんて言葉は過去の言葉になるのでしょう。</p>
<p>つまり、この流れを実際にハッカソンで行う事が、私達の制作現場の将来のスタイルを想定しているわけで、私達が5年後、10年後、もっと周囲からの評価が高い仕事を続けていくためには、いまからこのコミュニケーションという難題に触れ、経験し、可能であればその問題解決のすべを自分なりの方法で得なければなりません。</p>
<p>簡単に考えている人は、やってみるときっと頭を打たれるほどの難しさを肌で感じる事でしょう。<br />
とてもシンプルなWebアプリケーションを作るだけでも、リリースまで想定するのであればなんらかの「設計上のデバッグ」が必要となります。</p>
<p>当初のやりとりでうまくいくと想定しても、一つの仕様変更で次々と連鎖的にやり直しとなるでしょう。<br />
でも、ここで見つかったバグをつぶさないと進めてはいけないので、とても進まない事にジレンマを感じます。</p>
<p>デザインのアイデアから設計にいたるまで、チーム全員が参加する必要があるのはそういった理由があるからです。<br />
徹底すると質の高いイベントとなるでしょう。</p>
<p>&nbsp;</p>
<h2>こうなったらデザイナーハッカソンを自分で立ち上げてみました</h2>


<a href="http://designers-hack.net/">Designers Hack 001</a>

<p>実はハッカソンに参加したデザイナーの力作が、アプリに反映出来なかったらとても残念な気持ちになり、その気持ちがチームのみんなに伝わらないのは余計つらいんです。<br />
	こういった経緯があって、「じゃあ、自分達で企画しよう」ということになりました。</p>
<p>先日和歌山の和歌浦アートキューブに泊まりがけで合宿を行ってきたんですが、これがとても良かったです。</p>
<figure><figcaption>▽とてもおしゃれな和歌浦アートキューブ</figcaption>
	<a href="http://akibahideki.com/blog/2011/11/23/001_4.jpeg"><img src="http://akibahideki.com/blog/2011/11/23/001_4.jpeg" width="400" alt="とてもおしゃれな和歌浦アートキューブ" /></a></figure>
<p>一日目はとにかく誰も実装ベースの作業は禁止！<br />
	ペンと紙と会話で「完成を想定する」ことで精一杯です。<br />
</p><figure><figcaption>▽モックをイメージしては書き出し、やりなおし。</figcaption>
	<a href="http://akibahideki.com/blog/2011/11/23/001_1.jpeg"><img src="http://akibahideki.com/blog/2011/11/23/001_1.jpeg" width="400" alt="モックをイメージしては書き出し、やりなおし。" /></a></figure>
<p>アプリは「勤怠アプリ」にしました。私達クリエイターにとっては少々くだらないと思えるアイデアも、一般の人にはモチベーションが上がるようなものもあります。<br />
	単にアルバイトのスケジュール帳ではなく、稼ぐ毎にアバターが成長／変身していくというもの。</p>
<figure><figcaption>▽出来上がったアバターの原案</figcaption>
	<a href="http://akibahideki.com/blog/2011/11/23/001_3.jpeg"><img src="http://akibahideki.com/blog/2011/11/23/001_3.jpeg" width="400" alt="出来上がったアバターの原案" /></a></figure>
<p>iPhoneのSafariで動くことを想定したWebアプリです。最終的にはAndroidでも使えるようにしたいと考えています。</p>
<p>【アプリの概要】<br />
	・アルバイトのスケジュールをカレンダーに記帳できる。<br />
	・複数のバイト先を新規登録／管理でき、次からスケジュールを記帳しやすいようにする。<br />
	・アルバイト先の職種（力仕事やコンパニオンなど）を勤務先単位で登録する。<br />
	・職種ごとにアバターが成長していく</p>
<p>【目的】<br />
	スケジュール帳として厳密なものではなく、ビジュアルで楽しめる、モチベーションが上がるアプリを目指す。「なんじゃこのアバター？」と思えるようなユルいキャラから変なキャラまで用意。</p>
<p>【メンバー】<br />
	・フロントエンドエンジニア...2名<br />
	・ビジュアル／UIデザイナー...1名<br />
	・キャラクターデザイナー......2名<br />
	・HTMLコーダー.....................4名（上記から3名が兼任）<br />
	・マネージャー.....................1名</p>
<figure><figcaption>▽いよいよ実装作業開始、想像以上にうまくいかない。。</figcaption>
	<a href="http://akibahideki.com/blog/2011/11/23/001_7.jpeg"><img src="http://akibahideki.com/blog/2011/11/23/001_7.jpeg" width="400" alt="いよいよ実装作業開始、想像以上にうまくいかない。。" /></a></figure>
<p>というメンバーで、実はエンジニアがあと2人参加予定だったんですが、風邪と社員旅行で参加出来ず、タイムオーバーとなり、一部実装は持ち越し。</p>
<p>単純なアプリと思っていても、結構大変なコストがかかるという事に打ちのめされます。<br />
</p><figure><figcaption>▽シンプルな構成案でも矛盾が発生、議論はつづく...</figcaption>
	<a href="http://akibahideki.com/blog/2011/11/23/001_2.jpeg"><img src="http://akibahideki.com/blog/2011/11/23/001_2.jpeg" width="400" alt="シンプルな構成案でも矛盾が発生、議論はつづく..." /></a></figure>


<figure><figcaption>▽休憩中に出来上がってきた遷移図のチェック</figcaption>
	<a href="http://akibahideki.com/blog/2011/11/23/001_6.jpeg"><img src="http://akibahideki.com/blog/2011/11/23/001_6.jpeg" width="400" alt="休憩中に出来上がってきた遷移図のチェック" /></a></figure>
<p>あと数回の顔合わせをして完成するというスケジュールになります。</p>
<h2>目指すところ</h2>

<p>このプロジェクトを企画した目的は、僕らデザイナーが良いと思った色やレイアウトを、クライアントという「素人判断」に覆されないためにも、このチームで意図して出来上がったものの価値で、本当に良いものに理由を付けたいと思ったから。</p>
<p>「よいと思うものに言葉はいらない」という人もいるし、すごく分かるけど、ビジネスとしてお金をもらってデザインをする立場だったらそこには説得させる材料が必要。<br />
僕らのハッカソンプロジェクトはそれを実現させて、参加したメンバーが将来本当の意味で良いデザイナーの仕事を続けられるように今から出来る事をしたい、そう思って作りました。</p>
<p>もう「上から仕様変更が...」といって、リリース前に中身のコードをツギハギにしてグチャグチャでも「なんとか動いた」の状態でリリースするような仕事をしなくてもいい将来を作りたいです。</p>

<style>
figure {
text-align: left;
display: block;
margin: 0 10px 10px 0;
}
figcaption {
text-align: left;
}
div#main p {
margin-bottom: 1em;
}
</style>
<script>
$(function() {
	$('#main a').lightBox({fixedNavigation:true});
});
</script>]]>
        
    </content>
</entry>

<entry>
    <title>デザインの「修正」に対して思う</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/cat5/post-20.html" />
    <id>tag:akibahideki.com,2011:/blog//2.451</id>

    <published>2011-10-05T01:51:05Z</published>
    <updated>2011-10-06T14:52:16Z</updated>

    <summary>今回は「デザイン修正」が起こった時の、デザイナーとクライアントとのコミュニケーシ...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
        <category term="デザインに困った時" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="人のためのWebデザイン" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="デザイナー" label="デザイナー" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[<div><img alt="fig01.jpg" src="http://akibahideki.com/blog/2011/10/06/fig01.jpg" width="740" height="271" class="mt-image-none" /></div><div><br /></div>今回は「デザイン修正」が起こった時の、デザイナーとクライアントとのコミュニケーションを考えてみました。<div><br /></div><div>みなさんはクライアント、もしくは自分に仕事を発注するディレクターさんと、どんな意識の擦り合わせをしていますか？</div><div>例えば、ちょっと規模の大きいシステム開発の場合、「こんな風に動くものを作ってよ」と言われてすぐプログラムを組むデベロッパってそういないですよね。</div><div>実はシステム開発における予算の大半は「設計（要件定義を含む）」に当てられるほど重要なフローなんです。</div><div>つまりこの「設計」というフロー無しには、手を動かして作業出来ない（乱暴に言えば）ということです。</div><div><br /></div><div>一般的なデザイナーの仕事にとって大変懸念すべき点があります。</div><div>それは「デザイナーのワークフローには設計や要件定義を行うフローをしないでデザインする事が多すぎる」んです。</div><div><br /></div><div>今、とくにWeb制作の中で「デザイナーとデベロッパ」とまるで異次元の人種のようにぶった切られていますが、ホントにそうなんでしょうか？</div><div><br /></div><div>僕はデザイナーですが、なぜ僕らは彼らデベロッパーのワークフローを踏襲出来ないんだろうか？と考えています。</div><div><br /></div><div>「修正」</div><div><br /></div><div>みなさんも好きな言葉ではないと思います。</div><div>何時間もかけて、あるいは一晩かけて最高のクオリティに仕上げたロゴやビジュアルを「イメージと違うんだよね」と言われて修正を食らう。</div><div>開発現場とデザイン現場にいた経験から、傾向としてはデザイン現場の要件定義フローは軽視されているようです。</div><div><br /></div><div>【開発】</div><div>システム開発で後から修正を入れること自体プロジェクトを危険にさらすから最初にしっかり設計すること。</div><div>【デザイン】</div><div>上記の開発フローほど厳密に設計などを行わない傾向が高く、デザインの変更は後からでもなんとかなる、と思われがち。</div><div><br /></div>

<h2>システム設計ばりの「デザインの要件定義」をすること</h2>
<div>「まあ、ちゃっちゃっと作ってみてよ」なんて言う人とは仕事はしないです。</div><div><br /></div><div>少なくとも、デザインをアタマの中でイメージ出来る人はいいのですが、少なくともそんな人から来る仕事は割とスムーズに行くケースがあるので、打ち合わせ段階でコンセンサスを得やすいのです。</div><div><br /></div><div>ただし問題は「何案か見てみたい」と言われた時のこと。</div><div>ほとんどが複数案を提案します。</div><div>ただし、今回問題としているのは、打ち合わせ段階でどれだけイメージが集約された複数案なのか？</div><div>それともただ、イメージが全然沸かないから、という理由の複数案なのか？</div><div>これの大きな違いが、最終的にクオリティやデザイナーの評価を落とす原因にまで発展します。</div><div><br /></div>

<h2>「何案か見てみたい」...この最悪のケースを想定する</h2>

<div>発注者はこの時点で「キーカラーは何色にするのか」「ロゴのテイストはどうするのか」「ビジュアルは写真でいくのかイラストでいくのか」等といった具体的なイメージは出来ていません。</div><div>ここでそのまま持ち帰って多数案を提出した最悪のケースへの一歩がこれです。</div><div><br /></div><div>「もっと別の案も見てみたい」</div><div><br /></div><div>しかし、その背景（真実）はこういう事だったのです。</div><div><br /></div><div>（案が多すぎて逆に決め切れなくなった）</div><div><br /></div><div>つまり、集約するべきアイデアが分散してしまい、正常な判断が出来ない状況に陥った結果です。</div><div>こういった原因を作ってしまった張本人が僕らデザイナーだったりします。</div><div>そこにクライアントやディレクタの悪口を言うのは違います。</div><div><br /></div><div>つまり提案が多ければいい、という段階はここで行うべきじゃなかった、ということです。</div><div>もっとそれ以前のコミュニケーション作業に答えがあります。</div><div><br /></div>


<h2>最悪のケースとは</h2>

こっちは一生懸命作ります、何案も。<div>でもその中の1つ以外はボツになり、ヒドい時はどれも決まらず全部ボツになる。</div><div>それが分かっている中で、全力を注ぐのは苦しい。</div><div><br /></div><div>さらに多くの案に時間をかけると、一つ一つの案のクオリティを保つのは至難の業です。&nbsp;
</div><div>出来るだけ細部のクオリティに配慮できる時間や気持ちのゆとりが欲しいです。&nbsp;</div><div>これがないと、別に手を抜いているつもりはなくても配慮に対する行動が手薄になりがちです。&nbsp;</div><div>そう、自分が気づかないうちに。</div><div><br /></div><div>僕はそれを「デザインに若さがない」という。&nbsp;</div><div>若さというのは若者受けという意味ではなく、「あ、精神的に元気がいい状態でデザインしたな」という感じがつたわる空気みたいなものです。&nbsp;
</div><div><br /></div><div>要は無駄が多いと、言葉では「頑張ってます」でも、クオリティは落ちるのです。&nbsp;</div><div>メカじゃないから人間疲れます、色んな感性が疲れます。&nbsp;</div><div>だから細部に行き届かない。&nbsp;
</div><div><br /></div><div>だから無駄をすると、自分のクオリティ評価が下がるし、クライアントも幸せになったかというと疑問だし。</div><div>死ぬほど徹夜もして疲労困憊な中、努力したのに、クオリティも出せず、最後までデザインもまとまらず評価は最悪、、つまりこれが最悪のケース。</div><div><div><br /></div>
だからもっともっと相手とコミュニケーションをとるんです。</div><div><br /></div>

<h2>相思相愛の関係で生まれる不思議なコンセンサス</h2>
<div>
会話の中で、その人が好きなことや気になっていることをすくいあげて、会話の中に弾ませると、相手はもっと自分に興味を示してくれる。
</div><div>お互い疑心暗鬼になっている状態だと、どちらかがいい案を出しても、ちょっと疑いたくなるのは心情。&nbsp;</div><div>でも、好きになってくると、その人の意見をさらに膨らましてやろうじゃないか！という意欲すら沸いてきます。&nbsp;</div><div>不思議です、今までそういうことが何度もありました。&nbsp;
</div><div><br /></div><div>そうすると、ここで一旦まとめましょうよ、って場を仕切りやすくなるんです。&nbsp;</div><div>クライアントの前でも「無駄がないように短期間で最高のものを仕上げさせてください」って意思表示が出来る空気にさせてしまうんです。&nbsp;
</div><div>無駄、という本質を理解してもらうのもデザイナーのコミュニケーション能力として大事なことです。&nbsp;</div><div>決して楽をするためじゃなく、この仕事に愛情を注げる状態を僕に下さい、と言ってるようなものですからクライアントも徐々に信用してくる。&nbsp;</div><div><br /></div><div>そうすると、もう何案も「闇雲」に作るんじゃなく、「自分でも数案試してみたいんですよ」という状態まで持って来れる。</div><div>その数案はとても価値があるチャレンジだと思っています。</div><div><br /></div>

<h2>クライアントにコンセンサスを得るまで手は動かさない</h2>
<div>この小見出しが全ての答えなんですが、案をいくつか出すにしてもプロジェクトコンセプトに対して理解するまでは絶対に手は動かさない（要はPCでデザイン作業をしない）ようにします。</div><div>理由はたった1つ。</div><div><br /></div><div>的外れな案に労力をさくより、適案に最大限の時間をかけ、クオリティと「若さ」を全力で注ぐべきだから。</div><div><br /></div><div>これにおける行動は重要ですが、ある意味、精神／体力勝負ともいえます。</div><div>これはクライアントに対し可能な限り要求を聞き出し、自分は持ってるだけのアイデアの引き出しをその場で広げます。</div><div>そこで的外れな案を相手に指示させないようにするには、こちらからのそれを覆すだけの理由が必要です。</div><div>がしかし、これは「知識」だけ突きつけてもダメな場合があります。</div><div>人を引きつける話術で覆すことも時として必要なんです。</div><div><br /></div><div>しかも人間、フリスクの過去のCMのように、会議が長引くと思考が切れてモチベーションも下がるので、これらを出来るだけ短期間で行います。</div><div>そうでないと、余計な疲労が思考を妨げるから、良案もそう見えなくなってくる危険だってあるのです。</div><div><br /></div><div>ここまで徹底的にやり切ってそこから数案を考える、という話に持っていくことが重要です。</div><div><div>何案か出す時には、より、その案が絞り込まれた中での案なのか、を打ち合わせ段階で明確にしましょう。</div></div><div><br /></div><div>ちなみにクライアントにとっては、場合によっては非常に面倒くさがられることがあります。</div><div>「そんなことより早く作って見せてよ」というのが本音だからです。</div><div>ただし、ここを怠るともうすでに、システム開発では当然の「要件定義」を放棄しているようなもので、今までの経験からすると、こういったケースは最終的に「クオリティに全力を注げなかった残念なケース」に近づいていきます。</div><div>クライアントから気に入られたいがために、夜を徹して体力限界まで多数の案を製造してしまいがち。</div><div>しかもその状態で求められるクオリティはほぼ「完成形」に近いほどのクオリティだったりするのがほとんど。</div><div><br /></div>

<div><img alt="fig02.jpg" src="http://akibahideki.com/blog/2011/10/05/fig02.jpg" width="740" height="271" class="mt-image-none" /></div>

<div><br />若い頃から長く経験して思いますが、</div><div>精神状態や体力が良好なときに仕上がるデザインと、劣悪な状況で仕上がるデザインのクオリティを両者均等に保てる人なんてまずいません。</div><div>人間、クリエイティブとか感性とかを思考する行為って、単純ではありません。</div><div>もっとデリケートなもので、「強くなれ」とかいう概念とは次元が異なります。</div><div><br /></div><div>クオリティは自身の様々な状況に影響します、それも自分が気づかないところで。</div><div><br /></div>
<h2>理想と現実</h2><div>色々書いてきましたが、結局「そんな事言っても現実はそうはいかない」と反感を持たれる人もいると思います。</div><div>その通りで、場合によっては面倒くさがられて次から仕事が来なくなります。</div><div><br /></div><div>自分がデザイナーとしてどう生きていきたいか？という大きなテーマに発展しうる問題です。</div><div><br /></div><div>「やっぱりこの人にお願いしたい」</div><div>「この人にお願いするとちょっと高いけど、それでもいいものを作ってくれる」</div><div>「この人にお願いする場合、発注する側も刺激になっていいよね」</div><div><br /></div><div>そんな風に思われるデザイナーになり、今後も高く評価されながら頼りにされることを目指したい。</div><div>そう思うなら、手先が器用なだけでなく、コミュニケーションを放棄しないデザイナーであり続ける事だ、と考えます。</div><div><br /></div><div>話が戻るけど、システム案件の「設計」が必要なように、僕たちデザイナーもイメージの設計というフローが必要です。</div><div>そして業界全体のフローを自分自身で変えていければ、僕らの未来もきっと良いものになるでしょう。</div>]]>
        
    </content>
</entry>

<entry>
    <title>canvas要素にJSでAS3のdrawTrianglesみたいなことをやってみる</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/html5-canvas-1/jsas3drawtriangles.html" />
    <id>tag:akibahideki.com,2011:/blog//2.450</id>

    <published>2011-09-29T08:51:11Z</published>
    <updated>2011-09-29T10:38:23Z</updated>

    <summary> 以前HTML5案件で作ったもので、canvasで上の図のようなことができるJa...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
        <category term="HTML5 canvas学習" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[<img alt="trianglejs_demo.jpg" src="http://akibahideki.com/blog/2011/09/29/trianglejs_demo.jpg" width="740" height="292" class="mt-image-none" /> <div><br /></div><div>以前HTML5案件で作ったもので、canvasで上の図のようなことができるJavaScriptファイルなんですが、これをライブラリ化してみました。</div><div>まだ欠陥が多いしAPI仕様もまとまってないのですが、ひとまずこんな表現が可能です。</div><div><br /></div><div>ソースはここにあげときました。（使い方よくわかんないけど）</div><div><a href="https://github.com/Hidetaro7/trianglerJS">https://github.com/Hidetaro7/trianglerJS</a></div><div><br /></div><div>ActionScript 3.0には<a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html">GraphicsクラスにdrawTriangles()</a>ってメソッドがあります。</div><div><br /></div><div>何をするかって言うと、ビットマップ画像をテクスチャマッピングすることが目的です。</div><div>これにより一枚の静止画をユラユラ布のように揺らしたり、3Dでは遠近感をつけたりと、画像を自由に変形することが可能になるコンピュータグラフィックの手法です。</div><div><br /></div><div>FlashPlayerやActionScript 3.0が素晴らしいと思うのが、こういったマッピング処理の数学的な難しい処理をすでにAPIとして実装してくれています。</div><div>僕達は、頂点座標を指定して、それをどう動かすか？に専念したらいいんです。</div><div><br /></div><div>ところが、HTML5の新要素、canvasとかでこれを表現し、アプリなどに乗せてしまうようなお仕事が来た時、「iPadだったらHTML5で出来ますよ」なんて言ってしまったらさあ大変！</div><div>そんな機能はネイティブで搭載されていません。</div><div><br /></div><div>つまり、「無いものは作る」or「仕様を満たすライブラリを探す」or「出来ません、と謝る」という選択に迫られます。</div><div><br /></div><div>実は色んなライブラリがもう既に出まわっていますが、いざ案件でHTMLによるテクスチャマッピングを実装するには、可能な限り自分で内容を知っておきたいという気持ちがあったので、これに挑戦してみました。</div><div><br /></div><div>これを使ったら、ポリゴンの頂点座標のx座標やy座標をずらすと、画像もその頂点にあわせて変形できます。</div><div>頂点座標の取得はgetMesh()で、頂点オブジェクトが配列で返ってくるので、例えば</div><div><br /></div>

<code data-code="JavaScript">
インスタンス名.getMesh()[41].x += 40;&nbsp;// ------------- 頂点座標の移動<br /><br />
インスタンス名.draw(); // ------------- 再描画実行
</code>

<div><br /></div>
<div>とかにすると、左上の頂点から41頂点目のX座標を40px右にずらします、</div><div>最後にdraw()メソッドで再描画すると、図のように表示されるというものです。</div><div><br /></div><div><img alt="getmesh.jpg" src="http://akibahideki.com/blog/2011/09/29/getmesh.jpg" width="740" height="200" class="mt-image-none" /></div><div><br /></div><div><br /></div><div>メッシュの表示、非表示</div><div>あくまで、今出ている黒い線（メッシュ）は、制作者が分かりやすいように引いているガイド線のようなものなので、案件で納品するときは消さないといけないケースがあります。</div><div>以下のようにstroke()メソッドを用意したので、引数にtrue / falseを与えてください。</div><div><br /></div>

<code data-code="JavaScript">
インスタンス名.stroke(false);
</code>

<div><br /></div><div>これで再度draw()すると、メッシュは表示されなくなります。（今回のデモ図版では、わざとtrueに設定しましたが、デフォルトはfalseです。）</div><div><br /></div><div>GitHubに置いた、今回のサンプルは波のように揺らしてますが、これは三角関数を使って、X座標を行ったり来たりさせてます。メッシュ非表示にするためにstroke(false)にしたときの結果、こんな感じになります。</div><div><br /></div><div><a href="http://akibahideki.com/blog/2011/09/29/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882011-09-29%2016.58.16%EF%BC%89.png"><img alt="chibikoro_wave.png" src="http://akibahideki.com/blog/assets_c/2011/09/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882011-09-29%2016.58.16%EF%BC%89-thumb-740x533-66.png" width="740" height="533" class="mt-image-none" /></a></div><div><br /></div><div>欠点として、一部、ポリゴンの隙間が出来ることもあるということや、</div><div>ふちはジャギーが出て汚い、ということです。</div><div>場合によってアニメーションで見せる場合、そこまで気がつかずごまかせることもあるけど、</div><div>その場合かなりパフォーマンスが低下するので、注意が必要です。</div><div><br /></div><div>何か案件で使えそうな時は自己責任でご自由にお使いください。</div><div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>HTML5-WEST.jp 勉強会「HTMLでつくるカメラ&amp;落書きアプリ」フォローアップ</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/htmlcss/html5-westjp.html" />
    <id>tag:akibahideki.com,2011:/blog//2.449</id>

    <published>2011-09-24T08:17:39Z</published>
    <updated>2011-09-25T04:09:53Z</updated>

    <summary>始まって2回目のHTML5-WEST.jp勉強会なんですが、50人も集まりました...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
        <category term="HTML+CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="HTML5 canvas学習" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="canvas" label="canvas" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="getusermedia" label="getUserMedia" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html5" label="HTML5" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="webカメラ" label="Webカメラ" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[<div><a href="http://akibahideki.com/blog/assets_c/2011/09/2011-09-24%2015.11.25-thumb-740x555-56-57.html" onclick="window.open('http://akibahideki.com/blog/assets_c/2011/09/2011-09-24%2015.11.25-thumb-740x555-56-57.html','popup','width=740,height=555,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://akibahideki.com/blog/assets_c/2011/09/2011-09-24%2015.11.25-thumb-740x555-56-thumb-740x555-57.jpg" width="740" height="555" alt="2011-09-24 15.11.25.jpgのサムネール画像" class="mt-image-none" /></a></div><div><br /></div>始まって2回目のHTML5-WEST.jp勉強会なんですが、50人も集まりました。<div>みなさんお疲れさまでした。</div><div><br /></div><div>僕は「HTMLでつくるカメラ&amp;落書きアプリ」というセッションでお話をさせてもらいました。</div><div><br /></div>

<p>スライドはこちらです。</p>
<div><a href="http://akibahideki.com/blog/2011/09/24/html5west.pdf"><img src="http://akibahideki.com/blog/common/img/icon_pdf.png" style="vertical-align: middle;" />http://akibahideki.com/blog/2011/09/24/html5west.pdf</a><br /></div>

<div><br /></div>
<div>セッションの中でお話しましたけれど、まだ現在では、HTMLやJavaScriptベースでカメラを使ったWebアプリは作れません。</div><div>これは各ブラウザがまだこの機能をサポートしていないからです。</div><div>ただ、テストとして唯一Operaの特殊なビルドがそれを可能にしています。</div><div><br /></div><div>Webの未来という意味では面白い試みだったと思います。</div><div>もうすでにW3Cのワーキングドラフトに上がっているので、「Webでこういったことが将来出来るようになる」ということを示唆するものなんですね。</div><div><br /></div><div>1行のHTMLと簡単なJavaScriptのサンプルでカメラアプリが作れるデモを実際披露すると、色んな人の反応が多くて楽しかったですね。</div><div><br /></div><div>getUserMedia()というJavaScriptのメソッドは、カメラやマイクを取得する機能ですが、仕様はまだあやふやでこれからもう少し整備されていくでしょう。</div><div><br /></div><div>最後にアイデアネタとして「変顔カメラアプリ」として画像がウネウネ動いていたのは、実はとても頑張って作ったんです。</div><div>将来はもうちょっとアレをアプリっぽくしますのでご期待ください！！</div><div><br /></div>

<figure style="width:300px;">
<a href="http://akibahideki.com/blog/assets_c/2011/09/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882011-09-24%2017.34.21%EF%BC%89-59.html" onclick="window.open('http://akibahideki.com/blog/assets_c/2011/09/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882011-09-24%2017.34.21%EF%BC%89-59.html','popup','width=480,height=800,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://akibahideki.com/blog/assets_c/2011/09/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882011-09-24%2017.34.21%EF%BC%89-thumb-300x500-59.png" width="300" height="500" alt="スクリーンショット（2011-09-24 17.34.21）.png" class="mt-image-none" style="" /></a>
<figcaption style="color:red;">デモでお見せしたテクスチャマッピングによる画像を変形させて撮影</figcaption>
</figure>



]]>
        
    </content>
</entry>

<entry>
    <title>『第一回 全国統一HTML5実力テスト』を受験してみて改めて感じたこと</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/web/-html5.html" />
    <id>tag:akibahideki.com,2011:/blog//2.448</id>

    <published>2011-09-12T03:54:15Z</published>
    <updated>2011-09-12T04:06:37Z</updated>

    <summary>カヤックさんのWebサービスで、HTML5関連の自己スキルが試せるというものが公...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
        <category term="HTML+CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="人のためのWebデザイン" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css3" label="CSS3" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html5" label="html5" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[<div>カヤックさんのWebサービスで、HTML5関連の自己スキルが試せるというものが公開されています。</div><div><br /></div><div><a href="http://akibahideki.com/blog/assets_c/2011/09/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882011-09-12%2012.59.52%EF%BC%89-52.html" onclick="window.open('http://akibahideki.com/blog/assets_c/2011/09/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882011-09-12%2012.59.52%EF%BC%89-52.html','popup','width=1239,height=776,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://akibahideki.com/blog/assets_c/2011/09/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882011-09-12%2012.59.52%EF%BC%89-thumb-740x463-52.png" width="740" height="463" alt="html5cat.png" class="mt-image-none" /></a></div><div><br /></div><div><a href="http://jsdo.it/event/html5cat/2011/summer/">http://jsdo.it/event/html5cat/2011/summer/</a></div><div><br /></div><div>これはエンジニア向けのJavaScriptコース、そしてデザイナー向けのHTML / CSSコースの二つの科目（？）があり、それぞれ好きな方を選べるし、両方受験することもできます。</div><div><br /></div><div>まあ、内容はもちろんここでは書けないけど、結構難しいことから、割と誰でも知ってそうなことまで幅広いので、自分のスキルを試すということで、やってみてはいかがでしょう？</div><div><br /></div><div>高い点数だったら、みんなに自慢しちゃおう、ということでTwitterのアカウントでログインして受験してみるのもよいでしょう。</div><div>逆に点数が低いからといって、一方的に公開されるわけではありませんのでご安心を。</div><div><br /></div><div>ちなみに僕はJavaScriptは専門外なので、HTML / CSSコースだけ受験。</div><div>惜しくも93点。</div><div>一問間違えてしまいました。。</div><div>よく考えたら分かることを、、、悔やんでしまいます。</div><div><br /></div><div><img alt="score.png" src="http://akibahideki.com/blog/2011/09/12/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882011-09-12%2013.00.08%EF%BC%89.png" width="478" height="211" class="mt-image-none" /></div><div><br /></div><div><br /></div><div>HTML5がテーマとなる試験なので、セマンティックな考え方を理解しておいた方がよいですし、CSS3の知識も必要になってきますし、JavaScript APIとの絡みも理解が必要になってきます。</div><div><br /></div><div>と、書くと、「何でJavaScript APIとの絡みが必要なん？」って思うかもしれません。</div><div>しかしこれは僕としては当たり前のことと思い、苦手だけど勉強中です。</div><div>（オライリーから出ているJavaScriptのパターン本を読んで、確かに面白いですが、これは僕がやる分野じゃないな、と思っています。）</div><div><br /></div><div>ただプロジェクトって、制作に関わる人全てが同じゴールを見ないとチグハグなものが出来上がってくるのにこの日本ってのは、フロントに関わる大事な作業をする人がディレクターからの指示だけで動いているという現状があまりにも多く、ヒドい場合には途中で大幅な仕様変更などに何故そうなったかも理解出来ず、苦しむ場合があります。</div><div><br /></div><div>「上が言ってるからそれは当たり前」とか「徹夜してでもやるべき」とかそんな言う人もいるけど、もの作りの本質からは確実にずれている気がします。</div><div><br /></div><div>ただ、大きなプロジェクトになれば（何十人、何百人のエンジニアが動くプロジェクト）になると、さすがにそうも行かないケースもあるので一概には言えませんが。</div><div><br /></div><div>少なくとも数人体制で制作にかかる場合、もっとフロント制作に関わる人（フロントエンドエンジニアやデザイナー）も会議に参加させて、その人のことをちゃんと信用していこうよ。</div><div>フロントに関してはその人の意見が一番知識があるし、的を得ているはずなのに、何故違う人が仕様を決められるのか？は問題として認識しておくべきかな？と。</div><div><br /></div><div>理想的な話ばかりしてるけど、制作者は全てコミュニケーション能力がないとダメ。</div><div>上記のように、フロントエンドの人やデザインの人などは、信用されている以上、プロジェクト全体のゴールを見据えて話が出来て提案も出来ないと、ただの言いなりにしかなれない存在なんです、悲しいかな。</div><div><br /></div><div>だから僕らの立場を5年先、10年先でももっと価値のあるものにし、言いなりにならずに「この人にお願いしたい」と言われたいので、今が訓練の時期だと思う訳です。</div><div><br /></div><div>だから話が戻るけど、デザイナーの知識にとって「何でJavaScript APIとの絡みが必要なん？」という答えは、自分が作ったUIと密接に関わるからです。</div><div>自分がUIを設計する以上、最後はプログラムによってどのように動くかなんて知っていて当然、その挙動が予測できるようにならないといけません。</div><div><br /></div><div>少なくとも、スクリプトを書けなくても、何が出来るか？</div><div>ここを最初に設計／定義しておかないと後々困る、という部分だけは抑えておきましょう。</div><div>これが今後、複雑な仕様になって広大なHTML5の技術に対する、僕らデザイナーの向き合い方だと考えて勉強しています。</div><div><br /></div><div>こう考えると、色んなスキルが必要となってくるので、ひと独りでこのスキルを理解出来る人なんていないんじゃないかと思ってきます。</div><div>JavaScriptエンジニアと言っても、今までDOM操作が得意だったエンジニアだけでなく、描画アプリをcanvasやSVGなどを使って作ることを得意とするエンジニアやAjaxやWebSocketなどの通信系が得意なエンジニアとか色々、エンジニアのなかでも幅広く分野が分かれていくものと予感しています。</div><div>これはあくまでディレクターとしての一つの意見ですが。</div><div><br /></div><div>デザイナーもそうです。</div><div>ビジュアルを担当するデザイナーから、ユーザの指や目の動きを考えたり使いやすい設計を考えるデザイナーなど、デザイナーといってもWebに関わらずプロダクトやエディトリアルデザインの世界でもいっぱいいます。</div><div><br /></div><div>どれがWebの世界で一番重要かだなんて順位をつけられるわけがありません。</div><div><br /></div><div>見た目も機能性も、全てにおいてクオリティを保たないとそれをクオリティとは言わないからです。</div><div><br /></div><div>さ、そんなわけで、コレからも勉強、勉強、と。</div><div>お互いいい仕事をしたいですね！</div> ]]>
        
    </content>
</entry>

<entry>
    <title>canvasを使って知識ゼロから独学してみた「エセ」テクスチャマッピング入門以前編</title>
    <link rel="alternate" type="text/html" href="http://akibahideki.com/blog/html5-canvas-1/canvas.html" />
    <id>tag:akibahideki.com,2011:/blog//2.447</id>

    <published>2011-09-02T17:57:36Z</published>
    <updated>2011-09-02T18:15:59Z</updated>

    <summary> 赤い点をドラッグしてみてください。 あくまで基礎中の基礎なので、もっと詳しい方...</summary>
    <author>
        <name>秋葉秀樹</name>
        
    </author>
    
        <category term="HTML5 canvas学習" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://akibahideki.com/blog/">
        <![CDATA[<img src="http://akibahideki.com/blog/2011/09/03/img/title.jpg" alt style="display: none;">

<p>赤い点をドラッグしてみてください。</p>

<iframe src="http://akibahideki.com/blog/2011/09/03/test_one.html" frameborder="0" width="740" height="470"></iframe>

<p>あくまで基礎中の基礎なので、もっと詳しい方はこちらのほうがおすすめです。<br />「2009-02-11 - 最速チュパカブラ研究会」<br />
	<a href="http://d.hatena.ne.jp/gyuque/20090211#1234364019" target="_blank">http://d.hatena.ne.jp/gyuque/20090211#1234364019</a></p>
<h2>■画像を3D的に遠近感を出すには？</h2>
<p>例えば正面を向いている画像が上を向いているように見せるにはどうすればよいでしょう？<br />
	それは、画像を台形にして上辺が狭くなれば、立体的に上を向いているように見えますよね？</p>
<figure>
	<img src="http://akibahideki.com/blog/2011/09/03/img/fig_01.jpg" alt="【画像（写真）が上を向いているように見せたいとき】" />
	</figure>
<p>今回はcanvas要素を使ってこういった画像を変形させることにします。<br />
	しかし、現在仕様が固まりつつあるcanvasの2Dレンダリング方式では、こういった画像に奥行を与える直接的な機能を持っていません。<br />
	つまり長方形のカタチから台形に変形させるのは簡単にできないというべきです。<br />
	Flash Playerはvar10からムービークリップ等を3D的に回転させたりすることが可能になりましたが、canvasの場合は何らかの方法で実現しないといけません。<br />
	（canvas、ではなく、正式には「CanvasRenderingContext2Dというcanvas内のオブジェクト」なんですが、便宜上canvasと言うことにします。）</p>
<h2>■canvasでできる変形の基本</h2>
<p>画像が3D的に見えるように台形に変形させる前に、canvasでできる変形とはどういうものか、おさらいしておきましょう。</p>
<p>ここでいう「変形」というのは、以下のとおりで、これらは全てcanvasに直接備わっているので簡単に変形が可能です。</p>
	<figure>
	<img src="http://akibahideki.com/blog/2011/09/03/img/fig_02.jpg" alt="【これらはcanvasで直接変形が簡単】" />
	</figure>
<p>しかし、先ほども言いましたとおり、台形みたいに、あるいはもっと不規則な四角形に変形する命令（メソッド、といいます）は直接canvasには備わっていません。<br />
	例えば以下のような台形や不規則な形状の変形は簡単にはいきません。</p>
	<figure><img src="http://akibahideki.com/blog/2011/09/03/img/fig_03.jpg" alt="【これらはcanvasで直接変形はできない】" /></figure>
<p>よって、直接できないこれらの変形は次の方法を使うことで実現できます。</p>
<h2>■2つの三角形に画像を割って個別に変形させる</h2>
<p>1枚の長方形を台形に変形させるには、左上と右下で三角形を作って2つに割ってしまいます。<br />
	三角形はマスク領域となり、左上と右下のそれぞれの三角形にクリッピングマスクするように画像を処理していきます。</p>
<p>なぜこういうことをするかというと、2つの三角形にそれぞれ別の変形を与えると、おおよそどんなカタチの四角形でも作ることが可能になります。<br />
	下図では、それぞれの三角形に対し、拡大または縮小、傾斜、移動といった、canvasで簡単にできるメソッドを使って別々の変形を与えてます。</p>
<figure><img src="http://akibahideki.com/blog/2011/09/03/img/fig_04.jpg" alt="【2つの三角形に別々の変形を与えると、どんな四角形でもつくれる】" /></figure>
<h2>■左上の三角形の画像をまずは変形させてみる</h2>
<figure><img src="http://akibahideki.com/blog/2011/09/03/img/fig_05.jpg" alt="【必要な座標の情報は4箇所。】" /></figure>

<p>
	まずは呼び方、座標のルールから決めましょう。<br />
	左上の三角形を「セグメント1」、右下の三角形を「セグメント2」と呼ぶことにします。<br />
	セグメント1、セグメント2の頂点は当然それぞれ3箇所あります。（三角形ですから）<br />
	この中で2つのセグメントは2つの頂点を共有しないといけません。<br />
	どこでしょう？<br />
	右上と左下ですね、これがくっついているべきですよね？<br />
	便宜上、ポイント0を左上、ポイント1を右上、ポイント2を左下、ポイント3を右下、<br />
	と、呼ぶことにしましょう。<br />
	ここまでが呼び方と座標のルールです。<br />
	そして今回使う画像のサイズは横400px、縦300pxとしましょう。</p>
<p>先ほど、canvasで簡単にできる変形として、拡大または縮小、傾斜、移動などがあると言いましたが、実はこれらを一回で行うメソッド、今回はsetTransformというメソッドを使います。</p>
<p>こちらにて解説されています。<br />
	<a href="http://www.html5.jp/canvas/ref/method/transform.html" target="_blank">http://www.html5.jp/canvas/ref/method/transform.html</a></p>
<p>計算方法は基本的な算数なので、苦手な僕でも何とか理解できました。<br />
	では実際画像を描画してみましょう。</p>
<p>セグメント1の「変形の基準点」、つまりどこを中心に変形していくかを決定するのはとても重要です。<br />
	これができないと、カタチ自体は変形できても、三角形の外にはみ出したりします。<br />
	セグメント1の「変形の基準点」はポイント0の位置にします。<br />
	その指定のやり方は、setTransformの第5,6番目の引数に、ポイント0のXとY座標を指定します。<br />
	例えば、画像のポイント0（左上）の位置がcanvasの左上からXが80px, Yが40pxだとしたら、<br />
	画像のdrawImage(img, 0, 0)にしておいて、setTransform(1, 0, 0, 1, 80, 40)とします。<br />
	ここ、大事です。<br />
	間違ってdrawImage(img, 80, 40)にすると、変形の基準点がポイント0基準になりません。<br />
	drawImageする座標は、canvasの左上の座標にしましょう。<br />
	setTransformによって 80px, 40pxの位置にちゃんと移動してくれます。</p>
<p>
</p><figure><img src="http://akibahideki.com/blog/2011/09/03/img/fig_06.jpg" alt="【画像の横の伸縮率を変更】" /></figure>
	もしもポイント1（右上）が右に動いたら、セグメント1の画像の横方向の拡大縮小率を上げます。<br />
	例えば、横幅400pxの画像があり、ポイント1（右上）の座標が右に120px動いたとしましょう。<br />
	そうすると、120÷400 = 0.3となり、原寸の1と足して1.3が拡大率になります。<p></p>
<p>setTransform(1.3, 0, 0, 1, 80, 40)</p>
<p>とすることで、画像の横の長さがポイント0から移動後のポイント1まで拡大されます。<br />
	この計算方法を使って、画像の縦の拡大および縮小率も応用することができます、値はsetTransformの第4引数にいれます。<br />
</p>


<h2>■傾斜に対応させたらセグメント1は完成</h2>
<figure><img src="http://akibahideki.com/blog/2011/09/03/img/fig_07.jpg" alt="setTransformの第2,3引数を変更" /></figure>

<p>セグメント1はあと傾斜させて完成です。<br />
	ポイント1（右上）が下に40px動いたとします。<br />
	この時点で画像は右下下がりに傾斜しないといけません。<br />
	縦方向の傾斜の計算方法はこれだけです。<br />
	40（移動距離） ÷ 400（画像の横幅） = 0.1<br />
	この結果をsetTransformの第2引数にいれます。</p>

<p>この流れで横方向の傾斜も行ってみましょう、縦方向の傾斜と考えは同じです。<br />
	例えばポイント2（左下）が左に60px動いたとしましょう。<br />
	横方向の傾斜の計算方法は、移動距離が左（負の方向）なのでマイナスとなり、<br />
	-60（移動距離） ÷ 300（画像の縦の長さ） = -0.2<br />
	これをsetTransformの第3引数にいれます。</p>
<p>これで変形完了です。</p>


<h2>■画像をクリッピングする</h2>
<p>三角形にするので、Illustratorでおなじみ「クリッピングマスク」と同じような機能をもつ、clip()というメソッドがあるので、それを使います。<br />
	canvasでパスによる図形を描くことができますので、moveToやlineToなどのメソッドで三角形を描いたあと、clipを実行してsetTransformで変形させて最後にdrawImageすると、画像は三角形の形で切り取られた格好になります。<br />
	原則、clipメソッドを使うときは、処理の前後にsaveメソッドとrestoreメソッドを使います。<br />
	例えばrestoreしないと、clip領域（マスク領域）が解除されません、状態をsaveメソッド実行時に戻すという繰り返しを行いましょう。</p>
<p>ここまでの結果にするには、以下のようなコードになります。</p>

<code data-code="JavaScript">
		ctx.save(); //描画状態を記憶しておく（※1）<br />
		ctx.beginPath(); //パスを描画開始<br />
		ctx.moveTo(80,40); //ポイント0の座標<br />
		ctx.lineTo(600, 80); //ポイント1の座標<br />
		ctx.lineTo(20, 340); //ポイント2の座標<br />
		ctx.closePath(); //パスを閉じる、三角形の形が決まる<br />
		ctx.clip(); //上記のパス領域をクリッピング領域とする<br />
		ctx.setTransform(1.3,0.1,-0.2,1,80,40); //変形を実行<br />
		ctx.drawImage(img,0,0); //画像（写真）を描画、すでに変形されている<br />
		ctx.restore(); //クリップ領域を解除（※1）<br />
		ctx.strokeStyle = "red"; //線の色を赤にする（最終的に不要）<br />
		ctx.stroke(); //三角形の「線」を描く（最終的に不要）（※2）<br />

</code>

<p><strong><small>(※1)<br />
	サンプルではこのコードが繰り返し実行されるため、クリップ領域も毎回解除しなければなりません。<br />
	saveによって、クリップ領域が存在しない状態を記憶しておき、restoreでsave時の状態に戻す作業をします。<br />
	この考え方はclipしながらアニメーションを行う際は必須のテクニックです。<br />
	(※2)<br />
	clipはstrokeして図形の線や塗りを描かないといけないと思われがちですが、closePathした時点でクリップ領域が決まるので、stroke（線）やfill（塗り）をする必要はありません。</small></strong></p>
	
<h2>セグメント1完成</h2>
<p style="color: red;">↓↓このボタンを押して、クリップ状態と非クリップ状態を見比べてください。</p>
<iframe src="http://akibahideki.com/blog/2011/09/03/test_1.html" frameborder="0" width="740" height="480"></iframe>
	
<h2>■セグメント2の作成で気をつけておきたい点</h2>
<p>セグメント2も基本はセグメント1と一緒です、応用は利きます。<br />
	ただ、大きく注意するべき点が1点、それは「変形の基準点」をどこにするか？です。</p>
<p>先ほどのセグメント1は分かりやすく、左上が基準点になれば良かったんですが、</p>
<p>『セグメント2にとってポイント0（左上）の座標は全く意味がない』</p>
<p>ということです。<br />
	セグメント2の持つ座標はポイント1から3までです。<br />
	ポイント０がどこに行こうが、セグメント2の三角形は影響を受けない（変形しない）というわけです。</p>
<p>要するにセグメント2になったら変形の基準点を別のどこかに指定し直さないといけないということです。</p>
<p>一番分かりやすかったのが、ポイント2（左下）の位置を基準として、そこから伸縮や傾斜を行おうと思います。<br />
	よってsetTransformの5,6引数目には、ポイント2のXとY座標をいれるのですが、ここでdrawImage(img, 0, 0)にすると、ポイント2から画像が描画されるので、ポイント2の下に画像が配置されます。<br />
	なので、drawImageの第3引数のY座標を画像の高さ分上に配置します。<br />
	つまり、今回の画像の高さが300pxなので、drawImage(img, 0, -300)とすることで、画像の左下が基準点にぴったり合った状態になります。<br />
</p>
<figure><img src="http://akibahideki.com/blog/2011/09/03/img/fig_08.jpg" alt="【画像の右下と基準点を合わせる】" /></figure>

<p>これまでが、セグメント1との基準点を考える上での違いです。</p>

<h2>■セグメント2完成</h2>
<p style="color: red;">↓↓このボタンを押して、クリップ状態と非クリップ状態を見比べてください。</p>
<iframe src="http://akibahideki.com/blog/2011/09/03/test_2.html" frameborder="0" width="740" height="480"></iframe>

<h2>■セグメント1とセグメント2を表示</h2>
<p>さて、いよいよ結果を見ることができます。<br />
	セグメント1とセグメント2にそれぞれ別の変形を与えて表示させてみましょう。<br />
</p>
<figure><img src="http://akibahideki.com/blog/2011/09/03/img/fig_09.png" alt="【継ぎ目に隙間が出ている状態】" /></figure>
<p>これを見てどうでしょう？<br />
	満足しました？<br />
	僕はとても不満というか残念です、なんでしょう？この継ぎ目。<br />
	各ブラウザともどうやらこのような仕様になっているようで、クリップの痕が残ってしまい、継ぎ目に隙間が出ます。<br />
	三角形を継ぎ合わすだけでは解決できません。</p>
<p>ここは一つ、簡単な方法で解決してみましょう。<br />
	アイデアとしては、セグメント1のクリップ領域を、三角形ではなく、四角形にしようという単純なものです。<br />
	つまり、セグメント1の『左上→右上→左下』だった三角形を、『左上→右上→右下→左下』にして、四角形にしてしまい、上にセグメント2を「乗せる」ように見せて隙間をなくすという方法。</p>
<p>ただし、セグメント1は無駄な領域までレンダリングしてしまうので、パフォーマンス的に良いかどうかは、実用レベルだと別な方法も検討しないといけないかもしれません。</p>
<figure><img src="http://akibahideki.com/blog/2011/09/03/img/fig_10.png" alt="【完成】" /></figure>
<h2>■アプリ開発のために使いどころとして学んでおきたかった</h2>
<p>こういったことをやってくれるライブラリはあるんですが、HTMLをベースとしたPCやスマートフォンの描画系アプリケーションの開発のためには、原理くらいはある程度おさえておいた方がいいかな？と思ってたんですが、結構難しいですね。</p>
<p>何でもライブラリに頼ろうとすると、案件仕様によっては実現困難になりそうなので、画像を変形させる基本中の基本だけでも学んでおきたかったわけです。</p>
<p>もちろん、このままでは何にもなりません。<br />
	今回は一つの画像を2個の三角形で分割しましたが、例えば、画像を布やゴムのようにグニャグニャにしたり、扇形にしたり、3D形状にしたり、となると、今回の写真をもっと多く分割していかないといけません。<br />
	すると、今回の方法から違う計算方法などを使って実装しないといけなくなるかもしれません。<br />
	とにかくまだまだ勉強することはあるってことで。</p>
<p>以上、夏休みの自由研究でした。</p>
]]>
        
    </content>
</entry>

</feed>

