HTML5とSVGを使って着せ替え人形を作る

昔、ユニクロでグリーンのカラーチノを買った。500円と安かったからだが、何と合わせてよいかさっぱり分からなかった。今年の春はカラーパンツが流行したのだが「何と合わせてよいか分からない」という人も多いのではないかと思う。売る側からすると「合わせ方が分からないから買わない」というのは大きな機会損失だ。もちろん、カタログを揃えるという手もあるだろうが、もう少し単純化できそうだ。

そこで、SVGを使ってファッションコーディネートが提案できないかと思っていた。なかなか普及が進まなかったHTML5だが、iPadなどでも扱うことができる。アプリと違って、そのままe-commerceサイトやカタログに接続できるのが利点だろう。

ところが、なかなかできなかったので開発は難しいのだなあなどと諦めていた。

ところが本(『HTML5ガイドブック 増補改訂版 (Google Expert Series)』)を読んで一から勉強してみると1時間程で完成してしまった。(できあがりはコチラ)ここまで苦節1年。いったい、この1年は何だったのだろうかと思ってしまう。つまり実際はとても簡単なのだ。

最初に準備するのはillustratorで作った線画だ。ベジエが残っていると扱えないので、すべての点は角になるように作る。

なおSVGを表示するためににはHTML5が動作するブラウザーを使う必要がある。今回はSafariの5.xを使った。

まず、HTML5で宣言する。

<!DOCTYPE html>
<head>
<meta charset=”utf-8″>
</head>

SVGは直接書いても良いし、DOMに付け加えていってもよいらしい。この時ポリゴンにIDを付け加えておくと、JavaScriptで操作ができるようになる。要素を作ってappendしてゆく。

var SVG = ‘http://www.w3.org/2000/svg’;
var svg = document.createElementNS(SVG,’svg’);
svg.setAttribute(‘width’, ‘300’);
svg.setAttribute(‘width’, ‘300’);
polygon.setAttribute(‘points’,points);
polygon.setAttribute(‘fill’,#FFFFFF);
svg.appendChild(polygon);
root.appendChild(svg);

20130725-01

さて、座標の指定だが、Adobe Illustratorなどで最初に人形を作っておき、SVG形式で書き出す。ここから座標を抜き出して行く。後で操作が複雑になることを避けるためには人形を単純にしておくと良い。すると人形ができ上がる。

今回は色を変えたい。jscolorというコードが手元にあったので使ってみる。どうもFirefoxの3.xでは動かないようだ。

SVGは属性のセットの仕方が独特である。属性情報を得る為にもgetAttributeという特殊な形を使う。

function change_color(){
var elements = document.getElementById(“pants”);
var color = document.getElementById(“colorfield”);
elements.setAttribute(“fill”, color.value);
elements.setAttribute(“stroke”, “#000000”);
elements.setAttribute(“stroke-width”, “.25”); }
20130725-02

すると、フィールドから色を変えるたびにパンツの色を変えることができる。 Safariの他にOperaでも試したが、動作が確認できた。Firefoxは左側の色変更ができなかった。

 

二重ルータという「問題」

二重ルータという問題がある。実際には二重ルータが問題なのではなく、設定の不具合によって、複数のルータが1つのネットワークに対して矛盾した指示を出すという問題だ。近年になって無線機器が増加したために、知らず知らずのうちに設定が複雑化することがある。解決策はネットワークの簡単な仕組みを理解することなのだが、これがなかなか大変だ。




近所のリサイクルショップで無線ルータを買った。300円だった。当初想定していた設置はできなかったものの、ルータとしてはきちんと使える。スィッチングハブの機能がついているので、ハブとして使うことにした。設定の仕方を勉強しているうちにいろいろとおもしろい記事を見つけた。世の中には「同じネットワーク内にルータが2つあるといけない」と信じている人がいるのだ。これを二重ルータ問題という。ありもしない問題を解決しようと、様々な「取り組み」が行われている。

普通、家庭内のネットワークは1つの装置を通じて外(いわゆるインターネット)とつながっている。これを「モデム」と言う。モデムにはルータ機能がついている事が普通だ。無線をやりたい人は、もう一つルータを買ってきてつなげる。すると、家庭内ネットワークの中に入れ子のように別のネットワークが作成される。ルータの外側には192.168.0.1、192.168.0.2というような番号(IPアドレス)が付与されている。内側のネットワークに同じ192.168.0.2という番号を付与すると、番号の重なりが生まれる。そこで内側のネットワークには、違った番号体系を付けるという約束がある。例えば、192.168.1.1、192.168.2.1という具合だ。

同一ネットワークは、192.168.1までは共通であり、その下の番号だけが識別に使われている。これを明示的に示すために255.255.255.0という番号を使う。この番号を「サブネットマスク」と呼んでいる。パソコンのネットワーク設定の画面には必ず付いている。つまり、IPアドレスとサブネットマスクを合わせたものが、識別番号になる。

なぜ、IPアドレスが192.168で始まるかという問題(他にも10.1.0.1というような番号体系もある)や、どうして最後の数字の固まりだけ意味を持たせた場合に、255.255.255.0になるのかというのはちょっと複雑なのだが、とにかく、IPアドレスとサブネットマスクさえ整理すれば、いくつものルータを混在させたりすることもできる。また便宜上「入れ子」という説明の仕方をしたが、実は下流にあるパソコンをそのままネットにつなげることも可能だ。インターネットはクモの巣のようにネットワークを張り巡らせることができる。だからWorld Wide Web(クモの巣)と呼ぶのである。

このようにちょっとした知識さえあれば、ネットワークは簡単に設定できる。しかし、テレビやゲーム機を無線LANに参加させることができるようになり、知らず知らずのうちに設定が複雑になる場合が出てきた。またパソコンにもルータ機能が付いており、さらに複雑化が進む。大抵の機械には「自動でつなげます」という仕組みが備わっているのだが、他の機械が入るこむことが想定されていない(全ての組み合わせを事前に予測する事ができない)ために、自動設定でも問題が排除できない。

ルータには、IPアドレスを自動で付与する仕組み(これをDHCPと呼ぶ)が付いている。つまり、個々のルータが自動でIPアドレスを付与するうちに整合性が取れなくなったりすることが起こる。つまり「二重ルータ」が問題なのではなく、IPアドレスの重複が実際の問題なのである。ところが二重ルータ問題という言葉があるので「ルータが2つ以上あるのは良くない」と思い込んでいる人がいて、その人が別の人にアドバイスをしたりするために、話が必要以上にややこしくなっているらしい。

これを解決する一番よい方法は、まず手持ちの機器がどのように接続されているのかを書き出してみることだ。必要でないルータは機能を使わないようにする。もしルータとして使うのであれば、固まり(これをセグメントと呼ぶ)を分けて管理すると良いだろう。こうして図を作ると、速度が遅くなっている原因(これをボトルネックと呼ぶ)を突き止めることもできる。無線装置の中には300Mbpsなど通信速度が早いものも売られている。しかし、途中で10Mbpsの装置が使われていると、通信速度を活かすことはできない。

100x100

問題を解決する方法には2つある。1つは基本的な仕組みを理解した上で「デザインする」というやり方だ。ネックは英語由来の専門用語が多いということと、基礎概念へのなじみのなさ(例えば、255は2の8乗-1を意味する)にあるだろう。もう一つは複雑さを回避(つまり、使用するルータを1つに限定)するというやり方である。柔軟なのは前者のやり方だが、基礎知識が必要になる。後者のやり方は基礎知識は必要でないのだが、柔軟性に欠ける。

後者のアプローチを取ると「1つのネットワークにはルータは1つのみ」となってしまうのである。

Google Recommendation Advertisement