<?xml version="1.0" encoding="utf-8" ?>


<?xml-stylesheet href="/os0x/rssxsl" type="text/xsl" media="screen"?>


<rdf:RDF
	xmlns="http://purl.org/rss/1.0/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xml:lang="ja">
<channel rdf:about="http://os0x.g.hatena.ne.jp/os0x/rss">
	<title>0x廃棄階層</title>
	<link>http://os0x.g.hatena.ne.jp/os0x/</link>
	<description>0x廃棄階層</description>

	<dc:creator>os0x</dc:creator>
	<items>
	<rdf:Seq>
		<rdf:li rdf:resource="http://os0x.g.hatena.ne.jp/os0x/20091220/1261303443"/>
		<rdf:li rdf:resource="http://os0x.g.hatena.ne.jp/os0x/20090602/1243909470"/>
		<rdf:li rdf:resource="http://os0x.g.hatena.ne.jp/os0x/20090601/1243859100"/>
		<rdf:li rdf:resource="http://os0x.g.hatena.ne.jp/os0x/20090601/1243856885"/>
		<rdf:li rdf:resource="http://os0x.g.hatena.ne.jp/os0x/20090526/1243311687"/>
	</rdf:Seq>
	</items>
</channel>
<item rdf:about="http://os0x.g.hatena.ne.jp/os0x/20091220/1261303443">
	<title>[Chrome][Extension]Chrome Keyconfig、Chrome Gestureにアクションを追加する方法：ドラフト</title>
	<link>http://os0x.g.hatena.ne.jp/os0x/20091220/1261303443</link>
	<description> Chrome Keyconfig、Chrome Gesturesにアクションを追加する方法について、AutoPatchWork 1.0.2では、下記のようにした。 Diff of background.html 17f2721ce0 - autopatchwork - Project Hosting on Google Code var CHROME_GESTURES = &#39;jpk</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>Chrome Keyconfig、Chrome Gesturesにアクションを追加する方法について、AutoPatchWork 1.0.2では、下記のようにした。</p>
			<p><a href="http://code.google.com/p/autopatchwork/source/diff?spec=svn17f2721ce0ea509d1a3229299ae47406173b8eb1&r=17f2721ce0ea509d1a3229299ae47406173b8eb1&format=side&path=/AutoPatchWork/background.html" target="_blank">Diff of background.html 17f2721ce0 -  autopatchwork -  Project Hosting on Google Code</a></p>
<pre class="syntax-highlight">
<span class="synIdentifier">var</span> CHROME_GESTURES = <span class="synConstant">'jpkfjicglakibpenojifdiepckckakgk'</span>;
<span class="synIdentifier">var</span> CHROME_KEYCONFIG = <span class="synConstant">'okneonigbfnolfkmfgjmaeniipdjkgkl'</span>;
<span class="synIdentifier">var</span> action = <span class="synIdentifier">{</span>
	group:<span class="synConstant">'AutoPatchWork'</span>,
	actions:<span class="synIdentifier">[</span>
		<span class="synIdentifier">{</span>name:<span class="synConstant">'AutoPatchWork.toggle'</span><span class="synIdentifier">}</span>,
		<span class="synIdentifier">{</span>name:<span class="synConstant">'AutoPatchWork.request'</span><span class="synIdentifier">}</span>
	<span class="synIdentifier">]</span>
<span class="synIdentifier">}</span>;
chrome.extension.sendRequest(CHROME_GESTURES, action);
chrome.extension.sendRequest(CHROME_KEYCONFIG, action);
</pre>

			<p>こんな感じでオブジェクトを渡すと、Keyconfig、Gesturesの設定画面のセレクトボックスにAutoPatchWork.toggleとAutoPatchWork.requestが追加される。ユーザーがそれを選択し、どこかのページでそのアクションを呼び出すとその名前のEventが発行されるようにしている。</p>
			<p>Gesturesの場合、こんな感じ。</p>
<pre class="syntax-highlight">
<span class="synIdentifier">var</span> ev = <span class="synStatement">document</span>.createEvent(<span class="synConstant">'Event'</span>);
ev.initEvent(act.name, <span class="synConstant">true</span>, <span class="synConstant">false</span>);
ev.direction = GM._directionChain;
ev.action = act;
<span class="synStatement">document</span>.dispatchEvent(ev);
</pre>

			<p>Keyconfigの場合、timesはviモードを有効にしている場合に5 jと押すと5が入る。</p>
<pre class="syntax-highlight">
<span class="synIdentifier">var</span> ev = <span class="synStatement">document</span>.createEvent(<span class="synConstant">'Event'</span>);
ev.initEvent(act.name, <span class="synConstant">true</span>, <span class="synConstant">false</span>);
ev.key = key;
ev.action = act;
ev.times = KC._times||KC.times||1;
ev.target = target;
<span class="synStatement">document</span>.dispatchEvent(ev);
</pre>

			<p>これらのEventオブジェクトに付けたプロパティは、拡張同士だと参照可能だけど、ページ側からは見えないようになっています(今のところ)。</p>
			<p>で、とりあえずはこれで使えそうな気がするけど、ちょっと問題がある。</p>
			<p>というのも、AutoPatchWorkからsendRequestするタイミングがシビアで、起動時に登録を失敗することがあるみたい。しかも、AutoPatchWorkの有効・無効を切り替えると、アクションが増えてしまう…。</p>
			<p>このへん、スマートな解決方法がなさそうでどうしたものかなと悩み中です。</p>
		</div>
]]></content:encoded>

	<dc:creator>os0x</dc:creator>
	<dc:date>2009-12-20T19:04:03+09:00</dc:date>
	<dc:subject>Chrome</dc:subject>
	<dc:subject>Extension</dc:subject>
</item>
<item rdf:about="http://os0x.g.hatena.ne.jp/os0x/20090602/1243909470">
	<title>[JavaScript]parseIntRight</title>
	<link>http://os0x.g.hatena.ne.jp/os0x/20090602/1243909470</link>
	<description> less - id=”id-1234”からIDを抜き出すjQueryプラグイン getIdだとId自身を取得すると思ってしまう。やってることはparseIntを逆から処理する感じなので、reduce/reduceRightに倣って、parseIntRightってメ</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p><a href="http://less.carbonfairy.org/post/116193406/id-id-1234-id-jquery" target="_blank">less - id=”id-1234”からIDを抜き出すjQueryプラグイン</a></p>
			<p>getIdだとId自身を取得すると思ってしまう。やってることはparseIntを逆から処理する感じなので、reduce/reduceRightに倣って、parseIntRightってメソッドを定義するのが良いのではないか。</p>
			<p><a href="http://gist.github.com/121940" target="_blank">http://gist.github.com/121940</a></p>
			<p>ただ、parseIntRightなら aaa0xFF な文字列にも対応したいところだけど、その辺は妥協…</p>
		</div>
]]></content:encoded>

	<dc:creator>os0x</dc:creator>
	<dc:date>2009-06-02T11:24:30+09:00</dc:date>
	<dc:subject>JavaScript</dc:subject>
</item>
<item rdf:about="http://os0x.g.hatena.ne.jp/os0x/20090601/1243859100">
	<title>[Google Chrome][UserScripts]Dev版Chrome用UserScripts</title>
	<link>http://os0x.g.hatena.ne.jp/os0x/20090601/1243859100</link>
	<description> Dev版だと、Google Chrome 2.0 で使える(自作の) User Scripts - 0xFFが動かなかったりするので、 Index of /chrome_userjs に置いてある。 os0x / User Scripts / overview &mdash; bitbucket.orgへ移動。バケツいい </description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>Dev版だと、<a href="http://d.hatena.ne.jp/os0x/20090522/chrome2" target="_blank">Google Chrome 2.0 で使える(自作の) User Scripts - 0xFF</a>が動かなかったりするので、</p>
			<p><del datetime="2009-06-11T02:01:33+09:00"><a href="http://ss-o.net/chrome_userjs/" target="_blank">Index of /chrome_userjs</a></del></p>
			<p>に置いてある。</p>
			<p><ins datetime="2009-06-11T02:01:33+09:00"><a href="http://bitbucket.org/os0x/user-scripts/" target="_blank">os0x / User Scripts / overview &mdash; bitbucket.org</a>へ移動。バケツいい</ins></p>
		</div>
]]></content:encoded>

	<dc:creator>os0x</dc:creator>
	<dc:date>2009-06-01T21:25:00+09:00</dc:date>
	<dc:subject>Google Chrome</dc:subject>
	<dc:subject>UserScripts</dc:subject>
</item>
<item rdf:about="http://os0x.g.hatena.ne.jp/os0x/20090601/1243856885">
	<title>[JavaScript]破壊的な配列走査</title>
	<link>http://os0x.g.hatena.ne.jp/os0x/20090601/1243856885</link>
	<description> 配列の各要素を書き換えたい場合、Array#mapを使うのが一般的だと思う。 var array = new Array(500).join(&#39;,&#39;).split(&#39;,&#39;); array = array.map(function(a,i,ar){ return i; }); map自体は破壊的ではないので、代入し直さ</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>配列の各要素を書き換えたい場合、Array#mapを使うのが一般的だと思う。</p>
<pre class="syntax-highlight">
<span class="synIdentifier">var</span> <span class="synType">array</span> = <span class="synStatement">new</span> <span class="synType">Array</span>(500).join(<span class="synConstant">','</span>).split(<span class="synConstant">','</span>);
<span class="synType">array</span> = <span class="synType">array</span>.map(<span class="synIdentifier">function</span>(a,i,ar)<span class="synIdentifier">{</span>
	<span class="synStatement">return</span> i;
<span class="synIdentifier">}</span>);
</pre>

			<p>map自体は破壊的ではないので、代入し直さないといけないのが煩わしい。</p>
			<p>それならこう書くのもありではないか。</p>
<pre class="syntax-highlight">
<span class="synType">array</span>.forEach(<span class="synIdentifier">function</span>(a,i,ar)<span class="synIdentifier">{</span>
	ar<span class="synIdentifier">[</span>i<span class="synIdentifier">]</span> = i;
<span class="synIdentifier">}</span>);
</pre>

			<p>うん、こっちのほうが速そう。(滅多に使われない)第3引数の配列自身を使えばなかなか汎用的。</p>
			<p>というわけで、軽くベンチ。</p>
			<p><a href="http://ss-o.net/test/array1.html" target="_blank">Array!</a></p>
			<p>んー、微妙にmapよりは速いけど、体感的な差が出ることはなさそうな誤差レベルな感じ。</p>
			<p>というわけで、好みの問題かな。</p>
		</div>
]]></content:encoded>

	<dc:creator>os0x</dc:creator>
	<dc:date>2009-06-01T20:48:05+09:00</dc:date>
	<dc:subject>JavaScript</dc:subject>
</item>
<item rdf:about="http://os0x.g.hatena.ne.jp/os0x/20090526/1243311687">
	<title>Re:文字列中に含まれる文字を除外した英数字を取得</title>
	<link>http://os0x.g.hatena.ne.jp/os0x/20090526/1243311687</link>
	<description> 文字列中に含まれる文字を除外した英数字を取得 - 文殊堂 ハッシュバージョン (function(_s){ var _a = _s.split(&#39;&#39;), hs = {}, res = [], i, s, l; for(i=0,l =_a.length;i&lt;l;i++) hs[_a[i]]=true; for(i=48; i&lt;58; i++){ /*0-9*/</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p><a href="http://d.hatena.ne.jp/monjudoh/20090525/1243274531" target="_blank">文字列中に含まれる文字を除外した英数字を取得 - 文殊堂</a></p>
			<p>ハッシュバージョン</p>
<pre class="syntax-highlight">
(<span class="synIdentifier">function</span>(_s)<span class="synIdentifier">{</span>
  <span class="synIdentifier">var</span> _a = _s.split(<span class="synConstant">''</span>), hs = <span class="synIdentifier">{}</span>, res = <span class="synIdentifier">[]</span>, i, s, l;
  <span class="synStatement">for</span>(i=0,l =_a.length;i&lt;l;i++) hs<span class="synIdentifier">[</span>_a<span class="synIdentifier">[</span>i<span class="synIdentifier">]]</span>=<span class="synConstant">true</span>;
  <span class="synStatement">for</span>(i=48; i&lt;58; i++)<span class="synIdentifier">{</span> <span class="synComment">/*0-9*/</span>
    s = <span class="synType">String</span>.fromCharCode(i);
    <span class="synStatement">if</span> (!hs<span class="synIdentifier">[</span>s<span class="synIdentifier">]</span>) res.push(s);
  <span class="synIdentifier">}</span>
  <span class="synStatement">for</span>(i=65; i&lt;91; i++)<span class="synIdentifier">{</span> <span class="synComment">/*A-z*/</span>
    s = <span class="synType">String</span>.fromCharCode(i);
    <span class="synStatement">if</span> (!hs<span class="synIdentifier">[</span>s<span class="synIdentifier">]</span>) res.push(s);
    s = <span class="synType">String</span>.fromCharCode(i+32);
    <span class="synStatement">if</span> (!hs<span class="synIdentifier">[</span>s<span class="synIdentifier">]</span>) res.push(s);
  <span class="synIdentifier">}</span>
  <span class="synStatement">return</span> res;
<span class="synIdentifier">}</span>)(<span class="synConstant">'234DEFxyz'</span>);
</pre>

			<p>正規表現でもいけそう</p>
		</div>
]]></content:encoded>

	<dc:creator>os0x</dc:creator>
	<dc:date>2009-05-26T13:21:27+09:00</dc:date>
</item>
</rdf:RDF>
