<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Re:Creator&#039;s Kansai （リクリ） &#187; kgm</title>
	<atom:link href="http://www.re-creators.jp/author/kgm/feed" rel="self" type="application/rss+xml" />
	<link>http://www.re-creators.jp</link>
	<description>Re:Creator&#039;s Kansai（リクリ）は関西のクリエイターの交流、勉強会・セミナーの開催を目的としたコミュニティです。</description>
	<lastBuildDate>Thu, 11 Mar 2010 09:47:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>知ったかFlash　第四回</title>
		<link>http://www.re-creators.jp/blog/2008/12/02_163.html</link>
		<comments>http://www.re-creators.jp/blog/2008/12/02_163.html#comments</comments>
		<pubDate>Tue, 02 Dec 2008 14:23:00 +0000</pubDate>
		<dc:creator>kgm</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[キャッシュ]]></category>
		<category><![CDATA[キャッシュ対策]]></category>

		<guid isPermaLink="false">http://re-creators.weblike.jp/?p=163</guid>
		<description><![CDATA[どーも、お久しぶりです。kgmです。
久々の投稿です。
今回は、Flashのキャッシュ対策のTipsと、それを一歩踏み込んだものを紹介します。
一歩踏み込んだ・・・ってのをカンタンに説明しておくと、
「キャッシュ対策の定 [...]]]></description>
			<content:encoded><![CDATA[<p>どーも、お久しぶりです。kgmです。<br />
久々の投稿です。</p>
<p>今回は、Flashのキャッシュ対策のTipsと、それを一歩踏み込んだものを紹介します。<br />
一歩踏み込んだ・・・ってのをカンタンに説明しておくと、<br />
「<strong>キャッシュ対策の定番となっている手法を使うと、クエリのせいでログ解析が困難！</strong>」<br />
というのを解決するものです。</p>
<p>では早速。</p>
<p><span id="more-163"></span></p>
<p>まずは、rss的なXMLを読み込む場合を考えて見ましょう。</p>
<p>FlashのHelpにも書いていますが、基本的には下記のようなコードでXMLを取得することができます。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript"><span style="color: #000000; font-weight: bold;">var</span> rssXml:<span style="color: #0066CC;">XML</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">XML</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
rssXml.<span style="color: #0066CC;">ignoreWhite</span> = <span style="color: #000000; font-weight: bold;">true</span>;
rssXml.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://hoge.com/rss.xml&quot;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>しかし、これだけでは問題があります。<br />
ブラウザによって挙動は違いますが、物によってはキャッシュが強く、ブラウザの更新ボタンなどで更新しただけではXMLの内容がリフレッシュされないことがあります。<br />
これでは非常にマズイです。最新の情報を表示することができません。</p>
<p>そこで、定番となるTipsが下記です。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript"><span style="color: #000000; font-weight: bold;">var</span> rssXml:<span style="color: #0066CC;">XML</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">XML</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
rssXml.<span style="color: #0066CC;">ignoreWhite</span> = <span style="color: #000000; font-weight: bold;">true</span>;
rssXml.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://hoge.com/rss.xml?&quot;</span>+<span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">floor</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">random</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">*</span><span style="color: #cc66cc;">1000</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>どこが変わったかというと、読み込む対象のXMLのURLが<br />
<strong>&#8220;http://hoge.com/rss.xml?&#8221;+Math.floor(Math.random()*1000)</strong>となっています。</p>
<p>これは、<strong>&#8220;http://hoge.com/rss.xml&#8221;</strong>に、GET方式でクエリとして乱数（ランダムな数字）をくっつける事で、ブラウザに「<strong>前回とは違うファイル（リクエスト）である</strong>」と認識させることにより、しっかり新しいファイルを読み込ませるというものです。</p>
<p><strong>Math.floor(Math.random()*1000)</strong>というのは、言葉で書くと<br />
<strong>括弧の中の数字の小数点以下を切り捨て！（ランダムな0～1までの小数点以下ありの数字をつくります！それを1000倍！）</strong>ということです。</p>
<p>結果、0～1000までの数字（正確には0 <= n < 1000です）を通常のURLにクエリとして追加することとなります。<br />
つまり、<strong>&#8220;http://hoge.com/rss.xml?123&#8243;</strong>というURLをリクエストすることになります。</p>
<p>ひとまずは、これにより当初の問題は解決します。<br />
（もちろん、1/1000程度の確率でクエリもかぶりますが・・・一般的には無視することが多いみたいです。）</p>
<p><em>*追記　乱数ではなく、 &#8220;?&#8221;+new Date().getTime(); とすれば読み込み時刻をクエリとするので、上記問題は回避しやすくなります。ただ、ログのファイル名がほぼ無限になりますが・・・</em></p>
<p><strong>・・・しかし！</strong>ここで新たな問題が発生します。<br />
リクエストするURLが</p>
<p><strong>&#8220;http://hoge.com/rss.xml?123&#8243;</strong><br />
<strong>&#8220;http://hoge.com/rss.xml?321&#8243;</strong><br />
<strong>&#8220;http://hoge.com/rss.xml?456&#8243;</strong></p>
<p>といったように、リクエストするURLが毎回違うわけですからサーバーのログにも当然そのようにのこります。</p>
<p>見慣れたApacheのログであれば、<br />
<strong>hoge.com &#8211; - [02/Dec/2008:22:46:49 +0900] &#8220;GET /rss.xml?523 HTTP/1.1&#8243; 200 1272</strong><br />
<strong>hoge.com &#8211; - [02/Dec/2008:22:46:51 +0900] &#8220;GET /rss.xml?778 HTTP/1.1&#8243; 200 1272</strong><br />
<strong>hoge.com &#8211; - [02/Dec/2008:22:46:53 +0900] &#8220;GET /rss.xml?515 HTTP/1.1&#8243; 200 1272</strong>といった感じで残ってしまいます。</p>
<p>これでは、ログ解析が大変煩雑になります。<br />
rss.xmlについているクエリ自体はまったく意味を持ちません。</p>
<p>ですので解析時にクエリを無視しなければなりませんが、その場合は<br />
「<strong>rss.xmlのクエリだけ無視する</strong>」<br />
という設定にしなければ、意味を持つクエリまで無視されるような状況が想定されます。</p>
<p>これがカンタンにできるログ解析ソフトであれば問題ないでしょうが、その作業が必要なことを明示しておかなければログ解析する人がとっても困ります。</p>
<p>そこで、クエリを使わずにキャッシュが強いブラウザでも大丈夫な読み込み方法が下記です。<br />
実装する際のコードなども含まれた状態にしています。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript"><span style="color: #0066CC;">System</span>.<span style="color: #0066CC;">useCodepage</span> = <span style="color: #000000; font-weight: bold;">true</span>;<span style="color: #808080; font-style: italic;">//XMLがShift_Jisの場合に必要</span>
<span style="color: #000000; font-weight: bold;">var</span> rssXml:<span style="color: #0066CC;">XML</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">XML</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #808080; font-style: italic;">//XMLを作成</span>
rssXml.<span style="color: #0066CC;">ignoreWhite</span> = <span style="color: #000000; font-weight: bold;">true</span>;<span style="color: #808080; font-style: italic;">//お約束</span>
<span style="color: #000000; font-weight: bold;">var</span> result_lv:<span style="color: #0066CC;">LoadVars</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">LoadVars</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #808080; font-style: italic;">//sendAndLoadで読み込むので、結果格納用のLoadVars</span>
result_lv.<span style="color: #0066CC;">onLoad</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>success:<span style="color: #0066CC;">Boolean</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #808080; font-style: italic;">//読み込み完了時動作</span>
 <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>success<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
  <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">unescape</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #808080; font-style: italic;">//読み込み結果を出力ウインドウで確認。unescapeが重要です。</span>
  rssXml.<span style="color: #0066CC;">parseXML</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">unescape</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #808080; font-style: italic;">//読み込んだ結果をXMLにパース。unescapeが重要です。</span>
  txt.<span style="color: #0066CC;">text</span> = rssXml.<span style="color: #0066CC;">firstChild</span>.<span style="color: #0066CC;">firstChild</span>.<span style="color: #0066CC;">firstChild</span>.<span style="color: #0066CC;">firstChild</span>.<span style="color: #0066CC;">nodeValue</span>;<span style="color: #808080; font-style: italic;">//ノードの値を表示したり格納したり。</span>
 <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span>
  <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Error connecting to server.&quot;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #808080; font-style: italic;">//読み込み失敗。</span>
 <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">var</span> send_lv:<span style="color: #0066CC;">LoadVars</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">LoadVars</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #808080; font-style: italic;">//読み込みLoadVars</span>
send_lv.<span style="color: #006600;">id</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">floor</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">random</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">*</span><span style="color: #cc66cc;">1000</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #808080; font-style: italic;">//上記に、POST用の乱数くっつけます。</span>
send_lv.<span style="color: #0066CC;">sendAndLoad</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://hoge.com/rss.xml&quot;</span>,result_lv,<span style="color: #ff0000;">&quot;POST&quot;</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #808080; font-style: italic;">//POSTで読み込みます。</span></pre></div></div>

<p>何をしているかと言うと・・・</p>
<ul>
<li>用意されたXMLのload関数を使わずに、外部プログラムと通信するLoadVarsのsendAndLoad関数を用いる</li>
<li>POSTメソッドでXMLファイルにアクセスする</li>
<li>さらにPOSTに乱数を仕込む事によって新しいリクエストであることを強調。</li>
<li>上記で得られるのは、新しいXMLの内容であるが”テキスト”として読み込まれる</li>
<li>そこでXML.parseXML()関数を使い、テキストをXMLにパースする</li>
</ul>
<p>という方法を取っています。<br />
これにより、クエリを残さずに最新ファイルを表示することができます。</p>
<p>ただ・・・当然ですが<br />
<strong>hoge.com &#8211; - [02/Dec/2008:22:46:33 +0900] &#8220;POST /rss.xml HTTP/1.1&#8243; 200 1272</strong><br />
というように、POSTでの要求というログが残ります。</p>
<p>また、サーバー環境やログ解析環境によっては期待した効果が得られないこともあるかもしれません。<br />
結局、ログ解析者との意思疎通は必要になってくるかもしれません。</p>
<p>以上、意外とググっても見つからない問題だったので自分のやり方を書いてみました。<br />
ほかにもやり方があるかも知れません。いい方法があれば、ぜひ教えてください！！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.re-creators.jp/blog/2008/12/02_163.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>知ったかFlash　第三回　ブログパーツについて 1</title>
		<link>http://www.re-creators.jp/blog/2008/07/11_54.html</link>
		<comments>http://www.re-creators.jp/blog/2008/07/11_54.html#comments</comments>
		<pubDate>Fri, 11 Jul 2008 06:21:31 +0000</pubDate>
		<dc:creator>kgm</dc:creator>
				<category><![CDATA[ブログ]]></category>

		<guid isPermaLink="false">http://re-creators.weblike.jp/?p=54</guid>
		<description><![CDATA[どうも、kgmです。
みなさまおなじみの、「知ったかFlash」のお時間です。
今回は、Flashを使う事例の一つとして、ブログパーツを説明したいと思います。
ちなみに最近のブログパーツブームはなかなかのもので、企業のキ [...]]]></description>
			<content:encoded><![CDATA[<p>どうも、kgmです。</p>
<p>みなさまおなじみの、「知ったかFlash」のお時間です。</p>
<p>今回は、Flashを使う事例の一つとして、<strong>ブログパーツ</strong>を説明したいと思います。</p>
<p>ちなみに最近のブログパーツブームはなかなかのもので、企業のキャンペーンサイトにいけばかなりの確率で配布されており、ブログパーツポータルなども更新材料に困らない程の賑わいです。<br />
<span id="more-54"></span></p>
<h3>ブログパーツとは</h3>
<p>さて、ブログパーツってなんなの？と言うわけで、wiki先生に聞いてみたところ</p>
<blockquote><p>
ブログパーツとは、ブログのページ上に配置し、そのブログに関する情報などのコンテンツを表示することができる部品（パーツ）である。ブログツール、ブログアクセサリー、ブログシール、（ブログ）プラグイン、ウィジェット、ガジェットなどとも呼ばれる。<br />
類似した機能を持つものとしてiGoogle用のウィジェットやデスクトップ向けのウィジェットがあるが、これらは利用者当人が使用する目的で製作されたものが多いのに対して、ブログパーツはサイトの管理者がブログの閲覧者へ向けて情報を提供するといったサービスをおこなっていることが多い。
</p></blockquote>
<p>引用元：<a href="http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%AD%E3%82%B0%E3%83%91%E3%83%BC%E3%83%84" target="_blank">wiki</a></p>
<p>となってます。</p>
<p>要は、ブログをより便利に、より楽しくするためのツールです。<br />
時計・ゲーム・占い・画像・動画・音楽などなど、様々なジャンルのものが存在します。</p>
<p>おなじみのアクセスカウンターやアクセスランキング、一行ゲストブックなどもブログパーツといえなくはないです。<br />
が、ブログよりも以前からある事やブログを対象に作られているわけではない事から、厳密には違うかもしれません。<br />
しかし配布側が「ブログ専用だよ！」って言ってしまえば、それはブログパーツになるでしょう。<br />
まあ、曖昧って事なのであまり気にしないのがいいかと思います。道具は使いようです。</p>
<p>では、実際にどんなものがあるのでしょうか？</p>
<dl class="clearfix">
<dt>ブログパーツ参考　【時計型】</dt>
<dd style="width:160px;float:left;"><script type="text/javascript" language="javascript" src="http://www.nhk.or.jp/lab-blog/blogtools/script/clock150.js"></script>
<div align="center" style="margin:0;padding:0;">
<div style="font-size:10px;width:150px;margin:0 0 10px 0;padding:0;text-align:left;">※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません</div>
</div>
</dd>
<dd style="width:160px;float:left;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="160" height="130" codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"><param name="allowScriptAccess" value="always" /><param name="movie" value="http://www.uniqlo.jp/uniqlock/swf/blog_small.swf?user_id=CMwMlGyILDp9BZtX" /><param name="base" value="." /><param name="quality" value="high" /><param name="wmode" value="transparent" /><embed src="http://www.uniqlo.jp/uniqlock/swf/blog_small.swf?user_id=CMwMlGyILDp9BZtX" width="160" height="130" allowScriptAccess="always" base = "." quality="high" wmode="transparent" pluginspage="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" /></object></dd>
<dd style="width:160px;float:left;"><script type="text/javascript" src="http://www.yoshizumi.tv/blopa/yclock.js"></script><script type="text/javascript">yclockWrite(0,0);</script></dd>
<dd style="width:160px;float:left;">
<p id="fb018"><a href="http://first-buzz.com/">ブログパーツで懸賞ゲット！ブログパーツの新しいカタチ FirstBuzz </a></p>
<p><script language="JavaScript" src="http://first-buzz.com/blogparts/018/display.php?media_code=287959" charset="Shift-JIS"></script> </script>
</dd>
</dl>
<p><br style="clear:both;"><br />
ひとまずは、シンプルな時計型のブログパーツを見てみましょう。<br />
ちなみに右二つは僕が制作したものです。<br />
やはりブログに一個は欲しいって人が多いみたいで、定番で根強い人気を誇るジャンルです。<br />
故に数も多く、競争率が高い感じです。</p>
<p>内容としては、Flashで作った時計です。<br />
ほとんどが、表示しているユーザーのPCに設定された時間を表示しています。<br />
なのでユーザーのPCの時間がずれていればもちろんずれます。<br />
正しい時間を表示する事も可能なのですが、その場合は正しい時間をサーバーに聞きに行くという行程が増えるので、<br />
多数配布されサイトとは段違いなPVをたたき出すブログパーツにおいては、<br />
単純でも一つサーバー側処理・通信が増えるだけでコストが跳ね上がります。<br />
コストといっても開発コスト自体はこの程度のプログラムならばそこまで増えませんが、<br />
サーバー側の処理、サーバーとの通信量がブログパーツの表示分だけ増えるので、<br />
それに耐えうるサーバースペックと回線帯域確保に多大なコストがかかる事になります。</p>
<p>ちなみにブログパーツのPVですが、ちょっと人気があるものですと簡単に1万pv/day とか10万pv/dayを越えます。<br />
一日10万アクセス以上のサーバー側処理となると、ちょっと気軽には考えないほうがいいですよね。<br />
特にクライアントワークともなると、安定したサービスレベルを確保しなければなりませんし。</p>
<p>この事も踏まえ、ブログパーツについては次のような事が言えると思います。</p>
<ul>
<li>配布すると多数のブログに貼られるため、PV数が掛け算で増えていく。（各ブログのPVおよびその平均値　×　貼り付けブログ数）</li>
<li>一日のPV数が簡単に万単位になるので、ファイルサイズが大きいととんでもない転送量になる</li>
<li>上記と同じ理由で、サーバー側処理もとんでもない負荷になる</li>
</ul>
<p>PVが稼ぎやいというのは非常に魅力的なメリットです。<br />
ですがその反面、大きなリスクも潜んでいます。</p>
<p>ブログパーツを制作する際は</p>
<ul>
<li>一連の総ファイルサイズ</li>
<li>できるだけシンプルなシステムフロー</li>
</ul>
<p>に気をつけなければなりません。</p>
<p>今回は、ひとまずこれまでとしておきます。<br />
次回は、さらに高度なブログパーツについての説明をしたいと思います。<br />
最近人気の、「フロートタイプ」とよばれるようなブログ全体に覆いかぶさったり<br />
ブログ内を自由に動き回ったりするようなものも説明しようかと思います。</p>
<p>あ、最後に宣伝宣伝。<br />
会社でこんなサービスやってます。<br />
<a href="http://first-buzz.com/index.php" target="_blank">ブログパーツを貼るだけで、懸賞・プレゼントがもらえるサービス　 FirstBuzz（ファーストバズ）</a><br />
ブログパーツに興味がある方は、貼り付けてみてはいかがでしょうか。<br />
ついでに懸賞も当たったりしちゃうかもしれないんで。</p>
<p>では、また次回！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.re-creators.jp/blog/2008/07/11_54.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>知ったかFlash　第二回　～Flashだけでできる事、できない事～</title>
		<link>http://www.re-creators.jp/blog/2008/06/20_33.html</link>
		<comments>http://www.re-creators.jp/blog/2008/06/20_33.html#comments</comments>
		<pubDate>Thu, 19 Jun 2008 16:19:38 +0000</pubDate>
		<dc:creator>kgm</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[kgm]]></category>

		<guid isPermaLink="false">http://re-creators.weblike.jp/?p=33</guid>
		<description><![CDATA[どうも、kgmです。
前回に引き続き、これを知っていれば多少Flash知ってる顔ができる、「知ったかFlash」のお時間です。
前回はちょっとFlasherとデザイナーとの軋轢が垣間見えるような内容でしたが、
今回はプラ [...]]]></description>
			<content:encoded><![CDATA[<p>どうも、kgmです。</p>
<p>前回に引き続き、これを知っていれば多少Flash知ってる顔ができる、「知ったかFlash」のお時間です。</p>
<p>前回はちょっとFlasherとデザイナーとの軋轢が垣間見えるような内容でしたが、<br />
今回はプランナー・プロデューサー・ディレクター　vs　Flasher　な内容です。</p>
<p><span id="more-33"></span><br />
<strong>Flashだけで、できる事とできない事</strong></p>
<p>Flashは素晴らしいツールです。<br />
アニメーションもできるし、サーバーサイドプログラム（cgiやphp）との連携も得意です。<br />
演算による描画もできますし、様々なクリエイティブを可能にしてくれます。</p>
<p>ですが、Flashも万能ではありません。Flash単独でできる事というのは限られています。<br />
基本的にはFlashは自分の表示領域の中でしか動かないものであり、<br />
外の領域には干渉しないのと思っていただいていいかと思います。</p>
<p>ここで、前提知識として知っておいて頂きたい事があります。</p>
<p>WEBでお目にかかる様々な技術ですが、大きく分けて<br />
<b>ユーザーのPC上で処理されるもの</b>と<b>サーバー側で処理されるもの</b><br />
に別れ、<br />
<b>FlashはユーザーのPC上で処理されるものである</b><br />
という事です。<br />
HTML、CSS、JavaScript、Ajaxなどは前者、<br />
CGI、PHP、Ruby、Pythonなどは後者です。</p>
<p>では、Flash単独でできる事とできない事を分けていきましょう。<br />
できない事については、僕の場合ならこうするっていう解決策の例を提示してみます。<br />
例としては、ノリノリなクライアントorプロデューサー相手の、通販ありのサイトを思い浮かべてください。</p>
<dl>
<dt><strong>ズバーンとこの画像とコピーが入ってきてさ、そこでブワワァーーって光の玉とかでちゃって、ドーンとロゴ+主力商品がでてくるのよ！！</strong></dt>
<dd>可能です。</p>
<p>PhotoShopやIllustrator、FireWorks（Flashだけでもできますが左記を使うのが一般的）で画像、ベクターデータを用意し、Flash上でフレームアニメーション、ActionScriptを駆使すれば可能です。<br />
もちろん、表現に凝るのであれば相応の労力を伴います。</dd>
<dt><strong>でさ、ロゴと商品でたらグワッって枠がひろがってロゴと商品も飛んでって、そこから商品紹介のページがでてくるとかどう！？</strong></dt>
<dd>不可能です。</p>
<p>といっても、その言葉の通りの事をすればですが。<br />
Flashはあくまで独自の描画エンジンに従って動作しますので、完全なWEBページレンダリング（描画）する事はできません。<br />
なので、WEBページをFlash内で描画することはできません。（HTMLには対応していますが、WEBページという程の物を描画する例はあまりありません。）</p>
<p><b>解決策</b><br />
WEBページのキャプチャ画像をアニメーションし、アニメーションが終わった時点でページ遷移をすることで同様に見せる事は可能です。画像を駆使すれば結構なんとでもなります。</dd>
<dt><strong>でさ、商品が立体的にぐるぐるまわったり、カテゴリ別に整列できたりしてさ、サクサク欲しいもの探せちゃうのよ！</strong></dt>
<dd>可能です。・・・が、一応可能、というレベルです。</p>
<p>というのも、Flash単独で行うのが効率的ではないからです。<br />
立体的にぐるぐるまわったり・・・というのはFlashが得意とするところです。<br />
商品が気持ちのいい動きで並び変わったりするのもFlashの得意なところでしょう。<br />
しかし、整列させるためのカテゴリ分けや探すための検索については、Flash単独でも可能なのですが、<br />
データベースやPHPを併用したほうがぐっと効率がいいかと思われます。<br />
これについては、商品の更新・管理なども関ってくるからなのですが。<br />
更新頻度も低く、商品数も本当に大したことない！という場合はFlash単独でも問題ないと思います。<br />
しかし、頻繁に更新・追加・削除があり、商品数もそれなりの数になってきた場合は、<br />
それらの情報をFlash内に記述しなおし、パブリッシュ（swf化）する作業が必要になってきます。<br />
これは非常に非効率であり、ミスも起こりやすくなります。<br />
与件をしっかり整理し、適切な判断が必要になります。</dd>
<dt><strong>でさ、気に入った商品を買い物カゴにドラッグ＆ドロップでポイポイできて、ドーンと一括購入できちゃうんよ！</strong></dt>
<dd>もちろん不可能です。</p>
<p>買い物カゴにドラッグ＆ドロップでポイポイはできます。<br />
が、一括購入するためには決済システムと連携する事が必須です。<br />
FlashはユーザーのPC上で処理を行うものですので、サーバーサイドにアクセスするためにはCGIやPHPなどの力を借りなければなりません。<br />
ちなみにFlash単独では、サーバー上の単純なテキストファイルの編集もできません。</p>
<p><b>解決策</b><br />
決済システムを用意し、Flashと連携させるフローを構築しましょう。<br />
システム側と綿密な打ち合わせを行い、Flashで使用する事を前提に<br />
システムを構築・カスタマイズして実現させます。</dd>
<dt><strong>でさ、付加要素として自分のアバター持てたり、時間とか天気表示させたりしちゃってさ！</strong></dt>
<dd>半分可能です。</p>
<p>まずアバターですが、これはFlash内に用意された数種類のアバターを組み合わせて選択・表示させることができます。<br />
で、ここで問題になるのが次回訪問時です。<br />
前回つくったのが維持されてなければ意味がありません。<br />
このサイトがSNSのようなユーザー間コミュニケーションがないのであれば、<br />
Flashに用意されている<b>SharedObject</b>という物を使えば次回訪問時も同じアバターを表示できます。</p>
<p>このSharedObjectと言うものですが、ブラウザについているCookieという物のFlash版と考えてください。<br />
Flash専用の記憶領域をユーザーのPC上に設けるものです。<br />
これがなかなかに便利で、ゲームのセーブデータや、サイトへの訪問回数などを記録できたりするわけです。<br />
しかし、ユーザーのPC上にしかないため、当然他のユーザーからは見えません。<br />
アバターを他のユーザーにも公開するためには、サーバーサイドにアバター情報を保存するしかありません。</p>
<p>時間についてですが、ユーザーのPCに設定された時刻を表示するのであればなんら問題ありません。<br />
しかし決済システムの営業時間などと絡んだり、全ユーザーが同時間帯でないとマズイような場合は、<br />
サーバーサイドから正確な時刻を取得させる必要があります。</p>
<p>天気についてですが、Flash単体では完全に不可能です。<br />
天気情報をサーバー上に更新してくれるようなサービスを用意するか、天気情報を提供しているAPIなどを使うしかありません。<br />
ちなみに天気情報は、商用利用だと有料なものしかないと思われます。</p>
<p><b>解決策</b><br />
サイトの性質、目的等から機能に優先順位を付けていき、労力・費用に見合わないものは削るように調整します。<br />
これについては、クライアントやプロデューサーと綿密に打ち合わせる必要があります。</dd>
</dl>
<p>というわけで、書いてて誰が読むんだというくらい長ったらしくなってしまいましたが、<br />
案件受注時には本当によくある話です。<br />
できるだろって思って軽返事をし、自社に持ち帰ってえらいこっちゃなんて笑えません。<br />
とかくシステム構築はお金も時間がかかります。<br />
これはシステムが必要だ！というのを嗅ぎ分ける嗅覚は、本当に大事です。</p>
<p>では、やっとの思いでまとめです。</p>
<p>・Flashはサーバーサイドができないので、システムが絡むと当然システム人員が必要だよ<br />
・両者の連携は実装もデバッグも時間かかるよ<br />
・結構クリエイティブ合気道で返せる事も多いよ<br />
・そのために相手の目的を汲み取り、代案、すり替え案を提案できる知識は大事だよ</p>
<p>ってお話でした。</p>
<p>ぶっちゃけ、駄エントリな気がしてきました。</p>
<p>次回は・・・・<br />
「ちょっとまった、ＳｈａｒｅｄＯｂｊｅｃｔって便利だけど、本当に大丈夫！？」</p>
<p>で行こうかなと思ってます。<br />
変わるかもしれません。すいません。</p>
<p>本当にありがとうございました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.re-creators.jp/blog/2008/06/20_33.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>知ったかFlash　第一回</title>
		<link>http://www.re-creators.jp/blog/2008/05/29_16.html</link>
		<comments>http://www.re-creators.jp/blog/2008/05/29_16.html#comments</comments>
		<pubDate>Thu, 29 May 2008 10:32:22 +0000</pubDate>
		<dc:creator>kgm</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[firstbrand]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[kgm]]></category>

		<guid isPermaLink="false">http://re-creators.weblike.jp/?p=16</guid>
		<description><![CDATA[どうも、はじめまして。FirstBrandで働いているkgmです。主にFlashとか触っています。
なにを書こうかなーと考えてたんですが、意外とベタなFLASH技術について書かれているブログって少ないんじゃないかなーと思 [...]]]></description>
			<content:encoded><![CDATA[<p>どうも、はじめまして。FirstBrandで働いているkgmです。主にFlashとか触っています。</p>
<p>なにを書こうかなーと考えてたんですが、意外とベタなFLASH技術について書かれているブログって少ないんじゃないかなーと思ったんですよ。<br />
なんで、Flashを触れない、ちょっとしか触ったことがない、または触る必要も無いけど知っておく必要がある人にもタメになる、<br />
「これくらい知っといたら、ちょっとFlash知ってるぜ的な顔ができる」的な記事を書いていこうかと思います。<br />
いわゆる、コツってやつですかね。</p>
<p>じゃあ第一回の今回は・・・</p>
<p><strong>ベクターか、ビットマップか　それが問題だ</strong><br />
って事にしときます。</p>
<p><span id="more-16"></span><br />
Flashでグラフィック要素を扱う場合、イラストレーターやファイヤーワークス、Flashで図形ツールやパスツールなどで作った、<strong>ベクター要素</strong>と、イラストレーターやフォトショップ、ファイヤーワークスなどで用意した<strong>ビットマップ要素</strong>（つまり画像。ラスタデータとも呼びますね）のどちらかを扱うことになります。</p>
<p>この二つは当然の事ながら別々の長所と短所を持っていて、対極に位置する関係です。<br />
この二つを、しっかりと効果的に使いこなせるかどうかというのが、基本ですがとても重要になります。<br />
このエントリは、是非デザイナーさんにも読んでほしいです。<br />
よく、デザイナーさんとこのあたりで揉める事があるので・・・・。</p>
<p>で、この二つ根本的に何が違うの？って言うのを簡単に説明するとですね・・・</p>
<p>ベクターデータとは、<strong>直線、曲線、色、位置などを数値化した情報データのこと</strong>です。<br />
Flashでは数値化された情報データを、独自の描画エンジンにて描画し、グラフィックにします。</p>
<p>また、ビットマップデータ（ラスタデータ）とは、<strong>1ドットにひとつづつの色を置いた、点打ち情報のデータ</strong><br />
です。<i>*1</i>Flashでは、そのままいわれた通り表示する感じですかね。</p>
<p><i>*1　画像のエンコード方式によって、もちろん差異があります。<br />
GIFなんかは色情報を横一列に記述するので、横一列が同じ色の場合、非常に軽くなります。<br />
ためしに、フォトショップなんかで300pix*300pixあたりで縦グラデーションと横グラデーションでGIF書き出ししてみてください。<br />
容量に大分差があります。豆知識豆知識ｗ</i></p>
<p>で、じゃあ具体的にどういう差が生まれるの？ってとこですが、<br />
それぞれ長所短所があるわけです。<br />
まず長所から見てみましょう。</p>
<ul>
<strong>■ベクター</strong></p>
<li>点と点を結び、それに色を追加した情報の塊なので、超複雑な図形で無い限り、データ量が少ない（容量が少ない）<em>*2</em></li>
<li>Flash上でそのまま変形や色変更ができるなど、編集が容易</li>
<li>拡大、縮小などをしても、画質が乱れるようなことがない。</li>
</ul>
<ul>
<strong>■ビットマップ</strong></p>
<li>ベクターでは表現できないような、高度な表現が可能。（フォトショップのフィルタ機能など）</li>
<li>ベクターにくらべて、描画処理が劇的に少ない<em>*2</em></li>
<li>イラストレーターやフォトショップでのデザインデータからFlashに取り込む際に、変化なく取り込める（環境依存が少ない）</li>
</ul>
<p>などが挙げられるかと思います。</p>
<p>で、短所ですが・・・</p>
<ul>
<strong>■ベクター</strong></p>
<li>描画に演算処理が必要なため、複雑な図形になると、処理が重くなる。</li>
<li>基本的には点、線、色で描画するため、表現に限界がある。</li>
<li>イラストレーターなどからFlashに取り込む際、データが変化する（ぶっ壊れる！）事がある。</li>
</ul>
<ul>
<strong>■ビットマップ</strong></p>
<li>凝った画像、でかい画像、色数が多い画像、アルファ（透明）を使った画像などは、ファイル容量がクソでかい</li>
<li>修正があった場合、非常に面倒（フォトショなどで元データ修正して書き出し、そして取り込み）</li>
</ul>
<p>見たいな感じですかねー。</p>
<p>なので、ベクターかビットマップかを判断するには、<br />
表示したいグラフィック要素が</p>
<ul>
<li>ビットマップでないと表現不可能なのかどうか？</li>
<li>ベクターで表現して、処理の重さは許容範囲内か？</li>
<li>編集の容易性は、どれほど必要か？</li>
</ul>
<p>などを考慮する必要があります。</p>
<p>つまり、グラフィックの再現性と処理パフォーマンス、そして編集の容易さを天秤にかけます。<br />
グラフィック命の表現であれば、多少処理パフォーマンスに影響を与えようとも、文字や図形はベクターでやった方がキレイです。<br />
逆に動きの表現重視であれば、要素を極力ビットマップにして行き、許容できる処理パフォーマンスまで抑えます。<br />
単純に最終アウトプットの事だけ考えるのならば再現性と処理パフォーマンスだけ見ればいいのですが、<br />
編集の容易さを無視すると、後で泣きます・・・・</p>
<p>というわけで、両方の長所・短所がわかり、使いどころもなんとなく見えてきたかと思います。<br />
長かったですが、ココから本題。<br />
それぞれのデータを使う上でのコツ、注意点です。</p>
<dl>
<strong>ベクター</strong></p>
<dt>とにかく、パスを最小限に抑える。</dt>
<dd>とくにイラストなどでよくありますが、スキャンした画像データなどをライブトレースした場合などは、イラストレーター上でスムーズツールなどを使って極力パスの数を減らします。<br />
			イラストレーターであれば、「パスの合流」や「透明部分の分割・統合」などを駆使すれば、よりパスを減らす事ができます。塗りの下側にある、表示されないパスなどはこの方法で消してください。</dd>
<dt>無駄なグラデーションを使わない。</dt>
<dd>グラデーションもかなりの描画処理を必要とします。小さいところや、単色でもまかなえる部分はグラデーションを取り払いましょう。どうしても必要な場合は、ビットマップと十分な検討をしてください。</dd>
</dl>
<dl>
<strong>ビットマップ</strong></p>
<dt>適切なサイズで</dt>
<dd>ビットマップはその性質上、拡大すると画質が乱れます。だからといって、「大は小を兼ねる」と大きく書き出して取り込むような事をしてしまうと、ファイルサイズが大変です。最適なサイズで書き出しましょう。</dd>
<dt>適切な形式で</dt>
<dd>画像にはJPG,GIF,PNGなどなど色んな形式があります。その都度に合わせた形式で書き出してください。具体的には・・・<br />
・色数が少なく、簡単な図形的なものであれば容量が少ないGIFで。<br />
・写真などの色数が多いデータはJPGで。<br />
・アルファ（透明）が必要な場合は、PNGで。<br />
			となりますが、ここで注目！<br />
			最後のPNGですが、イラレ・フォトショで作ると、PNG-24で書き出さなければ透明部分のアンチエイリアスが効かないため、やむを得ずPNG-24で書き出します。<br />
			が！！ファイヤーワークスにてPNG-8で書き出すと、なんとアンチエイリアスが効くじゃないですか！これで、容量かなり抑えれます。<br />
			イラレやフォトショで作ってしまっていても、個別にファイヤーワークスに持っていって書き出すくらいの価値はあります。</dd>
</dl>
<p>とまあ、少ないですがこんな所じゃないでしょうか。</p>
<p>ちなみに、上記の特性のいいとこ取りな方法もあることはあります。<br />
たとえば、ベクターデータで作っておいて編集の容易さを確保しつつ、表示する際にはActionSctiptで<br />
cacheAsBitmap = true;<br />
を設定することにより、ベクターデータをビットマップデータとして扱う事もできます。<br />
ただ、cacheAsBitmapは拡大・縮小・回転の際に再描画されてしまうため、それらの動きをする要素には使用禁止です！！余計重くなります。<br />
なので、BitmapData.draw()などでムービークリップ自体を一旦ビットマップに描画してしまう、などの扱いがいいかと思います。</p>
<p>こちらの詳しいやり方は、機会・要望があれば書いてみようかと思います。</p>
<p>本日は、ひとまずこれまで！<br />
またよろしくお願いいたします～～<br />
<!--more--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.re-creators.jp/blog/2008/05/29_16.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
