<?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>qui-no Labs &#187; Flash/Flex</title>
	<atom:link href="http://labs.qui-no.com/category/flash-flex/feed" rel="self" type="application/rss+xml" />
	<link>http://labs.qui-no.com</link>
	<description>株式会社キノの技術メモやTIPSなどの情報</description>
	<lastBuildDate>Tue, 10 May 2011 03:20:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>EC-CUBE用FeliCaログイン認証モジュール</title>
		<link>http://labs.qui-no.com/203</link>
		<comments>http://labs.qui-no.com/203#comments</comments>
		<pubDate>Wed, 14 Apr 2010 03:19:50 +0000</pubDate>
		<dc:creator>加藤 雄亮</dc:creator>
				<category><![CDATA[Flash/Flex]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://labs.qui-no.com/?p=203</guid>
		<description><![CDATA[
前回、Flash/AIR で FeliCa へアクセスでご紹介した通り、FlashからFeliCaを扱う事が出来るようになりました。
まだFeliCaの用途を試行錯誤している最中ですが、試しにECシステムのオープンソー [...]]]></description>
			<content:encoded><![CDATA[<p>
前回、<a href="http://labs.qui-no.com/191">Flash/AIR で FeliCa へアクセス</a>でご紹介した通り、FlashからFeliCaを扱う事が出来るようになりました。<br />
まだFeliCaの用途を試行錯誤している最中ですが、試しにECシステムのオープンソースであるEC-CUBEにFeliCaを使ってログインするモジュールを開発してみました。<br />
<br />
通常、MYページ等のログイン認証にはIDとパスワードを入力しますが、FeliCaが保持する固有のIDとパラメータを使用して、ID/PW以外のログイン方法を提供します。<br />
<br />
FeliCaのログイン画面が表示されたら、予め登録済みのFeliCaをタッチすることでログイン出来るという構成です。<br />
<span style="color: #800000;">※FeliCaログインを利用するには、PC内蔵の「FeliCaポート」や専用のリーダーが接続されている事、また<a href="http://www.sony.co.jp/Products/felica/pcrw/fsc_dl.html" target="_blank">FeliCaポートソフトウェア</a>がインストールされている必要があります。</span><br />
<div class="clearfix">
<div style="float: left;">
<h4>FeliCaログイン</h4>
<a href="http://labs.qui-no.com/uploads/felica_login1.jpg" target="_blank"><img class="alignnone size-medium wp-image-223" title="felica_login1" src="http://labs.qui-no.com/uploads/felica_login1-300x175.jpg" alt="FeliCaログイン" width="280" height="170" /></a><br />
<br />
</div>
<div style="float: right;">
<h4>MYページFeliCa登録</h4>
<a href="http://labs.qui-no.com/uploads/felica_login2.jpg" target="_blank"><img class="alignnone size-medium wp-image-224" title="felica_login2" src="http://labs.qui-no.com/uploads/felica_login2-300x175.jpg" alt="MYページFeliCa登録" width="280" height="170" /></a><br />
<br />
</div>
</div>
<span id="more-203"></span><br />
<h3 class="title">ダウンロード</h3>
<table class="table" border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<th>バージョン</th>
<th>日時</th>
<th>ファイル名</th>
<th>備考</th>
</tr>
<tr>
<td>1.0.0</td>
<td>2010/04/14</td>
<td><a onclick="_gaq.push(['_trackEvent', 'SourceCode', 'Download', 'FeliCaLogin-1.0.0.zip']);" href="http://labs.qui-no.com/uploads/FeliCaLogin-1.0.0.zip">zip</a> | <a onclick="_gaq.push(['_trackEvent', 'SourceCode', 'Download', 'FeliCaLogin-1.0.0.tar.gz']);" href="http://labs.qui-no.com/uploads/FeliCaLogin-1.0.0.tar.gz">tar.gz</a></td>
<td>EC-CUBE ver.2.4.3対応</td>
</tr>
</tbody>
</table>
<br />
<h3 class="title">導入方法</h3>
下記の構成ファイル一覧をコピーしてください。<br />
既にカスタマイズをされている場合は手動でのマージをお勧めします。<br />
<br />
<h3 class="title">構成ファイル一覧</h3>
<h4>追加ファイル</h4>
<pre>data/Smarty/templates/default/mypage/felica.tpl
data/Smarty/templates/default/mypage/felica_add.tpl
data/Smarty/templates/default/mypage/felica_login.tpl
data/class/pages/frontparts/LC_Page_FrontParts_FelicaLogin.php
data/class/pages/mypage/LC_Page_Mypage_Felica.php
data/class/pages/mypage/LC_Page_Mypage_FelicaAdd.php
data/class/pages/mypage/LC_Page_Mypage_FelicaLogin.php
html/frontparts/felica_login.php
html/mypage/felica.php
html/mypage/felica_add.php
html/mypage/felica_login.php
html/user_data/packages/default/img/mypage/felicaadd.gif
html/user_data/packages/default/img/mypage/felicaadd_on.gif
html/user_data/packages/default/img/mypage/felicaadd_title.jpg
html/user_data/packages/default/img/mypage/felicalogin_title.jpg
html/user_data/packages/default/img/mypage/navifelica.jpg
html/user_data/packages/default/img/mypage/navifelica_on.jpg
html/user_data/packages/default/img/mypage/subtitlefelica.gif
html/user_data/packages/default/js/swfobject.js
html/user_data/packages/default/swf/expressInstall.swf
html/user_data/packages/default/swf/felicaadd.swf
html/user_data/packages/default/swf/felicabloc.swf
</pre>
<h4>変更ファイル</h4>
<pre>data/Smarty/templates/default/bloc/login.tpl
data/Smarty/templates/default/mypage/login.tpl
data/Smarty/templates/default/mypage/navi.tpl
data/Smarty/templates/default/shopping/index.tpl
data/mtb_constants_init.php
html/install/sql/column_comment.sql
html/install/sql/create_table_mysql.sql
html/install/sql/create_table_pgsql.sql
html/install/sql/drop_table.sql
html/install/sql/insert_data.sql
html/install/sql/table_comment.sql
</pre>
<br />
<h3 class="title">変更箇所</h3>
変更ファイル内の変更箇所は下記のコメントが挿入されています。<br />
<h4>PHPファイル</h4>
<pre class="brush: plain; title: ;">
// start FeliCa認証
...
// end FeliCa認証
</pre><br />
<h4>TPLファイル</h4>
<pre class="brush: plain; title: ;">
&lt;!--{** start FeliCa認証 **}--&gt;
...
&lt;!--{** end FeliCa認証 **}--&gt;
</pre><br />
<h4>SQLファイル</h4>
<pre class="brush: plain; title: ;">
-- start FeliCa認証
...
-- enf FeliCa認証
</pre><br />
<br />
<h3 class="title">ライセンス</h3>
プログラム本体であるEC-CUBEのGPLライセンスに従います。<br />
GPLライセンス下でソースコードの改変、再配布を行えます。</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.qui-no.com/203/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flash/AIR で FeliCa へアクセス</title>
		<link>http://labs.qui-no.com/191</link>
		<comments>http://labs.qui-no.com/191#comments</comments>
		<pubDate>Mon, 05 Apr 2010 04:04:40 +0000</pubDate>
		<dc:creator>加藤 雄亮</dc:creator>
				<category><![CDATA[Flash/Flex]]></category>

		<guid isPermaLink="false">http://labs.qui-no.com/?p=191</guid>
		<description><![CDATA[
最近、ソニーが開発した非接触ICカード技術“FeliCa”への関心が高まっています。先日、SDK for FeliCa AIR/Flash というFlash/AIRからFeliCaを操作出来るSDKがリリースされました。このSDKには、Basic版（無償）とStandard版（有償）があり、機能が制限されていますが、簡単な動作確認であれば、Basic版で十分です。
SDK for FeliCa &#038; Adobe&#174; AIR&#174; / Adobe&#174; Flash&#174;

今回は新しくFlash Builber 4を使用してFlex4で簡単にサンプルを作成してみました。

FeliCaのIDmとPMmを読み取るサンプル
下記の動作には、FeliCaポート/パソリが接続されている事、またFeliCaポートソフトウェアがインストールされている必要があります。




swfobject.embedSWF('/uploads/FeliCaBasic.swf', 'FeliCaBasic', '300', '200', '10.0.0', null, {}, { menu: 'false', wmode: 'transparent' });

FeliCaサンプル


MXMLソースコード

&#60;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&#62;
&#60;s:Application xmlns:fx=&#34;http://ns.adobe.com/mxml/2009&#34; 
               xmlns:s=&#34;library://ns.adobe.com/flex/spark&#34; 
          [...]]]></description>
			<content:encoded><![CDATA[<p>
最近、ソニーが開発した非接触ICカード技術“FeliCa”への関心が高まっています。先日、SDK for FeliCa AIR/Flash というFlash/AIRからFeliCaを操作出来るSDKがリリースされました。このSDKには、Basic版（無償）とStandard版（有償）があり、機能が制限されていますが、簡単な動作確認であれば、Basic版で十分です。<br />
<a href="http://www.sony.co.jp/Products/felica/pdt/adb.html" target="_blank">SDK for FeliCa &#038; Adobe&reg; AIR&reg; / Adobe&reg; Flash&reg;</a><br />
<br />
今回は新しくFlash Builber 4を使用してFlex4で簡単にサンプルを作成してみました。<br />
<span id="more-191"></span><br />
<h3 class="title">FeliCaのIDmとPMmを読み取るサンプル</h3>
<span style="color: #800000;">下記の動作には、FeliCaポート/パソリが接続されている事、また<a href="http://www.sony.co.jp/Products/felica/pcrw/fsc_dl.html" target="_blank">FeliCaポートソフトウェア</a>がインストールされている必要があります。</span><br />
<br />
<div style="width: 300px; border: 1px solid #cccccc;">
<script src="/js/swfobject.js" type="text/javascript"></script>
<script type="text/javascript">
swfobject.embedSWF('/uploads/FeliCaBasic.swf', 'FeliCaBasic', '300', '200', '10.0.0', null, {}, { menu: 'false', wmode: 'transparent' });
</script>
<div id="FeliCaBasic">FeliCaサンプル</div>
</div>
<br />
<h3 class="title">MXMLソースコード</h3>
<pre class="brush: as3; title: ;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;s:Application xmlns:fx=&quot;http://ns.adobe.com/mxml/2009&quot; 
               xmlns:s=&quot;library://ns.adobe.com/flex/spark&quot; 
               xmlns:mx=&quot;library://ns.adobe.com/flex/mx&quot; 
               minWidth=&quot;300&quot; minHeight=&quot;200&quot;&gt;
    &lt;s:TextArea id=&quot;textArea&quot; lineHeight=&quot;150%&quot; visible=&quot;false&quot;/&gt;
    &lt;s:Button id=&quot;button&quot; label=&quot;FeliCa読み込み開始&quot; click=&quot;{this._onButtonClick()}&quot;/&gt;
    &lt;fx:Script&gt;
        &lt;![CDATA[
            import com.sony.jp.felica.FeliCaCloseReaderWriterRequest;
            import com.sony.jp.felica.FeliCaCloseReaderWriterResponse;
            import com.sony.jp.felica.FeliCaControl;
            import com.sony.jp.felica.FeliCaOpenReaderWriterAutoRequest;
            import com.sony.jp.felica.FeliCaOpenReaderWriterAutoResponse;
            import com.sony.jp.felica.FeliCaPollingAndGetCardInformationRequest;
            import com.sony.jp.felica.FeliCaPollingAndGetCardInformationResponse;
            import com.sony.jp.felica.FeliCaSessionRequest;
            import com.sony.jp.felica.FeliCaSessionResponse;
            import com.sony.jp.felica.error.FeliCaAccessError;
            import com.sony.jp.felica.event.FeliCaStatusEvent;
            import com.sony.jp.felica.event.OpenStatusEvent;
            
            import mx.utils.ObjectUtil;
            
            /** FeliCaProxy ポート番号 */
            private static const FELICA_PORT:uint = 10250;
            /** FeliCaProxy 通信タイムアウト秒数 */
            private static const FELICA_TIMEOUT:uint = 10;
            
            /** FeliCaProxy と通信を行うクラス */
            private var _felica:FeliCaControl = new FeliCaControl();
            
            /** ポーリング用 Timer (500ミリ秒毎, 20回 = 5秒間) */
            private var _pollingTimer:Timer = new Timer(500, 10);
            
            private function _onButtonClick():void
            {
                this.textArea.width   = this.width;
                this.textArea.height  = this.height;
                this.textArea.visible = true;
                this.button.visible   = false;
                this._open();
            }
            
            private function _open():void
            {
                this._felica.responseTimeout = FELICA_TIMEOUT * 1000;
                this._felica.addEventListener(OpenStatusEvent.OPEN_COMPLETE, this._onOpenComplete);
                this._felica.addEventListener(OpenStatusEvent.OPEN_FAILURE,  this._onOpenFailure);
                this._felica.open(FELICA_PORT);
            }
            
            private function _close():void
            {
                if (this._pollingTimer.running) {
                    this._pollingTimer.reset();
                }
                if (!this._felica.close()) {
                    this._log('[ NG ] Disconnect FeliCa Proxy Error!');
                    this._close();
                    return;
                }
                this._log('[ OK ] Disconnect FeliCa Proxy.');
            }
            
            private function _onOpenComplete(event:OpenStatusEvent):void
            {
                this._log('[ OK ] Connect FeliCa Proxy.');
                this._felica.addEventListener(FeliCaStatusEvent.FELICA_ACCESS_COMPLETE, this._onFelicaAccessComplete);
                this._felica.addEventListener(FeliCaStatusEvent.FELICA_ACCESS_FAILURE,  this._onFelicaAccessFailure);
                this._lock();
            }
            
            private function _onOpenFailure(event:OpenStatusEvent):void
            {
                this._log('[ NG ] Open FeliCa Proxy Error!');
                this._log(ObjectUtil.toString(event));
            }
            
            private function _lock():void
            {
                var request:FeliCaSessionRequest = new FeliCaSessionRequest();
                request.type          = FeliCaSessionRequest.HOLD;
                request.lockTimeout   = 10;
                request.unlockTimeout = 30;
                this._felica.access(request);
            }
            
            private function _unlock():void
            {
                var request:FeliCaSessionRequest = new FeliCaSessionRequest();
                request.type = FeliCaSessionRequest.RELEASE;
                this._felica.access(request);
            }
            
            private function _polling():void
            {
                if (!this._pollingTimer.hasEventListener(TimerEvent.TIMER)) {
                    this._onPollingTimer();
                }
                this._pollingTimer.addEventListener(TimerEvent.TIMER,          this._onPollingTimer);
                this._pollingTimer.addEventListener(TimerEvent.TIMER_COMPLETE, this._onPollingTimerComplete);
                this._pollingTimer.start();
            }
            
            private function _onPollingTimer(event:TimerEvent = null):void
            {
                this._log('Polling ...');
                var request:FeliCaPollingAndGetCardInformationRequest = new FeliCaPollingAndGetCardInformationRequest();
                request.systemCode = 'FFFF';
                this._felica.access(request);
            }
            
            private function _onPollingTimerComplete(event:TimerEvent):void
            {
                this._log('[ OK ] Stop Polling.');
                this._close();
            }
            
            private function _onFelicaAccessComplete(event:FeliCaStatusEvent):void
            {
                if (event.object is FeliCaSessionResponse) {
                    var session:FeliCaSessionResponse = event.object as FeliCaSessionResponse;
                    if (session.type == FeliCaSessionResponse.HOLD) {
                        this._log('[ OK ] FeliCa Session Hold.');
                        this._felica.access(new FeliCaOpenReaderWriterAutoRequest());
                    } else if (session.type == FeliCaSessionResponse.RELEASE) {
                        this._log('[ OK ] FeliCa Session Release.');
                        this._close();
                    }
                } else if (event.object is FeliCaOpenReaderWriterAutoResponse) {
                    this._log('[ OK ] Start Polling.');
                    this._polling();
                } else if (event.object is FeliCaPollingAndGetCardInformationResponse) {
                    this._log('[ OK ] Open FeliCa Reader/Writer.');
                    if (this._pollingTimer.running) {
                        this._pollingTimer.reset();
                    }
                    var pgcResponse:FeliCaPollingAndGetCardInformationResponse = event.object as FeliCaPollingAndGetCardInformationResponse;
                    this._log('\nIDm: ' + pgcResponse.idm);
                    this._log('PMm: ' + pgcResponse.pmm + &quot;\n&quot;);
                    this._felica.access(new FeliCaCloseReaderWriterRequest());
                } else if (event.object is FeliCaCloseReaderWriterResponse) {
                    this._log('[ OK ] Close FeliCa Reader/Writer.');
                    this._unlock();
                }
            }
            
            private function _onFelicaAccessFailure(event:FeliCaStatusEvent):void
            {
                if (event.object is FeliCaAccessError) {
                    var feliCaAccessError:FeliCaAccessError = event.object as FeliCaAccessError;
                    if (feliCaAccessError.rwError == 157) {  // Error Code: No FeliCa
                        return;
                    }
                }
                if (event.object is Error) {
                    var error:Error = event.object as Error;
                    if (error.errorID == 7011) {
                        this._log('[ NG ] FeliCa Proxy Timeout Error!');
                    }
                }
                this._log('[ NG ] FeliCa Access Error!');
                this._log(ObjectUtil.toString(event));
                this._close();
            }
            
            private function _log(message:String):void
            {
                this.textArea.appendText(message + &quot;\n&quot;);
            }
        ]]&gt;
    &lt;/fx:Script&gt;
&lt;/s:Application&gt;
</pre><br />
<br />
<h3 class="title">ダウンロード</h3>
Flash Builder 4 プロジェクトダウンロード： <a href='http://labs.qui-no.com/uploads/FeliCaBasic.zip' onclick="_gaq.push(['_trackEvent', 'SourceCode', 'Download', 'FeliCaBasic.zip']);">FeliCaBasic.zip</a><br />
<br />
<br />
<br />
Standard版（有償）を利用すれば、データ領域にアクセス出来るため、様々な事に応用出来そうな気がします。また、読み取り側の普及次第となりますが、ECサイトの決済サービス等も増えてきそうな気がします。</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.qui-no.com/191/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Adobe Stratusを使用したFlash P2P通信について</title>
		<link>http://labs.qui-no.com/122</link>
		<comments>http://labs.qui-no.com/122#comments</comments>
		<pubDate>Mon, 01 Feb 2010 09:20:26 +0000</pubDate>
		<dc:creator>加藤 雄亮</dc:creator>
				<category><![CDATA[Flash/Flex]]></category>

		<guid isPermaLink="false">http://labs.qui-no.com/?p=122</guid>
		<description><![CDATA[
Adobe LabsにRTMFPプロトコルを扱う「Adobe Stratus」があります。現在はベータ版ですが、そろそろリリースが近いのではないかと思います。

RTMFP（Real-Time Media Flow P [...]]]></description>
			<content:encoded><![CDATA[<p>
Adobe LabsにRTMFPプロトコルを扱う「<a href="http://labs.adobe.com/technologies/stratus/" target="_blank">Adobe Stratus</a>」があります。現在はベータ版ですが、そろそろリリースが近いのではないかと思います。<br />
<br />
RTMFP（Real-Time Media Flow Protocol）は、簡単に言うとRTMPの機能限定版です。リアルタイムの映像と音声配信に特化したプロトコルと言えます。Flash Player 10.1とStratus 2.0を使用するとアプリケーションレベルでマルチキャストを使用出来きるそうです。サーバを介す必要がないため、負荷を軽減出来るメリットがあります。<br />
<br />
<img src="http://labs.qui-no.com/uploads/stratus1.png" alt="" title="stratus1" width="525" height="300" class="alignnone size-full wp-image-133" />
<br />
<span id="more-122"></span><br />
<strong>サンプルアプリケーション：</strong><br />
オンラインで公開されているサンプルアプリケーションもありますが、ローカルで動作させてみたい場合は、ソースコードが公開されているのでダウンロードして自由に試す事が出来ます。<br />
<br />
<a href="http://labs.adobe.com/technologies/stratus/samples/" target="_blank">Stratusオンラインサンプル</a><br />
<a href="http://download.macromedia.com/pub/labs/stratus/stratus_article_assets.zip" target="_blank">ソースコードダウンロード</a><br />
<br />
<img src="http://labs.qui-no.com/uploads/stratus2.png" alt="" title="stratus2" width="473" height="629" class="alignnone size-full wp-image-134" />
<br />
<br />
ソースコードを実行する場合は以下の手順が必要です。<br />
※要Flex Builder 3.0.2, Flash Player 10<br />
<br />
<strong>1. Flex Builderで「新規Flexプロジェクト」で「VideoPhoneLabs」プロジェクトを作成します。</strong><br />
<br />
<strong>2. 以下のソースコードを「VideoPhoneLabs/src/」下にコピーします。</strong><br />
　VideoPhoneLabs.mxml<br />
　AbstractIdManager.as<br />
　HttpIdManager.as<br />
　IdManagerError.as<br />
　IdManagerEvent.as<br />
<br />
<strong>3.「VideoPhoneLabs」プロジェクトのプロパティを変更</strong><br />
　「Flexコンパイラ」の「Flex SDK バージョン」を「Flex 3.2」へ変更<br />
　「Flexコンパイラ」の「必要な Flash Player バージョン」を「10.0.0」へ変更<br />
<br />
<strong>4. Stratusベータ版のDeveloper keyを取得します。</strong><br />
　<a href="https://www.adobe.com/cfusion/entitlement/index.cfm?e=stratus" target="_blank">Stratus developer key</a><br />
<br />
<strong>5. Developer keyを「VideoPhoneLabs.mxml」に記述します。</strong><br />
<pre class="brush: as3; first-line: 28; title: ;">
// developer key, please insert your developer key here
private const DeveloperKey:String = &quot;取得したDeveloper key&quot;;
</pre><br />
<br />
<strong>6. 同梱のPythonスクリプト「reg.cgi」が利用するSQLite3のデータベースを作成し、以下のSQLを実行します。</strong><br />
<pre class="brush: sql; title: ;">
CREATE TABLE registrations (
    m_username VARCHAR COLLATE NOCASE,
    m_identity VARCHAR,
    m_updatetime DATETIME,
    PRIMARY KEY (m_username)
);
CREATE INDEX registrations_updatetime ON registrations (m_updatetime ASC);
</pre><br />
<br />
<pre class="brush: bash; title: ;">
[user@www ~]$ sqlite3 registrations.db　# データベース作成
SQLite version 3.3.6
Enter &quot;.help&quot; for instructions

# テーブル作成
sqlite&gt; CREATE TABLE registrations (
   ...&gt;     m_username VARCHAR COLLATE NOCASE,
   ...&gt;     m_identity VARCHAR,
   ...&gt;     m_updatetime DATETIME,
   ...&gt;     PRIMARY KEY (m_username)
   ...&gt; );
sqlite&gt; CREATE INDEX registrations_updatetime ON registrations (m_updatetime ASC);

# 終了
sqlite&gt; .quit
</pre><br />
<br />
<strong>7.「reg.cgi」のデータベースファイルの場所を任意で変更します。</strong><br />
　※「reg.cgi」と「registrations.db」を同階層に設置する場合は以下<br />
<pre class="brush: python; first-line: 30; title: ;">
# CHANGE THIS
dbFile = './registrations.db'
</pre><br />
<br />
<strong>8.「reg.cgi」を任意の場所にアップロードし、URLを「VideoPhoneLabs.mxml」に記述します。</strong><br />
<pre class="brush: as3; first-line: 31; title: ;">
// please insert your webservice URL here for exchanging
private const WebServiceUrl:String = &quot;http://設置URL/reg.cgi&quot;;
</pre><br />
<br />
<strong>9.「VideoPhoneLabs」プロジェクトをコンパイルします。</strong><br />
<br />
<strong>10.「bin-release」ディレクトリに生成されたHTMLをWebサーバへアップロードして完了です。</strong><br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.qui-no.com/122/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>FlashでWebカムからQRコードを読み取る</title>
		<link>http://labs.qui-no.com/18</link>
		<comments>http://labs.qui-no.com/18#comments</comments>
		<pubDate>Fri, 22 Jan 2010 10:31:28 +0000</pubDate>
		<dc:creator>加藤 雄亮</dc:creator>
				<category><![CDATA[Flash/Flex]]></category>

		<guid isPermaLink="false">http://labs.qui-no.com/?p=18</guid>
		<description><![CDATA[
以前、社内でQRコードを使用したサービスを検討していた際、FlashでWebカメラを使用してQRコードを読み取る技術が公開されていたのでご紹介します。

ソースコードはSpark Project内のQRCodeRead [...]]]></description>
			<content:encoded><![CDATA[<p>
以前、社内でQRコードを使用したサービスを検討していた際、FlashでWebカメラを使用してQRコードを読み取る技術が公開されていたのでご紹介します。<br />
<br />
ソースコードはSpark Project内のQRCodeReaderプロジェクトとして公開されていて、誰でもサンプルを使用する事が出来ます。<br />
<br />
<span id="more-18"></span>資料：<br />
<a href="http://labs.logosware.com/archives/65" target="_blank">FlashでQRコード読み取り &#8211; ロゴスウェア株式会社</a><br />
<a href="http://www.adobe.com/jp/devnet/flash/articles/qr_code_reader.html" target="_blank">ActionScriptでQRコードを読み取る &#8211; Flashデベロッパーセンター</a><br />
<br />
ソースコード：<br />
<a href="http://www.libspark.org/wiki/QRCodeReader" target="_blank">QRCodeReader &#8211; Spark Project</a><br />
<br />
以下はサンプルコードをパブリッシュして生成したswfファイルです。<br />
<span style="color: #800000;">※このサンプルはWebカメラを使用します。Webカメラが利用出来ない場合はサンプルは動作しません。</span><br />
<div style="width: 350px; border: 1px solid #cccccc;">
<script src="/js/swfobject.js" type="text/javascript"></script>
<script type="text/javascript">
swfobject.embedSWF('/uploads/ReadQrCodeSample1.swf', 'readQrCodeSample', '350', '350', '9.0.124', null, {}, { menu: 'false', wmode: 'transparent' });
</script>
<div id="readQrCodeSample">QRコードサンプル</div>
</div>
<br />
WebカメラにQRコードを近づけると、文字が読み取れます。作者の方曰く、まだ改良の余地があるそうですが、とりあえずは使用できます。<br />
<br />
Flashで動作するという事は、Adobe AIRでデスクトップアプリケーションとして動作させる事も可能です。なにか新しいサービスが出来そうな予感がします。<br />
<br />
サンプルswfファイルダウンロード： <a href='http://labs.qui-no.com/uploads/ReadQrCodeSample.zip' onclick="_gaq.push(['_trackEvent', 'SourceCode', 'Download', 'ReadQrCodeSample.zip']);">ReadQrCodeSample.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://labs.qui-no.com/18/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

