<?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>背負い投げとENTER_FRAME</title>
	<atom:link href="http://www.renowan.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.renowan.com/blog</link>
	<description>なんちゃってWebクリエイターがFlashやらActionScriptやらを淡々と書く。ときとき柔道の話しもする。</description>
	<lastBuildDate>Sat, 19 May 2012 02:29:44 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Arcticを試してみる</title>
		<link>http://www.renowan.com/blog/?p=722</link>
		<comments>http://www.renowan.com/blog/?p=722#comments</comments>
		<pubDate>Tue, 01 May 2012 01:29:59 +0000</pubDate>
		<dc:creator>RENOWAN</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[WEB全般]]></category>
		<category><![CDATA[Arctic]]></category>

		<guid isPermaLink="false">http://www.renowan.com/blog/?p=722</guid>
		<description><![CDATA[Arcticはどういうものかを試してみたかったのでDL。 サンプルのNumberを見たら、案外行けそうなので、 これをベースにオレオレスロットを作ってみた。 感想・メモ Shape、textfieldなどはActionS [...]]]></description>
			<content:encoded><![CDATA[<p>Arcticはどういうものかを試してみたかったのでDL。<br />
サンプルのNumberを見たら、案外行けそうなので、<br />
これをベースにオレオレスロットを作ってみた。</p>
<p><span id="more-722"></span><br/></p>
<h3>感想・メモ</h3>
<ul>
<li>Shape、textfieldなどはActionScriptっぽくて馴染みやすい。</li>
<li>initializeはコンストラクタ？</li>
<li>updateはONENTER_FRAMEと思えばいいのかな？ でも停止できない？</li>
<li>JSはコードが長くなるから、うまく分割すべし。</li>
</ul>
<p><br/><br/></p>
<p><canvas id="canvas"></canvas><br />
<script src="http://www.renowan.com/blog/flash/20120501_arctic/arctic.js"></script><br />
<script src="http://www.renowan.com/blog/flash/20120501_arctic/game.js"></script></p>
<p><br/></p>
<h3>HTMLコード</h3>
<pre class="brush: xml; title: ; notranslate">
&lt;canvas id=&quot;canvas&quot;&gt;&lt;/canvas&gt;
&lt;script src=&quot;arctic.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;game.js&quot;&gt;&lt;/script&gt;
</pre>
<p><br/></p>
<h3>Javascriptコード</h3>
<pre class="brush: jscript; title: ; notranslate">(function(){
var system;

//ゲームのメインクラス
var GameMain = arc.Class.create(arc.Game, {
	GAME_FTP:3,
	TOP_MARGIN:10,
	LEFT_MARGIN:15,
	MARGIN:6,
	initialize:function(params){

		this._game_states = false;
		this._fullSlot = 0;

		this._txtArr = ['R','E','N','O'];	//テキスト
		this._btnArr = [];	//ボタン用配列

		//ボタンの配置
		for(var i = 0, len = this._txtArr.length; i &lt; len; i++){
			var btn = new NumberButton();

			btn.setX(this.LEFT_MARGIN + i * (this.MARGIN+NumberButton.WIDTH));
			btn.setY(this.TOP_MARGIN);
			btn.setNumber(this._txtArr[i]);

			this.addChild(btn);
			this._btnArr.push(btn);
		}

		// スロットの番号表示
		this._stdp = new SlotDisplay();
		this._stdp.setX( this.LEFT_MARGIN );
		this._stdp.setY(90);
		this._stdp.setNumber('R');
		this._stdp.addEventListener(arc.Event.TOUCH_END, arc.util.bind(this._onClickSlot, this));
		this.addChild(this._stdp);

		// カウンター
		this._cdp = new ClickDisplay();
		this._cdp.setX( this.LEFT_MARGIN );
		this._cdp.setY( 330 );
		this.addChild(this._cdp);

		//スタートボタン
		this._cover = new Cover();
		this._cover.addEventListener(arc.Event.TOUCH_END, arc.util.bind(this._onClickCover, this));
		this.addChild(this._cover);

	},

	//開始
	_start: function(){
		this._ftp = 0;
		this._currentNumber = 0;	//スロット用フレーム数
		this._game_states = true;
	},

	//Coverのクリックハンドラ
	_onClickCover: function(event){
		// var target = event.target;
		this.removeChild(this._cover);
		this._start();
	},

	_reSet: function(){
		this.removeChild(this._cover);
		this._fullSlot = 0;
		this._start();
		this._game_states = true;
		this._cdp.resetNumber();

		for(var i = 0, len = this._txtArr.length; i &lt; len; i++){
			var _btn = this._btnArr[i];
			//alert(_btn);
			_btn.activate(true);
			_btn.setStatus(false);
		}
	},

	_onClickSlot: function(event){

		var target = event.target;
		var _num = target.getNumber();

		this._cdp.setNumberUp();

		for(var i = 0, len = this._txtArr.length; i &lt; len; i++){
			var _btn = this._btnArr[i];

			if( ( _btn.getNumber() == _num ) &amp;&amp; ( !_btn.getStatus() ) ){
				_btn.activate(false);
				_btn.setStatus(true);

				// 終わったかのカウント。
				this._fullSlot = this._fullSlot + 1;

				if( this._fullSlot == this._txtArr.length ){

					this._cover = new Cover();
					this._cover._txt.setText(&quot;END\n\n&quot;+this._cdp.getNumber()+&quot;打数4安打&quot;);
					this.addChild(this._cover);
					this._cover.addEventListener(arc.Event.TOUCH_END, arc.util.bind(this._reSet, this));
					this._game_states = false;
				}
			}
		}

	},

	update:function(){

		if( this._game_states ){
			this._ftp = this._ftp + 1;
		}

		if(this._ftp == this.GAME_FTP){

			// ftpカウンターをリセット
			this._ftp = 0;

			//時間経過
			this._stdp.setNumber( this._txtArr[this._currentNumber] );

			this._currentNumber = this._currentNumber +1;
			if(this._currentNumber&gt;3)this._currentNumber = 0;

		}

	}
});

//数字のボタン
var NumberButton = arc.Class.create(arc.display.DisplayObjectContainer, {
	initialize:function(){
		this._number = 'ぬ';
		this._status = false;

		//On表示
		this._bgOn = new arc.display.Shape();
		this._bgOn.beginFill(0x00ff00);
		this._bgOn.drawRect(0, 0, NumberButton.WIDTH, NumberButton.HEIGHT);
		this._bgOn.endFill();

		//Off表示
		this._bgOff = new arc.display.Shape();
		this._bgOff.beginFill(0xCCCCCC);
		this._bgOff.drawRect(0, 0, NumberButton.WIDTH, NumberButton.HEIGHT);
		this._bgOff.endFill();

		//数字表示テキスト
		this._numTxt = new arc.display.TextField();
		this._numTxt.setX(NumberButton.WIDTH / 2);
		this._numTxt.setY(NumberButton.HEIGHT / 2);
		this._numTxt.setAlign(arc.display.Align.CENTER);
		this._numTxt.setFont(&quot;Helvetica&quot;, 20, true);

		this.addChild(this._bgOn);
		this.addChild(this._bgOff);
		this.addChild(this._numTxt);

		this.activate(true);
	},

	setNumber:function(num){
		this._number = num;
		this._numTxt.setText(num);
	},

	getNumber:function(){
		return this._number;
	},

	setStatus:function(sta){
		this._status = sta;
	},

	getStatus:function(){
		return this._status;
	},

	activate: function(flg){

		if(flg){

			this._bgOn.setVisible(false);
			this._bgOff.setVisible(true);

		}else{
			this._bgOn.setVisible(true);
			this._bgOff.setVisible(false);
		}

	}
});

//スロット部分
var SlotDisplay = arc.Class.create(arc.display.DisplayObjectContainer, {
	initialize:function(){
		this._number = 'ぬ';

		//On表示
		this._bgOn = new arc.display.Shape();
		this._bgOn.beginFill(0x333333);
		this._bgOn.drawRect(0, 0, 290, 230);
		this._bgOn.endFill();

		//数字表示テキスト
		this._numTxt = new arc.display.TextField();
		this._numTxt.setX(140);
		this._numTxt.setY(130);
		this._numTxt.setAlign(arc.display.Align.CENTER);
		this._numTxt.setColor(0xFF0000);
		this._numTxt.setFont(&quot;Helvetica&quot;, 200, true);

		this.addChild(this._bgOn);
		this.addChild(this._numTxt);
	},

	setNumber:function(num){
		this._number = num;
		this._numTxt.setText(num);
	},

	getNumber:function(){
		return this._number;
	},

	activate: function(flg){
		this._bgOn.setVisible(flg);
	}
});

NumberButton.WIDTH = 68;
NumberButton.HEIGHT = 68;

//STARTボタン
var Cover = arc.Class.create(arc.display.DisplayObjectContainer, {
	initialize:function(){
		//黒背景
		this._bg = new arc.display.Shape();
		this._bg.beginFill(0xFF0000, 0.7);
		this._bg.drawRect(0, 0, system.getWidth(), system.getHeight());
		this._bg.endFill();

		//スタート表示のテキスト
		this._txt = new arc.display.TextField();
		this._txt.setAlign(arc.display.Align.CENTER);
		this._txt.setFont(&quot;Helvetica&quot;, 30, true);
		this._txt.setText(&quot;START&quot;);
		this._txt.setX(system.getWidth() / 2);
		this._txt.setY(system.getHeight() / 2);
		this._txt.setColor(0xffffff);

		this.addChild(this._bg);
		this.addChild(this._txt);
	}
});

//クリック数を表示
var ClickDisplay = arc.Class.create(arc.display.DisplayObjectContainer, {
	initialize:function(){
		this._number = 0;

		//On表示
		this._bgOn = new arc.display.Shape();
		this._bgOn.beginFill(0x000000);
		this._bgOn.drawRect(0, 0, 290, 74);
		this._bgOn.endFill();

		//数字表示テキスト
		this._numTxt = new arc.display.TextField();
		this._numTxt.setX(15);
		this._numTxt.setY(38);
		this._numTxt.setAlign(arc.display.Align.LEFT);
		this._numTxt.setColor(0xFFFFFF);
		this._numTxt.setFont(&quot;Helvetica&quot;, 24, true);
		this._numTxt.setText('クリック数：'+this._number);

		this.addChild(this._bgOn);
		this.addChild(this._numTxt);
	},

	resetNumber:function(){
		this._number = 0;
		this._numTxt.setText('クリック数：'+this._number);
	},

	setNumberUp:function(){
		this._number = this._number + 1;
		this._numTxt.setText('クリック数：'+this._number);
	},

	getNumber:function(){
		return this._number;
	},

	activate: function(flg){
		this._bgOn.setVisible(flg);
	}
});

window.addEventListener('DOMContentLoaded', function(e){
	system = new arc.System(320, 416, 'canvas');
	system.setGameClass(GameMain);
	system.start();
}, false);
})();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.renowan.com/blog/?feed=rss2&#038;p=722</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>中国のSNSシェアスクリプト</title>
		<link>http://www.renowan.com/blog/?p=712</link>
		<comments>http://www.renowan.com/blog/?p=712#comments</comments>
		<pubDate>Tue, 07 Feb 2012 14:11:01 +0000</pubDate>
		<dc:creator>RENOWAN</dc:creator>
				<category><![CDATA[WEB全般]]></category>
		<category><![CDATA[JavaScriopt]]></category>
		<category><![CDATA[SNS]]></category>

		<guid isPermaLink="false">http://www.renowan.com/blog/?p=712</guid>
		<description><![CDATA[前中国の仕事で、中国SNSを絡む機会があったので、 情報をシェアする。 中国の人気SNS（主観） Sina Weibo（新浪）　- 人気No.1確実 QQ（騰信） &#8211; 二番手 renren（人人） &#821 [...]]]></description>
			<content:encoded><![CDATA[<p>前中国の仕事で、中国SNSを絡む機会があったので、<br />
情報をシェアする。</p>
<p><span id="more-712"></span></p>
<h3>中国の人気SNS（主観）</h3>
<li>Sina Weibo（新浪）　- 人気No.1確実</li>
<li>QQ（騰信） &#8211; 二番手</li>
<li>renren（人人） &#8211; Facebookみたいな</li>
<li>kaixin（開心網） &#8211; よく知らない、多分有名</li>
<li>douban（豆瓣） &#8211; よく知らない、有名じゃないかも</li>
<p>まとめてシェアするJavaScript</p>
<pre class="brush: jscript; title: ; notranslate">

function postToWb(sns_name){

	var _url = encodeURIComponent(document.location);
	var _title = document.title;
	var _u = '';

	_title = encodeURI(_title);

	if( sns_name == 'sina' )
	{
		_u = 'http://service.weibo.com/share/share.php?url='+_url+'&amp;title='+_title;
	}else if( sns_name == 'qq' ){
		_u = 'http://share.v.t.qq.com/index.php?c=share&amp;a=index&amp;url=' + _url + '&amp;title=' + _title;
	}else if( sns_name == 'ren' ){
		_u = 'http://share.renren.com/share/buttonshare?link=' + _url + '&amp;title=' + _title;
	}else if( sns_name == 'kaixin' ){
		_u = 'http://www.kaixin001.com/repaste/bshare.php?rtitle=' + _title + '&amp;rurl=' + _url;
	}else if( sns_name == 'douban' ){
		_u = 'http://shuo.douban.com/!service/share?href=' + _url + '&amp;name=' + _title;
	}

	window.open( _u );
}
</pre>
<p>HTML実装</p>
<pre class="brush: xml; title: ; notranslate">
&lt;a href=&quot;javascript:void(0)&quot; onclick=&quot;postToWb('sina');&quot;&gt;シェア - 新浪&lt;/a&gt;
&lt;a href=&quot;javascript:void(0)&quot; onclick=&quot;postToWb('qq');&quot;&gt;シェア - 騰信&lt;/a&gt;
&lt;a href=&quot;javascript:void(0)&quot; onclick=&quot;postToWb('ren');&quot;&gt;シェア - 人人&lt;/a&gt;
&lt;a href=&quot;javascript:void(0)&quot; onclick=&quot;postToWb('kaixin');&quot;&gt;シェア - 開心網&lt;/a&gt;
&lt;a href=&quot;javascript:void(0)&quot; onclick=&quot;postToWb('douban');&quot;&gt;シェア - 豆瓣&lt;/a&gt;
</pre>
<h3>各SNSのドキュメント</h3>
<p>新浪：<a href="http://open.weibo.com/sharebutton" target="_blank">http://open.weibo.com/sharebutton</a><br />
騰信：<a href="http://open.t.qq.com/apps/share/explain.php" target="_blank">http://open.t.qq.com/apps/share/explain.php</a><br />
人人：<a href="http://wiki.dev.renren.com/wiki/Share.share" target="_blank">http://wiki.dev.renren.com/wiki/Share.share</a><br />
開心網：<a href="http://www.kaixin001.com/platform/?app=repaste" target="_blank">http://www.kaixin001.com/platform/?app=repaste</a><br />
豆瓣：知らない…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renowan.com/blog/?feed=rss2&#038;p=712</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery.ajaxで簡単に非同期通信</title>
		<link>http://www.renowan.com/blog/?p=707</link>
		<comments>http://www.renowan.com/blog/?p=707#comments</comments>
		<pubDate>Wed, 11 May 2011 12:47:39 +0000</pubDate>
		<dc:creator>RENOWAN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[配列]]></category>

		<guid isPermaLink="false">http://www.renowan.com/blog/?p=707</guid>
		<description><![CDATA[やっばりイマドキっぽく、jQuery.ajaxで非同期通信しよう。結構簡単にできたけど、PHPから配列をJavaScriptに戻す作法でつまずいた。普通にPHPでゲットした配列（多次元連想）をそのままechoで返すと、j [...]]]></description>
			<content:encoded><![CDATA[<p>やっばりイマドキっぽく、jQuery.ajaxで非同期通信しよう。結構簡単にできたけど、PHPから配列をJavaScriptに戻す作法でつまずいた。普通にPHPでゲットした配列（多次元連想）をそのままechoで返すと、jQueryの方がどうしても解析できなかった。</p>
<p><span id="more-707"></span>
<pre class="brush: php; title: ; notranslate">
$result = json_encode($result);
echo $result;
</pre>
<p>配列をエンコードしておけば、問題解決。</p>
<p>ローカルのMAMP環境だとajaxのパラメータに「dataType: &#8216;json&#8217;」が必要だったけど、ロリポップのサーバーだと消さないといけない。そのかわりに取得してきた配列をJSON.parse()を掛ける必要がある。</p>
<p><a href="http://www.renowan.com/blog/flash/20110511_ajax/index.html" target="_blank">デモページ</a></p>
<p>「送信」を押すと「getAr.php」を読み込んで、PHPから配列が帰ってきたら、テーブルにあるもとの行を全部消して、新しいデータを差し替える。PHPファイルは本当はMySQLとかでデータを取得することを想定するけど、サンプルはとりあえず適当な配列を作って返す。</p>
<pre class="brush: jscript; title: ; notranslate">

&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
&lt;title&gt;jQureyでAJAX&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;

	// ここらへんはjQurey
	$( function() {

		$(&quot;*[name=btn]&quot;).click(

			function() {

				var $keyword = '';

				$.ajax({
					url: &quot;./getAr.php&quot;,
					type: &quot;POST&quot;,
					data: { val : $keyword },	// 検索など引数を渡す必要があるときこれを使う
					//dataType: 'json',			// サーバーなどの環境によってこのオプションが必要なときがある
					success: function(arr) {

   						// 自分の環境だと帰ってきた配列をパスしないとだめ。
   						// ローカルだとそのまま使えた。
   						var parseAr = JSON.parse( arr );	

   						 $(&quot;p&quot;).text('検索結果：'+ parseAr.length+'件');

						reWriteTable(parseAr);
					}
				});
			}
		);

	});

	// テーブルを書き換える関数
	function reWriteTable( response )
	{
		// 元にある行を削除
		$(&quot;#list tr&quot;).remove();

		// 取得したデータを行に入れる
		for (var i=0; i&lt; response.length; i++) {

			$(&quot;#list&quot;).append(
			    $('&lt;tr&gt;').append(
			        $('&lt;td class=&quot;name&quot;&gt;').text(response[i]['name'])
			    ).append(
			        $('&lt;td class=&quot;age&quot;&gt;').text(response[i]['age'])
			    ).append(
			        $('&lt;td class=&quot;address&quot;&gt;').text(response[i]['address'])
			    )
			);

		}
	}

&lt;/script&gt;

&lt;/head&gt;

&lt;body&gt;
	&lt;div&gt;&lt;a href=&quot;javascript:void(0)&quot; name=&quot;btn&quot;&gt;送信&lt;/a&gt;&lt;/div&gt;&lt;br/&gt;
	&lt;p&gt;返り値&lt;/p&gt;

	&lt;table id=&quot;list&quot; border=&quot;1&quot;&gt;
		&lt;tr&gt;&lt;td class=&quot;name&quot;&gt;花子&lt;/td&gt;&lt;td class=&quot;age&quot;&gt;7&lt;/td&gt;&lt;td class=&quot;address&quot;&gt;目黒区&lt;/td&gt;&lt;/tr&gt;
		&lt;tr&gt;&lt;td class=&quot;name&quot;&gt;太郎&lt;/td&gt;&lt;td class=&quot;age&quot;&gt;5&lt;/td&gt;&lt;td class=&quot;address&quot;&gt;大田区&lt;/td&gt;&lt;/tr&gt;
		&lt;tr&gt;&lt;td class=&quot;name&quot;&gt;まーくん&lt;/td&gt;&lt;td class=&quot;age&quot;&gt;13&lt;/td&gt;&lt;td class=&quot;address&quot;&gt;杉並区&lt;/td&gt;&lt;/tr&gt;
	&lt;/table&gt;

	&lt;br/&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>PHP部分（getAr.php）</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php 

// この変数はMySQLの検索用クリエなどに使えば良い
$target = $_POST['val'];

// 本当はMySQLなどデータベースから情報を引っ張ってくるけど、
// ここはとりあえず適当に多次元連想配列を作って返す。

$result = array();
$result[] = array('name'=&gt;'織田信長','age'=&gt;'35','address'=&gt;'尾張');
$result[] = array('name'=&gt;'徳川家康','age'=&gt;'30','address'=&gt;'三河');
$result[] = array('name'=&gt;'武田信玄','age'=&gt;'29','address'=&gt;'甲斐');

// 配列をエンコードしないと化けるみたい。
$result = json_encode($result);

echo $result;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.renowan.com/blog/?feed=rss2&#038;p=707</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajaxでの文字化け対策</title>
		<link>http://www.renowan.com/blog/?p=704</link>
		<comments>http://www.renowan.com/blog/?p=704#comments</comments>
		<pubDate>Wed, 11 May 2011 05:57:58 +0000</pubDate>
		<dc:creator>RENOWAN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WEB全般]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[非同期通信]]></category>

		<guid isPermaLink="false">http://www.renowan.com/blog/?p=704</guid>
		<description><![CDATA[前記事のAjax文字化けの続き。ググってみたら、使用ライブラリは関係なく、結構Ajaxで文字化けを遭遇した人が多いみたい。 ・Apacheのmbstring設定を換える。 ・全ファイルUTF-8にする。 とやってもだめだ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.renowan.com/blog/?p=702">前記事のAjax文字化け</a>の続き。ググってみたら、使用ライブラリは関係なく、結構Ajaxで文字化けを遭遇した人が多いみたい。</p>
<p><span id="more-704"></span>・Apacheのmbstring設定を換える。<br />
・全ファイルUTF-8にする。</p>
<p>とやってもだめだった。</p>
<p>あれやこれや試した結果、ちょっと面倒だけどPHPへ送信する前と、JavaScriptへコールバックする前に、それぞれエンコードしておけば回避できた。AJASONの場合、直でメソッドを呼ぶじゃなく、いったん自前の関数で引数をエンコードしておいてからAJASONの処理に渡すことがカギ。</p>
<p><a href="http://www.renowan.com/blog/flash/20110510_ajax.tgz">ファイル一式</a>をどうぞ。</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php

	require_once( './php/Ajax.php' );

	class MyClass
	{

		public function getResult( $target )
		{
			// ＊＊＊ 重 要 ＊＊＊ エンコードしてからPHPへ送信 ＊＊＊ 重 要 ＊＊＊
			$target = urldecode( $target);

			/*
			 *
			 * ここは普通に引数を返すが、
			 * もとの目的は引数でMySQLクリエを発行すること。
			 * Ext： &quot;SELECT * FROM HogeTabke WHERE xxx LIKE '&quot;.$target.&quot;%'&quot;
			 * 取得した結果はそのままreturnして大丈夫みたい（文字化けしない）。
			 *
			*/

			return $target;
		}

	}

	$ajax = new Ajax();

	// 使用するクラス、メソッドを記入
	$ajax-&gt;registerMethod( 'MyClass', 'getResult' );

	$ajaxServer = $ajax-&gt;getServer();

	if ( $ajaxServer-&gt;isRequest() )
	{
		echo $ajaxServer-&gt;handleRequest();
		exit();
	}

	$ajaxClient = $ajax-&gt;getClient();

?&gt;

&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
&lt;title&gt;AJAX example&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;./js/json.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;./js/ajax.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;

	&lt;?php echo $ajaxClient-&gt;getJavaScript(); ?&gt;

	function reWrite_cb( response )
	{
		// jQueryでPタグの内容を書き換える。
		$(&quot;p&quot;).text(response);

	}

	function getResult_Apter( targ )
	{
		// ＊＊＊ 重 要 ＊＊＊ エンコードしてからPHPへ送信 ＊＊＊ 重 要 ＊＊＊
		targ = encodeURI(targ);
		x_MyClass.getResult(targ,reWrite_cb);
	}

&lt;/script&gt;

&lt;/head&gt;

&lt;body&gt;
	&lt;p&gt;返り値&lt;/p&gt;

	&lt;br/&gt;

	&lt;!-- x_ + クラス名でメソッドを読み出す --&gt;
	&lt;!-- クラスを使わず、functionを直に記述もできる。詳細はAJASON付属のサンプルを参照 --&gt;

	&lt;div&gt;&lt;a href=&quot;javascript:void(0)&quot; onclick=&quot;x_MyClass.getResult('これだと化ける',reWrite_cb );&quot;&gt;直で送信すると化ける&lt;/a&gt;&lt;/div&gt;
	&lt;div&gt;&lt;a href=&quot;javascript:void(0)&quot; onclick=&quot;getResult_Apter('なにかの日本語' );&quot;&gt;アダプタ経由で回避&lt;/a&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>他にいい方法があればぜひ教えてほしい。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renowan.com/blog/?feed=rss2&#038;p=704</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ライブラリ「AJASON」で非同期通信をやってみる</title>
		<link>http://www.renowan.com/blog/?p=702</link>
		<comments>http://www.renowan.com/blog/?p=702#comments</comments>
		<pubDate>Wed, 11 May 2011 05:41:02 +0000</pubDate>
		<dc:creator>RENOWAN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WEB全般]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[非同期通信]]></category>

		<guid isPermaLink="false">http://www.renowan.com/blog/?p=702</guid>
		<description><![CDATA[ZendFrameworkでアプリケーションをゴリゴリ作ってると、ページ間のデータやりとりが面倒くさい。Flashなら何の問題もないが、時代は脱Flashだし、何かシームレスでアプリケーションを作れないかといろいろ調べた [...]]]></description>
			<content:encoded><![CDATA[<p>ZendFrameworkでアプリケーションをゴリゴリ作ってると、ページ間のデータやりとりが面倒くさい。Flashなら何の問題もないが、時代は脱Flashだし、何かシームレスでアプリケーションを作れないかといろいろ調べた見たけど、辿り着いたのはやっばりAjax。</p>
<p><span id="more-702"></span>JavaScript、PHP、MySQLの非同期通信、ゼロから書くとかそもそも無理。きっと素敵な誰かが楽ちんなライブラリをすでに作ったに違いない。と、いろいろ探して見つけたのは<a href="http://phpspot.org/blog/archives/2006/10/phpajax_1.html" target="_blank">このページ</a>。どれかいいのはまったく分からず、勘で<a href="http://ajason.sourceforge.net/" target="_blank">AJASON</a>を使うことにした。付属のサンプルを参考にやってみる。</p>
<p>DEMOをアップしたけど使ってるロリポップがなぜか動作しない（おいおい）？<br />
なので<a href="http://www.renowan.com/blog/flash/20110510_ajax.tgz">ファイル一式</a>をどうぞ。<br />
index_1.php = 化け化け。index_2.php = 対策済み。</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php

	require_once( './php/Ajax.php' );

	class MyClass
	{

		public function getResult( $target )
		{

			/*
			 *
			 * ここは普通に引数を返すが、
			 * もとの目的は引数でMySQLクリエを発行すること。
			 * Ext： &quot;SELECT * FROM HogeTabke WHERE xxx LIKE '&quot;.$target.&quot;%'&quot;
			 * 取得した結果はそのままreturnして大丈夫みたい（文字化けしない）。
			 *
			*/

			return $target;
		}

	}

	$ajax = new Ajax();

	// 使用するクラス、メソッドを記入
	$ajax-&gt;registerMethod( 'MyClass', 'getResult' );

	$ajaxServer = $ajax-&gt;getServer();

	if ( $ajaxServer-&gt;isRequest() )
	{
		echo $ajaxServer-&gt;handleRequest();
		exit();
	}

	$ajaxClient = $ajax-&gt;getClient();

?&gt;

&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
&lt;title&gt;AJAX example&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;./js/json.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;./js/ajax.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;

	&lt;?php echo $ajaxClient-&gt;getJavaScript(); ?&gt;

	function reWrite_cb( response )
	{
		// jQueryでPタグの内容を書き換える。
		$(&quot;p&quot;).text(response);

	}

&lt;/script&gt;

&lt;/head&gt;

&lt;body&gt;
	&lt;p&gt;返り値&lt;/p&gt;

	&lt;br/&gt;

	&lt;!-- x_ + クラス名でメソッドを読み出す --&gt;
	&lt;!-- クラスを使わず、functionを直に記述もできる。詳細はAJASON付属のサンプルを参照 --&gt;
	&lt;div&gt;&lt;a href=&quot;javascript:void(0)&quot; onclick=&quot;x_MyClass.getResult('こんにちわ',reWrite_cb );&quot;&gt;送信&lt;/a&gt;&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>AタグでJSを呼びたし → PHPへ送信 → JSにreturn → JSで受け取った値をゴリゴリ</p>
<p>仕組みは問題なく動いてるが、やはりAjaxでよく見かける文字化け問題が発生している。ファイルは全部UTF-8で書いてるのに…。いろいろ調べた結果、どうやら化ける化けないかはサーバー設定に関係あるようだ。Apacheの設定（mbstringあたりとあ）を変えてみたけどだめ。一晩苦悩した結果、送信前にエンコード処理するという方法で解決！</p>
<p>詳細の解決策は<a href="http://www.renowan.com/blog/?p=704">次のエントリー</a>で。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renowan.com/blog/?feed=rss2&#038;p=702</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Smartyでハマったこと</title>
		<link>http://www.renowan.com/blog/?p=701</link>
		<comments>http://www.renowan.com/blog/?p=701#comments</comments>
		<pubDate>Mon, 18 Apr 2011 06:20:22 +0000</pubDate>
		<dc:creator>RENOWAN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Smarty]]></category>
		<category><![CDATA[ZendFramework]]></category>

		<guid isPermaLink="false">http://www.renowan.com/blog/?p=701</guid>
		<description><![CDATA[ZendFramework＋Smartyで遊んでたら、Smartyのif文が聞かなくてApplication errorを引き起こす。なんでだろうと小一時間詰まって解決した。 0の後ろの半角アキが犯人でした。Action [...]]]></description>
			<content:encoded><![CDATA[<p>ZendFramework＋Smartyで遊んでたら、Smartyのif文が聞かなくてApplication errorを引き起こす。なんでだろうと小一時間詰まって解決した。</p>
<p><span id="more-701"></span>
<pre class="brush: php; title: ; notranslate">
{if $hoge!=0 }
	ほげは0。
{/if}
</pre>
<p>0の後ろの半角アキが犯人でした。ActionScriptの感覚で書いたら細かいところで怒られるのだ。</p>
<pre class="brush: php; title: ; notranslate">
{if $hoge!=0}
	ほげは0。
{/if}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.renowan.com/blog/?feed=rss2&#038;p=701</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>短いコードで値がある範囲で行ったり来たりする</title>
		<link>http://www.renowan.com/blog/?p=695</link>
		<comments>http://www.renowan.com/blog/?p=695#comments</comments>
		<pubDate>Wed, 23 Mar 2011 13:28:38 +0000</pubDate>
		<dc:creator>RENOWAN</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>

		<guid isPermaLink="false">http://www.renowan.com/blog/?p=695</guid>
		<description><![CDATA[三項演算子でコードが減る。いつも書き方を忘れちゃうのでメモ。 Boolean型の値を「!」で反転できるのは最近知った（遅っ！）。 もっといい書き方があればご指導を！]]></description>
			<content:encoded><![CDATA[<p>三項演算子でコードが減る。いつも書き方を忘れちゃうのでメモ。<br />
Boolean型の値を「!」で反転できるのは最近知った（遅っ！）。</p>
<p>もっといい書き方があればご指導を！</p>
<p><span id="more-695"></span>
<pre class="brush: as3; title: ; notranslate">
//ColorHが0〜255の間に行ったり来たりする

var ColorH:int = 0;
var ColorH_Flg:Boolean = false;

addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onEnterFrame(event:Event):void {

	//三項演算子で条件によって足すか減らす
	ColorH_Flg ? ColorH-- : ColorH++;
	trace(&quot;ColorH : &quot; + ColorH);

	//条件の範囲を超えたらフラグを反転させる
	if( ColorH &lt; 1 || ColorH &gt; 254 ) ColorH_Flg = !ColorH_Flg;

}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.renowan.com/blog/?feed=rss2&#038;p=695</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flashをやってる人の肩書き</title>
		<link>http://www.renowan.com/blog/?p=689</link>
		<comments>http://www.renowan.com/blog/?p=689#comments</comments>
		<pubDate>Wed, 23 Mar 2011 05:09:58 +0000</pubDate>
		<dc:creator>RENOWAN</dc:creator>
				<category><![CDATA[WEB全般]]></category>

		<guid isPermaLink="false">http://www.renowan.com/blog/?p=689</guid>
		<description><![CDATA[今までWebデザイナーという肩書きで通してきたけど、デザインはほとんどやってないから、ちょっと違和感を感じる。この間、部長がようやくこれについて切り出した。 部：君、肩書きは何？ 私：うちの部、制作はみんな一括りでウェブ [...]]]></description>
			<content:encoded><![CDATA[<p>今までWebデザイナーという肩書きで通してきたけど、デザインはほとんどやってないから、ちょっと違和感を感じる。この間、部長がようやくこれについて切り出した。</p>
<p>部：君、肩書きは何？<br />
私：うちの部、制作はみんな一括りでウェブデザイナーですよ。<br />
部：うん、変だね。ちゃんと職名をなんか付けようか？ フラッシャー？<br />
私：フラッシャー？ いや、あんまりスマートではないので「フラッシュ・デベロッパー」にしましょうか？</p>
<p><span id="more-689"></span>ここでディレクターが乱入。</p>
<p>D：フラッシャーでいいじゃん。ほら <a href="http://www.mdn.co.jp/di/articles/217/" target="_blank">http://www.mdn.co.jp/di/articles/217/</a></p>
<p>う〜ん、確かにフラッシャーと書いてある……。しかし、自分の認識では、「Flasher」というのはあくまでスラングに近い言葉で名刺に乗せる職名ではないと考えてる（フラッシャーと名刺に書いてる人、ごめんなさい）。PHPを書いてる人はPHPerと呼んだりはするが、名刺に「PHPer」と書く勇者は未だお会いしたことがない。</p>
<p>ここで部長はおもむろにYahooで検索しはじめた。</p>
<p>フラッシャー → 約 364,000 件<br />
Web業界と関係ないものが多い。</p>
<p>フラッシュ デベロッパー → 約11,300,000件<br />
はい、圧勝です。</p>
<p>よって、会社の初代「フラッシュ デベロッパー」に就任することになった。ついでに、コーディングのスタッフに、「コーダー」となりそうなところ、「マークアップエンジンニア」にしてもらった。これでOKかな？</p>
<p>最近よく見かける肩書きは、「フラッシュー クリエイター」、「インタラクティブデザイナー」とかは悪くないと思う。ただ、「フラッシャー」だけは勘弁してほしい（フラッシャーと名刺に書いてる人、ごめんなさい）。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renowan.com/blog/?feed=rss2&#038;p=689</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPで全角半角混在の文字列をキレイに短縮</title>
		<link>http://www.renowan.com/blog/?p=681</link>
		<comments>http://www.renowan.com/blog/?p=681#comments</comments>
		<pubDate>Tue, 08 Mar 2011 13:51:05 +0000</pubDate>
		<dc:creator>RENOWAN</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.renowan.com/blog/?p=681</guid>
		<description><![CDATA[ポータルニュースサイト見たいに、タイトルの幅を揃えたい。mb_strlenを使うが、全角と半角が混在する文字列だと幅が揃わない。調べてみたらmb_strimwidthというのがあった。 文字列 = mb_strimwid [...]]]></description>
			<content:encoded><![CDATA[<p>ポータルニュースサイト見たいに、タイトルの幅を揃えたい。mb_strlenを使うが、全角と半角が混在する文字列だと幅が揃わない。調べてみたら<a href="http://php.net/manual/ja/function.mb-strimwidth.php" target="_blank">mb_strimwidth</a>というのがあった。</p>
<p>文字列 = mb_strimwidth( 文字列 , 起点 , 終点 , 省略後着く文字 , 文字小ウード );</p>
<p><span id="more-681"></span>
<pre class="brush: php; title: ; notranslate">
echo mb_strimwidth('iphoneで第二葉の写真の顔は、abkcこれはまた、びっくりするくらいひどく変貌へんぼうしていた。',0,50,'...','UTF-8');
//iphoneで第二葉の写真の顔は、abkcこれはまた、び...

echo mb_strimwidth('既に私はこの顔を忘れているakb。部屋の壁や、renowan小さい火鉢は思い出す事が出来るけれども',0,50,'...','UTF-8');
//既に私はこの顔を忘れているakb。部屋の壁や、reno...

echo mb_strimwidth('漫画にも何もならない顔である。眼をひらく。あ、こんな顔だったのか、思い出した、というようなよろこびさえ無い。',0,50,'...','UTF-8');
//漫画にも何もならない顔である。眼をひらく。あ、...

echo mb_strimwidth('自分は東北の田舎にnews生れましたのでaa15344、kyaya汽車をはじめて見たのは、よほど大きくなってからでした。',0,50,'...','UTF-8');
//自分は東北の田舎にnews生れましたのでaa15344、ky...
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.renowan.com/blog/?feed=rss2&#038;p=681</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FlashのDataGridにボタンを入れる</title>
		<link>http://www.renowan.com/blog/?p=617</link>
		<comments>http://www.renowan.com/blog/?p=617#comments</comments>
		<pubDate>Tue, 18 Jan 2011 13:27:46 +0000</pubDate>
		<dc:creator>RENOWAN</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[DataGrid]]></category>

		<guid isPermaLink="false">http://www.renowan.com/blog/?p=617</guid>
		<description><![CDATA[検索すると結構ソースが落ちてるがほとんどFlex向け。なのでFlash用の書き方を乗せておくことにした。ボタンをクリックしたら該当行のデータを取り出す。 This movie requires Flash Player  [...]]]></description>
			<content:encoded><![CDATA[<p>検索すると結構ソースが落ちてるがほとんどFlex向け。なのでFlash用の書き方を乗せておくことにした。ボタンをクリックしたら該当行のデータを取り出す。<span id="more-617"></span></p>
<div class="pic"><div style="text-align: center; width:480px; height:250px; line-height:250px; margin-right: auto; background: #ffffff;"><div id="swf88ad2">This movie requires Flash Player 9.0.0</div></div>
<script type="text/javascript">
	swfobject.embedSWF("http://www.renowan.com/blog/flash/datagrid_btn", "swf88ad2", "480", "250", "9.0.0", "http://www.renowan.com/blog/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {}, {bgcolor:"#FFFFFF",wmode:"window",menu:"false",quality:"high"}, {});
</script>
</div>
<p>ドキュメントクラス</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import flash.display.MovieClip;
	import fl.controls.dataGridClasses.DataGridColumn;
	import fl.data.DataProvider;
	import fl.events.ListEvent;

	/**
	 * ...
	 * @author reno
	 */
	public class main extends MovieClip
	{

		public function main()
		{

			//ここはDataGridの設定。
			var _id:DataGridColumn = new DataGridColumn(&quot;id&quot;);
			_id.headerText = &quot;ID&quot;;
			_id.width = 40;
			myDG.addColumn(_id);
			var _nam:DataGridColumn = new DataGridColumn(&quot;name&quot;);
			_nam.headerText = &quot;名前&quot;;
			_nam.width = 80;
			myDG.addColumn(_nam);
			var _age:DataGridColumn = new DataGridColumn(&quot;age&quot;);
			_age.headerText = &quot;年齢&quot;;
			_age.width = 40;
			myDG.addColumn(_age);
			var _address:DataGridColumn = new DataGridColumn(&quot;address&quot;);
			_address.headerText = &quot;住所&quot;;
			_address.width = 207;
			myDG.addColumn(_address);
			var _btn:DataGridColumn = new DataGridColumn(&quot;btn&quot;);
			_btn.headerText = &quot;詳細&quot;;
			_btn.width = 83;
			myDG.addColumn(_btn);

			var _arr:Array = new Array();
			_arr.push({id:1,name:&quot;tanaka&quot;,age:33,btn:&quot;1 詳細&quot;,address:&quot;東京都目黒区&quot;});
			_arr.push({id:2,name:&quot;sato&quot;,age:19,btn:&quot;2 詳細&quot;,address:&quot;東京都品川区&quot;});
			_arr.push({id:3,name:&quot;otuska&quot;,age:23,btn:&quot;3 詳細&quot;,address:&quot;東京都江東区&quot;});
			_arr.push({id:4,name:&quot;miura&quot;,age:28,btn:&quot;4 詳細&quot;,address:&quot;埼玉大宮&quot;});

			//配列をDataGridに突っ込む。
			var _dp:DataProvider = new DataProvider(_arr);
			myDG.dataProvider = _dp;
			myDG.rowCount = myDG.length;

			//Btnの列にcellRendererを実行
			_btn.cellRenderer = MyRenderer;

			//ボタンのクリックイベント設定
			myDG.addEventListener(ListEvent.ITEM_CLICK, lsnDGClick);

		}

		private function lsnDGClick(e:ListEvent):void
		{
			trace(&quot;****************************************&quot;);
			trace(&quot;列：&quot; + e.columnIndex);
			trace(&quot;行：&quot; + e.rowIndex);
			trace(&quot;index：&quot; + e.index);
			trace(&quot;年齢を取り出す&quot; + myDG.getItemAt(e.index).age);

			myTxt.text = myDG.getItemAt(e.index).name+&quot;さんの年齢：&quot;+myDG.getItemAt(e.index).age;

		}

	}

}
</pre>
<p>今回の主役、ICellRendererクラス。ボタンにしたのでコンポーネントの「Button」を承継した。他にラジオボタンとかも入れられるから該当クラスを承継すればいい。ちなみに画像を入れたい場合はListを使えばいいかも。</p>
<pre class="brush: as3; title: ; notranslate">
package
{
	import fl.controls.Button;
	import fl.controls.listClasses.ICellRenderer;
	import fl.controls.listClasses.ListData;

	public class MyRenderer extends Button implements ICellRenderer {

		private var _listData:ListData;
		private var _data:Object;

		public function MyRenderer(  ) {

		}

		public function set listData(newListData:ListData):void {
			_listData = newListData;

			//ボタンのラベルを設定。直接Stringにしてもよい。
			label = newListData.label;

			//ボタンのサイズをセット
			this.width = 80;
			this.height = 19;
			//座標は絶対座標になるので注意
			this.x = 368;
			//絶対座標なので絶対数じゃなくて+=で対応
			this.y += 1;

		}

		public function get listData():ListData {
			return _listData;
		}

		public function set data(newData:Object):void {
			_data = newData;
		}

		public function get data():Object {
			return _data;
		}

    }
}
</pre>
<p>こちらのソースが大いに参考になった。感謝。<br />
<a href="http://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=7130&#038;forum=20" target="_blank">DataGrid上のチェックボックスやボタンが表示されない</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.renowan.com/blog/?feed=rss2&#038;p=617</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

