<?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>func09 &#187; javascript</title>
	<atom:link href="http://www.func09.com/wordpress/archives/category/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://www.func09.com/wordpress</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 06 Feb 2012 04:25:55 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Titanium Mobileでmootoolsを使ってみる</title>
		<link>http://www.func09.com/wordpress/archives/1177</link>
		<comments>http://www.func09.com/wordpress/archives/1177#comments</comments>
		<pubDate>Thu, 13 Jan 2011 07:19:03 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=1177</guid>
		<description><![CDATA[最近Titanium Mobileをやってます。 http://developer.appcelerator.com/ Titaniumはとっても生産性が上がる素晴らしいツールなんですが 使っていくうちに、もう少しOOP [...]]]></description>
			<content:encoded><![CDATA[<p>最近Titanium Mobileをやってます。</p>

<p><a href="http://developer.appcelerator.com/">http://developer.appcelerator.com/</a></p>

<p>Titaniumはとっても生産性が上がる素晴らしいツールなんですが
使っていくうちに、もう少しOOPっぽく楽に書きたいなと思うようになりました。</p>

<p>そのひとつの回答として「CoffeeScript」を使うというのがあるんですけど</p>

<p>CoffeeScriptを使ったTitanium Mobileアプリケーション開発</p>

<p><a href="http://d.hatena.ne.jp/donayama/20110107/titanium_with_coffeescript">http://d.hatena.ne.jp/donayama/20110107/titanium_with_coffeescript</a></p>

<p>Objective-Cを生成するためのJavaScriptを生成するためのCoffeeScriptを書く
というところに、どうしても抵抗があります（何をいまさら・・）。</p>

<p>複数人で、しかも学習しながら開発をしようと考えているので
リファレンスやサンプルを一度CoffeeScriptに翻訳するというプロセスは
結構きついだろうと思いました。</p>

<p>そこでmootoolsを使います。</p>

<p><a href="http://mootools.net/"> http://mootools.net/</a></p>

<p>mootoolsにはサーバサイド用のmootools-serverというのがあるので、それを使いましょう。</p>

<p><a href="http://mootools.net/download"> http://mootools.net/download</a></p>

<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">// app.js</span><br />
Ti.<span style="color: #660066;">include</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'mootools-core-1.3-server.js'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003366; font-weight: bold;">var</span> Window <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Class</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; initialize<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>options<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> Ti.<span style="color: #660066;">UI</span>.<span style="color: #660066;">createWindow</span><span style="color: #009900;">&#40;</span>options<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">var</span> w <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Window<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>backgroundColor<span style="color: #339933;">:</span> <span style="color: #3366CC;">'#fff'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
w.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>

<p>こんな感じでクラスベースにコードを書いていくことができます。</p>

<p>Titaniumに適したJSライブラリを探している方、お試しアレ。</p>

<h2>CM</h2>

<p>僕が最近起こした会社FoodFotoでは、エンジニア、デザイナーを募集しています。</p>

<p>サーバインフラに強い方、Railsに詳しい方、TitaniumでiPhone開発したい方、iPhoneやWebサービスのデザインをしたい方、などなど募集中です。一緒に世界をめざそーぜ。</p>

<p>興味あるという方がいらっしゃいましたら、<a href="http://twitter.com/func09">@func09</a> か <a href="mailto:haga@foodfoto.jp">haga@foodfoto.jp</a> 宛にご連絡ください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/1177/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>mixiアプリでの外部通信のあれこれを調べた</title>
		<link>http://www.func09.com/wordpress/archives/721</link>
		<comments>http://www.func09.com/wordpress/archives/721#comments</comments>
		<pubDate>Thu, 19 Nov 2009 07:14:25 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mixi]]></category>
		<category><![CDATA[OpenSocial]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=721</guid>
		<description><![CDATA[久しぶりにmixiアプリの事を調査したよ。 多分日頃からOpenSocial開発をしてる人には当たり前のことなんだろうけど ぐぐってもわからなかったので。。 iframeで外部ページを埋め込めるか？ mixiアプリはそも [...]]]></description>
			<content:encoded><![CDATA[<p>久しぶりにmixiアプリの事を調査したよ。</p>

<p>多分日頃からOpenSocial開発をしてる人には当たり前のことなんだろうけど<br />
ぐぐってもわからなかったので。。</p>

<h2>iframeで外部ページを埋め込めるか？</h2>

<p>mixiアプリはそもそもiframe内にgadget.xmlをキャッシュされた状態で起動する。</p>

<p>つまり、mixi.jp内のページにmixi-platform.comにキャッシュされたコンテンツを表示していて<br />
さらにその中で別ドメインなコンテンツを表示できるのか？</p>

<p>結論としてはできる。
ただ外部ページからではOpenSocialAPIに接触しようがないから、不便は不便。</p>

<p>iframeの中にfacebookアプリを埋め込んだりもできたよ。<br />
でもmixiアプリ上で認証させるのは多分規約違反。</p>

<p>iframeで外部コンテンツを表示するっていう作法も、外部サイトへの遷移の規約に従ってない気がするのでアウトかな？</p>

<p>どうでしょう？</p>

<h2>Flashから外部コンテンツとの通信</h2>

<p>OpenSocialのFlash埋め込みAPIを使って、配置したSWFから<br />
URLLoaderなんかを使って普通にクロスドメインな通信ができるかチェック。</p>

<p>これもできる。相手のサーバから拒否されてなければ。</p>

<p>JavaScriptはXHRを使えないから（ひょっとして使える？）、makeRequestするわけだけど<br />
Flashは普通に通信できるなら、mixiアプリは開発しやすさで言えばFlashで作るに限るってことかなぁ。</p>

<p>makeRequestはoAuthの署名リクエストが使えるので、通信にセキュリティを保証したい場合は有効だと思う。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/721/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScriptで文字列リテラルは Stringクラスのインスタンスではない</title>
		<link>http://www.func09.com/wordpress/archives/244</link>
		<comments>http://www.func09.com/wordpress/archives/244#comments</comments>
		<pubDate>Tue, 14 Oct 2008 11:20:18 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=244</guid>
		<description><![CDATA[最近人にプログラミングを教えるというような事があって、「オブジェクトの正体」を理解してもらおうという目的から いろんなリテラルをinstanceofにかけていました（FireFox3のFireBugで）。 [1,2,3] [...]]]></description>
			<content:encoded><![CDATA[<p>最近人にプログラミングを教えるというような事があって、「オブジェクトの正体」を理解してもらおうという目的から
いろんなリテラルをinstanceofにかけていました（FireFox3のFireBugで）。</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[1,2,3] instanceof Object // =&gt; true<br />
{ a:0, b:1} instanceof Object // =&gt; true</div></div>

<p>こんな感じで。
しかし文字リテラルの挙動が期待と違っていました。</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&quot;a&quot; instanceof Object // =&gt; trueかと思いきやfalse<br />
&quot;a&quot; instanceof String // =&gt; trueかと思いきやfalse</div></div>

<p>ちょっと待ってほしい。
文字リテラルも文字列クラスのインスタンスですよー、なんて解説をしようと思ってたのに
これじゃぁ、文字リテラルはStringオブジェクトじゃないという事になってしまう。</p>

<p>事実として</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&quot;hoge&quot;.sub(&quot;o&quot;,&quot;a&quot;) // =&gt; &quot;hage&quot;</div></div>

<p>というコードが実行できるのだから、文字列リテラルがStringオブジェクトじゃないと話が合わない。だってsubメソッドはStringのインスタンスメソッドじゃないか！</p>

<h2>結論</h2>

<p>答えはここにありました。</p>

<p><a href="http://developer.mozilla.org/ja/Core_JavaScript_1.5_Guide/Literals#.e6.96.87.e5.ad.97.e5.88.97.e3.83.aa.e3.83.86.e3.83.a9.e3.83.ab">Literals &#8211; MDC（文字列リテラル）</a></p>

<p><a href="http://developer.mozilla.org/ja/Core_JavaScript_1.5_Guide/Predefined_Core_Objects/String_Object#.e6.96.87.e5.ad.97.e5.88.97.e3.83.aa.e3.83.86.e3.83.a9.e3.83.ab.e3.81.af_String_.e3.82.aa.e3.83.96.e3.82.b8.e3.82.a7.e3.82.af.e3.83.88.e3.81.a8.e3.81.af.e5.88.a5.e7.89.a9">String Object &#8211; MDC #文字列リテラルは String オブジェクトとは別物 </a></p>

<blockquote>
  <p>文字列リテラルの値でなら、String オブジェクトのどんなメソッドでも呼び出すことができます。JavaScript が自動的に文字列リテラルを一時的な String オブジェクトに変換し、メソッドを呼び出し、その一時的な String オブジェクトを破棄するのです。String.length プロパティを文字列リテラルで使うこともできます。</p>
</blockquote>

<p>という事なんですって。</p>

<p>つまり、文字列リテラルの状態では確かにStringのインスタンスではないけれど、メソッドを呼び出す時はJavaScriptがStringオブジェクトに変換していると。なるほど。</p>

<p>ちなみにこのエントリーの内容はMozilla FireFoxでしか試していませんし、Mozillaのサイトでしか結論を見つけていませんので、他のブラウザでどうなのかは一切調べてませんので悪しからず。誰か暇な人は調べてトラバください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/244/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flashが埋め込まれているURLを調べる</title>
		<link>http://www.func09.com/wordpress/archives/231</link>
		<comments>http://www.func09.com/wordpress/archives/231#comments</comments>
		<pubDate>Sat, 30 Aug 2008 13:21:59 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[actionscript2.0]]></category>
		<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/231</guid>
		<description><![CDATA[ブログパーツのようなFlashで、いろいろなサイトに埋め込まれるSWFの 埋め込まれているページのURLを取得する方法。 import flash.external.*; var locationHref:String  [...]]]></description>
			<content:encoded><![CDATA[<p>ブログパーツのようなFlashで、いろいろなサイトに埋め込まれるSWFの
埋め込まれているページのURLを取得する方法。</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">import flash.external.*;<br />
var locationHref:String = String(ExternalInterface.call(&quot;function(){return location.href}&quot;));</div></div>

<p>ExternalInterface.callの１番目の引数は、呼び出すJavaScriptのメソッド名という事になっていますが</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ExternalInterface.call(&quot;myMethod&quot;,&quot;args1&quot;,&quot;args2&quot;);</div></div>

<p>は単純に以下のようなJSが実行されているものと考えられるので</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">eval(&quot;myMethod&quot;).apply(window,[&quot;args1&quot;,&quot;args2&quot;]);</div></div>

<p>まぁ、ようするに無名関数をFlash側で引数としてあげればいいと。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/231/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>prototype.jsのFunction.bindをjQueryでも。</title>
		<link>http://www.func09.com/wordpress/archives/203</link>
		<comments>http://www.func09.com/wordpress/archives/203#comments</comments>
		<pubDate>Thu, 21 Feb 2008 02:02:26 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/203</guid>
		<description><![CDATA[prototype.jsで関数のスコープを任意のオブジェクトに委譲する Function.bindメソッドはイベントのコールバック関数なんかで使うのにすこぶる便利なんだけど jQueryには意外とそれっぽい機能がないよう [...]]]></description>
			<content:encoded><![CDATA[<p>prototype.jsで関数のスコープを任意のオブジェクトに委譲する
Function.bindメソッドはイベントのコールバック関数なんかで使うのにすこぶる便利なんだけど
jQueryには意外とそれっぽい機能がないように思う。
ので応急処置として以下のコードを書いておく。</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">jQuery.scope = function(target,func){ return function() { func.apply(target,arguments);}};</div></div>

<p>こう使います。</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$.ajax({<br />
&nbsp; url:'hoge.xml',<br />
&nbsp; complete: $.scope(this,handleComplete)<br />
});<br />
function handleComplete(data,status){ ... }</div></div>

<p>スコープを渡さないで実行すると、コールバックのスコープはイベント自身なんだけど
クラス内で$.ajaxを使いたい場合なんかは不都合ですんで。</p>

<p>時間があれば、さくっとプラグインにしておきたいけど
プラグインにするほどのコード量じゃないし、
プラグインは別ファイル化するのが一般的だから、いちいち面倒くさいし。</p>

<p>ちなみに、これはActionScriptでいうところの
mx.utils.Delegate.createと全く同じ機能ですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/203/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>fastladderをMac10.5にインストールする</title>
		<link>http://www.func09.com/wordpress/archives/186</link>
		<comments>http://www.func09.com/wordpress/archives/186#comments</comments>
		<pubDate>Thu, 07 Feb 2008 06:05:01 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/186</guid>
		<description><![CDATA[ソースコードが公開されたfastladderをさっそくインストールしてみた。 http://code.google.com/p/fastladder/ 環境はMac 10.5 INSTALL.txtを読むのが一番だよ。  [...]]]></description>
			<content:encoded><![CDATA[<p>ソースコードが公開されたfastladderをさっそくインストールしてみた。
<a href="http://code.google.com/p/fastladder/">http://code.google.com/p/fastladder/</a>
環境はMac 10.5
INSTALL.txtを読むのが一番だよ。</p>

<h3>SVNからチェックアウト</h3>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">% svn checkout http://fastladder.googlecode.com/svn/trunk/ fastladder-read-only</div></div>

<h3>必要なライブラリをgemでインストール</h3>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ sudo gem install rails --version 2.0.2 -y<br />
$ sudo gem install rfeedfinder<br />
$ sudo gem install feed-normalizer<br />
$ sudo gem install opml<br />
$ sudo gem install mongrel<br />
$ sudo gem install sqlite3-ruby</div></div>

<h3>libfreeimage-3.10.0.dylibをlib以下に移動</h3>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">cp freeimage-darwin/libfreeimage-3.10.0.dylib fastladder/lib/</div></div>

<h3>DBを初期化</h3>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">cd falstladder/<br />
% rake db:create:all<br />
% rake db:migrate</div></div>

<h3>サーバを起動</h3>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">script/server</div></div>

<h3>確認</h3>

<p>http://127.0.0.1:3000</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/186/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQueryでホットキーするメモ</title>
		<link>http://www.func09.com/wordpress/archives/182</link>
		<comments>http://www.func09.com/wordpress/archives/182#comments</comments>
		<pubDate>Fri, 01 Feb 2008 07:24:20 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/182</guid>
		<description><![CDATA[jQueryでホットキーを処理するメモ どの入力フォームにもフォーカスしていない場合 nとpで特定の処理を実行するサンプル $(this).keypress( &#160; function(e) &#160; { &#038;n [...]]]></description>
			<content:encoded><![CDATA[<p>jQueryでホットキーを処理するメモ</p>

<p>どの入力フォームにもフォーカスしていない場合
nとpで特定の処理を実行するサンプル</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$(this).keypress(<br />
&nbsp; function(e)<br />
&nbsp; {<br />
&nbsp; &nbsp; if( $.inArray(e.target,$('input')) &lt; 0 )<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; if( e.which==112 )<br />
&nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; hoge();<br />
&nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; else if( e.which==110 )<br />
&nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; foo();<br />
&nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; }<br />
&nbsp; }<br />
)</div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/182/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SoundManagerのFLV版</title>
		<link>http://www.func09.com/wordpress/archives/132</link>
		<comments>http://www.func09.com/wordpress/archives/132#comments</comments>
		<pubDate>Wed, 20 Jun 2007 09:31:09 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/132</guid>
		<description><![CDATA[http://www.schillmania.com/projects/soundmanager2/ このFLV版を作るのは結構容易いだろうなぁと思った。 最近特に何もしてないし 比較的FLVとExternalInter [...]]]></description>
			<content:encoded><![CDATA[<p>http://www.schillmania.com/projects/soundmanager2/</p>

<p>このFLV版を作るのは結構容易いだろうなぁと思った。
最近特に何もしてないし
比較的FLVとExternalInterfaceは得意だから作ってみようかなぁと。</p>

<p>AS3.0でFLVを再生するくらいのスクリプトなら、５分もあれば書ける。ていうか書けた。</p>

<p>基本的なUIをHTML側にやらせて、
それをFlashに以上するだけだから</p>

<p>[js]
flv = new FlvJS();
$(&#8216;flvplayer&#8217;).apendChild(flv);
flv.play(&#8216;hoge.flv&#8217;);
[/js]</p>

<p>てなJSを書いたら
ExternalInterface経由で、そのままNetStreamに委譲すればいいわけだ。
あと基本的なイベントのコールバックも受け取れるようにすれば。</p>

<p>そういうのは、eyevioで何回も設計実装してるから作れるぞ。
むしろそのまま採用して欲しいくらいだぞ。</p>

<p>ま、問題は作る時間があるかって話だね。ははは。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/132/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript、クロージャをおさらいしてみる</title>
		<link>http://www.func09.com/wordpress/archives/125</link>
		<comments>http://www.func09.com/wordpress/archives/125#comments</comments>
		<pubDate>Thu, 15 Mar 2007 19:50:20 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/125</guid>
		<description><![CDATA[久々のエントリーです。 最近はまったく忙しくて、全然勉強する時間もありゃしません。 弊社の人が作ったJavaScriptでトグル処理をするソースコードがメールで流れてきて それに触発されて、自分もいろいろ書いてみて、社内 [...]]]></description>
			<content:encoded><![CDATA[<p>久々のエントリーです。</p>

<p>最近はまったく忙しくて、全然勉強する時間もありゃしません。</p>

<p>弊社の人が作ったJavaScriptでトグル処理をするソースコードがメールで流れてきて
それに触発されて、自分もいろいろ書いてみて、社内でシェアしたものをうｐします。</p>

<p>まるごとJavaScriptを見ていて、クロージャっていいよね。という気分だったので
クロージャをおさらいしてみました。
<span id="more-125"></span>
<a href="http://www.func09.com/wordpress/wp-content/uploads/2007/03/func_toggle.html" target="_blank">トグル処理の様々な実装方法テスト in JavaScript</a></p>

<p>最終的なソースコードはこんな感じになったよ。</p>

<p>[js]</p>

<p>/**
 * オブジェクトを継承する（Objectを汚染拡張 from prototype.js）
 * @param destination 拡張されるオブジェクト
 * @param source 雛形オブジェクト
 */
Object.mixin = function( destination, source ){
  for (property in source)
    destination[property] = source[property];
  return destination;
}</p>

<p>/**
 * トグル可能な要素を表すクラス
 */
var TogglableElement = function(){};
TogglableElement.prototype = {
  flag:true,
  resultTarget:undefined,
  toggle:function(){
    this.flag = !this.flag;
  },
  update:function(){
    this.resultTarget.innerHTML = ( this.flag ) ? &#8216;ON&#8217; : &#8216;OFF&#8217;;
  },
  onmouseup:function(){
    this.toggle();
    this.update();
  }
};</p>

<p>/**
 * 初期化
 * イベントハンドラはHTML内ではなく、スクリプト内で定義
 */
function init(){</p>

<p>/* オブジェクト拡張方式 */
  var btn1 = document.getElementById(&#8216;btn1&#8242;);
  var btn2 = document.getElementById(&#8216;btn2&#8242;);</p>

<p>//  ボタン要素をトグラブルオブジェクトに拡張する
  Object.mixin( btn1, TogglableElement.prototype );
  Object.mixin( btn2, TogglableElement.prototype );</p>

<p>//  出力先を定義する
  btn1.resultTarget = document.getElementById(&#8216;result1&#8242;);
  btn2.resultTarget = document.getElementById(&#8216;result2&#8242;);</p>

<p>/* クロージャ渡し方式 */
  document.getElementById(&#8216;btn3&#8242;).onmouseup = getToggleClosure( document.getElementById(&#8216;result3&#8242;) );
  document.getElementById(&#8216;btn4&#8242;).onmouseup = getToggleClosure( document.getElementById(&#8216;result4&#8242;) );</p>

<p>/* ソースコードの表示トグル */
  document.getElementById(&#8216;viewsource-a&#8217;).onclick = getToggleClosure2( document.getElementById(&#8216;sourcecode-a&#8217;), viewSourceCode );
  document.getElementById(&#8216;viewsource-b&#8217;).onclick = getToggleClosure2( document.getElementById(&#8216;sourcecode-b&#8217;), viewSourceCode );
  document.getElementById(&#8216;viewsource-c&#8217;).onclick = getToggleClosure2( document.getElementById(&#8216;sourcecode-c&#8217;), viewSourceCode );
}</p>

<p>/**
 * トグル処理＆DOM操作のクロージャ関数を返す
 * １つの関数を各所で使い回せるようにクロージャ化する
 * @param target HTMLElement 内容を書き換えるHTML要素
 */
function getToggleClosure( target ){
  var flag = true;  // フラグ。レキシカルスコープ内に保持
  var target = target;  //  ターゲット。レキシカルスコープ内に保持
  return function(){
    flag = !flag;  //  フラグを逆転
    target.innerHTML = ( flag ) ? &#8216;ON&#8217; : &#8216;OFF&#8217;; // flag==trueならON
  };
}</p>

<p>function getToggleClosure2( target, callback ){
  var flag = true;
  var target = target;
  var callback = callback
  return function(){
    flag = !flag;  //  フラグを逆転
    callback.apply( this, [ target, flag ] );
  };
}</p>

<p>function viewSourceCode( target, flag ){
  this.innerHTML = ( flag )? &#8216;ソースコードを表示する&#8217; : &#8216;ソースコードを隠す&#8217;;
  target.style.display = ( flag )? &#8216;none&#8217; : &#8216;block&#8217;;
}</p>

<p>/**
 * window.onloadにリスナーを貼る
 */
if( /msie/.test(navigator.userAgent.toLowerCase()) )
  window.attachEvent( &#8216;onload&#8217;, init );
else
  window.addEventListener( &#8216;load&#8217;, init, true );</p>

<p>[/js]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/125/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CanvasとJavaScriptでActionScript3ぽくやってみる</title>
		<link>http://www.func09.com/wordpress/archives/117</link>
		<comments>http://www.func09.com/wordpress/archives/117#comments</comments>
		<pubDate>Thu, 08 Feb 2007 19:19:21 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/117</guid>
		<description><![CDATA[Canvasの存在を知った時に、とりあえず作ってみたサンプルが そのままデスクトップに放置してあったので公開してみます。 サンプルはここです。 忙しくて全然手を付けられないや。 Canvasを使ったグラフライブラリはいく [...]]]></description>
			<content:encoded><![CDATA[<p>Canvasの存在を知った時に、とりあえず作ってみたサンプルが
そのままデスクトップに放置してあったので公開してみます。</p>

<p>サンプルは<a href="http://www.func09.com/wordpress/wp-content/uploads/2007/02/canvas_sprite/">ここ</a>です。</p>

<p>忙しくて全然手を付けられないや。</p>

<p>Canvasを使ったグラフライブラリはいくつかあるけど
グラフ以外にCanvasの良い利用法って何かねぇ・・・。
全然思いつかないや。
<span id="more-117"></span>
今回作ったサンプルは、AS3で言うところのSpriteクラスの感覚で
Canvasを扱うためのクラス。</p>

<p>[js]
var stage = new Sprite();
stage.width = 600;
stage.height = 400;
stage.beginFill( 0xCCCCCC );
stage.drawRect( 0, 0, 400, 400 );
stage.clearRect( 10, 240, 20, 20 );
stage.beginFill( 0xFF0000 );
stage.drawCircle( 100, 100, 100 );</p>

<p>var s2 = new Sprite();
s2.x = 100;
s2.y = 100;
s2.beginFill( 0x0000FF );
s2.drawRect( 0, 0, 180, 180 );
s2.beginFill( 0x00FF00 );
s2.drawCircle( 160, 10, 40 );
stage.addChild( s2 );
document.getElementById(&#8216;canvas&#8217;).appendChild( stage );
[/js]</p>

<p>こんな感じで使います。</p>

<p>今見てみると、Spriteクラスっていうより
flash.display.Graphicsクラスじゃないか・・。
[js]
function Sprite(){
  this.__element = document.createElement(&#8216;div&#8217;);
  this.__element.style.position = &#8216;relative&#8217;;
  for( var prop in Sprite.prototype ){
    this.__element[prop] = Sprite.prototype[prop]
  }
  this.__element.initialize();
  return this.__element;
}</p>

<p>Sprite.prototype = {
  initialize:function(){
    this.__color = 0&#215;000000;
    this.__canvas = document.createElement(&#8216;canvas&#8217;);
    this.__canvas.style.position = &#8216;absolute&#8217;;
    this.__context = this.__canvas.getContext(&#8217;2d&#8217;) || undefined;
    this.appendChild( this.__canvas );
    this.x = 0;
    this.y = 0;
    this.width = 0;
    this.height = 0;
    this.watch( &#8216;x&#8217;, function( i, o, n ){ this.__canvas.style.top = n } )
    this.watch( &#8216;y&#8217;, function( i, o, n ){ this.__canvas.style.left = n } )
    this.watch( &#8216;width&#8217;, function( i, o, n ){ this.__canvas.width = n } )
    this.watch( &#8216;height&#8217;, function( i, o, n ){ this.__canvas.height = n } )
  },
  beginFill:function( color ){
    this.__color = color || 0;
    var r = ( color >> 16 &amp; 0xFF );
    var g = ( color >> 8 &amp; 0xFF );
    var b = ( color &amp; 0xFF );
    r = ( r > 0&#215;10 ) ? r.toString(16) : &#8217;0&#8242;.concat( r.toString(16) );
    g = ( g > 0&#215;10 ) ? g.toString(16) : &#8217;0&#8242;.concat( g.toString(16) );
    b = ( b > 0&#215;10 ) ? b.toString(16) : &#8217;0&#8242;.concat( b.toString(16) );
    this.__context.fillStyle = &#8216;#&#8217;.concat( r, g, b );
  },
  drawRect:function( x, y, width, height ){
    //this.__resize( x+width, y+height );
    this.__context.fillRect( x, y, width, height );
  },
  clearRect:function( x, y, width, height ){
    this.__context.clearRect( x, y, width, height );
  },
  drawCircle:function( x, y, radius ){
    //this.__resize( x+radius, y+radius );
    this.__context.beginPath();
    this.__context.arc( x, y, radius, 0, Math.PI*2, false );
    this.__context.fill();
  },
  drawEllpse:function( x, y, width, height ){</p>

<p>},
  addChild:function( sprite ){
    this.appendChild( sprite );
  },
  __resize:function( w, h ){
    if( this.__canvas.width &lt; w ||
      this.__canvas.height &lt; h ){
      this.__canvas.width = w;
      this.__canvas.height = h;
      this.beginFill( this.__color );
    }
  }
}
[/js]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/117/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

