<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>KYUCON*BLOG</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/" />
    <link rel="self" type="application/atom+xml" href="http://www.kyucon.com/blog/atom.xml" />
    <id>tag:www.kyucon.com,2009-09-21:/blog//1</id>
    <updated>2010-02-17T00:15:22Z</updated>
    <subtitle>FlashとShockwaveの実験や、日常について、メモ代わりに載せていきます｡ </subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Commercial 4.261</generator>

<entry>
    <title>mixiアプリのカテゴリ掲載申請で却下されるパターン</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2010/02/mixi-3.html" />
    <id>tag:www.kyucon.com,2010:/blog//1.418</id>

    <published>2010-02-15T14:01:45Z</published>
    <updated>2010-02-17T00:15:22Z</updated>

    <summary>Union Platform を使って対戦ゲームを作りました。 下記いずれかで遊...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="Notes" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[<p>Union Platform を使って対戦ゲームを作りました。<br />
下記いずれかで遊べます。<br />
<a href="http://apps.facebook.com/cat_tank_battle/" target="_blank">Facebook(ランキングあり)</a><br />
<a href="http://www.kongregate.com/games/kyucon/cat-tank-battle" target="_blank">Kongregate版</a><br />
<a href="http://mogera.jp/gmflame?gid=gm0000000578" target="_blank">モゲラ版</a><br />
 <br />
mixiのカテゴリに掲載されてから公開しようかと思ってたけど<br />
なかなか通らないんですよ。一度ならず二度までも！です。<br />
そして却下されると<strong>１０日も待たないと再申請できない</strong>という..</p>

<p>具体的な却下理由は説明はしてくれなくて個別の質問も受け付けてないので<br />
参考までに私の却下理由を載せておくよ。</p>

<p><br />
<blockquote>・デベロッパー登録情報が正確に入力されておりません。<br />
</blockquote></p>

<p>→デベロッパー登録したのが数カ月前なので、何のことかすっかり忘れていたけど<br />
登録した時の情報がいい加減すぎたようです。<br />
でも登録内容を確認できるページが見当たらず、どこで更新するのか..<br />
<a href="http://developer.mixi.co.jp/appli/pc/pc_prepare/developer_account_regist_pc" target="_blank">mixi Developer Center</a>にある「デベロッパー登録画面 」リンクをクリックして登録しなおせば更新されるようです。</p>

<p><br />
<blockquote>・また、掲載されている広告に関しましてもmixiアプリ広告掲載ガイドラインに抵触しておりましたので、こちらも併せましてご確認下さい。<br />
</blockquote></p>

<p>→「リンク先は別ウインドウにて展開してください」を見逃してました。<br />
広告掲載位置の指定が厳しいので良く読んだと思ったのだけど<br />
実際広告クリックしてみるまで気づかなかった..<br />
そして Google AdSense は_selfリンク固定なのです！<br />
<strong>PC版のmixiアプリでは Google AdSense 使えない</strong>ってことだね。</p>

<p><br />
<blockquote>・青少年保護の観点から、mixiに登録されているユーザー様のみ利用できる仕様に変更していただく必要がございます。<br />
他サイト様（mixi登録ユーザー様以外の利用者がいる場合）との連動アプリで<br />
チャット機能等コミュニケーションがとれる仕様ですと、年齢認証が不確実の<br />
可能性が残るため上記の対応が掲載に必要となりますので、ご協力ください。<br />
</blockquote></p>

<p>→これは意外だった、この詳細はガイドラインに載ってないと思う。<br />
「青少年保護のために...18歳未満の利用を制限する場合があります。」という規定はあり、<br />
今回のアプリはチャット機能があるので18禁指定になるだろうとは思ってた。<br />
<strong>mixi以外とコミュニケーションできない</strong>なんて閉鎖的だなぁ。<br />
mixiの年齢確認自体が適当なので、mixi内だけのコミュニケーションならＯＫって青少年保護になってなくない？</p>

<p>そんなわけで、審査に通らないことには載せてもらえないので<br />
また10日後にチャレンジするよ！<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>Union Platform インストール方法</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2010/02/union-platform.html" />
    <id>tag:www.kyucon.com,2010:/blog//1.416</id>

    <published>2010-02-06T10:25:14Z</published>
    <updated>2010-02-17T08:48:36Z</updated>

    <summary> Flashでリアルタイム通信するための Union Server をUnixに...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="UnionPlatform" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[ Flashでリアルタイム通信するための <a href="http://www.unionplatform.com/" target="_blank">Union Server</a> をUnixにインストールする方法について。<br>
<br>
僕はレンタルサーバ( <a href="http://www.dreamhost.com/r.cgi?365729" target="_blank">DreamHost</a> の Virtual Private Server )を借りてそこにインストールしました。<br>
<br>
Unixコマンドのことは良く分かってないですが、とりあえず下記の手順でいけます。<br>
<br>
▼インストール<br>
sshでログインして下記コマンドを入力。<br>
<pre class="brush:bash;gutter:false;auto-links:false;">
wget http://www.unionplatform.com/releases/union/union_1.0.0_alpha6.tar.gz
tar xzvf union_1.0.0_alpha6.tar.gz union
rm union_1.0.0_alpha6.tar.gz
cd union
chmod 775 *
</pre>
やってることは、ダウンロードして、unionディレクトリに解凍して、不要になった圧縮ファイル削除して、unionディレクトリに移動して、パーミッションを変更です。<br>
<br>
▼設定<br>
union.xmlを開いて、管理パスワードを変更。<br>
念のため&lt;charset&gt;UTF-8&lt;/charset&gt;を追記。<br>
<br>
▼起動<br>
<pre class="brush:bash;gutter:false;auto-links:false;">
java -Dfile.encoding=UTF-8 -cp lib/union.jar:lib/stax-api-1.0.1.jar:lib/wstx-asl-3.2.6.jar net.user1.union.core.UnionMain start &
</pre>
日本語を送受信する場合は、上記のように文字コードを指定する必要があります。<br>
<br>
▼停止<br>
「ps -x」でプロセス一覧を表示して<br>
「kill プロセス番号」で停止させる。<br>
管理ツール（UnionAdmin_1.0.0.84_Alpha6.swf）からログインして止めることもできます。<br>
<br>
▼死活監視<br>
サーバを起動し続けていると10日ぐらいで落ちることがあったので、<br>
止まった時は自動で再起動するようにshellスクリプトを書きました。<br>
<pre class="brush:bash;gutter:false;auto-links:false;">
#!/bin/sh
while true
do
    isAlive=`ps x | grep union | grep -v grep | wc -l`
    if [ $[isAlive] = 0 ]; then 
		java -Dfile.encoding=UTF-8 -cp lib/union.jar:lib/stax-api-1.0.1.jar:lib/wstx-asl-3.2.6.jar net.user1.union.core.UnionMain start &
    fi
    sleep 20
done
</pre>
上記をobserve.shというファイル名で保存。
下記のコマンドでバックグラウンドモードで常駐します。
<pre class="brush:bash;gutter:false;auto-links:false;">
sh observe.sh &
</pre>
<br>
Flashでリアルタイム通信するためのソリューションは色々あるけど、<br>
Unionはかなり簡単にインストールできるし、機能も十分なのでおすすめ。<br>
Let's enjoy Union Platform !<br>
<br>
とても参考になるサイト：<br>
<a href="http://fla.la/archives/category/union_platform" target="_blank">fla.la  &raquo; Union Platform</a><br>
<a href="http://keno.serio.jp/union/docs/reactor/api/" target="_blank">Reactor API 日本語リファレンス</a>]]>
        
    </content>
</entry>

<entry>
    <title>超むりげー@ASAGAYA LOFT A</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2010/01/asagaya-loft-a.html" />
    <id>tag:www.kyucon.com,2010:/blog//1.415</id>

    <published>2010-01-26T12:02:12Z</published>
    <updated>2010-01-26T12:26:44Z</updated>

    <summary>テーマに基づいて48時間以内にゲームを移植する企画「むりげー」。 これまではただ...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="Flash" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[テーマに基づいて48時間以内にゲームを移植する企画「むりげー」。<br>
これまではただの飲み会でしたが、<br>
2月7日に無茶なイベントを開催するそうです。<br><br>
<a href="http://murigee.com/event.html" target="_blank"><img src="http://murigee.com/super-murigee-banner-200.png" width="200" height="100" alt="超むりげー" title="超むりげー" style="border:none;" /></a> 
<br><br>
2月5日にテーマが発表されるので<br>
Flashでゲーム作って参加すると面白いよ。]]>
        
    </content>
</entry>

<entry>
    <title>RTMPとBitmapData.draw</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2009/12/rtmpbitmapdatadraw.html" />
    <id>tag:www.kyucon.com,2009:/blog//1.414</id>

    <published>2009-12-18T18:11:25Z</published>
    <updated>2009-12-18T18:33:16Z</updated>

    <summary>RTMPストリーミングビデオをBitmapData.drawするには ストリーミ...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="Flash" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[RTMPストリーミングビデオをBitmapData.drawするには<br />
ストリーミングサーバ側の設定で下記の設定をしないといけないわけですが<br />
&lt;AudioSampleAccess enabled="true" /&gt;<br />
<br />
設定しているにもかかわらずエラーが出続けてdrawできない時がある。<br />
10回接続して1回くらい起こる。<br />
その時はonMetaDataイベントも受け取れていない。<br />
<br />
よくわからないけどタイミングの問題らしく<br />
"NetConnection.Connect.Success"が届いた直後にstream.play()するとダメみたい。<br />
下記のような感じで0.1秒くらい待ってからplay()するとエラーが出なくなった。<br />
<br />
<pre class="brush:as3;gutter:false;auto-links:false;">
var _video : Video = new Video(320, 240);
var _stream : NetStream;
var _connection:NetConnection = new NetConnection();

function connect(){
    _connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
    _connection.connect(rtmp_app);
}
function onNetStatus( event : NetStatusEvent ){
    switch(event.info.code){
        case "NetConnection.Connect.Success":
            _stream = new NetStream(_connection);
            _video.attachNetStream(_stream);
            var _timer:Timer = new Timer(100, 1);
            _timer.addEventListener(TimerEvent.TIMER, onTimer);
            _timer.start();
            break;
    }
}
function onTimer(e:TimerEvent){
    _stream.play(rtmp_file);
}
</pre>
<br />
buffer時間と関係あるのかな。
]]>
        
    </content>
</entry>

<entry>
    <title>FLVPlaybackで読み込めない</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2009/11/flvplayback.html" />
    <id>tag:www.kyucon.com,2009:/blog//1.413</id>

    <published>2009-11-11T06:19:33Z</published>
    <updated>2009-11-11T06:30:01Z</updated>

    <summary>ほとんど問題ないのに、特定のストリーミングflvだけ表示できなくて、なんでかな～...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="Flash" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[ほとんど問題ないのに、特定のストリーミングflvだけ表示できなくて、なんでかな～と思ったらFLVPlaybackコンポーネントが古いせいでした。<br />たぶんCS3の頃のFLVPlaybackを使い回してたから。CS4付属のに変えたら解決。<br /><br />FLVPlayback.VERSIONが"2.1.0.14"だとダメ、"2.1.0.19"ならOK。<br />具体的な原因はよくわかんない。<br /><br />下記のJUV RTMP Researcherというプロキシを使うとRTMPパケットをモニタリングできる。<br /><a href="http://www.smaxe.com/product.jsf?id=juv-rtmp-researcher">http://www.smaxe.com/product.jsf?id=juv-rtmp-researcher</a><br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Windows7 サイドバーの領域確保</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2009/11/windows7.html" />
    <id>tag:www.kyucon.com,2009:/blog//1.412</id>

    <published>2009-11-10T12:41:33Z</published>
    <updated>2009-11-10T13:30:08Z</updated>

    <summary>Windows7をインストールしたんですが、ガジェット表示のためのサイドバー領域...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="Software" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[<p>Windows7をインストールしたんですが、ガジェット表示のためのサイドバー領域がなくなってるじゃないですか。<br />それだとウィンドウを最大化した時にウィンドウとガジェットが重なってしまう。<br /><img src="http://kyucon.com/blog/archives/sidebar.jpg" width="610" height="190" style="padding:8px 0px 8px 0px" /><br />twigadgeやCPU meterを常に表示しておきたい僕としては、<br />ガジェットを前面にとかじゃなくて、Vistaみたいに最大化時に重ならないようにしたい！<br />ということで探したらよいソフトがありました。<br /><br /><a href="http://www.kmtools.win-os.pl/omaxmax.php?lang=ang" target="_blank">MaxMax</a>というツールをインストールすると解決です。<br /><a href="http://www.kmtools.win-os.pl/download.php?lang=ang" target="_blank">こちら</a>からダウンロードできます。<br /> <br /> サイドバーってそんなに不人気だったの？<br /> 選択肢として残しておいてくれても良いのに。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Lingo: FirefoxでnetTextReuslt()</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2009/09/lingo-firefoxnettextreuslt.html" />
    <id>tag:www.kyucon.com,2009:/blog//1.411</id>

    <published>2009-09-21T11:05:50Z</published>
    <updated>2009-09-21T11:27:13Z</updated>

    <summary>Director Lingoの話。サーバを変えたら、getNetText()、n...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="Shockwave" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[Director Lingoの話。<br />サーバを変えたら、getNetText()、netTextReuslt()でテキストを取得できなくなった。<br />IEでは問題なくてFirefoxでのみ空の文字が返ってくる。<br />原因はWebサーバの設定でgzip圧縮転送が有効になっていたため。<br />圧縮されているとShockwaveで正しくデータを受け取れない。<br /><br />この辺を参考に圧縮を無効にするとよい。<br />
<a href="http://httpd.apache.org/docs/2.2/ja/mod/mod_deflate.html" target="_blank">mod_deflate - Apache HTTP サーバ</a><br />
<a href="http://www.atmarkit.co.jp/flinux/rensai/apache2_04/apache04b.html" target="_blank">mod_deflateによるコンテンツの圧縮転送</a><br />

<a href="http://www.atmarkit.co.jp/flinux/rensai/apache2_04/apache04b.html" target="_blank">mod_deflate、zlib.output_compression、コンテンツをgzip圧縮して返す。</a><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>[Q-BLOCK] impressive works</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2009/08/q-block-impressive-works.html" />
    <id>tag:www.kyucon.com,2009:/blog//1.410</id>

    <published>2009-08-24T14:48:09Z</published>
    <updated>2009-09-21T10:22:05Z</updated>

    <summary>現時点で3000件以上投稿されています。 いろんな作品があって楽しいです。 特に...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="Flash3D" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[<p>現時点で3000件以上投稿されています。<br />
いろんな作品があって楽しいです。<br />
特に上手な作品をピックアップしてみました。</p>

<p>作者別：<br />
<a href="http://kyucon.com/qblock/?author=POKEMON" target="qblock">POKEMONさん<br />
<img src="http://m-aqua.com/qblock/img/2956.png"><img src="http://m-aqua.com/qblock/img/2954.png"><img src="http://m-aqua.com/qblock/img/2952.png"></a></p>

<p><a href="http://kyucon.com/qblock/?author=NAOSUKE" target="qblock">NAOSUKEさん<br />
<img src="http://m-aqua.com/qblock/img/824.png"><img src="http://m-aqua.com/qblock/img/658.png"><img src="http://m-aqua.com/qblock/img/406.png"></a></p>

<p><a href="http://kyucon.com/qblock/?author=HEE" target="qblock">HEEさん<br />
<img src="http://m-aqua.com/qblock/img/915.png"><img src="http://m-aqua.com/qblock/img/261.png"><img src="http://m-aqua.com/qblock/img/183.png"></a></p>

<p><a href="http://kyucon.com/qblock/?author=WEEPYMOON" target="qblock">WEEPYMOONさん<br />
<img src="http://m-aqua.com/qblock/img/2970.png"><img src="http://m-aqua.com/qblock/img/2737.png"><img src="http://m-aqua.com/qblock/img/2691.png"></a></p>

<p><a href="http://kyucon.com/qblock/?author=TOAD" target="qblock">TOADさん<br />
<img src="http://m-aqua.com/qblock/img/2981.png"><img src="http://m-aqua.com/qblock/img/2955.png"><img src="http://m-aqua.com/qblock/img/2211.png"></a></p>

<p>景色、建物：<br />
<a href="http://kyucon.com/qblock/?2118" target="qblock"><img src="http://m-aqua.com/qblock/img/2118.png"></a><a href="http://kyucon.com/qblock/?2315" target="qblock"><img src="http://m-aqua.com/qblock/img/2315.png"></a><a href="http://kyucon.com/qblock/?1426" target="qblock"><img src="http://m-aqua.com/qblock/img/1426.png"></a><a href="http://kyucon.com/qblock/?863" target="qblock"><img src="http://m-aqua.com/qblock/img/863.png"></a><a href="http://kyucon.com/qblock/?860" target="qblock"><img src="http://m-aqua.com/qblock/img/860.png"></a><a href="http://kyucon.com/qblock/?743" target="qblock"><img src="http://m-aqua.com/qblock/img/743.png"></a></p>

<p>キャラクター：<br />
<a href="http://kyucon.com/qblock/?1322" target="qblock"><img src="http://m-aqua.com/qblock/img/1322.png"></a><a href="http://kyucon.com/qblock/?538" target="qblock"><img src="http://m-aqua.com/qblock/img/538.png"></a><a href="http://kyucon.com/qblock/?1854" target="qblock"><img src="http://m-aqua.com/qblock/img/1854.png"></a><a href="http://kyucon.com/qblock/?659" target="qblock"><img src="http://m-aqua.com/qblock/img/659.png"></a><a href="http://kyucon.com/qblock/?1294" target="qblock"><img src="http://m-aqua.com/qblock/img/1294.png"></a><a href="http://kyucon.com/qblock/?992" target="qblock"><img src="http://m-aqua.com/qblock/img/992.png"></a><a href="http://kyucon.com/qblock/?1142" target="qblock"><img src="http://m-aqua.com/qblock/img/1142.png"></a><a href="http://kyucon.com/qblock/?1586" target="qblock"><img src="http://m-aqua.com/qblock/img/1586.png"></a><a href="http://kyucon.com/qblock/?1055" target="qblock"><img src="http://m-aqua.com/qblock/img/1055.png"></a><a href="http://kyucon.com/qblock/?1064" target="qblock"><img src="http://m-aqua.com/qblock/img/1064.png"></a></p>

<p>ゲーム機、コンピュータ：<br />
<a href="http://kyucon.com/qblock/?838" target="qblock"><img src="http://m-aqua.com/qblock/img/838.png"></a><a href="http://kyucon.com/qblock/?1447" target="qblock"><img src="http://m-aqua.com/qblock/img/1447.png"></a><a href="http://kyucon.com/qblock/?1483" target="qblock"><img src="http://m-aqua.com/qblock/img/1483.png"></a><a href="http://kyucon.com/qblock/?739" target="qblock"><img src="http://m-aqua.com/qblock/img/739.png"></a><a href="http://kyucon.com/qblock/?221" target="qblock"><img src="http://m-aqua.com/qblock/img/221.png"></a><a href="http://kyucon.com/qblock/?224" target="qblock"><img src="http://m-aqua.com/qblock/img/224.png"></a></p>

<p>乗り物：<br />
<a href="http://kyucon.com/qblock/?375" target="qblock"><img src="http://m-aqua.com/qblock/img/375.png"></a><a href="http://kyucon.com/qblock/?442" target="qblock"><img src="http://m-aqua.com/qblock/img/442.png"></a><a href="http://kyucon.com/qblock/?2274" target="qblock"><img src="http://m-aqua.com/qblock/img/2274.png"></a><a href="http://kyucon.com/qblock/?1270" target="qblock"><img src="http://m-aqua.com/qblock/img/1270.png"></a><a href="http://kyucon.com/qblock/?403" target="qblock"><img src="http://m-aqua.com/qblock/img/403.png"></a><a href="http://kyucon.com/qblock/?1313" target="qblock"><img src="http://m-aqua.com/qblock/img/1313.png"></a></p>

<p>その他：<br />
<a href="http://kyucon.com/qblock/?2051" target="qblock"><img src="http://m-aqua.com/qblock/img/2051.png"></a><a href="http://kyucon.com/qblock/?1414" target="qblock"><img src="http://m-aqua.com/qblock/img/1414.png"></a><a href="http://kyucon.com/qblock/?1497" target="qblock"><img src="http://m-aqua.com/qblock/img/1497.png"></a><a href="http://kyucon.com/qblock/?991" target="qblock"><img src="http://m-aqua.com/qblock/img/991.png"></a><a href="http://kyucon.com/qblock/?467" target="qblock"><img src="http://m-aqua.com/qblock/img/467.png"></a><a href="http://kyucon.com/qblock/?1998" target="qblock"><img src="http://m-aqua.com/qblock/img/1998.png"></a><a href="http://kyucon.com/qblock/?2522" target="qblock"><img src="http://m-aqua.com/qblock/img/2522.png"></a></p>]]>
        
    </content>
</entry>

<entry>
    <title>3Dドット絵ツール</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2009/08/3d-10.html" />
    <id>tag:www.kyucon.com,2009:/blog//1.409</id>

    <published>2009-08-13T17:06:40Z</published>
    <updated>2009-09-21T10:22:05Z</updated>

    <summary>立体ブロックを使ってお絵描きできるサイト「Q-BLOCK」を公開しました。 ぜひ...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="Flash3D" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[<p>立体ブロックを使ってお絵描きできるサイト「<a href="http://kyucon.com/qblock/" target="_blank">Q-BLOCK</a>」を公開しました。<br />
ぜひ遊んでください。<br />
<a href="http://kyucon.com/qblock/" target="_blank" style="margin:0"><img src="http://kyucon.com/blog/archives/qblock.jpg" width="560" height="362"></a></p>

<p>メモリを大量に消費しちゃいます。動かない人は新しいＰＣ買うと良いよ。<br />
短期間でサクッと作れたので割と満足してます。<br />
Papervisionのおかげ。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[AS3.0] 画面外をクリックしたらポーズ(一時停止)する方法</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2009/06/as30.html" />
    <id>tag:www.kyucon.com,2009:/blog//1.408</id>

    <published>2009-06-14T17:57:46Z</published>
    <updated>2009-09-28T01:24:53Z</updated>

    <summary>SWF以外の部分をクリックしたらポーズさせるための小技をご紹介します。 デスクト...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="Flash" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[<p>SWF以外の部分をクリックしたらポーズさせるための小技をご紹介します。<br />
デスクトップなどブラウザウィンドウ外をクリックした場合も含みます。<br />
下記のようにTextFieldのFocusEventを使うところがポイントです。</p>

<pre class="brush:as3;gutter:false;auto-links:false;">
package {
	import flash.display.Sprite;
	import flash.events.FocusEvent;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	public class DocumentClass extends Sprite {
		private var debugTF:TextField ;
		public function DocumentClass() {
			//デバッグ用のテキスト
			debugTF = createTextField(600, 20, 0, 0, "はじめにここをクリックしてSWFにフォーカスを移してください。");
			addChild(debugTF);
			//フォーカス検知用テキストフィールド
			var focusTF:TextField = new TextField();
			//ステージ全体を覆うサイズにする
			focusTF.width = stage.stageWidth;
			focusTF.height = stage.stageHeight;
			focusTF.selectable = false;
			focusTF.addEventListener(FocusEvent.FOCUS_IN, onFocusIn);
			focusTF.addEventListener(FocusEvent.FOCUS_OUT, onFocusOut);
			//必ず最上位レイヤーに配置
			addChildAt(focusTF, this.numChildren);
		}
		//ポーズ処理
		private function onFocusOut(e:FocusEvent):void {
			debugTF.text = "SWFからフォーカスが外れたのでポーズ中。灰色のエリアをクリックすると再開します。";
		}
		//再開処理
		private function onFocusIn(e:FocusEvent):void {
			debugTF.text = "SWFにフォーカス中。画面外をクリックするとポーズ状態になります。";
		}
		private function createTextField(w, h, x, y, str):TextField {
			var tf:TextField = new TextField;
			tf.width = w;
			tf.height = h;
			tf.x = x;
			tf.y = y;
			tf.text = str;
			tf.selectable = false;
			return tf;
		}
	}
}
</pre>

<p><a href="http://kyucon.com/blog/archives/pause.html" target="_blank">・サンプルSWF</a><br />
<a href="http://kyucon.com/blog/archives/pause.zip" target="_blank">・ソースファイル</a></p>

<p>2009/09/28追記：<br />
わざわざTextFieldなんか使わなくても、Event.ACTIVATE と Event.DEACTIVATE 使えば済むね。</p>]]>
        
    </content>
</entry>

<entry>
    <title>[AS3.0] RSA暗号化して通信経路途中での改ざんを防止</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2009/06/as30-rsa.html" />
    <id>tag:www.kyucon.com,2009:/blog//1.407</id>

    <published>2009-06-14T12:52:50Z</published>
    <updated>2009-09-21T10:22:05Z</updated>

    <summary>例えば、ゲームのセーブデータをサーバで保存していて 「アイテム1個持ってます」と...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="Flash" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[<p>例えば、ゲームのセーブデータをサーバで保存していて<br />
「アイテム1個持ってます」という情報をSWFで受け取る場合、<br />
SWFに届く前に「アイテム100個持ってます」に改竄されるとまずいということで暗号化することにしました。</p>

<p><a href="http://ja.wikipedia.org/wiki/RSA%E6%9A%97%E5%8F%B7" target="_blank">RSA暗号</a>は「暗号」と「署名」の2つの使い方ができます。<br />
▼暗号<br />
公開鍵を使って誰でも暗号化できるが、復号できるのは秘密鍵を持っている人だけ。<br />
SWFからサーバに送るデータを途中で読み取られないようにする場合などに使うと思います。<br />
SWFに埋め込んだ公開鍵で暗号化して送り、サーバ側にある秘密鍵で解読というような使い方。<br />
こちらが参考になります：<a title="suz-lab - blog: AS3で暗号/復号化(RSA版)" href="http://blog.suz-lab.com/2009/01/as3rsa.html" target="_blank">suz-lab - blog: AS3で暗号/復号化(RSA版)</a><br />
▼署名<br />
秘密鍵を使って暗号化したデータを、公開鍵で復号する。<br />
暗号文を復号した結果が平文と同じなら、正しい送り主からのデータであり改竄されていないということになる。<br />
今回はこちらを使います。<br />
サーバ側で秘密鍵を使って暗号化し、SWF側で公開鍵を使って復号するという流れ。</p>

<p>暗号化ライブラリは<a href="http://code.google.com/p/as3crypto/" target="_blank">as3crypto</a>を使います。<br />
下記がサンプルソースですが、<br />
実際には【2】の処理はサーバ側で行い、SWF側では【1】と【3】を実装することになります。</p>

<pre class="brush:as3;gutter:false;auto-links:false;">
import flash.utils.ByteArray;
import com.hurlant.crypto.rsa.RSAKey;
import com.hurlant.util.Base64;
import com.hurlant.util.Hex;
public function CryptTest() {
	// 暗号化の対象となる文字列
	var original_str:String = "アイテム1個持ってます"; 
	//------------------------
	//【1】復号用の公開鍵
	var public_modulus:String= 
"f0bc13f68e0c02397af4aeaf2edc94f92e94945eea1f745235ff05ff16e9b6490267b9"
+"82b22c6aff4b6887fc89e7d92d8a2254c7f4c2fb7a116478f875dc8da5";
	var public_exponent:String = "10001";
	//------------------------
	//【2】↓ここからは、サーバ側でやる処理ですがサンプルということで載せてます。
	//暗号化用の秘密鍵
	var private_exponent:String= 
"de6f3a16e7bb4ad6e7b86c2bec25def4bb48882b8732971d5b4d0fb25aee8a00f2fd"
+"6987d1ca990846b50e70be386867be09b64840157c0d7d451d91ccc92e21";
	var rsa_sign:RSAKey = RSAKey.parsePrivateKey(public_modulus, public_exponent, private_exponent);
	//ByteArrayに
	var srcEncryptBA:ByteArray = Base64.decodeToByteArray(Base64.encode(original_str)); 
	//暗号化したデータを格納するためのByteArray
	var dstEncryptBA:ByteArray = new ByteArray();
	//暗号化実行
	rsa_sign.sign(srcEncryptBA, dstEncryptBA, srcEncryptBA.length);
	//暗号化されたデータをBase64エンコード
	var encrypted_str:String = Base64.encodeByteArray(dstEncryptBA);
	trace("暗号化済み文字列。これをSWFに返す。" + encrypted_str);
	//↑ここまで、サーバ側でやる処理
	//------------------------
	//【3】復号
	var rsa_verify : RSAKey= RSAKey.parsePublicKey(public_modulus, public_exponent);
	var srcDecryptBA:ByteArray = Base64.decodeToByteArray(encrypted_str);
	//復号したデータを格納するためのByteArray
	var dstDecryptBA:ByteArray = new ByteArray();
	//復号実行
	try{
		rsa_verify.verify(srcDecryptBA, dstDecryptBA, srcDecryptBA.length);
		trace("復号した文字列：" + dstDecryptBA.toString());
		if(dstDecryptBA.toString()==original_str){
			trace("改竄なし");
		}else{
			trace("改竄あり");
		}
	}catch (e) {
		trace("verify失敗。不正なデータ。");
	}
	rsa_verify.dispose();
}
</pre>

<p>鍵の生成は<a title="" href="http://crypto.hurlant.com/demo/"  target="_blank">AS3 Crypto Demo page</a>でやると簡単。</p>

<p>余談：「暗号化」の対義語は「復号化」ではなく「復号」なんだって。</p>

<p>追記：(09/06/15 02:50)<br />
もっと厳しくやるには、タイムスタンプを含めておいてサーバ時間と比較しないといけないかも。<br />
「アイテム1個持ってます」というサーバレスポンスを解析保存され<br />
アイテム0個の時にそのデータを送り込まれる、ということを防ぐために。<br />
素直にSSL使えば何も考えなくていいのかな。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Papervision3D 2.0 FLV動画再生</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2009/06/papervision3d-20-flv.html" />
    <id>tag:www.kyucon.com,2009:/blog//1.406</id>

    <published>2009-06-10T16:13:20Z</published>
    <updated>2009-09-21T10:22:05Z</updated>

    <summary> FLV動画をマテリアルにする場合は、VideoStreamMaterial()...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="Flash3D" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[<p><img src="http://kyucon.com/blog/archives/sample14.jpg" width=400 height=200 /><br />
FLV動画をマテリアルにする場合は、VideoStreamMaterial()を使います。</p>

<pre class="brush:as3;gutter:false;auto-links:false;">
//FLV読み込み
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns: NetStream = new NetStream(nc);
var video:Video = new Video();
video.attachNetStream(ns);
ns.client = {};
ns.play("http://kyucon.com/nekotv/012.flv");
//マテリアル生成
var material:VideoStreamMaterial = new VideoStreamMaterial(video,ns);
//平面にマテリアルを適用
plane = new Plane( material, 320, 240);
scene.addChild(plane);
</pre>

<p><a href="http://kyucon.com/blog/archives/sample14.html" target="_blank">・サンプルSWF</a><br />
<a href="http://kyucon.com/blog/archives/sample14.zip" target="_blank">・ソースファイル</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>Papervision3D 2.0 接触判定</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2009/06/papervision3d-20-9.html" />
    <id>tag:www.kyucon.com,2009:/blog//1.405</id>

    <published>2009-06-10T15:45:46Z</published>
    <updated>2009-09-21T10:22:05Z</updated>

    <summary> オブジェクト同士の接触判定はhitTestObject()で可能です。 if(...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="Flash3D" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[<p><img src="http://kyucon.com/blog/archives/sample13.jpg" width=400 height=200 /><br />
オブジェクト同士の接触判定はhitTestObject()で可能です。</p>

<pre class="brush:as3;gutter:false;">if(objA.hitTestObject(objB)){
	//接触している
}</pre>

<p>ただしバウンディングボックス同士での判定なので、<br />
形状によっては本当は当たってないのにtrueになったりします。<br />
回転やスケールを変えてもバウンディングボックスは変化しないようです。<br />
正確に判定したい場合は自前で実装するしかないですね。<br />
<a href="http://kyucon.com/blog/archives/sample13.html" target="_blank">・サンプルSWF</a><br />
<a href="http://kyucon.com/blog/archives/sample13.zip" target="_blank">・ソースファイル</a></p>

<p>関連する情報として下記があります。<br />
DisplayObject3D.geometry.boundingSphere　バウンディングスフィア情報<br />
DisplayObject3D.geometry.aabb　ローカル座標軸に沿ったバウンディングボックス情報<br />
Vertices3D.boundingBox()　ローカル座標でのバウンディングボックス情報<br />
Vertices3D.worldBoundingBox()　グローバル座標でのバウンディングボックス情報</p>]]>
        
    </content>
</entry>

<entry>
    <title>Papervision3D 2.0 被写界深度</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2009/06/papervision3d-20-8.html" />
    <id>tag:www.kyucon.com,2009:/blog//1.404</id>

    <published>2009-06-10T07:45:48Z</published>
    <updated>2009-09-21T10:22:05Z</updated>

    <summary> 被写界深度のぼかし表現をシンプルに再現してみます。 ポイントは下記です。 ・ぼ...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="Flash3D" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[<p><img src="http://kyucon.com/blog/archives/sample12.jpg" width=400 height=200 /><br />
被写界深度のぼかし表現をシンプルに再現してみます。<br />
ポイントは下記です。<br />
・ぼかしをかける対象となるVieportLayerをviewport.getChildLayer()を使って作成。<br />
・カメラからオブジェクトまでの距離はcamera.distanceTo()を使って求める。<br />
・距離に応じてVieportLayerにBlurFilterをかける。</p>

<pre class="brush:as3;gutter:false;">//ぼかし対象となるビューポートレイヤーを格納する配列
private var layers:Array = [];
//カメラから注視点までの距離（この距離にある物が一番はっきり見える）
private var offset:Number = 1000;
//レンダリングのたびに更新
override protected function onRenderTick(event:Event):void {
 for (var i:uint = 0; i < layers.length; i++) {
  //注視点からオブジェクトまでの距離
  var distance:Number=Math.abs(camera.distanceTo(layers[i].displayObject3D)-offset);
  //距離に応じてぼかし量を調節
  var v:uint = Math.min(30, distance* 0.02);
  //ViewportLayerにフィルターを掛ける
  layers[i].filters = [new BlurFilter(v,v,2)];
 }
}</pre>
<a href="http://kyucon.com/blog/archives/sample12.html" target="_blank">・サンプルSWF</a>
<a href="http://kyucon.com/blog/archives/sample12.zip" target="_blank">・ソースファイル</a>]]>
        
    </content>
</entry>

<entry>
    <title>Papervision3D 2.0 ポリゴンメッシュ作成</title>
    <link rel="alternate" type="text/html" href="http://www.kyucon.com/blog/2009/06/papervision3d-20-7.html" />
    <id>tag:www.kyucon.com,2009:/blog//1.403</id>

    <published>2009-06-10T04:32:35Z</published>
    <updated>2009-09-21T10:22:05Z</updated>

    <summary> 頂点を指定してポリゴンを作成するには下記のようにします。 //メッシュのマテリ...</summary>
    <author>
        <name>okuyama</name>
        
    </author>
    
        <category term="Flash3D" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.kyucon.com/blog/">
        <![CDATA[<p><img src="http://kyucon.com/blog/archives/sample11.jpg" width=400 height=200 /><br />
頂点を指定してポリゴンを作成するには下記のようにします。</p>

<pre class="brush:as3;gutter:false;">//メッシュのマテリアル
var material:ColorMaterial = new ColorMaterial(0x00AA00);
//メッシュを作成
mesh = new TriangleMesh3D(material, [], []);
scene.addChild( mesh );
//頂点作成
var v0:Vertex3D = new Vertex3D(-25, 0, 0 ) ;
var v1:Vertex3D = new Vertex3D(25, 0, 0 ) ;
var v2:Vertex3D = new Vertex3D(0, 50, 0 );
//表面からみて反時計周りになるように頂点を選ぶ
var vertices:Array = [v0, v1, v2];
//メッシュに頂点の配列を追加
mesh.geometry.vertices=vertices;
//メッシュに面を追加
mesh.geometry.faces.push( new Triangle3D(mesh, vertices));
//頂点の法線計算実行（やらなくても支障ないかも、シェーディングに使うのかな）
mesh.geometry.ready = true;</pre>
<a href="http://kyucon.com/blog/archives/sample11.html" target="_blank">・サンプルSWF</a>
<a href="http://kyucon.com/blog/archives/sample11.zip" target="_blank">・ソースファイル</a>]]>
        
    </content>
</entry>

</feed>
