<?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>日本野望の会 &#187; article</title>
	<atom:link href="http://yabooo.org/archives/category/article/feed" rel="self" type="application/rss+xml" />
	<link>http://yabooo.org</link>
	<description>いずれにせよITで世界征服をたくらむ悪の組織です。</description>
	<lastBuildDate>Mon, 28 Dec 2009 14:30:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>野望の会プロヂュースのミニフィルム作りました</title>
		<link>http://yabooo.org/archives/237</link>
		<comments>http://yabooo.org/archives/237#comments</comments>
		<pubDate>Mon, 28 Dec 2009 14:30:41 +0000</pubDate>
		<dc:creator>hirokidaichi</dc:creator>
				<category><![CDATA[article]]></category>

		<guid isPermaLink="false">http://yabooo.org/?p=237</guid>
		<description><![CDATA[おひさしぶりです。事務局長のひろきのだいちです。
この間映画をプロヂュースしたので、ぜひ見てください。
予算の内訳とかあとで書くかもですが、社会人でも合間をぬってコンテンツがつくれるのかなーというトライアルです。
年１く [...]]]></description>
			<content:encoded><![CDATA[<p>おひさしぶりです。事務局長のひろきのだいちです。</p>
<p>この間映画をプロヂュースしたので、ぜひ見てください。<br />
予算の内訳とかあとで書くかもですが、社会人でも合間をぬってコンテンツがつくれるのかなーというトライアルです。<br />
年１くらいでは続けていきたいです</p>
<p>タイトルは<strong>肉食女子</strong>。</p>
<p>現代社会の縮図とも言える肉食女子のサイエンスドキュメンタリーです。<br />
<object width="560" height="340"><param name="movie" value="http://www.youtube-nocookie.com/v/RxzzIVe2E50&#038;hl=ja_JP&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/RxzzIVe2E50&#038;hl=ja_JP&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object> </p>
<p>いいかんじにくだらないので見てやってください。</p>
]]></content:encoded>
			<wfw:commentRss>http://yabooo.org/archives/237/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[イベント]そろそろWebを再起動しよう</title>
		<link>http://yabooo.org/archives/205</link>
		<comments>http://yabooo.org/archives/205#comments</comments>
		<pubDate>Sun, 22 Mar 2009 14:48:56 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[event]]></category>

		<guid isPermaLink="false">http://www.yabooo.org/?p=205</guid>
		<description><![CDATA[どうも、日本野望の会事務局長のひろきのだいちです。おひさしぶりです。
ひさびさの野望の会イベントです。
WWWが生まれて20年ちかくたちますが、このずっと起動しっぱなしだったWebというものを今一度、若い目線で見直してみ [...]]]></description>
			<content:encoded><![CDATA[<p>どうも、日本野望の会事務局長のひろきのだいちです。おひさしぶりです。</p>
<p>ひさびさの野望の会イベントです。</p>
<p>WWWが生まれて20年ちかくたちますが、このずっと起動しっぱなしだったWebというものを今一度、若い目線で見直してみようという一大イベントを開催します。オレンジや青の大手SNSをはじめ、誰もが知ってる大手ポータルサイトの歴歴の若手たちが一同に終結し、Webの今後を語り合います。そんなイベントを開催するにふさわしい場所が、コミュニティサイトの最長老niftyのお膝元である「Tokyo Culture Culture」というイベントホール。題して「Web2.0中の人ナイト」。</p>
<p>日時は3/29(日)</p>
<p><img class="alignnone size-medium wp-image-206" title="nakanohitonight_02" src="http://www.yabooo.org/wp-content/uploads/2009/03/nakanohitonight_02-300x211.jpg" alt="nakanohitonight_02" width="300" height="211" /></p>
<p>この浮ついた感もあるチープな名前と適度なサブカル臭が、日本野望の会の真骨頂なのですが、なかなかどうして今回はそうそうたる面々からのWeb業界の事情やライフスタイルなどがかんがみえます。</p>
<p><strong>Web2.0とはなんだったのか。</strong></p>
<p><strong>Webの中、どうなってんの？</strong></p>
<p>そろそろ再考してみてもいい時期かもしれません。</p>
<p><a href="http://tcc.nifty.com/cs/catalog/tcc_schedule/catalog_090225201886_1.htm">http://tcc.nifty.com/cs/catalog/tcc_schedule/catalog_090225201886_1.htm</a></p>
<p>チケットはe+から購入または<span style="text-decoration: line-through;">当日券もございますyo</span></p>
<p>チケット残件わずか！となってしまいました。当日券は期待しないでe+からお買い求めください。</p>
<p>では！</p>
]]></content:encoded>
			<wfw:commentRss>http://yabooo.org/archives/205/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Safari/Webkitのおせっかいキャッシュとその対策。</title>
		<link>http://yabooo.org/archives/180</link>
		<comments>http://yabooo.org/archives/180#comments</comments>
		<pubDate>Sat, 29 Nov 2008 06:40:19 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[article]]></category>

		<guid isPermaLink="false">http://www.yabooo.org/?p=180</guid>
		<description><![CDATA[どうもひろきのだいちです。
最近のモダンなブラウザには、Backfowardキャッシュと呼ばれるブラウザの戻るボタンを押した際に利用されるキャッシュ機構が用意されています。この機構は普段ウェブブラウジングを行う際には間違 [...]]]></description>
			<content:encoded><![CDATA[<p>どうもひろきのだいちです。</p>
<p>最近のモダンなブラウザには、Backfowardキャッシュと呼ばれるブラウザの戻るボタンを押した際に利用されるキャッシュ機構が用意されています。この機構は普段ウェブブラウジングを行う際には間違った操作からの復帰が早く非常に重宝するのですが、一部のWebアプリケーション設計の際にはこの仕組みが厄介に働くことがあります。</p>
<p><span id="more-180"></span><br />
そういったケースでよく使用されるテクニックとしてはwindow unloadイベントへのハンドリングで、このページはすでに終端処理を済ませていますよ、ということを通知することで再度インラインjsや、onload後の処理を行うことができます。</p>
<div class="igBar"><span id="ljavascript-6"><a href="#" onclick="javascript:showCodeTxt('javascript-6'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-6">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">window.<span style="color: #000066;">onload</span>=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'test'</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>だけではページ遷移後、戻るを押してもloadEventは発火されません。</p>
<p>しかし、</p>
<div class="igBar"><span id="ljavascript-7"><a href="#" onclick="javascript:showCodeTxt('javascript-7'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-7">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">window.<span style="color: #000066;">onload</span>=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'test'</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">window.<span style="color: #000066;">onunload</span>=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
とすることで、「戻る」のあとにもonloadイベントは発火されるようになります。</p>
<p>これである程度の問題は解決するはずが、Safariなどの場合、このunloadを付与した場合のForm要素系のタグ、つまりinput,select,option,textareaなどの動作がおかしくなります。</p>
<p>input追加をクリックするたびに、innerHTMLをつかってinputタグが生成されるというケースを考えて見ましょう。<br />
<a href="http://www.yabooo.org/wp-content/uploads/2008/11/safari01.png"><img class="alignnone size-medium wp-image-174" title="safari01" src="http://www.yabooo.org/wp-content/uploads/2008/11/safari01-300x82.png" alt="" width="300" height="82" /></a></p>
<p>このときに、inputタグのvalueにユーザ入力によって値を設定します。<br />
<a href="http://www.yabooo.org/wp-content/uploads/2008/11/safari02.png"><img class="alignnone size-medium wp-image-175" title="safari02" src="http://www.yabooo.org/wp-content/uploads/2008/11/safari02-300x82.png" alt="" width="300" height="82" /></a></p>
<p>削除を押すと、inputタグがinnerHTML=""によってクリアされます。<br />
<a href="http://www.yabooo.org/wp-content/uploads/2008/11/safari03.png"><img class="alignnone size-medium wp-image-176" title="safari03" src="http://www.yabooo.org/wp-content/uploads/2008/11/safari03-300x82.png" alt="" width="300" height="82" /></a></p>
<p>さらに２つほどinputタグを生成して、再びユーザ入力によって値を設定します。<br />
<a href="http://www.yabooo.org/wp-content/uploads/2008/11/safari04.png"><img class="alignnone size-medium wp-image-177" title="safari04" src="http://www.yabooo.org/wp-content/uploads/2008/11/safari04-300x82.png" alt="" width="300" height="82" /></a></p>
<p>この後、何らかのリンクをたどって「戻る」という状態にすると、unloadが設定されているので、onloadEventが発火し一番最初の状態に戻ります。なので、Backforwardキャッシュ機構は停止されて、まったく最初と同じ状態になっているはずです。ところが、ふたたびinput追加をクリックしてinput要素を追加すると以下のように、いままでのユーザ入力のデータが保存された状態で現れてしまいます。<br />
<a href="http://www.yabooo.org/wp-content/uploads/2008/11/safari05.png"><img class="alignnone size-medium wp-image-178" title="safari05" src="http://www.yabooo.org/wp-content/uploads/2008/11/safari05-300x121.png" alt="" width="300" height="121" /></a></p>
<p>ちなみにinputタグはname属性やid属性もふられておらず、ただ同じような位置に存在するということだけでそのvalueがキャッシュされてしまっているようなのです。</p>
<p>これではJemplate/EJS/HTMLTemplate.jsなどのテンプレートモジュールを利用してElementの値を再構築するようなアプリケーションやinput hiddenなどで値をサーバサイドから提供するアプリケーションに深刻な不具合をもたらしてしまいます。</p>
<p>これはappendChildのみですべてのUIを実装するというかなりおそろしいやり方をするというのは、中規模以上のアプリケーションではかなり問題になります。ちなみにcreateContextualFragmentを用いてstringからHTML要素を生成する場合でもどうようにこのようなバグが発生します。</p>
<p>では、その対策にはどのような方法があるでしょうか。</p>
<p>まずぱっと思いつくのはそのノード自体をガベコレの対象とするためにremoveChildするような方法です。</p>
<div class="igBar"><span id="ljavascript-8"><a href="#" onclick="javascript:showCodeTxt('javascript-8'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-8">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">window.<span style="color: #000066;">onload</span>=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// inputタグすべてにたいして</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; e.<span style="color: #006600;">parent</span>.<span style="color: #006600;">removeChild</span><span style="color: #66cc66;">&#40;</span>e<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>ところが、このおせっかいキャッシュ機構のいやらしいところは、Elementがremoveされたとしてもvalueの汚染が続くということです。なので、Elementのremoveは効果がありません。</p>
<p>さらに、innerHTML=""などでclearされたElementはjavascript領域からは消えてしまうので取得することができないというやっかいさも抱えています。</p>
<p>このバグ（といっても差し支えないだろう）的なキャッシュ機構に対応するためには、<strong>そのページで生成されては消えていったすべてのinput系タグ</strong>を、"戻る"後に生成されるElementとは異なるものであることをレンダリングエンジンに教えてあげなければいけません。</p>
<p>なので</p>
<div class="igBar"><span id="ljavascript-9"><a href="#" onclick="javascript:showCodeTxt('javascript-9'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-9">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">window.<span style="color: #000066;">onload</span>=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #009900; font-style: italic;">// inputタグすべてにたいして</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; e.<span style="color: #000066;">name</span> = <span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">getTime</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>のようにname属性を二度と参照されない値に変更することで、valueを汚染されることを防ぎます。</p>
<p>さらに、<strong>そのページで生成されては消えていったすべてのinput系タグ</strong>を取得する方法として以下のような戦略をとります。</p>
<p><a href="http://www.yabooo.org/wp-content/uploads/2008/11/safari06.png"><img class="alignnone size-medium wp-image-179" title="safari06" src="http://www.yabooo.org/wp-content/uploads/2008/11/safari06.png" alt="" /></a></p>
<p>DOM Event Level2のMutation Eventの中でSafariで利用可能なDOMNodeInsertedを利用して、DOMに変化が生じるたびに"まだマークされていない"すべてのinputエレメントを取得し、キャッシュに保存しておきます。</p>
<p>最後にキャッシュされたすべてのエレメントのname属性を変更することで、このようなバグから開放されることとなります。</p>
<p>以下、これらをPrototype.js 1.60をベースに実装したものを晒しておきます。<br />
ただ、これにも一部既知のバグが存在していて、innerHTML+=で発生するバグや途中でidやname属性を動的に変更されたElementなどをフォローすることができないのです。</p>
<p>しかし、いずれもjavascript的にはマナーの悪いこととされているのでコーディングルールなどでこれらのバグを避けるようにすることが得策かもしれません。</p>
<div class="igBar"><span id="ljavascript-10"><a href="#" onclick="javascript:showCodeTxt('javascript-10'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-10">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>Prototype.<span style="color: #006600;">Browser</span>.<span style="color: #006600;">WebKit</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; Event._observe = Event.<span style="color: #006600;">observe</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #003366; font-weight: bold;">function</span> _search<span style="color: #66cc66;">&#40;</span>hash, searchText<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>hash<span style="color: #66cc66;">&#91;</span>searchText<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #66cc66;">&#40;</span>Object.<span style="color: #006600;">isFunction</span><span style="color: #66cc66;">&#40;</span>hash<span style="color: #66cc66;">&#91;</span>searchText<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> ? hash<span style="color: #66cc66;">&#91;</span>searchText<span style="color: #66cc66;">&#93;</span> : Prototype.<span style="color: #006600;">emptyFunction</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #66cc66;">&#40;</span>Object.<span style="color: #006600;">isFunction</span><span style="color: #66cc66;">&#40;</span>hash<span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'_default'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> ? hash<span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'_default'</span><span style="color: #66cc66;">&#93;</span> : Prototype.<span style="color: #006600;">emptyFunction</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #003366; font-weight: bold;">var</span> firstUnload = <span style="color: #003366; font-weight: bold;">true</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; Event.<span style="color: #006600;">observe</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>element, <span style="color: #000066;">name</span>, func<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> _search<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">'beforeunload'</span>: <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> element.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'beforeunload'</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>evt<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> func.<span style="color: #006600;">bind</span><span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span>evt<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">'unload'</span>: <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>firstUnload<span style="color: #66cc66;">&#41;</span> Event._observe<span style="color: #66cc66;">&#40;</span>window, <span style="color: #3366CC;">'unload'</span>, <span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> cache = <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> selector = $w<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'input option select textarea'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">join</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">':not(._marked),'</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #3366CC;">':not(.marked)'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">function</span> storeCache<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $$<span style="color: #66cc66;">&#40;</span>selector<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>e<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cache<span style="color: #66cc66;">&#91;</span>e.<span style="color: #006600;">identify</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span> = e;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.<span style="color: #006600;">addClassName</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'_marked'</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Event._observe<span style="color: #66cc66;">&#40;</span>document.<span style="color: #006600;">body</span>, <span style="color: #3366CC;">'DOMNodeInserted'</span>, storeCache<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Event._observe<span style="color: #66cc66;">&#40;</span>window, <span style="color: #3366CC;">'load'</span>, storeCache<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> time = <span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">getTime</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span>Object.<span style="color: #006600;">toJSON</span><span style="color: #66cc66;">&#40;</span>$H<span style="color: #66cc66;">&#40;</span>cache<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">keys</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $H<span style="color: #66cc66;">&#40;</span>cache<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>e, i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.<span style="color: #006600;">value</span>.<span style="color: #000066;">name</span> = time + <span style="color: #3366CC;">"_"</span> + i;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; firstUnload = <span style="color: #003366; font-weight: bold;">false</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> Event._observe<span style="color: #66cc66;">&#40;</span>element, <span style="color: #000066;">name</span>, func<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">'_default'</span>: <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> Event._observe<span style="color: #66cc66;">&#40;</span>element, <span style="color: #000066;">name</span>, func<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066;">name</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; Object.<span style="color: #006600;">extend</span><span style="color: #66cc66;">&#40;</span>window, <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; observe: Event.<span style="color: #006600;">observe</span>.<span style="color: #006600;">methodize</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://yabooo.org/archives/180/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>再入門JavaScript　-目次-</title>
		<link>http://yabooo.org/archives/158</link>
		<comments>http://yabooo.org/archives/158#comments</comments>
		<pubDate>Tue, 28 Oct 2008 16:41:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[document]]></category>

		<guid isPermaLink="false">http://www.yabooo.org/?p=158</guid>
		<description><![CDATA[こんにちは、ひろきのだいちです。
JavaScriptの再発見からさらに２年がたち、モダンなWeb開発では欠かせない存在となったJavaScript。さまざまなライブラリが乱立し、言語としての基礎を得ないままでもある程度 [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは、ひろきのだいちです。</p>
<p>JavaScriptの再発見からさらに２年がたち、モダンなWeb開発では欠かせない存在となったJavaScript。さまざまなライブラリが乱立し、言語としての基礎を得ないままでもある程度のアプリケーション開発ができるようになった現在。</p>
<p>再入門JavaScriptと題して、中上級者を目指すために入門書を超えてじっくりとJavaScriptを学びなおすことが重要だと考え、ここを中心にまとめていきたいと思います。</p>
<p>ここで掲載するトピックは本当の基礎の基礎は他の媒体にゆだねた上で、「仕事でつかえる」レベルのコードを記述するために重要で比較的高度なものを取り扱うつもりです。</p>
<p>また、ここでいう仕事で使えるとは"多人数で開発を進める"ことを前提とした開発環境を想定しており、他サイトのAPIの使い方やライブラリの使用方法といった枝葉のリファレンスではありません。</p>
<p>また、ここに書かれていることはたいてい僕のメモなので、責任はもちませんｗ</p>
<h2>再入門JavaScript　-フロントエンドエンジニア資料集</h2>
<ul>
<li><a href="http://www.ne.jp/asahi/nanto/moon/specs/ecma-357.html" target="_blank">ECMAScript for XML (E4X) 仕様</a></li>
<li><a href="http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/" target="_blank">Under Translation of ECMA-262 3rd Edition</a></li>
<li><a href="http://amachang.art-code.org/usrb.in/amachang/static/gaiax01/" target="_blank">JavaScript入門</a></li>
<li><a href="http://www.asahi-net.or.jp/~SD5A-UCD/rec-html401j/cover.html">HTML 4.01仕様書</a></li>
<li>(書籍)RestFull</li>
<li>(書籍)JavaScript</li>
<li>(書籍)ハイパフォーマンスWebサイト</li>
</ul>
<h2>再入門JavaScript　-JavaScriptでの中大規模開発</h2>
<ul>
<li>再入門JavaScript　-　コード成長過程</li>
<li>再入門JavaScript　-　MarkupエンジニアとScriptエンジニア、サーバサイドエンジニアとの協調</li>
<li>再入門JavaScript　-　グレースフルデグラデーション</li>
<li>再入門JavaScript　-　MVCモデル</li>
<li>再入門JavaScript　-  クライアントサイドMVC</li>
<li>再入門JavaScript　-  デザインパターン</li>
</ul>
<h2>再入門JavaScript -<a href="http://www.yabooo.org/archives/148">名前空間とスコープ</a></h2>
<ul>
<li><a title="再入門JavaScript - Scopeを作る" href="http://www.yabooo.org/archives/133">再入門javascript - scopeを作る</a></li>
<li><a title="再入門JavaScript - モジュールの依存関係" href="http://www.yabooo.org/archives/135">再入門javascript - モジュールの依存関係</a></li>
<li><a title="再入門JavaScript - 名前空間" href="http://www.yabooo.org/archives/139">再入門javascript - 名前空間</a></li>
<li><a title="再入門JavaScript - 名前空間上の関数をExport" href="http://www.yabooo.org/archives/143">再入門javascript - 名前空間上の関数をexport</a></li>
<li><a title="再入門JavaScript - 動的ローディング" href="http://www.yabooo.org/archives/145">再入門javascript - 動的ローディング</a></li>
</ul>
<h2>再入門JavaScript　-オブジェクト指向と関数オブジェクト</h2>
<ul>
<li>再入門JavaScript　-　オブジェクトとプロトタイプチェーン</li>
<li>再入門JavaScript　-　継承・ダックタイピング</li>
<li>再入門JavaScript　-　引数アサーションと動的ヴァリデーション</li>
<li>再入門JavaScript　-　動的バインディング</li>
<li>再入門JavaScript　-　ビルドインオブジェクトのプロトタイプ拡張</li>
</ul>
<h2>再入門JavaScript　-DOM</h2>
<ul>
<li>再入門JavaScript　-　イベントとバブリング</li>
<li>再入門JavaScript　-　XHTML拡張</li>
<li>再入門JavaScript　-　CSSの扱い</li>
</ul>
<h2>再入門JavaScript　-DOM上のDSL</h2>
<ul>
<li>再入門JavaScript　- CSS Selector</li>
<li>再入門JavaScript　- XPath</li>
<li>再入門JavaScript　- E4X</li>
</ul>
<h2>再入門JavaScript　-テストとドキュメンテーション</h2>
<ul>
<li>再入門JavaScript　-　UnitTest</li>
<li>再入門JavaScript　-  Seleniumによる結合テスト</li>
<li>再入門JavaScript　-  JsDocによるドキュメンテーション</li>
</ul>
<h2>再入門JavaScript　-パフォーマンス/高速化</h2>
<ul>
<li>再入門JavaScript　-　プロファイリング</li>
<li>再入門JavaScript　-　DOM描画フェーズ/タイマー</li>
<li>再入門JavaScript　-　事前コンパイルを利用した高速化</li>
<li>再入門JavaScript　-　VMレベルでの動作を意識する</li>
<li>再入門JavaScript　-　メモリリークとガーベジコレクタ</li>
<li>再入門JavaScript　-　defer属性/script後置とminifier</li>
<li>再入門JavaScript　-　先読みと</li>
<li>再入門JavaScript　-　Google Gears</li>
</ul>
<h2>再入門JavaScript　-通信</h2>
<ul>
<li>再入門JavaScript　-　クロスドメイン制約</li>
<li>再入門JavaScript　-　同一ドメイン通信</li>
<li>再入門JavaScript　-　location.hashによるヒストリ管理</li>
<li>再入門JavaScript　-　通信の効率化とサーバサイド連携</li>
<li>再入門JavaScript　-　クロスドメイン通信方法と注意点</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://yabooo.org/archives/158/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IEの腐ったEventを直す方法</title>
		<link>http://yabooo.org/archives/122</link>
		<comments>http://yabooo.org/archives/122#comments</comments>
		<pubDate>Mon, 13 Oct 2008 09:51:01 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[article]]></category>

		<guid isPermaLink="false">http://www.yabooo.org/?p=122</guid>
		<description><![CDATA[こんにちは。ひろきのだいちです。
今日はブラウザ界のやんちゃボーイ　Internet ExplorerのEvent実行順序を調整する方法を考えたんでつらつら書きます。
ただ、すべてのDOMイベントを他のブラウザと互換を取 [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。ひろきのだいちです。</p>
<p>今日はブラウザ界のやんちゃボーイ　Internet ExplorerのEvent実行順序を調整する方法を考えたんでつらつら書きます。</p>
<p>ただ、すべてのDOMイベントを他のブラウザと互換を取るのはむずかしいので、prototype.js（1.6 or later）のdom:loadedイベントとwindow のloadイベントの実行順序を整列させます。</p>
<p>その後、単一のイベント間の実行順序がattach順にならないというIEのバグをDOM準拠のAPIを追加することで修正します。</p>
<p><span id="more-122"></span></p>
<div class="igBar"><span id="ljavascript-15"><a href="#" onclick="javascript:showCodeTxt('javascript-15'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-15">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #CC0000;color:#800000;">10</span>..<span style="color: #006600;">times</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; Element.<span style="color: #006600;">observe</span><span style="color: #66cc66;">&#40;</span>window,<span style="color: #3366CC;">'load'</span>,<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'window loaded'</span>+i<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #CC0000;color:#800000;">10</span>..<span style="color: #006600;">times</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; document.<span style="color: #006600;">observe</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'dom:loaded'</span>,<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'dom loaded'</span>+i<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
dom:loadedとはDOM Treeのパースが終わってjsからさわっても大丈夫だよ！<br />
というイベントです。（細かい定義はしらない。）</p>
<p>またwindowオブジェクトのloadイベントはHTML内の全部のコンテンツのロードがおわったよ！<br />
というイベントです。</p>
<p>これをIE以外のブラウザで実行すると<br />
<code><br />
dom: loaded:0123456789<br />
window load:0123456789<br />
</code></p>
<p>の順番で実行されます。</p>
<p>ところがIEで実行すると・・・・<br />
<code><br />
window load:5432689710<br />
dom: loaded:1324689750<br />
</code></p>
<p>シュールすぎる・・・・TT</p>
<p>さて、まずどこから手をつけましょうか。</p>
<p>dom:loadedイベントとwindow onloadイベントの実行順序が逆っていうのから対処しましょうか。</p>
<p>実はコレ、<br />
HTML中に画像が１つでもあれば、大丈夫で、画像の存在するページで実行すると<br />
<code><br />
dom: loaded:1324689750<br />
window load:5432689710<br />
</code><br />
上記のようにdom loadedイベントが先に発生します。</p>
<p>ところが、これらの画像が全部キャッシュされていた場合・・・・</p>
<p><code><br />
window load:5432689710<br />
dom: loaded:1324689750<br />
</code><br />
またもや、window loadが先に実行されます。</p>
<p>そこで、</p>
<div class="igBar"><span id="ljavascript-16"><a href="#" onclick="javascript:showCodeTxt('javascript-16'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-16">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>Prototype.<span style="color: #006600;">Browser</span>.<span style="color: #006600;">IE</span><span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> flag =<span style="color: #003366; font-weight: bold;">true</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; Event.<span style="color: #006600;">observe</span><span style="color: #66cc66;">&#40;</span>window,<span style="color: #3366CC;">'load'</span>,<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>flag<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; document.<span style="color: #006600;">fire</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'dom:loaded'</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; document.<span style="color: #006600;">stopObserving</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'dom:loaded'</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; document.<span style="color: #006600;">observe</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'dom:loaded'</span>,<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>evt<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flag =<span style="color: #003366; font-weight: bold;">false</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
のようにIEの場合のみ、window loadイベントが先に発生し場合に<br />
dom:loadedイベントを発生させて、その後のおこるdom:loadedイベントを全部キャンセルしてみましょう。</p>
<p>すると<br />
<code><br />
dom: loaded:1324689750<br />
window load:5432689710<br />
</code><br />
画像アリ、ナシともにdom:loadedが先に発生しているようです。</p>
<p>次に実行順序です。</p>
<p>問題はEvent.observe内で行っているattachEventが、まともじゃないってことなので<br />
これを是正しましょう。</p>
<p>これは結構根の深い問題なので、<br />
attachEventを極力使いたくありません。</p>
<p>なのでIEにaddEventListener/removeEventListenerを実装してしまいましょう。</p>
<p>そしてその中で１つだけattachEventをもちいて、</p>
<div class="igBar"><span id="ljavascript-17"><a href="#" onclick="javascript:showCodeTxt('javascript-17'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-17">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">element.<span style="color: #006600;">attachEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'on'</span>+eventName,<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>evt<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp;cache.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>e<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>e<span style="color: #66cc66;">&#40;</span>evt<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
のようにキャッシュに積んでおいてあるEvent Handlerたちを実行すれば、<br />
attachEventは一度しか使わないのできれいに整列されます。</p>
<p>そうすると・・・・<br />
<code><br />
dom: loaded:0123456789<br />
window load:0123456789<br />
</code></p>
<p>このようにIEでも実行順序を間違えることなくきれいに整列させることができました！<br />
以下コードです。</p>
<div class="igBar"><span id="ljavascript-18"><a href="#" onclick="javascript:showCodeTxt('javascript-18'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-18">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>!Prototype<span style="color: #66cc66;">&#41;</span> <span style="color: #000066; font-weight: bold;">throw</span> <span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'Event.Wrapper require prototype.js'</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>parseInt<span style="color: #66cc66;">&#40;</span>Prototype.<span style="color: #006600;">Version</span><span style="color: #66cc66;">&#41;</span>&gt; <span style="color: #CC0000;color:#800000;">1</span>.<span style="color: #CC0000;color:#800000;">6</span><span style="color: #66cc66;">&#41;</span> <span style="color: #000066; font-weight: bold;">throw</span> <span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'Event.Wrapper require prototype.js v1.6 or later'</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>Prototype.<span style="color: #006600;">Browser</span>.<span style="color: #006600;">IE</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> eventCache =<span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> wrapperCache = <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">function</span> getEventCache<span style="color: #66cc66;">&#40;</span>elementID,eventName<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>!eventCache<span style="color: #66cc66;">&#91;</span>elementID<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>eventCache<span style="color: #66cc66;">&#91;</span>elementID<span style="color: #66cc66;">&#93;</span>=<span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>!eventCache<span style="color: #66cc66;">&#91;</span>elementID<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span>eventName<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>eventCache<span style="color: #66cc66;">&#91;</span>elementID<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span>eventName<span style="color: #66cc66;">&#93;</span>=<span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> eventCache<span style="color: #66cc66;">&#91;</span>elementID<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span>eventName<span style="color: #66cc66;">&#93;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">function</span> createFixedOrderWrapper<span style="color: #66cc66;">&#40;</span>elementID,eventName<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> wrapper= <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>event<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getEventCache<span style="color: #66cc66;">&#40;</span>elementID,eventName<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>func<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; func<span style="color: #66cc66;">&#40;</span>event<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>!wrapperCache<span style="color: #66cc66;">&#91;</span>elementID<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>wrapperCache<span style="color: #66cc66;">&#91;</span>elementID<span style="color: #66cc66;">&#93;</span>= <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; wrapperCache<span style="color: #66cc66;">&#91;</span>elementID<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span>eventName<span style="color: #66cc66;">&#93;</span> = wrapper;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> wrapper;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">function</span> getEventId<span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> element._prototypeEventID || element._eventID;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">function</span> addEventListenerIE<span style="color: #66cc66;">&#40;</span>element,eventName,func,capture<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> id = getEventId<span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> length =getEventCache<span style="color: #66cc66;">&#40;</span>id,eventName<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">push</span><span style="color: #66cc66;">&#40;</span>func<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>length == <span style="color: #CC0000;color:#800000;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; element.<span style="color: #006600;">attachEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'on'</span>+eventName,createFixedOrderWrapper<span style="color: #66cc66;">&#40;</span>id,eventName<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">function</span> removeEventListenerIE<span style="color: #66cc66;">&#40;</span>element,eventName,func,capture<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> id = getEventId<span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> cache =getEventCache<span style="color: #66cc66;">&#40;</span>id,eventName<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>cache.<span style="color: #006600;">length</span>&gt;<span style="color: #CC0000;color:#800000;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; eventCache<span style="color: #66cc66;">&#91;</span>id<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span>eventName<span style="color: #66cc66;">&#93;</span>=cache.<span style="color: #006600;">without</span><span style="color: #66cc66;">&#40;</span>func<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>eventCache<span style="color: #66cc66;">&#91;</span>id<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span>eventName<span style="color: #66cc66;">&#93;</span>.<span style="color: #006600;">length</span> == <span style="color: #CC0000;color:#800000;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; element.<span style="color: #006600;">detachEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'on'</span>+eventName,wrapperCache<span style="color: #66cc66;">&#91;</span>id<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span>eventName<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; Element.<span style="color: #006600;">addMethods</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; addEventListener:addEventListenerIE,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; removeEventListener:removeEventListenerIE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; Object.<span style="color: #006600;">extend</span><span style="color: #66cc66;">&#40;</span>window, <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; addEventListener: addEventListenerIE.<span style="color: #006600;">methodize</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; removeEventListener: removeEventListenerIE.<span style="color: #006600;">methodize</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; Object.<span style="color: #006600;">extend</span><span style="color: #66cc66;">&#40;</span>document, <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; addEventListener: addEventListenerIE.<span style="color: #006600;">methodize</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; removeEventListener: removeEventListenerIE.<span style="color: #006600;">methodize</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> flag =<span style="color: #003366; font-weight: bold;">true</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; Event.<span style="color: #006600;">observe</span><span style="color: #66cc66;">&#40;</span>window,<span style="color: #3366CC;">'load'</span>,<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>flag<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; document.<span style="color: #006600;">fire</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'dom:loaded'</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; document.<span style="color: #006600;">stopObserving</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'dom:loaded'</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; document.<span style="color: #006600;">observe</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'dom:loaded'</span>,<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>evt<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flag =<span style="color: #003366; font-weight: bold;">false</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://yabooo.org/archives/122/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>はてブはソーシャルブックマークじゃないかもしれない。</title>
		<link>http://yabooo.org/archives/109</link>
		<comments>http://yabooo.org/archives/109#comments</comments>
		<pubDate>Sun, 13 Jul 2008 06:55:46 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[SBM]]></category>

		<guid isPermaLink="false">http://www.yabooo.org/archives/109</guid>
		<description><![CDATA[どうも、ひろきのだいちです。おひさしぶり。
先日7/12に東工大の大岡山キャンパスでSBM勉強会が開かれ、いってまいりました。
今話題のiPhoneのソフトバンクモバイルではなく、
「ソーシャルブックマーク」勉強会という [...]]]></description>
			<content:encoded><![CDATA[<p>どうも、ひろきのだいちです。おひさしぶり。<br />
先日7/12に東工大の大岡山キャンパスでSBM勉強会が開かれ、いってまいりました。</p>
<p>今話題のiPhoneのソフトバンクモバイルではなく、<br />
「ソーシャルブックマーク」勉強会ということで方々に誤解を招いているSBM勉強会ですが、tomoさんの勉強会としては過去最大級の規模100人越え（実参加は80人くらいか）の大盛況振りでした。</p>
<p>講演者の方々への感想はすでにいろいろなところで書かれているので<br />
今回、僕はあえて次回のソーシャルブックマーク勉強会に期待することと<br />
今回語られなかったことを洗い出してゆきたいとおもいます。</p>
<p>この語られなかったことは懇親会の二次会、恵比寿のバーでぐだぐだと語られたこと（深夜0:00まで）でココでの議論が実はもっとも有益なものだったのではないかと思っています。</p>
<p>それをシェアするのも重要だと考え、ブログにしたためます。</p>
<p><span id="more-109"></span><br />
SBM勉強会で語られなかったこと</p>
<ul>
<li>ソーシャルブックマークとは何か</li>
<li>ソーシャルブックマークは存在するのか</li>
<li>属人性のある情報の価値</li>
<li>コミュニケーションツール or 情報整理・発見ツール</li>
<li>そもそもブックマーク/タギングが必須なのか</li>
<li>既存のWebにオーバレイすること問題点</li>
<li>誰が編纂者なのか</li>
<li>将来のソーシャルブックマーク=~s/ブックマーク/something/</li>
</ul>
<h2>ソーシャルブックマークとは何か</h2>
<p>現状のソーシャルブックマークサービスと呼ばれているものの正体についてはさまざまな講演者が語ってくれていて、それはそれで現状や歴史の整理になり有益だったのですが、そもそも論としてのソーシャルブックマークについての考察があまりなかったように感じました。</p>
<p>小島さんのソーシャルグラフAPIのお話が、もっともそこに近づいたのですがそれが違和感になるほどに&quot;ソーシャル&quot;であることについての言及があまりありませんでした。</p>
<p>そもそも、ソーシャルと名を関するサービスはそれ自体を単なる場図ワードとして取り扱っている面も否めませんが、これらの指すソーシャルが現実の社会的関係ネットワーク、つまりソーシャルグラフを意図している部分はたぶんにあると思われます。</p>
<p>では、果たして現状のソーシャルブックマークで<br />
「現実の社会的関係」を重要視し、これらの構築を意図しているような部分は存在するでしょうか。</p>
<p>僕ははてブ「お気に入り」などの機能がそれに類するものだと考えますが<br />
ソーシャルグラフを意図するには不十分であるように感じられます。</p>
<p>私見では現状のソーシャルブックマークと呼ばれているサービスは<br />
記名/顕名性シェアリングブックマークサービスでしかなく、<br />
十分にソーシャルである（不思議な日本語ですが）サービスは多くないように感じます。</p>
<p>少なくともはてブは「シェアリングブックマークサービス」であるように<br />
理解しています。</p>
<p>これについて異論のある方もいらっしゃると思いますが<br />
こういった議論が今後なされていくことを望みます。<br />
（あるいは、僕が問題提起＆サンプルアプリを作るとか。）</p>
<h2>ソーシャルブックマークは存在するのか</h2>
<p>上述のとおり、現状のソーシャルブックマークとよばれるサービスは<br />
俺俺定義の「ソーシャルブックマークサービス」ではないように思われます。</p>
<p>では、ソーシャルブックマークサービスに必要なものは何なのでしょうか。<br />
この必要条件についても考察が必要で、それこそが今後の発展系を見据えるために<br />
重要なポイントではないかと考えます。</p>
<blockquote><p>ローカルブックマーク<br />
↓<br />
オンラインブックマーク<br />
↓<br />
シェアリングブックマーク←　今ここ？<br />
↓            ←　あるいはココだ！<br />
ソーシャルブックマーク<br />
↓<br />
ソーシャルごにょごにょ</p></blockquote>
<p>というように発展系や未来型のSBMについての議論がなされることを望みます。<br />
もし、可能ならば次回はそのような問題提起を起こしていきたいと思っております。</p>
<h2>属人性のある情報の価値</h2>
<p>井口さんが講演で述べられていた「匿名性P2P型ソーシャルブックマーク」について考察するときに以下にみずからのプロファイル情報を隠すかというお考えでアルゴリズムを作られていましたが、これはオレオレ解釈のブックマークサービス像で考えると、</p>
<p>「シェアリングブックマークをローカルブックマークのように使いたい。」</p>
<p>というニーズになるように思われます。</p>
<p>現状のはてブが「誰がブックマークしたか/コメントしたか」という属人性のある情報を取り扱えていることが、ここが単純なシェアリングブックマークではなく<br />
顕名性を採用していることから発生するメリットであるように考えると<br />
この議論はソーシャルブックマークの方向性とは逆行しているように考えられますが、奥様の「お気に入りを公開する？正気？」発言からするとマスにアプローチする手段としては有効なのかもしれません。</p>
<p>しかし、参入障壁としてP2Pを考えると賢明な方法なのか・・・という議論の余地はあるでしょう。</p>
<p>嗜好のベクトル情報/プロファイル情報のみの交換ということなので<br />
SBMサイトでもっともPVをあつめ、マスアプローチに成功している<br />
人気のエントリーであるとか「ランキング」のようなものが成立しないということでどのような評価になるのかも楽しみです。</p>
<p>このような意味で、<br />
「属人性のある情報」がソーシャルであるための重要なポイントでありながら<br />
この部分の議論があまり進んでいないのは残念ともいえます。</p>
<h2>コミュニケーションツール or 情報整理・発見ツール</h2>
<p>果たして、ソーシャルブックマークシステムは「何のためのツール」なのでしょうか？そして国内市場を見たときにそのモデルは有効なのでしょうか。</p>
<p>個人的には情報整理・発見ツールとしては<br />
Google Bookmarkのラベル＆検索のほうが使い勝手がよいと思います。</p>
<p>ナレッジサイエンスの分野では情報整理・発見のツールとしての価値のある研究がすすんでいるように思われますが、この知見が今後ブックマークサービスに生かされるようになることを望みます。</p>
<p>しかし、コミュニケーションツールとしての側面を考えたときにはてブのよさが<br />
でてきていて、それがそのままソーシャルブックマーク的なサービスのよさになっていると思います。</p>
<p>そろそろ、<br />
ソーシャルブックマークの目指すところを議論してもよいのかもしれません。</p>
<h2>そもそもブックマーク/タギングが必須なのか</h2>
<p>既存のSBMサービスには２つの障壁があります。<br />
・１つはその価値を理解すること<br />
・もう１つは導入のためのブックマークレットなどを設定できること</p>
<p>そして、いざブックマークする！となったときに<br />
・ブラウザのブックマークボタン以外のボタンとしてブックマークレットを押す<br />
・コメント＆タギングする</p>
<p>という行為を行う必要があります。<br />
これらのアノテーションサービスの難しさはこの行為そのものの理解であると思います。たとえばニコニコ動画は「集合知」という観念に対して「集合情」という概念を創出し、アノテーションへの抵抗を減らしました。</p>
<p>この背景にあるものもコミュニケーションというものです。</p>
<p>「集合情」を起点にはてブを見れば「これはひどい」タグには重要な可能性が眠っているということもいえます。</p>
<p>星さんの講演で質問したように<br />
感情共有こそがコミュニケーションサービスにおいて重要なポイントだからです。</p>
<p>ところで、そもそも<br />
ブックマークである必要があるのでしょうか？<br />
タギングする必要があるのでしょうか？</p>
<p>これらの行為は非常にハードルが高く高コストです。</p>
<h2>既存のWebにオーバレイすること問題点</h2>
<p>これは懇親会の帰りに星さんと話したことなのですが、<br />
コモンズ・マーカーにしろ、既存のはてブなどにしろ記事のオーサとの関連が低く<br />
記事そのもののコメント機能ではなくそれらにオーバレイする形でコメントや批判がなされる形というのはどうなのでしょうか。</p>
<p>たとえばHTML上にコメント/hidden属性でオーサアカウント固有情報を書き込むなどすることでより発展的なオーサとの関連性を高めることはできないでしょうか。</p>
<p>はてブのようにはてなダイアリーも同時に所有してるサービスならば<br />
ここの関連を自動化することもできますが、他のオンラインメディアとの関係性の築き方が今後の課題ともいえるでしょう。</p>
<h2>誰が編纂者なのか</h2>
<p>ソーシャルブックマークサービスでブックマークという行為のハードルが高いことにも関連しますが、横田さんの講演によるとソーシャルブックマークサービスの利用者は全体の7%程度です。ブックマークの上位ランキングを見るものが9割おり、のこり10%がブックマーク行為をしたとします。しかし10%のうち9%は残りの1%のフォロワーのようにして誰かがブックマークして、上位に入り込んだエントリーのブックマークをしているような状況が現状と仮定します。（数字についてのソースはないです、すみません。）</p>
<p>このような現状のときに1%の誰かによる煽動や好みというのがダイレクトにのこり99%に広がります。この状況を好ましいと思える場合にはよいのですが、好ましいと思えない場合にはどうでしょう？このブックマークサービスを利用していない93%のネットユーザにとって、魅力的なサービスでしょうか？</p>
<p>いわゆる「はてな村」問題の原因はこういった狭い志向性をもった情報が一律的にランキングされ、情報としてあがってくることにあります。逆に懇親会でよく聞かれた意見としてはブックマーカーランキングがあがってゆくことがとても楽しく感じ、どんどんと地位が向上してくるような錯覚を味わうことで「はてブ廃人」になりそうだったというものがありました。</p>
<p>MMORPGと同じように狭い世界でのランキングや名誉欲を刺激するサービスがこういったコアユーザを生み出すことはよくあることですが、このようなサービスはマス向けではなくやはり、限られたユーザだけのものになってしまいます。</p>
<p>それもまたアリだと思います。たとえば横田さんの講演にあった専門特化のSBMなどはまさにそれでノイズの割合を下げることにもつながるからです。</p>
<p>しかし、一律のランキング性は「もりあがる」にせよ、多様性を保障しません。</p>
<p>各人にうまくカスタマイズされるようにすること、たとえばryoくんのKikkerのように学習性をもったり、お気に入り情報をもっと上手く利用することなどによってパーソナライズすることがソーシャルである重要な部分であり、多様性の保障によってより多くのユーザに楽しんでもらえるサービスになるのではないでしょうか。</p>
<p>1%の編纂者問題は重要なテーマです。ブックマークサービスの抵抗をさげ、さらに発展するためにはこのような問題へのシステム的な対応が必要になると考えます。</p>
<h2>将来のソーシャルブックマーク=~s/ブックマーク/something/</h2>
<p>散々、語りましたが最後に将来のソーシャルブックマークについての考えを述べたいと思います。</p>
<p>前述のように現状のSBMサービスは「シェアリングブックマーク」とその発展の域から出ていないように感じます。ソーシャルグラフとの関連が進むことはコミュニケーションサービスとしての観点からは間違いないだろうと考えます。</p>
<p>これはGoogle Social Graph APIやOpen IDなどによって単純なシェアリングブックマークやオンラインブックマークをソーシャルブックマークに変えることが容易になるだろうということからも考えられます。</p>
<p>また、分散しているブログコミュニティやモバイルコミュニティがブックマークではないにしろ、URLをシェアするサービスが出てきたときに偏った編纂者問題が複数のサービスによって解決されるという状況が想定できます。</p>
<p>これは専門家SBMなどの流れにも関連します。</p>
<p>ソーシャルグラフベースのSBMサービスが2ホップ圏内の情報をまとめることによっても偏った編纂者の問題は緩やかに解決されるとも考えられますが、既存のコミュニティからの脱却が難しく（はてな村からの脱走）、閉じられたまま収束する可能性も否定できません。</p>
<p>群発し、乱立し、多様化する状況になると１つの可能性としてはOnline Bookmark APIの方向性がありえるでしょう。</p>
<p>XML/RSSベース・JSONPベース、いろいろ方法はあると思いますが複数のブックマークサービスの統合管理ということも起こりうる未来でしょう。</p>
<p>また、既存のインフラ/ガジェットベースで競合が発生した場合を考えてみましょう。</p>
<p>携帯電話会社やIE8などが自動でWeb履歴の一部を秘匿とシェアを行えるサービスをビルドインしたらどうなるでしょう？</p>
<p>いままで、そのようなサービスをつかったことのないユーザが新たな文化圏を形成し、一気に既存のSBM市場を駆逐してしまったら？</p>
<p>あるいはその際にどこかの強力なサービスを買収・連携したら？</p>
<h2>最後に</h2>
<p>非常に楽しい勉強会でした。しかしP2P関係者多いなｗ</p>
<p>これを問題提起として、次のSBM勉強会がより高次なサービスの本質への議論へ進むことを望みます。</p>
<p>tomoさん、よろしくおねがいします＞＜</p>
]]></content:encoded>
			<wfw:commentRss>http://yabooo.org/archives/109/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>見るだけで生産性が１０倍になる気がする16の番組</title>
		<link>http://yabooo.org/archives/67</link>
		<comments>http://yabooo.org/archives/67#comments</comments>
		<pubDate>Thu, 08 May 2008 16:30:20 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[article]]></category>
		<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://www.yabooo.org/archives/67</guid>
		<description><![CDATA[どうも、おひさしぶりです。ひろきのだいちです。
テレビ番組が面白くなくなったといわれて久しいですが、
根っからのテレビ世代だった僕らとしては
昨今のテレビ番組の劣化は悲しい限りです。
それでもなお面白い番組はたくさんある [...]]]></description>
			<content:encoded><![CDATA[<p>どうも、おひさしぶりです。ひろきのだいちです。<br />
テレビ番組が面白くなくなったといわれて久しいですが、<br />
根っからのテレビ世代だった僕らとしては<br />
昨今のテレビ番組の劣化は悲しい限りです。</p>
<p>それでもなお面白い番組はたくさんあると僕は思うので、簡単に紹介したいと思います。<br />
昔の番組や終わってしまった番組もいろいろとあるんですが、この動画サイト全盛の時代なので<br />
うまいことやってください。</p>
<p><span id="more-67"></span></p>
<p>1．<a href="http://ja.wikipedia.org/wiki/%E6%97%A5%E7%B5%8C%E3%82%B9%E3%83%9A%E3%82%B7%E3%83%A3%E3%83%AB_%E3%82%AC%E3%82%A4%E3%82%A2%E3%81%AE%E5%A4%9C%E6%98%8E%E3%81%91">ガイアの夜明け</a><br />
日経版プロジェクトＸみたいな番組。役所広司が分裂することで有名な経済ドキュメント番組。<br />
信じられないくらいたくさんの役所広司が出てくるのでオススメ。<br />
・・・というのは冗談にしても１つにつき１つは気づきがあったりしてステキな番組です。</p>
<p>2．<a href="http://ja.wikipedia.org/wiki/%E3%81%8C%E3%81%A3%E3%81%A1%E3%82%8A%E3%83%9E%E3%83%B3%E3%83%87%E3%83%BC!!">がっちりマンデー</a><br />
マンデーとついているのに日曜日にやっている番組。<br />
これを見て月曜日にがっちり儲けましょうという趣旨らしいが、いつも月曜日だと勘違いしてしまいがち。<br />
年収は優に3000万を超えているはずなのに年収３００万円時代の生き方を説く森永卓郎さんの素にちかい側面を見ることができる<br />
面白い番組。毎回さまざまな角度からがっちり儲かるビジネスを紹介してくれます。</p>
<p>3．<a href="http://ja.wikipedia.org/wiki/%E7%88%86%E7%AC%91%E5%95%8F%E9%A1%8C%E3%81%AE%E3%83%8B%E3%83%83%E3%83%9D%E3%83%B3%E3%81%AE%E6%95%99%E9%A4%8A">爆笑問題のニッポンの教養</a><br />
天才大田光と怪物ウーチャカがさまざまな学問の権威とただ話し合うという番組。<br />
大田とゲストがあつく語り合っているときに完全に興味を失っている田中に注目することで、<br />
聞き流すということを学ぶことができます。</p>
<p>4.<a href="http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%83%E3%83%97%E3%83%A9%E3%83%B3%E3%83%8A%E3%83%BC">トップランナー</a></p>
<p><a href="http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%83%E3%83%97%E3%83%A9%E3%83%B3%E3%83%8A%E3%83%BC"></a>毎回、その業界のトップをひた走る孤高なアーティストの内面に迫る番組。<br />
なんだかしらないけど、途中でお菓子を食べさせてくれる。<br />
ＭＣのあまり上手くない司会のおかげで全体的にゆるーい空気が流れるのが特徴。<br />
ＮＨＫってこんなかんじだよなーってのを楽しむ番組。</p>
<p>5.<a href="http://ja.wikipedia.org/wiki/%E3%81%9D%E3%81%AE%E6%99%82%E6%AD%B4%E5%8F%B2%E3%81%8C%E5%8B%95%E3%81%84%E3%81%9F">そのとき歴史は動いた</a></p>
<p>歴史が変わる瞬間の出来事のあたりを大体１人の人物に<br />
スポットを当てて紹介する歴史バラエティ。だれも「その時」に注目していないのに<br />
「それでは、今日の"その時"です。」とずれた感じの引きを作るあたりＮＨＫの丁寧な<br />
仕事ぶりを感じる。</p>
<p><a href="http://ja.wikipedia.org/wiki/%E3%81%9D%E3%81%AE%E6%99%82%E6%AD%B4%E5%8F%B2%E3%81%8C%E5%8B%95%E3%81%84%E3%81%9F"></a><br />
6.<a href="http://ja.wikipedia.org/wiki/NHK%E3%82%B9%E3%83%9A%E3%82%B7%E3%83%A3%E3%83%AB">NHKスペシャル</a></p>
<p>ノンフィクション系ではフジのTHEノンフィクションも捨てがたいけど、やっぱりこっち。<br />
ドキュメンタリー形式でワープアとか最近気になる世の中の側面を不安たっぷりに見せてくれる番組。<br />
大体のフリーターは愛知県の自動車工場に消える。</p>
<p>7.<a href="http://ja.wikipedia.org/wiki/%E3%83%AF%E3%83%BC%E3%83%AB%E3%83%89%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%82%B5%E3%83%86%E3%83%A9%E3%82%A4%E3%83%88">ワールドビジネスサテライト</a></p>
<p>ＷＢＳの愛称で知られるテレビ東京の経済ニュース番組。トレンドのたまごという流行一歩手前みたいなものを<br />
紹介してくれる。ある種マッチポンプともいえるがそこらへんのワクワク感を見事演出してくれる。</p>
<p>"トレたま"と省略させたいらしいが、いまだここらへんのマッチポンプは成功していない。</p>
<p><a href="http://ja.wikipedia.org/wiki/%E3%83%AF%E3%83%BC%E3%83%AB%E3%83%89%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%82%B5%E3%83%86%E3%83%A9%E3%82%A4%E3%83%88"></a><br />
8.<a href="http://ja.wikipedia.org/wiki/%E3%82%BF%E3%83%A2%E3%83%AA%E5%80%B6%E6%A5%BD%E9%83%A8">タモリクラブ</a></p>
<p>タモリという才能を日本に残してくれてありがとうございます。<br />
と毎回感謝する番組。昔の深夜ラジオのノリをどんどん熟成していくとこんな味のチーズになるんだっていう<br />
番組。尻が今はＣＧになってしまったが一部本物の尻もある。</p>
<p>"洋楽が好き"と嘯くひとの１割は空耳スト。</p>
<p>9.<a href="http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB_%E4%BB%95%E4%BA%8B%E3%81%AE%E6%B5%81%E5%84%80">プロフェッショナル 仕事の流儀</a></p>
<p>さまざまな世界のプロフェッショナルたちが仕事に対する姿勢やジンクスを語る番組。<br />
脳科学者がなぜかＭＣ。それにしてもアハ体験って言葉はなんだか怪しい薬の気配がする。</p>
<p>10.<a href="http://ja.wikipedia.org/wiki/10min.%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9">10minボックス</a></p>
<p>10分間で学ぶ教養。中高生レベルで常識的なことも多いが10分間にまとめるという演出がステキ。</p>
<p>オンデマンドで見られるようになれば最高な番組の１つ。<br />
11.<a href="http://ja.wikipedia.org/wiki/%E9%80%B1%E5%88%8A%E3%83%95%E3%82%B8%E3%83%86%E3%83%AC%E3%83%93%E6%89%B9%E8%A9%95">フジテレビ批評</a></p>
<p><a href="http://ja.wikipedia.org/wiki/%E9%80%B1%E5%88%8A%E3%83%95%E3%82%B8%E3%83%86%E3%83%AC%E3%83%93%E6%89%B9%E8%A9%95"></a>朝っぱらから自己批判。視聴者に対してよりもＢＰＯに対して言い訳ばかりしているのが気になる。</p>
<p>１年に一度、芸人やタレントがびっくりするほど出てくる。一度、ハナエモリがＢＰＯの委員会で<br />
滝川クリステルのニュースを読む角度について文句を言っている映像が流れていたりして、<br />
あー世の中ってこんなふうに動くんだなって思う瞬間。松本 方哉ファン必見。</p>
<p>12.<a href="http://ja.wikipedia.org/wiki/%E3%81%9F%E3%81%91%E3%81%97%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%8D%E3%83%81%E5%A4%A7%E5%AD%A6%E6%95%B0%E5%AD%A6%E7%A7%91">たけしのコマネチ大学数学科</a><br />
13.<a href="http://ja.wikipedia.org/wiki/%E7%9A%86%E6%AE%BA%E3%81%97%E3%81%AE%E6%95%B8%E5%AD%B8">皆殺しの数学</a></p>
<p>大学生レベルの数学を扱っている数少ない番組たち。特に皆殺しの数学は１０年以上前の番組なのにハイセンス。<br />
フジテレビ深夜番組黄金期のＪＯＣＸジャングル枠の１つ。 ＤＶＤは出てないようなのでニコ動やyoukuなどでどうぞ。</p>
<p>14.<a href="http://ja.wikipedia.org/wiki/%E3%81%9F%E3%81%BB%E3%81%84%E3%82%84">たほいや</a><br />
15.<a href="http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%8E%E3%83%83%E3%82%B5%E3%81%AE%E5%B1%88%E8%BE%B1_%28%E3%83%86%E3%83%AC%E3%83%93%E7%95%AA%E7%B5%84%29">カノッサの屈辱</a></p>
<p>これもまたジャングル枠の番組。カノッサの屈辱は最近１回きりのリバイバルをしたので記憶に新しい人も多いかも。<br />
この時代の番組は金がかかってなさそうでかかっている。バブルへGO!</p>
<p><a href="http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%8E%E3%83%83%E3%82%B5%E3%81%AE%E5%B1%88%E8%BE%B1_%28%E3%83%86%E3%83%AC%E3%83%93%E7%95%AA%E7%B5%84%29"></a><br />
16.<a href="http://ja.wikipedia.org/wiki/THE_%E9%88%B4%E6%9C%A8%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%A9%E3%83%BC">鈴木タイムラー</a></p>
<p>もしかしたらもっともあげた中では知名度の低い番組かもしれない。<br />
しかし、コアなファンを中心に人気の超深夜番組。</p>
<p>エアギターで有名な金剛地武志もこの番組でプチブレイク。<br />
サブカルな雰囲気が好きなら是非ＤＶＤを。</p>
<p>途中から駆け足でしたが、まだまだ面白いテレビ番組は眠ってると思います。<br />
あなたの好きなテレビをぜひ教えてください＞＜</p>
]]></content:encoded>
			<wfw:commentRss>http://yabooo.org/archives/67/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascriptでカプセル化のコスト</title>
		<link>http://yabooo.org/archives/70</link>
		<comments>http://yabooo.org/archives/70#comments</comments>
		<pubDate>Thu, 07 Feb 2008 12:28:58 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[level☆☆☆☆]]></category>

		<guid isPermaLink="false">http://www.yabooo.org/archives/70</guid>
		<description><![CDATA[
どうも、ひろきのだいちです。
Javascriptでカプセル化を実現する！の続編みたいなものです。
この記事を投稿したところ、chokodogさんから次のような指摘を受けました。
（コメントありがとうございます＞＜）
 [...]]]></description>
			<content:encoded><![CDATA[<link rel="StyleSheet" href='http://www.yabooo.org/wp-content/uploads/2008/01/prog.css' />
どうも、ひろきのだいちです。</p>
<p><a href="http://www.yabooo.org/archives/53">Javascriptでカプセル化を実現する！</a>の続編みたいなものです。</p>
<p>この記事を投稿したところ、chokodogさんから次のような指摘を受けました。<br />
（コメントありがとうございます＞＜）</p>
<blockquote><p>カプセル化した場合、コンストラクタ内でメソッドが定義されているので、new するたびfunctionが定義され、prototypeで定義するよりメモリを多くとられてしまうということはないのでしょうか？</p></blockquote>
<p>たしかにそのとおりです。</p>
<p>今回はカプセル化を先のような方法で行うとどのようなコストがかかるのかということ探ってみました。<br />
<span id="more-70"></span></p>
<h3>メモリを使うのでは？ってどういうこと？</h3>
<p>chokodogさんの指摘の意味を簡単に説明したいと思います。</p>
<p>まずは以下のjavascriptのプログラムを見てください。</p>
<div class="igBar"><span id="ljavascript-25"><a href="#" onclick="javascript:showCodeTxt('javascript-25'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-25">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//オブジェクトのプロトタイププロパティを設定</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Object.<span style="color: #006600;">prototype</span>.<span style="color: #006600;">objprop</span>=<span style="color: #CC0000;color:#800000;">100</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//Classオブジェクトの作成</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> <span style="color: #003366; font-weight: bold;">Class</span>=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//Classのインスタンスオブジェクトの作成</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> instance=<span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Class</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//Classプロトタイププロパティを設定</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">Class</span>.<span style="color: #006600;">prototype</span>.<span style="color: #006600;">classprop</span>=<span style="color: #CC0000;color:#800000;">200</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//instanceの</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">instance.<span style="color: #006600;">insprop</span>=<span style="color: #CC0000;color:#800000;">300</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">log<span style="color: #66cc66;">&#40;</span>instance.<span style="color: #006600;">objprop</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//--&gt;100</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">log<span style="color: #66cc66;">&#40;</span>instance.<span style="color: #006600;">classprop</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//--&gt;200</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">log<span style="color: #66cc66;">&#40;</span>instance.<span style="color: #006600;">insprop</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//--&gt;300</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">log<span style="color: #66cc66;">&#40;</span>instance.<span style="color: #006600;">hasOwnProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"objprop"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//-&gt;false</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">log<span style="color: #66cc66;">&#40;</span>instance.<span style="color: #006600;">hasOwnProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"classprop"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//-&gt;false&nbsp; &nbsp;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">log<span style="color: #66cc66;">&#40;</span>instance.<span style="color: #006600;">hasOwnProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"insprop"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//-&gt;false</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">/*</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">　ここでinstanceのプロトタイプチェーンをたどって</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">　みつかったプロパティをOwnプロパティとして設定</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">*/</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">instance.<span style="color: #006600;">objprop</span>=instance.<span style="color: #006600;">objprop</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">instance.<span style="color: #006600;">classprop</span>=instance.<span style="color: #006600;">classprop</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">log<span style="color: #66cc66;">&#40;</span>instance.<span style="color: #006600;">hasOwnProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"objprop"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// --&gt;true</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">log<span style="color: #66cc66;">&#40;</span>instance.<span style="color: #006600;">hasOwnProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"classprop"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// --&gt;true</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">log<span style="color: #66cc66;">&#40;</span>instance.<span style="color: #006600;">hasOwnProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"insprop"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// --&gt;true </span></div>
</li>
</ol>
</div>
</div>
</div>
<p>
JavaScriptは通常のクラスベースのオブジェクト指向とことなりプロトタイプベースという別のプログラムパラダイムを採用しています。<br />
JavaScriptのオブジェクトはすべてハッシュのようなものになっていますが、これに少しばかり細工がしてあります。</p>
<p>それがプロトタイプチェーンというやつです。</p>
<p>オブジェクトは、自身のプロパティで見つからないようなハッシュ値を自分自身のコンストラクタのプロトタイプへと探しにいきます。</p>
<p>たとえば、上のプログラムの場合、<br />
objpropというプロパティを探しにいったときに</p>
<p>・自分自身のプロパティではない<br />
・自分のコンストラクタのプロトタイププロパティではない。<br />
・チェーンの終端であるオブジェクトのプロトタイププロパティで発見</p>
<p>というような順番で探っています。</p>
<p>しかし、次のようにするとプロトタイプ経由のプロパティを自分自身のプロパティとして利用することができます。</p>
<div class="igBar"><span id="ljavascript-26"><a href="#" onclick="javascript:showCodeTxt('javascript-26'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-26">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">/*</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">　ここでinstanceのプロトタイプチェーンをたどって</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">　みつかったプロパティをOwnプロパティとして設定</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">*/</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">instance.<span style="color: #006600;">objprop</span>=instance.<span style="color: #006600;">objprop</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">instance.<span style="color: #006600;">classprop</span>=instance.<span style="color: #006600;">classprop</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">log<span style="color: #66cc66;">&#40;</span>instance.<span style="color: #006600;">hasOwnProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"objprop"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// --&gt;true</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">log<span style="color: #66cc66;">&#40;</span>instance.<span style="color: #006600;">hasOwnProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"classprop"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// --&gt;true</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">log<span style="color: #66cc66;">&#40;</span>instance.<span style="color: #006600;">hasOwnProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"insprop"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// --&gt;true </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>さて、プロトタイプチェーンの仕組みを踏まえて<br />
次のようなプログラムを見てください。</p>
<div class="igBar"><span id="ljavascript-27"><a href="#" onclick="javascript:showCodeTxt('javascript-27'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-27">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">/*</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">&nbsp; &nbsp; プロトタイプとしてメソッドを実装</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">*/</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Object.<span style="color: #006600;">prototype</span>.<span style="color: #006600;">test</span>=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span>”hello”<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> t1=<span style="color: #66cc66;">&#123;</span>val:<span style="color: #CC0000;color:#800000;">2</span><span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> t2=<span style="color: #66cc66;">&#123;</span>val:<span style="color: #CC0000;color:#800000;">1</span><span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// ===で同一のリファレンスか確認</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">console.<span style="color: #006600;">log</span><span style="color: #66cc66;">&#40;</span>t1.<span style="color: #006600;">test</span>===t2.<span style="color: #006600;">test</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #009900; font-style: italic;">//true</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">/*</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">&nbsp; &nbsp; instanceのown propertyとして実装</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">*/</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> <span style="color: #003366; font-weight: bold;">Class</span>=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">test</span>=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span>”hello!”<span style="color: #66cc66;">&#41;</span>;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> c1=<span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Class</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> c2=<span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Class</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//こちらは別のリファレンスになってしまう。</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">console.<span style="color: #006600;">log</span><span style="color: #66cc66;">&#40;</span>c1.<span style="color: #006600;">test</span>===c2.<span style="color: #006600;">test</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #009900; font-style: italic;">//false </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>このように、オブジェクトのメソッドを定義する際に、<br />
オウンプロパティとして実装する場合では、</p>
<p>２つのインスタンスの定義した関数のそれぞれのさすリファレンスがことなることがわかります。</p>
<p>リファレンスとはC言語でいえばポインタ。<br />
つまりコンピュータのメモリ上の格納場所が異なるということです。</p>
<p>なので、</p>
<blockquote><p>カプセル化した場合、コンストラクタ内でメソッドが定義されているので、new するたびfunctionが定義され、prototypeで定義するよりメモリを多くとられてしまうということはないのでしょうか？</p></blockquote>
<p>冒頭のこのようなコメントを頂戴するわけです。<br />
このコメントに対して、僕はあろうことか鼻くそほじるように<br />
「トレードオフじゃないですか～。サーセンｗｗフヒヒ」(嘘おおげさ紛らわしい)と答えてしまいました。</p>
<p>やっぱりどのくらいコストがかかるのか確かめてみようと思い、実験を行いました。</p>
<h3>実験内容</h3>
<p>二つのjavascriptプログラムの実行時間とメモリ消費量を調べる。</p>
<div class="igBar"><span id="ljavascript-28"><a href="#" onclick="javascript:showCodeTxt('javascript-28'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-28">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">/*</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">&nbsp; &nbsp; アンダーバー記法のクラス</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">*/</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//人間を作るときの関数（コンストラクタ）</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> Human=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066;">name</span>,year<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>._year=year;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #000066;">name</span>=<span style="color: #000066;">name</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>._checkEto<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">//人間のDNA（設計図）を決める</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Human.<span style="color: #006600;">prototype</span>=<span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066;">name</span>:<span style="color: #3366CC;">""</span>,_year:<span style="color: #CC0000;color:#800000;">1983</span>,_eto:<span style="color: #3366CC;">"亥"</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">//干支を生まれ年から計算する</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; _checkEto:<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>._eto=<span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">"子"</span>,<span style="color: #3366CC;">"丑"</span>,<span style="color: #3366CC;">"寅"</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">"卯"</span>,<span style="color: #3366CC;">"辰"</span>,<span style="color: #3366CC;">"巳"</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">"午"</span>,<span style="color: #3366CC;">"未"</span>,<span style="color: #3366CC;">"申"</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">"酉"</span>,<span style="color: #3366CC;">"戌"</span>,<span style="color: #3366CC;">"亥"</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>._year-<span style="color: #CC0000;color:#800000;">4</span><span style="color: #66cc66;">&#41;</span>%<span style="color: #CC0000;color:#800000;">12</span><span style="color: #66cc66;">&#93;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">//年齢を決める。</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; setYear:<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>year<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>._year=year;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>._checkEto<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; getYear:<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>._year;<span style="color: #66cc66;">&#125;</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; getEto:<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>._eto;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<div class="igBar"><span id="ljavascript-29"><a href="#" onclick="javascript:showCodeTxt('javascript-29'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-29">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">/*</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">&nbsp; &nbsp; クロージャによるカプセル化クラス</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">*/</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> Human=<span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　<span style="color: #003366; font-weight: bold;">var</span> constructor=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066;">name</span>,year<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　<span style="color: #003366; font-weight: bold;">var</span> inner=<span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　<span style="color: #000066;">name</span>:<span style="color: #000066;">name</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　eto:<span style="color: #3366CC;">""</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　year:year,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　<span style="color: #009900; font-style: italic;">/*</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">　　　　　　　　private</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">　　　　　　*/</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　checkEto:<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　　　inner.<span style="color: #006600;">eto</span>=<span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">"子"</span>,<span style="color: #3366CC;">"丑"</span>,<span style="color: #3366CC;">"寅"</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　　　　　<span style="color: #3366CC;">"卯"</span>,<span style="color: #3366CC;">"辰"</span>,<span style="color: #3366CC;">"巳"</span>,</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　　　　　<span style="color: #3366CC;">"午"</span>,<span style="color: #3366CC;">"未"</span>,<span style="color: #3366CC;">"申"</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　　　　　<span style="color: #3366CC;">"酉"</span>,<span style="color: #3366CC;">"戌"</span>,<span style="color: #3366CC;">"亥"</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>inner.<span style="color: #006600;">year</span>-<span style="color: #CC0000;color:#800000;">4</span><span style="color: #66cc66;">&#41;</span>%<span style="color: #CC0000;color:#800000;">12</span><span style="color: #66cc66;">&#93;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　<span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　inner.<span style="color: #006600;">checkEto</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">setName</span>=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066;">name</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　inner.<span style="color: #000066;">name</span>=<span style="color: #000066;">name</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　<span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">setYear</span>=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>year<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　inner.<span style="color: #006600;">year</span>=year;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　inner.<span style="color: #006600;">checkEto</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　<span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">getName</span>=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　<span style="color: #000066; font-weight: bold;">return</span> inner.<span style="color: #000066;">name</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　<span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">getYear</span>=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　<span style="color: #000066; font-weight: bold;">return</span> inner.<span style="color: #006600;">year</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　<span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">getEto</span>=<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　　　<span style="color: #000066; font-weight: bold;">return</span> inner.<span style="color: #006600;">eto</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　　　<span style="color: #66cc66;">&#125;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">　　<span style="color: #000066; font-weight: bold;">return</span> constructor;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>この２つのプログラムの生成にかかるコストをこのような<br />
プログラムをそれぞれに行い調査します。</p>
<div class="igBar"><span id="ljavascript-30"><a href="#" onclick="javascript:showCodeTxt('javascript-30'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-30">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i=<span style="color: #CC0000;color:#800000;">0</span>;i&lt;<span style="color: #CC0000;color:#800000;">10000</span>;i++<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> x=<span style="color: #003366; font-weight: bold;">new</span> Human<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"DAICHI"</span>+i,i<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>実行時間</h3>
<pre class="source">
# time js none.js
real    0m0.006s

# time js cap.js
real    0m0.007s

# time js underbar.js
real    0m0.007s

# time js c_cap_10000.js　
real    0m1.741s

# time js c_underbar_10000.js
real    0m0.867s
</pre>
<p>jsインタプリタにはspidermonkeyを使います。</p>
<p>none.jsはただjsインタプリタを起動するのにかかった時間をはかるために何も書いていないjsファイルをtouchして作っただけです。</p>
<p>読み込みにはそれぞれ0.001secしかかかっていません。<br />
実行時間は10000個のインスタンス生成におよそ0.874秒のコストがかかっています。</p>
<p>ということは、カプセルかによって</p>
<p><big><big><big>87.4マイクロ秒</big></big></big></p>
<p>のコストが１つのインスタンス生成あたりにかかっているようです。</p>
<h3>メモリ消費量について</h3>
<p>次はメモリの消費量です。<br />
これは昨日作ったfleafeedを使ってみます。<br />
<a href="http://www.yabooo.org/archives/65">C言語でメモリ使用量をカウントする！</a></p>
<p>timeコマンドのオプション使えやって思った人は正しいんですが、<br />
せっかくなので使ってみたくなっちゃったんだもん＞＜</p>
<pre class="source">
#fleafeed js none.js
< fleafeed >
-----------fleafeed results------------

--USING HEAP    :   48574 bytes

#fleafeed js cap.js
-----------fleafeed results------------

--USING HEAP    :   59641 bytes

# fleafeed js underbar.js
-----------fleafeed results------------

--USING HEAP    :   56019 bytes

# fleafeed js c_cap_10000.js
-----------fleafeed results------------

--USING HEAP    :12925508 bytes

# fleafeed js c_underbar_10000.js
-----------fleafeed results------------

--USING HEAP    : 1731685 bytes
</pre>
<p>とこんな感じ。</p>
<p>jsの実装はほとんどHEAPしか使わないので、HEAP領域のみをピックアップしてみました。</p>
<p>まず、読み込みにかかるコストの比較ですが</p>
<pre class="source">
アンダーライン記法：11067 bytes
クロージャ記法	    ：7745	bytes
</pre>
<p>あれ？なんかしらんけどクロージャ記法のほうが読み込みは少ないっぽいです。不思議。</p>
<p>次に生成１つあたりのメモリコストの違いですが<br />
これはでかいですね。</p>
<p>これを計算してみると１つあたりのメモリコストは</p>
<p><big><big><big>1,110 bytes</big></big></big></p>
<p>となっているようです。およそ1kのメモリが余分に使われてしまうわけです。<br />
これは確かにコスト高な感じはします。</p>
<p>富豪プログラミングをしたいひとにはオススメということで<br />
どうでしょうか（泣）</p>
]]></content:encoded>
			<wfw:commentRss>http://yabooo.org/archives/70/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>twitterの正しい使い方</title>
		<link>http://yabooo.org/archives/68</link>
		<comments>http://yabooo.org/archives/68#comments</comments>
		<pubDate>Wed, 06 Feb 2008 15:11:50 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[level☆]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.yabooo.org/archives/68</guid>
		<description><![CDATA[
どうも初めまして、ujihisaと申します。
いきなりですが、ここにtwitterというウェブサービスの“正しい”使い方を記したいと思います。
0. はじめに
知人が何人かtwitterをはじめることになって、twit [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.yabooo.org/wp-content/uploads/2008/02/picture-1.jpg" title="twitter"><img src="http://www.yabooo.org/wp-content/uploads/2008/02/picture-1.thumbnail.jpg" alt="twitter" /></a></p>
<p>どうも初めまして、ujihisaと申します。<br />
いきなりですが、ここにtwitterというウェブサービスの“正しい”使い方を記したいと思います。</p>
<p><strong>0. はじめに</strong><br />
知人が何人かtwitterをはじめることになって、twitterの使い方を簡単に教えたりしています。<br />
何度も個別に教えるより一つの文章にまとめた方がとても効率がよいので、今回頑張って文章化してみることにしました。</p>
<p>twitterの“正しい”使い方を説明するにあたって、まず正しいという言葉を定義しなければなりませんが<br />
ここでは「ujihisaの思考・行為は全て完全に正しい」という仮定のもとで話を進めていくことで<br />
複雑な問題を回避するのが合理的かつ経済的ではないかと思います。</p>
<p><strong>1. Following 30人</strong><br />
twitterをはじめると、まずは元々の知人を適当にfollowします。<br />
そしてその知人がfollowしている人を適当にfollowします。<br />
30人くらいになるまで頑張って続けます。</p>
<p>みんなの発言を読んで、気になったものがあればレスします。<br />
携帯電話から利用する方法を学んで、電車の中でも発言するようにするといいでしょう。</p>
<p>ちなみにtwitterの読みは「とうぃらー」です。<br />
ついったーとかとゅいったーは完全なる誤りです。</p>
<p>この後Follow人数が増えていくと、技術的な質問をすると<br />
大抵は即座に返ってくるようになり、あなたの生産性が向上します。</p>
<p>twitterは不安定なサービスで、頻繁にダウンします。<br />
ダウンしているのが通常の状態ですので、長期間安定動作していると<br />
不安な気持ちになってくる…。そう、それこそが正しいtwitter使いの姿なのです。</p>
<p><strong>2. Following 500人</strong><br />
じわじわとFollowする人を増やしていき、500人程度になるまで続けます。<br />
followしている人のログを読むのがだんだんと厳しくなってきて、最終的には<br />
ログを読むことを放棄するようになります。<br />
この、“ログを読まない”ということが頭でなく心で理解できるようになるまで<br />
習慣づけるのがポイントです。</p>
<p>電車の中で携帯でtwitterを覗くのも、みんなのログを追うためではなく<br />
別の意味を持つようになるでしょう。</p>
<p>ustreamで自分を配信するのもよいでしょう。<br />
配信するときには必ず素顔を晒しましょう。<br />
声だけ配信とか画面だけ配信など、もっての他です。<br />
女性の場合は必ず水着配信しなければなりません。<br />
(例: まめこ)</p>
<p><strong>3. 退会する</strong><br />
毎日朝6時までtwitterする生活が続き、生産性がはっきりと低下します。<br />
twitter以外の何も考えられないような日常を送るようになったとき、<br />
そのときがあなたの退会のチャンスです。</p>
<p>twitterはアカウントを取得して退会するまでがtwitterです。<br />
まだ退会していない人は、真のtwitterを未だ体験していないモンキーです。<br />
はやく退会しましょう。</p>
]]></content:encoded>
			<wfw:commentRss>http://yabooo.org/archives/68/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C言語で使用メモリをカウントする。</title>
		<link>http://yabooo.org/archives/65</link>
		<comments>http://yabooo.org/archives/65#comments</comments>
		<pubDate>Wed, 06 Feb 2008 13:58:28 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[level☆☆☆]]></category>

		<guid isPermaLink="false">http://www.yabooo.org/archives/65</guid>
		<description><![CDATA[どうもひろきのだいちです。
最近、初心者にとっていちばんよい言語は・・みたいな話が出てますが、
いちばんよい言語というのはたぶん「近くに一番優しくわかりやすく丁寧に教えてくれる人のいる言語」だと思います。
別に言語なんて [...]]]></description>
			<content:encoded><![CDATA[<p>どうもひろきのだいちです。</p>
<p>最近、初心者にとっていちばんよい言語は・・みたいな話が出てますが、<br />
いちばんよい言語というのはたぶん「近くに一番優しくわかりやすく丁寧に教えてくれる人のいる言語」だと思います。</p>
<p>別に言語なんて関係ないです。</p>
<p>でも、いろいろとできることが違うという意味ではC言語はすごいです。<br />
今日はC言語を使ってプログラムの利用メモリを出力してくれるようなソフトを書いてみました。<br />
<span id="more-65"></span></p>
<h3>はじめに</h3>
<p>こんな風にランダムに生成した数字をquick sortして順番に出力するプログラムがあったとします。</p>
<pre>
$ ./qsort 10
      133557644      467172391
      587048537      700406542
      924651875      942877877
     1231884300     1236726036
     1563773570     1858205801
</pre>
<p>こんな風にランダムに生成した数字をquick sortして順番に出力するプログラムがあったとします。<br />
これにfleafeedとつけるだけで・・・</p>
<pre>
$fleafeed ./qsort 10
      133557644      467172391
      587048537      700406542
      924651875      942877877
     1231884300     1236726036
     1563773570     1858205801

-----------fleafeed results------------
--USING STACK   :    1160 bytes
--USING HEAP    :       0 bytes
--ALLOC times   :       0
--FREE times    :       0
</pre>
<p>こんな付加情報を追加してくれるやつを作ってみました。</p>
<p>さらにただ、mallocして放置するというドSなプログラムを</p>
<div class="igBar"><span id="lc-37"><a href="#" onclick="javascript:showCodeTxt('c-37'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">C:</span>
<div id="c-37">
<div class="c">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#include &lt;stdlib.h&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">int</span> main<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">void</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #993333;">int</span> i=<span style="color: #cc66cc;color:#800000;">0</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>;i&lt;<span style="color: #cc66cc;color:#800000;">100</span>;i++<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp;<span style="color: #993333;">void</span> *p=malloc<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;color:#800000;">100</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp;<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"%x"</span>,p<span style="color: #66cc66;">&#41;</span>; </div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"hello!world"</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
試してみると・・・</p>
<pre>
-----------fleafeed results------------
--USING STACK   :    1076 bytes
--USING HEAP    :   10000 bytes
--ALLOC times   :     100
--FREE times    :       0
</pre>
<p>こんなかんじで、計算どおりヒープの数とmallocの数がカウントされてます。</p>
<p>これの作り方の前にちょっと基礎知識を。<br />
わかる人は読み飛ばしてください。まちがった説明するかもなので＞＜</p>
<h3>スタックとかヒープとかってなに？</h3>
<p>スタックとかヒープとかってのは、プログラムの管理領域であるメモリの役割につけられた名前です。</p>
<p>スタックは関数呼び出しや引数、関数内自動変数などを管理するメモリの領域です。<br />
面倒なので、wikipedia先生に頼ると<br />
・<a href="http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF">スタック</a><br />
・<a href="http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%AB%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF">コールスタック</a></p>
<p>こんなかんじのものです。</p>
<p>ヒープとは固定サイズじゃなくて自由に別途に確保できるところにあるメモリーです。<br />
通常mallocでメモリーをもらってfreeで返します。</p>
<p>もらったものは必ず返さないといけないんですが、最近の言語ではGC（ガーベジコレクション）というステキ機能がついていて<br />
変わりに返してくれます。連帯保証人みたいなひとです。</p>
<p>これだけだとあれなのでまたまた、wikipedia先生に・・<br />
・<a href="http://ja.wikipedia.org/wiki/%E3%83%92%E3%83%BC%E3%83%97%E9%A0%98%E5%9F%9F">ヒープ領域</a><br />
・<a href="http://ja.wikipedia.org/wiki/%E3%83%92%E3%83%BC%E3%83%97%E9%A0%98%E5%9F%9F">ヒープ構造</a></p>
<h3>スタック編</h3>
<p>理屈は簡単です。<br />
一番最初に一度使われる前のスタック領域を俺色に染め上げて、<br />
プログラムを実行し、なんらかの形で利用されると別の値になってしまうので<br />
一番最後に俺色になっていないところの数を数え上げるという方法です。</p>
<p>そのために</p>
<div class="igBar"><span id="lc-38"><a href="#" onclick="javascript:showCodeTxt('c-38'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">C:</span>
<div id="c-38">
<div class="c">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#define FF_FIRST __attribute__ ((constructor))</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#define FF_LAST&nbsp; __attribute__ ((destructor)) </span></div>
</li>
</ol>
</div>
</div>
</div>
<p>
こんな宣言をしてmain関数より前に関数を実行させます。</p>
<div class="igBar"><span id="lc-39"><a href="#" onclick="javascript:showCodeTxt('c-39'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">C:</span>
<div id="c-39">
<div class="c">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#define FF_MAGIC 0xf1eafeed</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#define FF_MAX 1024*1024</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">FF_FIRST <span style="color: #993333;">int</span> fleafeed_fillstack<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #993333;">int</span> p<span style="color: #66cc66;">&#91;</span>FF_MAX<span style="color: #66cc66;">&#93;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #993333;">int</span> i=<span style="color: #cc66cc;color:#800000;">0</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>;i&lt;FF_MAX;i++<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp;p<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>=FF_MAGIC;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">FF_LAST <span style="color: #993333;">void</span> fleafeed_checkstack<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #993333;">int</span> p<span style="color: #66cc66;">&#91;</span>FF_MAX<span style="color: #66cc66;">&#93;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #993333;">int</span> i=<span style="color: #cc66cc;color:#800000;">0</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>;i&lt;FF_MAX;i++<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp;FF_USESTACK+=<span style="color: #66cc66;">&#40;</span>p<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>==FF_MAGIC<span style="color: #66cc66;">&#41;</span>?<span style="color: #cc66cc;color:#800000;">0</span>:<span style="color: #cc66cc;color:#800000;">4</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
このときに埋め立てる値を0xf1eafeedとう値にしたので<br />
このプログラムの名前はfleafeedになりました。</p>
<p>適当に16進数で表現できる8文字の英語をいれただけです。<br />
意味はわかりません＞＜</p>
<p>これで、スタックの仕様数はわかりました。<br />
これを</p>
<pre>
$gcc fleafeed.c -share -fPIC -o libfleafeed.so
</pre>
<p>のようにしてコンパイルします。これでできたライブラリをリンクしてやれば、スタックの使用量がわかります。</p>
<p>次はヒープです。</p>
<h3>ヒープ領域編</h3>
<p>ヒープは、よほど無理をしないかぎり、mallocなどから呼ばれるのでこの関数をwrapperしてやればヒープの使用量はわかります。<br />
というわけで、</p>
<div class="igBar"><span id="lc-40"><a href="#" onclick="javascript:showCodeTxt('c-40'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">C:</span>
<div id="c-40">
<div class="c">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">void</span> *malloc<span style="color: #66cc66;">&#40;</span>size_t size<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;FF_ALLOCCOUNT++;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;FF_USEHEAP+=size;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #b1b100;">return</span> malloc<span style="color: #66cc66;">&#40;</span>size<span style="color: #66cc66;">&#41;</span>;<span style="color: #808080; font-style: italic;">//本物のmalloc?</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
というような感じでラッパしたいのですが、これだとmallocという名前が衝突してしまいます。<br />
そんなわけで</p>
<div class="igBar"><span id="lc-41"><a href="#" onclick="javascript:showCodeTxt('c-41'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">C:</span>
<div id="c-41">
<div class="c">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#define GNU_SOURCE</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#include &lt;dlfcn.h&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">static</span> <span style="color: #993333;">void</span>*<span style="color: #66cc66;">&#40;</span>*libc_malloc<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span>size_t<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">static</span> <span style="color: #993333;">void</span>*<span style="color: #66cc66;">&#40;</span>*libc_calloc<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span>size_t,size_t<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">static</span> <span style="color: #993333;">void</span> <span style="color: #66cc66;">&#40;</span>*libc_free&nbsp; <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">void</span> *<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">void</span> *malloc<span style="color: #66cc66;">&#40;</span>size_t size<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;FF_ALLOCCOUNT++;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;FF_USEHEAP+=size;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span>*libc_malloc<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span>size<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">FF_FIRST <span style="color: #993333;">int</span> fleafeed_fillstack<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;libc_malloc=dlsym<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">void</span> *<span style="color: #66cc66;">&#41;</span>-1L,<span style="color: #ff0000;">"malloc"</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
こんな感じにdlsymのRTLD_NEXTをつかって、mallocのポインタをlibc_mallocという代理人にあずけておきます。<br />
なぜかRTLD_NEXTが#defineされてなかったので即値で対応しました。</p>
<h3>共有ライブラリを事前に読み込む</h3>
<p>ソースコードがあればそこからビルドするときになんとかすればいいんですが、そうではないので事前にライブラリを読み込むようにしてコマンドを呼び出すという方法をとります。</p>
<pre>
alias fleafeed=LD_PRELOAD=./libfleafeed.so
</pre>
<p>こんなかんじに。LD_PRELOADはこのライブラリは最初に読み込んじゃって！という環境変数です。<br />
これで準備は万端。</p>
<p>ためしにgccでコンパイルをするときの利用状況を見てみましょう。</p>
<pre>
$ fleafeed gcc test.c

-----------fleafeed results------------
--USING STACK   :    6072 bytes
--USING HEAP    :  832510 bytes
--ALLOC times   :    1776
--FREE times    :     833

-----------fleafeed results------------
--USING STACK   :    2272 bytes
--USING HEAP    : 1810165 bytes
--ALLOC times   :     863
--FREE times    :      48

-----------fleafeed results------------
--USING STACK   :    5980 bytes
--USING HEAP    : 1715525 bytes
--ALLOC times   :    1185
--FREE times    :     355

-----------fleafeed results------------
--USING STACK   :    2012 bytes
--USING HEAP    :   25998 bytes
--ALLOC times   :     128
--FREE times    :      35

-----------fleafeed results------------
--USING STACK   :    5840 bytes
--USING HEAP    :   33885 bytes
--ALLOC times   :     336
--FREE times    :     181
</pre>
<p>うわなんかいっぱい出たｗ</p>
<p>プロセス分だけ終わりがあるので、プロセスごとに出力されるようです。</p>
<p>最後に全体のソースコード。</p>
<div class="igBar"><span id="lc-42"><a href="#" onclick="javascript:showCodeTxt('c-42'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">C:</span>
<div id="c-42">
<div class="c">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#define GNU_SOURCE</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#include &lt;dlfcn.h&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#define FF_FIRST __attribute__ ((constructor))</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#define FF_LAST&nbsp; __attribute__ ((destructor))</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#define FF_MAGIC 0xf1eafeed</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #339933;">#define FF_MAX 1024*1024</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">int</span> FF_ALLOCCOUNT=<span style="color: #cc66cc;color:#800000;">0</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">int</span> FF_FREECOUNT=<span style="color: #cc66cc;color:#800000;">0</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">int</span> FF_USEHEAP=<span style="color: #cc66cc;color:#800000;">0</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">int</span> FF_USESTACK=<span style="color: #cc66cc;color:#800000;">0</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">static</span> <span style="color: #993333;">void</span>*<span style="color: #66cc66;">&#40;</span>*libc_malloc<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span>size_t<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">static</span> <span style="color: #993333;">void</span>*<span style="color: #66cc66;">&#40;</span>*libc_calloc<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span>size_t,size_t<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">static</span> <span style="color: #993333;">void</span> <span style="color: #66cc66;">&#40;</span>*libc_free&nbsp; <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">void</span> *<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">void</span> *malloc<span style="color: #66cc66;">&#40;</span>size_t size<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;FF_ALLOCCOUNT++;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;FF_USEHEAP+=size;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span>*libc_malloc<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span>size<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">void</span> *calloc<span style="color: #66cc66;">&#40;</span>size_t nmemb,size_t size<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;FF_ALLOCCOUNT++;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;FF_USEHEAP+=size*nmemb;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span>*libc_calloc<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span>nmemb,size<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333;">void</span> free<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">void</span> *ptr<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;FF_FREECOUNT++;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span>*libc_free<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span>ptr<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">/*void *realloc(void *ptr,size_t size){</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;"></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">}*/</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">FF_FIRST <span style="color: #993333;">int</span> fleafeed_fillstack<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #993333;">int</span> p<span style="color: #66cc66;">&#91;</span>FF_MAX<span style="color: #66cc66;">&#93;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #993333;">int</span> i=<span style="color: #cc66cc;color:#800000;">0</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;libc_malloc=dlsym<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">void</span> *<span style="color: #66cc66;">&#41;</span>-1L,<span style="color: #ff0000;">"malloc"</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;libc_free=dlsym<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">void</span> *<span style="color: #66cc66;">&#41;</span>-1L,<span style="color: #ff0000;">"free"</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;libc_calloc=dlsym<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">void</span> *<span style="color: #66cc66;">&#41;</span>-1L,<span style="color: #ff0000;">"calloc"</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>;i&lt;FF_MAX;i++<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp;p<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>=FF_MAGIC;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">FF_LAST <span style="color: #993333;">void</span> fleafeed_checkstack<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #993333;">int</span> p<span style="color: #66cc66;">&#91;</span>FF_MAX<span style="color: #66cc66;">&#93;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #993333;">int</span> i=<span style="color: #cc66cc;color:#800000;">0</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>;i&lt;FF_MAX;i++<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp;FF_USESTACK+=<span style="color: #66cc66;">&#40;</span>p<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>==FF_MAGIC<span style="color: #66cc66;">&#41;</span>?<span style="color: #cc66cc;color:#800000;">0</span>:<span style="color: #cc66cc;color:#800000;">4</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;fflush<span style="color: #66cc66;">&#40;</span>stdout<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;fprintf<span style="color: #66cc66;">&#40;</span>stderr,<span style="color: #ff0000;">"<span style="color: #000099; font-weight: bold;">\n</span>-----------fleafeed results------------"</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;fprintf<span style="color: #66cc66;">&#40;</span>stderr,<span style="color: #ff0000;">"<span style="color: #000099; font-weight: bold;">\n</span>--USING STACK<span style="color: #000099; font-weight: bold;">\t</span>:%8d bytes"</span>,FF_USESTACK<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;fprintf<span style="color: #66cc66;">&#40;</span>stderr,<span style="color: #ff0000;">"<span style="color: #000099; font-weight: bold;">\n</span>--USING HEAP<span style="color: #000099; font-weight: bold;">\t</span>:%8d bytes"</span>,FF_USEHEAP<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;fprintf<span style="color: #66cc66;">&#40;</span>stderr,<span style="color: #ff0000;">"<span style="color: #000099; font-weight: bold;">\n</span>--ALLOC times<span style="color: #000099; font-weight: bold;">\t</span>:%8d"</span>,FF_ALLOCCOUNT<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:IG_LINE_COLOUR_1;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;fprintf<span style="color: #66cc66;">&#40;</span>stderr,<span style="color: #ff0000;">"<span style="color: #000099; font-weight: bold;">\n</span>--FREE times<span style="color: #000099; font-weight: bold;">\t</span>:%8d<span style="color: #000099; font-weight: bold;">\n</span>"</span>,FF_FREECOUNT<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:IG_LINE_COLOUR_2;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://yabooo.org/archives/65/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
