<?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>5509</title>
	<atom:link href="http://5509.me/feed" rel="self" type="application/rss+xml" />
	<link>http://5509.me</link>
	<description>JavaScript makes UserInterface more powerful</description>
	<lastBuildDate>Wed, 25 Jan 2012 05:54:24 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>タイプライターっぽいエフェクトを実行できる jq.typewrite</title>
		<link>http://5509.me/log/jq-typewrite</link>
		<comments>http://5509.me/log/jq-typewrite#comments</comments>
		<pubDate>Sun, 22 Jan 2012 15:17:49 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[タイプライター]]></category>

		<guid isPermaLink="false">http://5509.me/?p=5423</guid>
		<description><![CDATA[					今さらなんでもないメソッドですけど、せっかく作ったので記事書いておきます。対象要素内のテキストを一文字ずつ表示するだけです。
					
					jq.typewrite のサンプル
					
					ホ [...]]]></description>
			<content:encoded><![CDATA[					<p>今さらなんでもないメソッドですけど、せっかく作ったので記事書いておきます。対象要素内のテキストを一文字ずつ表示するだけです。</p>
					<ul>
					<li><a href="http://5509.me/sample/jq.typewrite/">jq.typewrite のサンプル</a></li>
					</ul>
					<h2>ホスト / ダウンロード</h2>
					<ul>
					<li><a href="https://github.com/5509/jq.typewrite">5509/jq.typewrite &#8211; GitHub</a></li>
					<li><a href="https://github.com/5509/jq.typewrite/zipball/master">ダウンロード</a></li>
					</ul>
					<h2>使い方</h2>
					<h3>そのままつかう</h3>
					<p>最初に $.typewrite(jQueryオブジェクト) で初期化しておきます。あとは任意のタイミングで .play() メソッドでエフェクトを実行できます。<br />
					.play(4) のように実行時に duration を決めることもできます。</p>
					<p>.play() メソッドは jQuery Deferred オブジェクトを返すので、完了時に何かしたいときは .done() でつなげばOKです。</p>
					<h4>JavaScript</h4>
					<pre>var typewrite1 = $.typewrite($('#typewrite1'));
$('#do_typewrite1').click(function() {
  typewrite1.play();
});</pre>
					<h4>HTML</h4>
					<pre>&lt;p id=&quot;typewrite1&quot;&gt;This is typewrite&lt;/p&gt;
&lt;p&gt;
  &lt;input type=&quot;button&quot; id=&quot;do_typewrite1&quot; value=&quot;Do typewrite 1&quot;&gt;
&lt;/p&gt;</pre>
					<h3>オプションとDeferredも使う</h3>
					<h4>JavaScript</h4>
					<pre>var typewrite2 = $.typewrite($('#typewrite2'), {
  duration: 2,
  hide: false,
  end: '|'
});
$('#do_typewrite2').click(function() {
  typewrite2.play().done(function() {
    alert('completed');
  });
});</pre>
					<h4>HTML</h4>
					<pre>&lt;p id=&quot;typewrite2&quot;&gt;This is typewrite&lt;br&gt;
This is typewrite&lt;/p&gt;
&lt;p&gt;
  &lt;input type=&quot;button&quot; id=&quot;do_typewrite2&quot; value=&quot;Do typewrite 2&quot;&gt;
&lt;/p&gt;</pre>
					<h3>jQuery プラグインとして使う</h3>
					<p>jQuery プラグインとして使う場合は、play() メソッドが typewritePlay() メソッドに変わります。</p>
					<pre>var typewrite4 = $('#typewrite4').typewrite({
    end: '|'
});
$('#do_typewrite4').click(function() {
    typewrite4.typewritePlay(2);
});</pre>
					<h2>オプション</h2>
					<table border="1" class="lftable">
					<tr>
					<th>オプション</th>
					<th>説明</th>
					</tr>
					<tr>
					<td>duration</td>
					<td>エフェクトが始まってから終わるまでの時間。1(s)のように秒で指定 (def 1</td>
					</tr>
					<tr>
					<td>hide</td>
					<td>初期化時にテキストを隠すかどうか (def true</td>
					</tr>
					<tr>
					<td>end</td>
					<td>入力カーソルを指定できます (def _(underscore)</td>
					</tr>
					<tr>
					<td>wait</td>
					<td>ハッシュで対象の文字と待ち時間を渡すとその文字のときに余分に待つ（次の項へ</td>
					</tr>
					</table>
					<h3>wait</h3>
					<p>デフォルトは日本語の4文字だけ指定してるので変えてください</p>
					<table border="1" class="lftable">
					<tr>
					<th>文字列</th>
					<th>待ち時間</th>
					</tr>
					<tr>
					<td>！</td>
					<td>0.1</td>
					</tr>
					<tr>
					<td>？</td>
					<td>0.1</td>
					</tr>
					<tr>
					<td>、</td>
					<td>0.1</td>
					</tr>
					<tr>
					<td>。</td>
					<td>0.1</td>
					</tr>
					</table>
					<p>指定するときはこんな感じで</p>
					<pre>$.typewrite(hoge, {
  wait: {
    ',': 0.3,
    '.': 0.3
  }
});</pre>
					<h2>使うときの注意点</h2>
					<p>対象の要素は、<code>&lt;br&gt;</code>以外のHTML要素を含むことができないので、その辺よろしくおねがいします。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=5423&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/jq-typewrite/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>iPhone AppのPathみたいなナビゲーションを実装できる Swpnav.js</title>
		<link>http://5509.me/log/swpnavjs</link>
		<comments>http://5509.me/log/swpnavjs#comments</comments>
		<pubDate>Mon, 19 Dec 2011 07:38:46 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[flipsnap]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Swpnav]]></category>
		<category><![CDATA[スワイプ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=5353</guid>
		<description><![CDATA[					
					PathみたいなナビゲーションをWebページに実装するライブラリです。同じようなのは他にもあると思いますけど、これの特徴は対象に当たっている他のライブラリと干渉しにくいということでしょうか。iScr [...]]]></description>
			<content:encoded><![CDATA[					<p style="text-align: center"><a style="margin-right: 30px;" href="http://5509.me/wp-content/uploads/2011/12/swpnavjs_1.png"><img src="http://5509.me/wp-content/uploads/2011/12/swpnavjs_1.png" alt="" title="swpnavjs_1" width="200" height="300" class="size-full wp-image-5354" /></a><a href="http://5509.me/wp-content/uploads/2011/12/swpnavjs_2.png"><img src="http://5509.me/wp-content/uploads/2011/12/swpnavjs_2.png" alt="" title="swpnavjs_2" width="200" height="300" class="size-full wp-image-5355" /></a></p>
					<p><a href="https://path.com/">Path</a>みたいなナビゲーションをWebページに実装するライブラリです。同じようなのは他にもあると思いますけど、これの特徴は対象に当たっている他のライブラリと干渉しにくいということでしょうか。iScrollみたいなイベントキャンセルが強力なやつはだめだと思います。</p>
					<p>サンプルがまさにそれなんですけど、同僚の@<a href="http://twitter.com/hokaccha">hokaccha</a>が作った <a href="https://github.com/pxgrid/js-flipsnap">flipsnap.js</a>とは共存できます。レイヤー毎にスワイプ判定をしてるので、上位レイヤーで一度キャンセルすると Swpnav が実行されてる下位レイヤーにはイベントが飛ばなくなるような感じで、この Swpnav とか flipsnap のような作り方をしているライブラリとは共存できると思います。</p>
					<ul>
					<li><a href="http://5509.me/sample/Swpnav/">サンプル（Webkitのみ</a></li>
					</ul>
					<p><span id="more-5353"></span></p>
					<h2>ホスト</h2>
					<p>githubにあります</p>
					<ul>
					<li><a href="https://github.com/5509/Swpnav">5509/Swpnav &#8211; GitHub</a></li>
					</ul>
					<h2>使い方</h2>
					<p><a href="https://github.com/5509/Swpnav/zipball/master">ソースコードをダウンロード</a>して、任意の場所に swpnav.js を置き、読み込みます。</p>
					<pre>&lt;script src="swpnav.js"&gt;&lt;/script&gt;</pre>
<p>jQueryプラグインではないのでjQueryは不要です。読み込んだら任意の場所かソースコードで実行してください。</p>
<pre>Swpnav('#content', '#nav');</pre>
					<p>実行する際の一つ目の引数に、対象コンテンツID、二つ目の引数に隠すナビゲーションコンテンツのIDを指定します。基本はこれで、次にオプションとAPIを解説しておきます。</p>
					<h2>オプション</h2>
					<p>オプションを指定する際は三つ目の引数で渡します。</p>
					<pre>Swpnav('#content', '#nav', {
    slide: 260,
    duration: '0.2s',
    timingFunction: 'cubic-bezier(0,0,0.25,1)',
    trigger: 30
});</pre>
					<table border="1" class="lftable">
					<tr>
					<th>オプション</th>
					<th>解説</th>
					</tr>
					<tr>
					<td>slide</td>
					<td>どこまでスライドするか、デフォルトは260pxまで</td>
					</tr>
					<tr>
					<td>duration</td>
					<td>スライドにかける時間、デフォルトは0.2s<br />（ここは transition-durationで指定できる形式で）</td>
					</tr>
					<tr>
					<td>timingFunction</td>
					<td>スライドのeasing、デフォルトはcubic-bezier(0,0,0.25,1)<br />（指定するときはtransition-timing-functionで指定できる形式で）</td>
					</tr>
					<tr>
					<td>trigger</td>
					<td>スワイプでコンテンツパネルをずらしていったとき、open()/close()を実行するトリガーになる位置<br />（デフォルトは30pxまでずらすと開く・閉じる）</td>
					</tr>
					</table>
					<h2>API</h2>
					<p>APIを使う場合は、インスタンスを変数に</p>
					<pre>var open = document.getElementById('open'),
    swp = Swpnav('#content', '#nav');

open.addEventListener('click', function(ev) {
    ev.preventDefault();

    if ( swp.getState() ) {
        swp.close();
    } else {
        swp.open();
    }
}, false);</pre>
					<table border="1" class="lftable">
					<tr>
					<th>API</th>
					<th>解説</th>
					</tr>
					<tr>
					<td>open</td>
					<td>パネルを開いてナビゲーションを表示</td>
					</tr>
					<tr>
					<td>close</td>
					<td>パネルを閉じてナビゲーションを非表示</td>
					</tr>
					<tr>
					<td>destroy</td>
					<td>Swpnavを破棄して使えなくする</td>
					</tr>
					<tr>
					<td>getState</td>
					<td>パネルの状態、開いているときはtrue, 閉じているときはfalse</td>
					</tr>
					<tr>
					<td>setSlide</td>
					<td>どこまでスライドするかを動的に変更したいときに（250のような数値を渡す）</td>
					</tr>
					<tr>
					<td>enabled</td>
					<td>Swpnavを有効にする</td>
					</tr>
					<tr>
					<td>disabled</td>
					<td>Swpnavを無効にする（open, closeやスワイプによる開閉が無効になる）</td>
					</tr>
					</table>
					<h2>jQueryプラグインとして使う</h2>
					<p>jQueryプラグインとして使う場合は</p>
					<pre>$('#hoge').swpnav('#nav')</pre>
<ul>
<li><a href="http://5509.me/sample/Swpnav/index_jquery.html">jQueryプラグインとして実行したサンプル</a></li>
</ul>
<p>のようにします。指定できる要素はひとつなので、2つ以上ヒットするようなセレクタで渡さないでください。jQueryオブジェクトが返りますが、jQueryオブジェクトはSwpnavのAPI（メソッド）を呼ぶことができるようになっています。</p>
<p>APIはjQueryのAPIと干渉しないように &#8216;swpnav&#8217; の prefix がついています。 prefix 付きのAPI一覧は下記の通りです。</p>
<table border="1" class="lftable">
<tr>
<th>API</th>
<th>解説</th>
</tr>
<tr>
<td>swpnavOpen</td>
<td>パネルを開いてナビゲーションを表示</td>
</tr>
<tr>
<td>swpnavClose</td>
<td>パネルを閉じてナビゲーションを非表示</td>
</tr>
<tr>
<td>swpnavDestroy</td>
<td>Swpnavを破棄して使えなくする</td>
</tr>
<tr>
<td>swpnavGetState</td>
<td>パネルの状態、開いているときはtrue, 閉じているときはfalse</td>
</tr>
<tr>
<td>swpnavSetSlide</td>
<td>どこまでスライドするかを動的に変更したいときに（250のような数値を渡す）</td>
</tr>
<tr>
<td>swpnavEnabled</td>
<td>Swpnavを有効にする</td>
</tr>
<tr>
<td>swpnavDisabled</td>
<td>Swpnavを無効にする（open, closeやスワイプによる開閉が無効になる）</td>
</tr>
</table>
<pre>var swp = $('#hoge').swpnav('#nav');

// some codes...

swp.swpnavOpen();
swp.swpnavSetSlide(100);</pre>
					<h2>対象端末</h2>
					<ul>
					<li>iPhone3G~4S の iOS3.2~5</li>
					</ul>
					<p>Androidでもなんとなく動くと思いますが、検証全然できてないので、動かない場合は<a href="https://github.com/5509/Swpnav">githubのリポジトリ</a>からフォークしてプルリクエストもらえるとうれしいです。報告だけでも動く動かないをここに掲載できるのでうれしいです。</p>
					<h2>関連ライブラリ</h2>
					<ul>
					<li><a href="https://github.com/pxgrid/js-flipsnap">pxgrid/js-flipsnap &#8211; GitHub</a></li>
					</ul>
					<img src="http://5509.me/?ak_action=api_record_view&id=5353&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/swpnavjs/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Node.jsでLESSファイルを動的にコンパイルする</title>
		<link>http://5509.me/log/less-with-nodejs</link>
		<comments>http://5509.me/log/less-with-nodejs#comments</comments>
		<pubDate>Fri, 09 Dec 2011 01:30:32 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Node.js]]></category>

		<guid isPermaLink="false">http://5509.me/?p=5238</guid>
		<description><![CDATA[					「Less &#38; Sass Advent calendar 2011」9日目の@5509です。
					流れをぶった切ってしまってあれなのですが、Node.jsとあわせてLESSファイルを動的にコンパイ [...]]]></description>
			<content:encoded><![CDATA[					<p>「<a href="http://atnd.org/events/21919">Less &amp; Sass Advent calendar 2011</a>」9日目の<a href="http://twitter.com/5509">@5509</a>です。<br />
					流れをぶった切ってしまってあれなのですが、Node.jsとあわせてLESSファイルを動的にコンパイルするようなやつ書きます。</p>
					<p>みなさんご存知の通りLESSはJSで書かれているので、Node.jsを使ったアプリでは動的にLESSファイルをコンパイルできます。</p>
					<p>ところが<a href="http://lesscss.org/">LESSのサイト</a>に書いてある方法は</p>
					<pre>var parser = new(less.Parser);

parser.parse('.class { width: 1 + 1 }', function (err, tree) {
    if (err) { return console.error(err) }
    console.log(tree.toCSS());
});</pre>
					<p>・・・やさしくない！</p>
					<p>まあでも早い話、<code>parse(hoge, func)</code>のhogeにLESSファイルの文字列渡せばtreeに結果が入ってくるってことですね。</p>
					<p>これはLESSの記事というかNode.jsの記事じゃないのとかそういう細かいことはいいじゃないですか・・・</p>
					<p><span id="more-5238"></span></p>
					<h2>LESSファイルをコンパイルできるようになるまで</h2>
					<h3>LESSファイルの場所</h3>
					<p>Expressコマンドで作ったテンプレートを使うことにします。Expressコマンドを実行すると（テンプレエンジンはjqtplにしてます）</p>
					<pre>$ express -t jqtpl less
// less
├ app.js
├ package.json
├ public
│ ├ images
│ ├ javascripts
│ └ stylesheets
├ routes
│ └ index.js
└ views</pre>
					<p>みたいにもろもろ出来ます。肝心のLESSファイルは views ディレクトリに less ディレクトリを作ってそこに入れることにしましょう。</p>
					<pre>// less
├ app.js
├ package.json
├ public
│ ├ images
│ ├ javascripts
│ └ stylesheets
├ routes
│ └ index.js
└ views
  ├ tmpl // ここにjqtplテンプレファイル入れる
  └ less // ここにLESSファイル入れる</pre>
					<p>less ディレクトリに次の内容の styles.less を作って入れておきます。</p>
					<pre>.class {
    width: 1 + 1px;
}

a {
  text-decoration: underline;

  &amp;:hover {
    text-decoration: none;
  }
}</pre>
					<p>ちなみに、今</p>
					<p>http://localhost:3000(ここは環境によります)/less/styles.less</p>
					<p>にアクセスしてみると、当然のように表示できません。</p>
					<h3>LESSのインストール</h3>
					<p>とりあえず最初から順を追っていきます。まずはnpmを使ってLESSをインストールしておきます。</p>
					<pre>$ npm install less@latest</pre>
<h3>LESSをrequireする</h3>
<p>この記事ではJSコードは app.js に書いています。インストールしたらLESSが使えるようになるので、LESSをrequireします。ついでに、今回はpathとfsも使っているので一緒にrequireしておきます。</p>
<p>最後に今回使った app.js をそのまま貼ってるので詳しくはそっち見てください。</p>
<pre>var less = require('less'),
    path = require('path'),
    fs = require('fs');</pre>
					<h3>LESSファイルにアクセスしたときのなんやらを設定</h3>
					<p>まずはファイルにアクセスする前の準備です。</p>
					<pre>app.get(/^\/less\/.+/, function(req, res) {
// less/hoge にアクセスした場合
  var fileRoot = __dirname + '/views/less/', // less ファイルのディレクトリ
      extname = path.extname(req.url), // .less の部分が返る
      basename = path.basename(req.url), // styles.less の部分が返る
      filePath = undefined;

  if ( extname !== '.less' ) {
  // lessファイルじゃなかったら・・・
    console.log('that is not less file');
  }

  filePath = fileRoot + basename; // パスを取得しておく
  // ここに続き書く
});</pre>
					<p>ファイルパスまで準備できたので、次はファイルを読み込みます。ファイルを読み込めたら、一旦LESSをパースしてCSSへ変換、その後変換したCSSをファイルとして返すようにします。</p>
					<pre>app.get(......
  ........

  fs.readFile(filePath, 'utf8', function(err, str) {
  // str で読み込んだ LESSファイルのバッファを受け取る
    var parser = undefined;

    if ( err ) {
    // 読み込み先でエラーがあったら・・・
      console.log('file doesn\'t exist: ' + basename);
    }

    parser = new(less.Parser);
    // LESSのパーサー

    parser.parse(str, function(err, tree) {
    // LESSファイル の文字列部分を渡す
    // tree にパースした LESSのオブジェクトを受け取る
      var css = undefined;

      if ( err ) {
        // パースでエラーがあれば・・・
        console.log('parse error: ' + err.message);
      }

      // toCSS()メソッドを実行するとCSSが返る
      css = tree.toCSS();

      res.writeHead(200, {
        'Content-Type': 'text/css'
      });
      res.end(css, 'utf-8');
      // CSSをファイルとして返す
    });
  });
});</pre>
					<h3>実行して、アクセスしてみる</h3>
					<p>http://localhost:3000/less/styles.less にアクセスしてみましょう。</p>
					<pre>.class {
  width: 2px;
}
a {
  text-decoration: underline;
}
a:hover {
  text-decoration: none;
}</pre>
					<p>完璧っぽい！</p>
					<h3>CSSを圧縮しておきたい場合</h3>
					<p>ちなみに、toCSS()メソッドのオプションで compress 指定をすると圧縮したCSSファイルを返せます。</p>
					<pre>css = tree.toCSS({ compress: true });</pre>
<p>圧縮されたCSSが返ります。ナイス。</p>
<pre>.class{width:2px;}
a{text-decoration:underline;}a:hover{text-decoration:none;}</pre>
					<h2>おわり</h2>
					<p>自分でやってるときはかなり時間かかってしまったんですけど、、、記事にするとかなり短くて凹みました・・・あ、@import とかするとおうふな感じになるので、それはまたどこかで書きます。。</p>
					<h2>付録：今回使った app.js と HTML(jqtpl)/LESSファイル</h2>
					<p>app.js は Expressコマンドで出来るやつをベースに使ってます。</p>
					<h3>app.js</h3>
					<pre>/**
 * Module dependencies.
 */

var express = require('express')
  , jqtpl = require('jqtpl')
  , less = require('less')
  , path = require('path')
  , fs = require('fs')
  , routes = require('./routes')

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
  app.set('views', __dirname + '/views/tmpl');
  app.set('view engine', 'html');
  app.set('view options', {
    layout: false
  });
  app.register('.html', jqtpl.express);
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

// Routes

app.get('/', routes.index);

app.get(/^\/less\/.+/, function(req, res) {
  var fileRoot = __dirname + '/views/less/',
      extname = path.extname(req.url),
      basename = path.basename(req.url),
      filePath = undefined;

  if ( extname !== '.less' ) {
    console.log('that is not less file');
  }

  filePath = fileRoot + basename;

  fs.readFile(filePath, 'utf8', function(err, str) {
    var parser = undefined;

    if ( err ) {
      console.log('file doesn\'t exist: ' + basename);
    }

    parser = new(less.Parser);

    parser.parse(str, function(err, tree) {
      var css = undefined;

      if ( err ) {
        console.log('parse error: ' + err.message);
      }

      css = tree.toCSS({ compress: true });

      res.writeHead(200, {
        'Content-Type': 'text/css'
      });
      res.end(css, 'utf-8');
    });
  });
});

app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);</pre>
					<h3>index.html</h3>
					<p>index.html は views/tmpl/index.html におきます。</p>
					<pre>&lt;!DOCTYPE html&gt;
&lt;html lang="ja"&gt;
&lt;head&gt;
	&lt;meta charset="UTF-8"&gt;
	&lt;title&gt;${title}&lt;/title&gt;
	&lt;link rel="stylesheet" href="/less/styles.less"&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;${title}&lt;/h1&gt;
&lt;p&gt;&lt;a href="http://google.co.jp/"&gt;Google&lt;/a&gt;&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
					<h3>styles.less</h3>
					<p>styles.less は views/less/styles.less におきます。</p>
					<pre>.class {
    width: 1 + 1px;
}

a {
  text-decoration: underline;

  &amp;:hover {
    text-decoration: none;
  }
}</pre>
					<img src="http://5509.me/?ak_action=api_record_view&id=5238&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/less-with-nodejs/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使いやすいセレクトボックスを実装できる jqselectable.js</title>
		<link>http://5509.me/log/jqselectable</link>
		<comments>http://5509.me/log/jqselectable#comments</comments>
		<pubDate>Wed, 07 Dec 2011 12:16:39 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQselectable]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[フォーム]]></category>
		<category><![CDATA[ユーザビリティ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=5204</guid>
		<description><![CDATA[					
					3年くらい前に最初のバージョンを作ったjQselectableをほぼ全て書き直しました。書きなおす流れで以前のものと互換性がなくなってしまったので、新しいものとして公開します。
					でもgit [...]]]></description>
			<content:encoded><![CDATA[					<p><a class="act" href="http://5509.me/sample/jQselectable/"><img class="alignnone size-full wp-image-245" title="jqueryselectable" src="http://5509.me/wp-content/uploads/2008/09/jqueryselectable.gif" alt="" width="450" height="187" /></a></p>
					<p>3年くらい前に最初のバージョンを作ったjQselectableをほぼ全て書き直しました。書きなおす流れで以前のものと互換性がなくなってしまったので、新しいものとして公開します。</p>
					<p>でもgithubのリポジトリは同じです。古いものは、古いもので残っているので、もし必要な方がいれば以前の <a href="http://5509.me/log/jqueryselectable">jQselectable(v1.3)</a> を使ってください。</p>
					<ul>
					<li><a href="http://5509.me/sample/jQselectable/">jqselectable のサンプル</a></li>
					<li><a href="http://github.com/5509/jQselectable">5509/jQselectable &#8211; GitHub</a></li>
					</ul>
					<p><span id="more-5204"></span></p>
					<h2>使い方</h2>
					<h3>実行する前に</h3>
					<p>ファイルをgithubから<a href="https://github.com/5509/jQselectable/zipball/master">ダウンロード</a>して、CSS/JSファイルを読み込んでおきます。</p>
					<p>jQueryプラグインなので、jQueryも読みこんでおきます。特に依存した書き方はしていないので、おそらくjQuery1.3くらいの古いやつでも使えると思いますが、推奨は一応最新バージョンです。あと動作保証も1.7です。それ以下のものでバグが出ても基本放置です。</p>
					<pre>&lt;link rel="stylesheet" href="jqselectable/style/selectable/style.css" /&gt;
&lt;script src="scripts/jquery.js"&gt;&lt;/script&gt;
&lt;script src="jqselectable/jqselectable.js"&gt;&lt;/script&gt;</pre>
					<p>CSSは jqselectable/style の中に</p>
					<ul>
					<li>selectable</li>
					<li>natural</li>
					<li>xp</li>
					</ul>
					<p>と3つ入っているので好きなものを選んでください。自分で書いても大丈夫です。そのときはgitでpullリクエストください。</p>
					<h3>実行する</h3>
					<p>ready関数は必要に応じて使ってください。</p>
					<pre>jQuery(function($){
    $(selector).jQselectable();
});</pre>
					<p>実行時に渡している<a href="#options">オプションについては次項で解説</a>しています。</p>
					<h2 id="options">オプション</h2>
					<p>オプションを使う場合は、実行時の引数にハッシュで渡します。</p>
					<pre>$(selector).jQselectable({
    show: "fadeIn",
    showDuration: "fast",
    opacity: .9
});</pre>
					<table border="1" class="lftable">
					<tr>
					<th>オプション</th>
					<th>解説</th>
					</tr>
					<tr>
					<td>style</td>
					<td>simple を指定すると普通のプルダウンになります</td>
					</tr>
					<tr>
					<td>show</td>
					<td>表示メソッド: show, fadeIn, slideDown</td>
					</tr>
					<tr>
					<td>hide</td>
					<td>非表示メソッド: hide, fadeOut, slideUp</td>
					</tr>
					<tr>
					<td>showDuration</td>
					<td>表示メソッドがshow以外のときにかける時間</td>
					</tr>
					<tr>
					<td>hideDuration</td>
					<td>非表示メソッドがhide以外のときにかける時間</td>
					</tr>
					<tr>
					<td>height</td>
					<td>styleがsimpleのときに高さを指定する（px不要）</td>
					</tr>
					<tr>
					<td>opacity</td>
					<td>プルダウンの透過度</td>
					</tr>
					</table>
					<h2>API</h2>
					<p>APIを使う場合は、jQselectable実行時の引数を任意の変数から参照できるようにしておきます。また、この場合、適用する要素はひとつにしてください。2つ以上ある場合はちょっと面倒くさいです。以下ひとつのものベースに解説しています。</p>
					<pre>var jqs = $(selector).jQselectable();</pre>
<p>変数から参照できる状態であれば、いつでもAPIを利用できます。とりあえずAPI一覧は以下の通りです。</p>
<table border="1" class="lftable">
<tr>
<th>API</th>
<th>解説</th>
</tr>
<tr>
<td>enable</td>
<td>実行した要素を利用可能にする</td>
</tr>
<tr>
<td>disable</td>
<td>実行した要素を利用不可にする</td>
</tr>
<tr>
<td>refresh</td>
<td>実行した要素のオプションが増減した場合など、refreshメソッドを実行すると中身をリロードできます。動的に何かする際に使ってください</td>
</tr>
<tr>
<td>destroy</td>
<td>jQselectableを破棄します</td>
</tr>
</table>
<h3>enable, disable, destroy</h3>
<p>サンプルコードままですが、ボタンをクリックすると使えるようにしたり使えなくします。</p>
<pre>var jqs = $("#triggerbind").jQselectable({
    style: "simple",
    height: 150,
    opacity: .9
});

$('#disabled').click(function() { jqs.disable(); });
$('#enabled').click(function() { jqs.enable(); });
$('#destroy').click(function() { jqs.destroy(); });</pre>
					<h3>refresh</h3>
					<p>これもサンプルコードままですが、addボタンをクリックすると元のselect要素にoptionを追加して、その変更をjQselectableへ反映します。</p>
					<pre>// 実行部分は省略

$('#add').click(function() {
    $('#refresh').append('&lt;option value="value_' + num + '"&gt;value_' + (num++) + '&lt;/option&gt;');
    jqs2.refresh();
});</pre>
					<h2>jQselectable.change イベント</h2>
					<p>以前はコールバック関数を呼べるようにしていたのですが、廃止して、イベントから呼べるように変更しました。</p>
					<pre>var jqs = $("#triggerbind").jQselectable({
    style: "simple",
    height: 150,
    opacity: .9
});

// trigger bind
jqs.$elem.bind('jQselectable.change', function(ev, data) {
    location.href = data.value;
});</pre>
					<p>オプションのvalueを元にページ遷移などしたい場合は、この方法で行います。jQselectableオブジェクトの $elem に jQselectable.change イベントを bind すると任意の処理を行えます。サンプルに書いていますが、2つ目の引数(data)に value というプロパティがあり、ここに選択した項目の value が入っています。</p>
					<h2>何かあれば</h2>
					<p><a href="https://github.com/5509/jQselectable">github からフォークしてください</a>。</p>
					<p>それにしても3年ってそんなに経ってしまったんですね・・・</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=5204&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/jqselectable/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>フロントエンドの開発効率が3倍に…！？デバッギングプロキシCharlesの使い方</title>
		<link>http://5509.me/log/charles-proxy</link>
		<comments>http://5509.me/log/charles-proxy#comments</comments>
		<pubDate>Mon, 21 Nov 2011 03:27:30 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[プロキシ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=5092</guid>
		<description><![CDATA[					
					タイトルは釣りかとおもいきや僕は普通にあるのとないのとで3倍くらい差があるので、界王拳アプリのひとつです。特にWebアプリとか大きめの規模のサイト開発でとても役に立ちます。
					
					C [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2011/11/charles.png" alt="" title="charles" width="450" class="alignnone size-full wp-image-5173" /></p>
					<p>タイトルは釣りかとおもいきや僕は普通にあるのとないのとで3倍くらい差があるので、界王拳アプリのひとつです。特にWebアプリとか大きめの規模のサイト開発でとても役に立ちます。</p>
					<ul>
					<li><a href="http://www.charlesproxy.com/">Charles</a></li>
					</ul>
					<p><span id="more-5092"></span></p>
					<h2>こんなことができます（目次）</h2>
					<ul>
					<li><a href="#overivew">いちいちサーバーへファイル転送なんかしてられない</a></li>
					<li><a href="#install">Charlesのインストールとライセンス</a></li>
					<li><a href="#map-local">Map Local（指定URLのリクエストをローカルへ向ける</a></li>
					<li><a href="#map-remote">Map Remote（指定URLのリクエストを別のURLへ向ける</li>
					<li><a href="#chaching-off">常にキャッシュをオフに</a>
					<ul>
					<li><a href="#locations">Locations 設定の流れ（ほとんど全部共通）</a></li>
					</ul>
					</li>
					<li><a href="#throttling">Throttling で回線速度をシミュレート</a></li>
					<li><a href="#request-overview">リクエストが丸裸</a>
					<ul>
					<li><a href="#xmlhttprequest">例えばXMLHTTPRequestの場合</li>
					</ul>
					</li>
					<li><a href="#recording">ログの設定はRecording Settingsから</a></li>
					</ul>
					<p>紹介してる以外にも Reverse Proxy を設定できたり、 Break Points で指定リクエストのパラメータを変えて再POSTできる等、なんせ便利なので、一度だまされたと思って使ってみてください <img src='http://5509.me/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
					<h2 id="overivew">いちいちサーバーへファイル転送なんかしてられない</h2>
					<p>規模が大きかったりすると、サーバーへファイルを転送しつつ確認とかいうことが簡単にできなくなりますよね。そういうときはCharlesのようなプロキシアプリを使って、指定したURLに本来行くはずのリクエストを、ローカルや違うサーバーへ向けてそっちのファイルを参照させます。</p>
					<p>例えば</p>
					<pre>http://hoge.com/css/*</pre>
<p>にリクエストした場合</p>
<pre>file://localhost/Users/username/hoge/css/*</pre>
					<p>のファイルを見せることができます。つまり、ローカルで編集したファイルをサーバーへあげなくても、例えば本番環境にファイルを上げたみたいな挙動をするってことです。</p>
					<p>まだ？？？になっている人もいるかもなので、もっと簡潔に言うと、<strong>Charlesを起動しているときは、いちいちSFTP等でサーバーへファイルを転送しなくていい</strong>ってことです。大きいサイトとかだと、サーバーへファイルを転送するのもなかなか面倒くさかったりしますよね。</p>
					<p>あとは、もろもろの理由でローカルが立てられないときとか・・・あるあるじゃないですか・・・そういうときに超便利です。</p>
					<p>そんな感じで、最低限設定しておくとよさそうな箇所やここが便利だよっていうところをざっくり書いておきます。まーみんな買ったほうがいいですよ。Charlesじゃなくてもいいけど。</p>
					<h2 id="install">Charlesのインストールとライセンス</h2>
					<p><a href="http://www.charlesproxy.com/">Charles</a>のサイトからダウンロードしてインストールするだけで</p>
					<ul>
					<li>Win 32bit/64bit</li>
					<li>Mac OS X</li>
					<li>Linux/Unix</li>
					</ul>
					<p>とOSのカバー範囲も広くて色々な環境で使えます。</p>
					<p>ライセンスを購入していないときは、基本的に全ての機能を使えるけれど以下2つの制約があります。</p>
					<ul>
					<li><strong>起動するとき10秒待たないといけない</strong></li>
					<li><strong>30分経つとCharlesが自動終了する</strong>（アラートとかないです</li>
					</ul>
					<p>で、このままでも1日中の開発続けられるぜっていう場合は、特に買わなくてもいいかもですね。ちなみに<strong>1ライセンス $50 で、いまだと3700円くらい</strong>ですね。</p>
					<h2 id="map-local">Map Local（指定URLのリクエストをローカルへ向ける</h2>
					<p>Tools &gt; Map Local から、Enable Map Local にチェックを入れて Add をクリックすると Edit Mapping という画面が出てくるのでここで Mapping（このURLのリクエストはローカルのどこそこ見せますみたいなの） の設定をします。</p>
					<p>打つのは面倒くさいと思うので、実際にページ表示してURLをコピーしてそれを Host の箇所にペーストしてタブか何かで別の Inputエリアに移動すると自動的に Protocol, Host, Port が補完されます。こういう細かい気づかい必要です。さらっとやってくれるようなやつ。</p>
					<p>で、例えば</p>
					<pre>http://5509.me/js/*</pre>
<p>こういうような場合、つまり 5509.me の jsディレクトリ配下は全てローカルを見せる場合</p>
<p>Path は /js/* と * で全部指定します。</p>
<p>まーこの辺はダイジョウブですよね。<br />
で、Map To のところにどこ見せるかっていうディレクトリを、これは Choose ボタンからブラウズで選択します。こっちは * が必要ないので注意してくださいまし。</p>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles17.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles17.png" alt="" title="Map Local" width="450" class="alignnone size-full wp-image-5168" /></a></p>
<h2 id="map-remote">Map Remote（指定URLのリクエストを別のURLへ向ける</h2>
<p>Map Remote では、ローカルではなく指定したURLへ向けることができます。指定方法は Map Local と同じですね。</p>
<h2 id="chaching-off">常にキャッシュをオフに</h2>
<p>Tools > No Caching をチェックするだけ</p>
<p>Only for selected locations をチェックすると指定した Locations でだけキャッシュをオフにします。Locations 設定の流れは以下全て同じなので、先に書いておきます。</p>
<h3 id="locations">Locations 設定の流れ（ほとんど全部共通）</h3>
<h4>Add をクリック</h4>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles10.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles10.png" alt="" title="Locations設定の流れ 1" width="450" class="alignnone size-full wp-image-5155" /></a></p>
<h4>Edit Locationパネルが開く</h4>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles11.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles11.png" alt="" title="Locations設定の流れ 2" width="382" height="283" class="alignnone size-full wp-image-5156" /></a></p>
<h4>指定したいURLを Host へペースト</h4>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles12.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles12.png" alt="" title="Locations設定の流れ 3" width="381" height="282" class="alignnone size-full wp-image-5157" /></a></p>
<h4>Tabキーを押すと補完される</h4>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles13.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles13.png" alt="" title="Locations設定の流れ 4" width="380" height="280" class="alignnone size-full wp-image-5158" /></a></p>
<h4>サイト内全ての場合は Path に * を追加する</h4>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles14.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles14.png" alt="" title="Locations設定の流れ 5" width="379" height="280" class="alignnone size-full wp-image-5159" /></a><br />
パスを指定したい場合は、入力するか、指定パスまでを含んだURLを Host にペーストすればよいです。</p>
<h4>OK すると Locations に追加される</h4>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles15.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles15.png" alt="" title="Locations設定の流れ 5" width="229" height="132" class="alignnone size-full wp-image-5160" /></a></p>
<h2 id="throttling">Throttling で回線速度をシミュレート</h2>
<p>みんな早い回線使ってるなんてそんなわけないんだよ・・・</p>
<p>Throttling を使えば回線速度をシミュレートできます。あくまでシミュレートですけどね。遅い回線環境でのチェックも規模が大きい場合は重要になってきますし。</p>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles16.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles16.png" alt="" title="Throttling" width="450" class="alignnone size-full wp-image-5165" /></a></p>
<p>Throttling Settingsを開いて Enable Throttling をチェックして、Throttle Preset から登録されてる項目を選択するとそれくらいの速度の回線で見てるような感じになります。試しに 28.8kbps を選んで OK してみてください。</p>
<p>Only for selected hosts にチェックを入れると 下の Hosts に追加したとこでだけ有効になるとかそういうのは他のではあるので、覚えておくと便利ですね。</p>
<h2 id="request-overview">リクエストが丸裸</h2>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles1.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles1.png" alt="" title="リクエストが丸裸" width="450" class="alignnone size-full wp-image-5099" /></a></p>
<p>単純にCharlesを起動して、Shift+Cmd+P（Mac OS Proxyをオンに）を押した後にこのブログを開いただけです。何も設定をしていない状態では、全てのリクエストを拾ってログをSequenceタブに表示していきます。</p>
<p>キャプチャにあるようにログにはタブがついていて</p>
<ul>
<li>Overview</li>
<li>Request</li>
<li>Response</li>
<li>Summary</li>
<li>Chart</li>
<li>Notes</li>
</ul>
<p>リクエストが丸裸に・・・</p>
<h3 id="xmlhttprequest">例えばXMLHTTPRequestの場合</h3>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles2.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles2.png" alt="" title="Ajaxのリクエストも" width="450" class="alignnone size-full wp-image-5101" /></a></p>
<p>JSからのリクエストはアイコンが「J」になって</p>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles5.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles5.png" alt="" title="GETの場合はQuery Stringが一覧で" width="450" class="alignnone size-full wp-image-5105" /></a></p>
<p>当然のようにRequest内容が見れます。GETリクエストの場合はQuery Stringも見れます。</p>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles3.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles3.png" alt="" title="リクエスト結果" width="450" class="alignnone size-full wp-image-5102" /></a></p>
<p>リクエスト結果はResponseタブで確認できます</p>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles4.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles4.png" alt="" title="JSONならこんな具合に" width="450" class="alignnone size-full wp-image-5103" /></a></p>
<p>JSONなら超見やすい具合に整理されて表示できます</p>
<p>すでに便利なんですけど、何も設定しないとどうでもいいログまでバンバン記録されていくので、設定で要らないログは記録しないようにします。</p>
<h2 id="recording">ログの設定はRecording Settingsから</h2>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles6.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles6.png" alt="" title="Recording Settings" width="278" height="198" class="alignnone size-full wp-image-5108" /></a></p>
<p>そのままだとログの記録だけでMacBook Airのファンがフィンフィンうるさいレベルになるので、これはやっておいたほうがよいでしょう。まー画像とかのログみてもアレですし。いや必要なときはありますけどね。そのときは外せばいいだけですし。</p>
<p>Recording Settingsを開くと</p>
<ul>
<li>Options &#8211; ログを記録する上限を設定できる</li>
<li>Include &#8211; ログを記録するURLやファイル・ディレクトリを指定（これ設定すると設定したURLでしかログを記録しなくなります</li>
<li>Exclude &#8211; ログを記録しないURLやファイル・ディレクトリを指定</li>
</ul>
<p>とりあえず、静的なファイルは記録しても意味ない（僕は）のでそれらをExcludeするように設定します。</p>
<p>AddをクリックするとEdit Locationが表示されるので、そこに「*.gif」と入力すると、全てのgifファイルといった指定にできます。ここで全部指定できたらいいんですけど、それはできないようなので、同じように.js・.cssなどを指定していきます。</p>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles9.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles9.png" alt="" title="除外ファイルの追加" width="384" height="286" class="alignnone size-full wp-image-5113" /></a></p>
<p><a href="http://5509.me/wp-content/uploads/2011/11/charles8.png"><img src="http://5509.me/wp-content/uploads/2011/11/charles8.png" alt="" title="除外するファイルなど" width="469" height="207" class="alignnone size-full wp-image-5110" /></a></p>
<p>これで、ログに表示されるのはXMLHTTPRequestとかだけになるので、ちょっとはスッキリ。</p>
<h2>いかがでしたか</h2>
<p>ざっくりとしか説明してませんが、とりあえずインストールして Map Local とか リクエスト見てみる などしてみてください。開発速度が3倍くらいになるようなならないような・・・</p>
<p>僕はえどさんのエントリで知りました。</p>
<ul>
<li><a href="http://css-eblog.com/tools/charles.html">本番環境でテスト？！ Charlesを使った簡単サイト修正</a></li>
</ul>
<h2>他のプロキシアプリ</h2>
<p>僕は使ってないので比較できませんが、他にもCocProxyやFiddlerが有名です。</p>
<ul>
<li><a href="http://coderepos.org/share/wiki/CocProxy">CocProxy</a></li>
<li><a href="http://www.fiddler2.com/fiddler2/">Fiddler</a></li>
</ul>
<img src="http://5509.me/?ak_action=api_record_view&id=5092&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/charles-proxy/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OS X LionでApacheの設定をする</title>
		<link>http://5509.me/log/apache-with-lion</link>
		<comments>http://5509.me/log/apache-with-lion#comments</comments>
		<pubDate>Wed, 09 Nov 2011 06:04:47 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[OS X Lion]]></category>

		<guid isPermaLink="false">http://5509.me/?p=5029</guid>
		<description><![CDATA[					MAMPとかXAMPPは使わないでやります。
					標準でApacheが入っているので、前準備はなしでだいじょぶです。
					# ターミナル初めての人向け
					$ で始まってるやつはターミナルから [...]]]></description>
			<content:encoded><![CDATA[					<p>MAMPとかXAMPPは使わないでやります。<br />
					標準でApacheが入っているので、前準備はなしでだいじょぶです。</p>
					<p># ターミナル初めての人向け<br />
					<strong>$ で始まってるやつはターミナルから入力します。また sudo はroot権限で実行します。通常ファイルやディレクトリにはPermissionが設定されていて、ユーザーディレクトリより上位階層のファイル・ディレクトリはroot権限がないと変更できません。</strong></p>
					<h2>ゴール</h2>
					<p>ゴールはローカルのhogeディレクトリに<br />
					ブラウザから「http://ho.ge/」でアクセスできるようにすることにします。<br />
					<span id="more-5029"></span></p>
					<p><a href="http://5509.me/wp-content/uploads/2011/11/apache_2.png"><img src="http://5509.me/wp-content/uploads/2011/11/apache_2.png" alt="" title="表示したいディレクトリ" width="500" class="alignnone size-full wp-image-5035" /></a></p>
					<p>ちなみに index.html の中身は</p>
					<pre>&lt;!DOCTYPE html&gt;
&lt;html lang="ja"&gt;
&lt;head&gt;
&lt;title&gt;hoge&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;This is HOGE&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
					<p>になってます。これは表示確認ができればなんでもいいです。</p>
					<p>これから[ユーザー名]っていう箇所が出てくるんですけど、これは赤線で囲った部分の文字が入ります。</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/11/apache_5.png"><img src="http://5509.me/wp-content/uploads/2011/11/apache_5.png" alt="" title="[ユーザー名]" width="500" class="alignnone size-full wp-image-5061" /></a></p>
					<h3>サイドバーにない場合・・・</h3>
					<p><a href="http://5509.me/wp-content/uploads/2011/11/apache_6.png"><img src="http://5509.me/wp-content/uploads/2011/11/apache_6.png" alt="" title="Get Info" width="500" class="alignnone size-full wp-image-5064" /></a></p>
					<p>hogeディレクトリにある index.html のコンテキストメニューから「情報を見る（Get Info）」を選択すると</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/11/apache_7.png"><img src="http://5509.me/wp-content/uploads/2011/11/apache_7.png" alt="" title="[ユーザー名] 2" width="343" height="266" class="alignnone size-full wp-image-5065" /></a></p>
					<p>[ユーザー名] が分かります。</p>
					<h3>http://ho.ge/ にアクセスしてみる</h3>
					<p>とりあえず http://ho.ge/ にアクセスしてみると</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/11/apache_3.png"><img src="http://5509.me/wp-content/uploads/2011/11/apache_3.png" alt="" title="アクセスできない" width="500" class="alignnone size-full wp-image-5037" /></a></p>
					<p>当然アクセスできません。<strong>osho.ge</strong>とか<strong>oho.ge</strong>が気になるけどスルーだオショゲ。</p>
					<h2>Web共有がオンにできるか確認する</h2>
					<p><strong>システム環境設定 → 共有 にあるWeb共有</strong>の項目をチェックしてONにできるか確認します。</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/11/apache_1.png"><img src="http://5509.me/wp-content/uploads/2011/11/apache_1.png" alt="" title="Web共有がオンにできるか確認" width="500" class="alignnone size-full wp-image-5030" /></a></p>
					<p>とりあえず最初からやるという前提で、もしオンにできないときはhttpd.confをデフォルトの状態に戻しておきます。</p>
					<pre>$ sudo cp /etc/apache2/httpd.conf.default /etc/apache2/httpd.conf</pre>
<h2>VirtualHostを設定する</h2>
<p>VirtualHostの設定は、/etc/apache2/extra/httpd-vhosts.conf に書くのが一般的なようで、httpd.confの623行目あたりにある</p>
<pre># Virtual hosts
#Include /private/etc/apache2/extra/httpd-vhosts.conf</pre>
					<p>↓ Includeの前の # をトル</p>
					<pre># Virtual hosts
Include /private/etc/apache2/extra/httpd-vhosts.conf</pre>
					<p>コメントアウトを外す方法でやってたんですけど<br />
					どうにもhttpd-vhosts.confが読み込まれないとかいうので3時間はまったので、httpd-vhosts.confを /etc/apache2/other に作る方法にしました。</p>
					<p>なので<strong>上の # をトルはやらなくてだいじょぶです。</strong></p>
					<p>デフォルトで <strong>/etc/apache2/other の conf拡張子ファイルは全て読み込まれるようになっているので other ディレクトリに httpd-vhosts.conf ファイルを作るだけで使えるようになります</strong>。</p>
					<h3>httpd-vhosts.confを作る</h3>
					<pre>$ sudo vim /etc/apache2/other/httpd-vhosts.conf</pre>
<p>これで vim が起動するので以下を入力します。</p>
<p># vim初めて触る人向け<br />
i を押したあとに以下を入力して<br />
esc → :wq! で保存し vim を閉じます</p>
<pre>NameVirtualHost *:80

# ho.ge
&lt;VirtualHost *:80&gt;
    DocumentRoot /Users/[ユーザー名]/hoge
    ServerName ho.ge
&lt;/VirtualHost&gt;

&lt;Directory /Users/[ユーザー名]/hoge&gt;
    AllowOverride All
    Allow from All
&lt;/Directory&gt;</pre>
					<h2>hostsファイルの設定</h2>
					<p>以下を入力してhostsファイルを開きます。</p>
					<pre>$ sudo vim /etc/hosts</pre>
<p>さっきと同じ要領で以下の行を追加します。</p>
<pre>127.0.0.1 ho.ge</pre>
					<p><img src="http://5509.me/wp-content/uploads/2011/11/apache_4.png" alt="" title="hostsに追加する" width="252" height="170" class="alignnone size-full wp-image-5057" /></p>
					<p>（スペースは気にしないでください）</p>
					<p>ここまで出来たら</p>
					<pre>$ httpd -S</pre>
<p>で設定ファイル（httpd-vhosts.conf）に問題がないか確認します。<br />
問題がない場合は</p>
<pre>httpd: Could not reliably determine the server's fully qualified domain name, using ***** for ServerName
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server ho.ge (/etc/apache2/other/httpd-vhosts.conf:4)
         port 80 namevhost ho.ge (/etc/apache2/other/httpd-vhosts.conf:16)
Syntax OK</pre>
					<p>のように表示されます。VirtualHost configurationのところに設定した ho.ge と Syntax OK が出ていれば設定できているのでだいじょぶです。</p>
					<p>記述に間違いがあるときは</p>
					<pre>Syntax error on line 1 of /etc/apache2/other/httpd-vhosts.conf:
Invalid command 'hogehogehgoe', perhaps misspelled or defined by a module not included in the server configuration</pre>
					<p>のように表示されるので、該当箇所を確認してください。</p>
					<h2>Web共有を再起動する（Apacheの再起動）</h2>
					<p>Web共有のチェックを一旦外して、もう一度チェックするとApacheが再起動して、設定が有効になります。</p>
					<p>Apacheの再起動は</p>
					<pre>$ sudo apachectl restart</pre>
<p>でもできます。</p>
<h2>ho.ge にアクセス</h2>
<p>アクセスできましたか？できたら終わりです。</p>
<p><img src="http://5509.me/wp-content/uploads/2011/11/apache_8.png" alt="" title="ho.ge" width="186" height="78" class="alignnone size-full wp-image-5078" /></p>
<h2>ちなみに</h2>
<p>上までちゃんとやってて httpd -S も大丈夫そうなのにアクセスできない場合は、Macを再起動すると大丈夫になるかも。</p>
<p>僕はそれでさらに1時間はまりました^ω^</p>
<img src="http://5509.me/?ak_action=api_record_view&id=5029&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/apache-with-lion/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>カスタムイベントとイベントの発火</title>
		<link>http://5509.me/log/custom-event</link>
		<comments>http://5509.me/log/custom-event#comments</comments>
		<pubDate>Mon, 10 Oct 2011 17:13:12 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[attachEvent]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[カスタムイベント]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4971</guid>
		<description><![CDATA[					IE8以下以外は普通にaddEventListenerするだけなんだけど、IE8以下はaddEventListenerが使えないのと、イベントハンドラには既に予約されてるonhogehogeしか使えないので、o [...]]]></description>
			<content:encoded><![CDATA[					<p>IE8以下以外は普通にaddEventListenerするだけなんだけど、IE8以下はaddEventListenerが使えないのと、イベントハンドラには既に予約されてるonhogehogeしか使えないので、<em>ondataavailable（※）</em>に全て登録しておいてeventオブジェクトに処理を保存しておく。triggerする際は、evtObj.nameをキーに処理を引き出してhogehogeする。</p>
					<p>※ なんかサイ本みたらondataavailableに登録するみたいなことが書いてあったからそうした。</p>
					<p><iframe style="width: 98%; height: 300px" src="http://jsfiddle.net/5509/Ntv4k/2/embedded/"></iframe></p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4971&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/custom-event/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chromeのキャッシュをオフにする方法</title>
		<link>http://5509.me/log/disable-chrome-cache</link>
		<comments>http://5509.me/log/disable-chrome-cache#comments</comments>
		<pubDate>Wed, 05 Oct 2011 03:30:32 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[キャッシュ]]></category>
		<category><![CDATA[ブラウザ]]></category>
		<category><![CDATA[開発]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4953</guid>
		<description><![CDATA[					全然気がつかなかった・・・いつからだろう・・・
					Chromeにビルトインされてるのですぐ使えます。
					ちなみに、キャプチャはChromeのdev版なのでstable版は少し違うかもしれません。 [...]]]></description>
			<content:encoded><![CDATA[					<p>全然気がつかなかった・・・いつからだろう・・・<br />
					Chromeにビルトインされてるのですぐ使えます。</p>
					<p>ちなみに、キャプチャはChromeのdev版なのでstable版は少し違うかもしれません。stableでもcacheの項目あるのは確認してます。</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/10/chrome_cache1.png"><img src="http://5509.me/wp-content/uploads/2011/10/chrome_cache1-1024x640.png" alt="" title="chrome_cache1" width="480" class="alignnone size-medium wp-image-4954" /></a></p>
					<p>通常、キャッシュがあればそっちを見に行くので304になりますが</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/10/chrome_cache2.png"><img src="http://5509.me/wp-content/uploads/2011/10/chrome_cache2-1024x640.png" alt="" title="chrome_cache2" width="480" class="alignnone size-medium wp-image-4955" /></a></p>
					<p>右下にギアアイコンがあって、そこからインスペクタのSettingが開けます</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/10/chrome_cache3.png"><img src="http://5509.me/wp-content/uploads/2011/10/chrome_cache3-1024x640.png" alt="" title="chrome_cache3" width="480" class="alignnone size-medium wp-image-4956" /></a></p>
					<p>Disable cacheにチェックを入れておくと</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/10/chrome_cache4.png"><img src="http://5509.me/wp-content/uploads/2011/10/chrome_cache4-1024x640.png" alt="" title="chrome_cache4" width="480" class="alignnone size-medium wp-image-4957" /></a></p>
					<p>Cacheが常にオフになり</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/10/chrome_cache5.png"><img src="http://5509.me/wp-content/uploads/2011/10/chrome_cache5-1024x640.png" alt="" title="chrome_cache5" width="480" class="alignnone size-medium wp-image-4958" /></a></p>
					<p>常に200、キャッシュを見にいかなくなります</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4953&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/disable-chrome-cache/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>exValidationにチェックボックスで必須をトグルにできるやつを実装しました</title>
		<link>http://5509.me/log/check-if-exvalidation</link>
		<comments>http://5509.me/log/check-if-exvalidation#comments</comments>
		<pubDate>Fri, 30 Sep 2011 16:15:15 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[exValidation]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[アップデート]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4945</guid>
		<description><![CDATA[					exValidation（jQuery.validation.js含め）で今まで一番要望が多かったのですが、汎用的にするのは微妙かなぁと思って実装していませんでした。以前WebDesigningで連載しているj [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://5509.me/log/exvalidation">exValidation</a>（jQuery.validation.js含め）で今まで一番要望が多かったのですが、汎用的にするのは微妙かなぁと思って実装していませんでした。以前<a href="http://www.amazon.co.jp/gp/product/B004YDXVI2?ie=UTF8&#038;tag=norimania-22&#038;linkCode=shr&#038;camp=1207&#038;creative=8411&#038;creativeASIN=B004YDXVI2">WebDesigningで連載しているjQuery Labで実装方法を書いた</a>ものを、もう面倒なので組み込みました。これで割と簡単に使えるんじゃないでしょうか。表示非表示とかはできません、あくまで必須をトグルにできるだけです。表示非表示も実装したい場合はがんばってアドオンしてください。（アドオンは割と簡単にできます）</p>
					<p><a href="http://5509.me/sample/exvalidation/index8.html">チェックボックスで必須をトグルにできるやつのサンプル</a></p>
					<h3>実装方法</h3>
					<p>実装方法はサンプルに尽きるのですが、ポイントは<strong>トグルにしたい要素はルールを書くときにchkrequiredを必ず含めてください</strong>。</p>
					<pre>&lt;tr&gt;
  &lt;th&gt;Favorite&lt;span&gt;*&lt;/span&gt;&lt;/th&gt;
  &lt;td&gt;
    &lt;span id=&quot;fav&quot;&gt;
      &lt;label for=&quot;f1&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;f1&quot; name=&quot;fav[]&quot; value=&quot;f1&quot;&gt;books&lt;/label&gt;
      &lt;label for=&quot;f2&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;f2&quot; name=&quot;fav[]&quot; value=&quot;f2&quot;&gt;music&lt;/label&gt;
      &lt;label for=&quot;f3&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;f3&quot; name=&quot;fav[]&quot; value=&quot;f3&quot;&gt;game&lt;/label&gt;
      &lt;label for=&quot;f4&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;f4&quot; name=&quot;fav[]&quot; value=&quot;f4&quot;&gt;study&lt;/label&gt;
      &lt;label for=&quot;f5&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;f5&quot; name=&quot;fav[]&quot; value=&quot;f5&quot;&gt;fishing&lt;/label&gt;
      &lt;label for=&quot;f6&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;f6&quot; name=&quot;fav[]&quot; value=&quot;f6&quot;&gt;other&lt;/label&gt;
    &lt;/span&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;th&gt;Favorite Other&lt;/th&gt;
  &lt;td&gt;
    &lt;input type=&quot;text&quot; id=&quot;favOther&quot; name=&quot;favOther&quot; value=&quot;&quot;&gt;
  &lt;/td&gt;
&lt;/tr&gt;</pre>
					<p>で、チェックボックスを含むグループには<strong>chktoggle_hoge_fuga</strong>のように</p>
					<ul>
					<li>hoge: トグルを発火させるためのチェックボックスのID</li>
					<li>fuga: チェックボックスの状態によって必須をトグルさせるinputのID</li>
					</ul>
					<p>ルールを入れておきます。これだけです。</p>
					<pre>$("form")
  .exValidation({
    rules: {
      fav: "chkgroup chktoggle_f6_favOther",
      favOther: "chkrequired"
    },
    stepValidation: true
  });</pre>
					<p>そんなわけで、実装しましたのでよければ使ってください。</p>
					<p><a href="http://5509.me/sample/exvalidation/index8.html">チェックボックスで必須をトグルにできるやつのサンプル</a></p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4945&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/check-if-exvalidation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>いつappendされるか分からないDOMノードを監視して何かする</title>
		<link>http://5509.me/log/do-something-when-node-was-appended</link>
		<comments>http://5509.me/log/do-something-when-node-was-appended#comments</comments>
		<pubDate>Wed, 28 Sep 2011 02:20:04 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[append]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4936</guid>
		<description><![CDATA[					最後の手段として使える場合があります。最後の手段です。
					プラグインとか使いまくってると（そもそも挙動を理解していないプラグインを使いまくるのはよくないので、注意したほうがいいです）、「プラグインで生成 [...]]]></description>
			<content:encoded><![CDATA[					<p>最後の手段として使える場合があります。最後の手段です。<br />
					プラグインとか使いまくってると（そもそも挙動を理解していないプラグインを使いまくるのはよくないので、注意したほうがいいです）、「プラグインで生成したノードがDOMツリーに追加された後なんかしたい」みたいなときがあったりするかもしれないですが、そういうときになんとかする方法です。</p>
					<p>jQuery使ってないときは$(&#8220;object&#8221;)をquerySelectorとかに変えます。</p>
					<pre>var object = undefined;
(function() {
    object = $("object");
    if ( object &#038;&#038; object.length &gt; 0 ) {
        // ここに処理書く
        return;
    }
    setTimeout(arguments.callee, 30);
}());</pre>
					<p>上の例だと、objectを監視し続けてほしい個数分取れたときに何かするっていう感じです。取れないときは取れるまでループし続けるので、アレですアレ。。前もって、コンソールからほしい要素が最終的に挿入されてるかどうか見てからにしましょう。</p>
					<p>自分で書いたコードならカスタムイベント入れとくと、後で使うときに楽ですね。つまりプラグイン使うとノードの生成タイミングとか自分で把握できなくなるので、気をつけたほうがいいです。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4936&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/do-something-when-node-was-appended/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>jQueryのappendパターン</title>
		<link>http://5509.me/log/jquery-append-pattern</link>
		<comments>http://5509.me/log/jquery-append-pattern#comments</comments>
		<pubDate>Tue, 30 Aug 2011 14:53:34 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[まとめ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4908</guid>
		<description><![CDATA[					appendで追加するあれやこれのパターン。別に珍しいことないですよくある光景です。appendだけじゃなくてhtmlとかafterとかそゆのでも使えます。まあ何で使えるかっていうのはjQueryのドキュメント [...]]]></description>
			<content:encoded><![CDATA[					<p>appendで追加するあれやこれのパターン。別に珍しいことないですよくある光景です。appendだけじゃなくてhtmlとかafterとかそゆのでも使えます。まあ何で使えるかっていうのは<a href="http://docs.jquery.com/Main_Page">jQueryのドキュメント</a>見てください</p>
					<h3>jQueryオブジェクト</h3>
					<p>まあ普通はこれですよ。</p>
					<pre>var hoge = $("#hoge");
$("#fuga").append(hoge);</pre>
					<p>とか極端な例だけど</p>
					<pre>$(&quot;#hoge&quot;).append(
  $(&quot;&lt;div&gt;&lt;/div&gt;&quot;)
    .append(
      $(&quot;&lt;a&gt;&lt;/a&gt;&quot;)
        .attr(&quot;href&quot;, fuga)
        .text(piyo)
    )
);</pre>
					<p>みたいなの</p>
					<h3>HTML要素</h3>
					<p>これもあるある。</p>
					<pre>$("#hoge").append(
  "&lt;div&gt;fugafuga&lt;/div&gt;"
);</pre>
					<h3>HTML要素少し多い場合</h3>
					<p>ちょっと見にくい。</p>
					<pre>$("#hoge").append(
  &quot;&lt;div class='fuga'&gt;\
    &lt;h3&gt;piyo&lt;/h3&gt;\
    &lt;p&gt;fungaaaaaaa&lt;/p&gt;\
  &lt;/div&gt;&quot;
);</pre>
					<h3>上のパターンを配列で</h3>
					<p>割とみやすい。</p>
					<pre>$("#hoge").append([
  &quot;&lt;div class='fuga'&gt;&quot;,
    &quot;&lt;h3&gt;piyo&lt;/h3&gt;&quot;,
    &quot;&lt;p&gt;fungaaaaaaa&lt;/p&gt;&quot;,
  &quot;&lt;/div&gt;&quot;
].join(""));</pre>
					<h3>functionで要素を返す</h3>
					<p>これあんまり使ってないと思いますけど超便利なんですよ。<br />
					中でたくさん作ってまとめて返したり、条件分岐で返したり夢が広がります。</p>
					<pre>$(&quot;#hoge&quot;).append(function() {
  var elm = $(&quot;&lt;ul&gt;&lt;/ul&gt;&quot;), li = [];
  for ( var i = 0; i &lt; l; i++ ) {
    li.push(
      "&lt;li&gt;" + fuga + "&lt;/li&gt;"
    );
  }
  return elm.append(li.join(""));
});</pre>
					<h2>そんな感じで</h2>
					<p>最後のやつも積極的に使うといいと思います。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4908&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/jquery-append-pattern/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Edit in placeエディタを実装するEIP</title>
		<link>http://5509.me/log/eip</link>
		<comments>http://5509.me/log/eip#comments</comments>
		<pubDate>Mon, 01 Aug 2011 06:56:31 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Edit in place]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4857</guid>
		<description><![CDATA[					
					シンプルで使いやすいEdit in placeエディタを。
					EIPは指定の要素にEdit in placeエディタ機能を付加します。データの保持はカスタムデータ属性で行い、コールバック関数 [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://5509.me/sample/EIP/"><img src="http://5509.me/wp-content/uploads/2011/08/eip1.png" alt="" title="EIPのサンプルキャプチャ" width="290" height="93" class="alignnone size-full wp-image-4862" /></a></p>
					<p>シンプルで使いやすいEdit in placeエディタを。</p>
					<p>EIPは指定の要素にEdit in placeエディタ機能を付加します。データの保持はカスタムデータ属性で行い、コールバック関数を呼べるためある程度自由にデータのやりとりができます。</p>
					<ul>
					<li><a href="http://5509.me/sample/EIP/">EIPのサンプル</a></li>
					</ul>
					<p><span id="more-4857"></span></p>
					<h2>ダウンロード</h2>
					<p><a href="https://github.com/5509/EIP">Github</a>から</p>
					<h2>使い方</h2>
					<p>jQueryとeip.js、eip.cssを読み込みます。</p>
					<pre>&lt;link rel="stylesheet" href="/css/eip.css"&gt;
&lt;script src=&quot;common/js/jquery.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;/js/eip.js&quot;&gt;&lt;/script&gt;</pre>
					<p>次にHTMLを用意します。このとき、HTMLには<strong>data-eip</strong>が必須です。実行対象はdivでもspanというか何でも大丈夫ですが、display: block指定がされているか、ブロック要素がいいと思います。（※data-eipについては後述</p>
					<pre>&lt;div class="eip"
  data-name="name"
  data-eip="text"
&gt;sample&lt;/div&gt;</pre>
					<p>実行する際にEIPだけではデータに対して何もできないので、callbackオプションが必須です。（※詳しくは後述</p>
					<pre>&lt;script&gt;
  jQuery(function($) {
    $("div.eip").eip({
      callback: function() {
        $("input[name=" + this.attr("data-name") + "]")
          .val(this.attr("data-value"))
      }
    });
  });
&lt;/script&gt;</pre>
					<h2>EIPのカスタムデータ属性</h2>
					<h3>data-eip</h3>
					<p>EIPの形式を指定できます</p>
					<table border="1" class="lftable">
					<tr>
					<th>形式</th>
					<th>説明</th>
					</tr>
					<tr>
					<td>text</td>
					<td>1行テキスト編集</td>
					</tr>
					<tr>
					<td>textarea</td>
					<td>複数行テキスト編集</td>
					</tr>
					<tr>
					<td>select</td>
					<td>セレクトボックスから選択</td>
					</tr>
					</table>
					<h4>textareaを指定した場合</h4>
					<p><img src="http://5509.me/wp-content/uploads/2011/08/eip3.png" alt="" title="data-eip: textarea" width="299" height="228" class="alignnone size-full wp-image-4864" /></p>
					<p>data-rowsで置き換えた後のtextareaにrowsを指定できます</p>
					<pre>&lt;div class="eip"
  data-name="introduce"
  data-eip="textarea"
  data-rows="10"
&gt;自己紹介がはいるよ&lt;/div&gt;</pre>
					<h4>selectを指定した場合</h4>
					<p><img src="http://5509.me/wp-content/uploads/2011/08/eip2.png" alt="" title="data-eip: select" width="288" height="92" class="alignnone size-full wp-image-4863" /></p>
					<p>data-optionでselect要素のoptionを生成できます</p>
					<pre>&lt;div class="eip"
  data-name="select"
  data-eip="select"
  data-option="A,B,C,D,E,F"
&gt;A&lt;/div&gt;</pre>
					<h3>data-name</h3>
					<p>data-nameを指定しておくとコールバックでデータを引き抜くときに便利です</p>
					<h3>data-value</h3>
					<p>data-valueはエディタから置き換えられた後に置き換えた値が代入されます</p>
					<h3>data-default</h3>
					<p>何もない場合に表示されるラベルを個別に指定できます<br />
					まとめて指定したい場合はオプションから指定できます</p>
					<h2>オプション</h2>
					<table border="1" class="lftable">
					<tr>
					<th>プロパティ</th>
					<th>デフォルト</th>
					</tr>
					<tr>
					<td>defaultLabel</td>
					<td>&#8220;Click here to edit&#8221; 何もない状態のときに表示する</td>
					</tr>
					<tr>
					<td>buttons</td>
					<td>true EIPのボタンを表示する</td>
					</tr>
					<tr>
					<td>submitLabel</td>
					<td>&#8220;Save&#8221; 保存ボタンのラベル</td>
					</tr>
					<tr>
					<td>cancelLabel</td>
					<td>&#8220;Cancel&#8221; キャンセルボタンのラベル</td>
					</tr>
					<tr>
					<td>callback</td>
					<td>null コールバック関数</td>
					</tr>
					</table>
					<h2>DOCTYPE・・・</h2>
					<p>カスタムデータ属性を使っているので、XHTMLだとinvalidになるので気になる場合は、DOCTYPEだけでもHTML5にしておくとよいです</p>
					<h2>というわけで</h2>
					<p>何かあれば<a href="https://github.com/5509/EIP">Github</a>からフォークしてください</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4857&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/eip/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Skroll.jsのマイナーアップデート</title>
		<link>http://5509.me/log/updated-skroll-083</link>
		<comments>http://5509.me/log/updated-skroll-083#comments</comments>
		<pubDate>Mon, 01 Aug 2011 06:24:00 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[skroll]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4870</guid>
		<description><![CDATA[					OS X Lionぽいスクロールバーを実装できてiOSにも対応した Skroll.js
					アップデート項目
					
					added: refresh()メソッドの実装
					added:  [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://5509.me/log/skroll">OS X Lionぽいスクロールバーを実装できてiOSにも対応した Skroll.js</a></p>
					<h2>アップデート項目</h2>
					<ul>
					<li>added: refresh()メソッドの実装</li>
					<li>added: スクロールバーの背景を表示する</li>
					<li>bugfix: スクロールバーの高さ</li>
					<li>bugfix: スクロール量</li>
					<li>bugfix: スクロールコンテンツが少し余る</li>
					<li>modifed: iOSでのモーメンタムスクロールのスクロール量、easingの調整</li>
					</ul>
					<p>使い方などは<a href="http://5509.me/log/skroll">Skrollのアーカイブ</a>に追記してます。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4870&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/updated-skroll-083/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OS X Lionぽいスクロールバーを実装できてiOSにも対応した Skroll.js</title>
		<link>http://5509.me/log/skroll</link>
		<comments>http://5509.me/log/skroll#comments</comments>
		<pubDate>Tue, 12 Jul 2011 01:30:21 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Lion]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[スクロールバー]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4822</guid>
		<description><![CDATA[					
					前略そんなわけでスクロールバー作りました。
					
					一応目指していたところは、PCベースのサイトを作ったときにiOSで見てもスクロールバー実装したとこいい感じになるよ！っていうのです。 [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://5509.me/sample/skroll/ioskroll.html"><img src="http://5509.me/wp-content/uploads/2011/07/skroll2.png" alt="" title="skroll2" height="320" class="alignnone size-full wp-image-4854" /></a></p>
					<p>前略そんなわけでスクロールバー作りました。<br />
					<span id="more-4822"></span></p>
					<p>一応目指していたところは、PCベースのサイトを作ったときにiOSで見てもスクロールバー実装したとこいい感じになるよ！っていうのです。</p>
					<p>PCでLionぽいスクロールバー作りたいなと思って会社の合宿中に始めたのですけど、なんかいつの間にかiOSにも対応することになってて、動きにこだわり始めたら収集つかなくなってめちゃめちゃ時間かかりました・・・</p>
					<p>対象バージョンはある程度絞ってあるんですけど、結構納得いく動きにできたかなーと思います。動きはとりあえずPCとiOS（4.2以上）で見てください。</p>
					<p>タイトルにないですけど、これは<strong>jQueryプラグインとして動作します（jQuery mobileは必要ないです）</strong>。自分で使う機会が多ければjQuery外してiOSに特化してもいいかなとかそういうノリなので、もし使う人がいればフィードバックください。</p>
					<p>iOS用のスクローラーライブラリでiScrollとかScrollabilityがあるのですが</p>
					<h3>とりあえずiScrollとかとの違いを</h3>
					<ul>
					<li>PCベースで対応（iOSはサブ扱い、半分くらいiOSのコードだけど</li>
					<li>PCとiOSでは動作が違う、それぞれ使いやすいように最適化</li>
					</ul>
					<h2>サンプル</h2>
					<ul>
					<li><a href="http://5509.me/sample/skroll/">PCブラウザとiOSで動作が違います</a></li>
					<li><a href="http://5509.me/sample/skroll/ioskroll.html">refreshメソッドのサンプル</a> &#8211; iOS向けによくあるヘッダフッタの固定</li>
					</ul>
					<p>二つ目のサンプルはウィンドウの幅を変えてみてください。refresh()メソッドを使うことで、スクロールバーの長さがコンテンツの幅が変わるのに合わせて変わります</p>
					<h2>ダウンロード</h2>
					<p><a href="https://github.com/5509/Skroll">Github</a>から</p>
					<h2>使い方</h2>
					<p>jQueryとskroll.jsを読み込んで実行するだけです。実行する対象はいつもoverflow: auto;にしてる要素です。autoにしておいて、skroll()メソッドを実行すればスクロールバーが置き換わります。このときwidthの指定がある場合は（auto以外の場合）オプションでwidthをしてください。</p>
					<p><strong>※ スクロールバーは縦のスクロールバーしか実装できません。</strong></p>
					<pre>&lt;script src=&quot;common/js/jquery.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;skroll/skroll.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
  jQuery(function($) {
    $(&quot;div.txt&quot;).skroll({
      width: 300
    });
  });
&lt;/script&gt;</pre>
					<h2>オプション</h2>
					<p>あまり役に立たないオプションが多いかも・・・</p>
					<table border="1" class="lftable">
					<tr>
					<th>プロパティ</th>
					<th>デフォルト</th>
					</tr>
					<tr>
					<td>margin</td>
					<td>0 元の要素のmarginがある場合は指定しておく</td>
					</tr>
					<tr>
					<td>width</td>
					<td>置き換えた後のコンテンツ幅、元の幅と同じ</td>
					</tr>
					<tr>
					<td>height</td>
					<td>置き換えた後のコンテンツ高、元の高さと同じ</td>
					</tr>
					<tr>
					<td>inSpeed</td>
					<td>50 スクロールバーが表示される速度</td>
					</tr>
					<tr>
					<td>outSpeed</td>
					<td>200 スクロールバーが非表示になる速度</td>
					</tr>
					<tr>
					<td>delayTime</td>
					<td>200 最初に表示されて消えるまでの速度</td>
					</tr>
					<tr>
					<td>scrollBarWidth</td>
					<td>6 スクロールバーの幅</td>
					</tr>
					<tr>
					<td>scrollBarSpace</td>
					<td>3 スクロールバーとコンテンツのスペース</td>
					</tr>
					<tr>
					<td>scrollBarColor</td>
					<td>&#8220;#000&#8243; スクロールバーの色</td>
					</tr>
					<tr>
					<td>scrollBarZIndex</td>
					<td>100 スクロールバーのzIndex</td>
					</tr>
					<tr>
					<td>opacity</td>
					<td>0.5 スクロールバーの透明度</td>
					</tr>
					<tr>
					<td>scrollBarBg</td>
					<td>false スクロールバーの背景を表示する</td>
					</tr>
					<tr>
					<td>scrollBarBgColor</td>
					<td>&#8220;#666&#8243; スクロールバー背景の色</td>
					</tr>
					<tr>
					<td>scrollBarBgOpacity</td>
					<td>0.5 スクロールバー背景の透明度</td>
					</tr>
					<tr>
					<td>scrollBarGrowth</td>
					<td>&#8220;0 0 2px #fff&#8221; スクロールバーのboxShadow</td>
					</tr>
					<tr>
					<td>cursor.grab</td>
					<td>スクロールバーのカーソル：のせたとき、手のアイコン（PC</td>
					</tr>
					<tr>
					<td>cursor.grabbing</td>
					<td>スクロールバーのカーソル：掴んだとき、掴んだ手のアイコン（PC</td>
					</tr>
					<tr>
					<td>scrollCancel</td>
					<td>80 スクロールをキャンセルするまでの時間（iOS</td>
					</tr>
					<tr>
					<td>cubicBezier</td>
					<td>&#8220;&#8221;cubic-bezier(0.20,0.71,0.30,0.87)&#8221; バウンス以外のeasing（iOS</td>
					</tr>
					<tr>
					<td>cubicBezierBounce</td>
					<td>&#8220;cubic-bezier(0.11,0.74,0.15,0.80)&#8221; バウンス時のeasing（iOS</td>
					</tr>
					<tr>
					<td>cubicBezierBar</td>
					<td>&#8220;cubic-bazier(0.42,0,1,1)&#8221; スクロールバーのeasing</td>
					</tr>
					<tr>
					<td>scrollBarHide</td>
					<td>true スクロールバーを自動的に非表示にするかどうか</td>
					</tr>
					</table>
					<h2>メソッド</h2>
					<p>メソッドを利用する場合は、jQueryオブジェクトに対してskroll()を実行せずに、jQuery.skroll()を実行します。</p>
					<table border="1" class="lftable">
					<tr>
					<th>メソッド名</th>
					<th>説明</th>
					</tr>
					<tr>
					<td>refresh</td>
					<td>スクロールバー領域を再描画する</td>
					</tr>
					</table>
					<pre>var skroll = $.skroll("div.body", {
  scrollBarBg: true
}); // 要素、オプションの順

skroll.refresh(); // 任意のタイミングで</pre>
					<ul>
					<li><a href="http://5509.me/sample/skroll/ioskroll.html">refresh()メソッドのサンプル</a>
					</li>
					</ul>
					<h2>iOSの対応バージョンについて</h2>
					<p>手元のiOS4.3（iPad2, iPhone4）から見てますが、どちらも普通に使う分には問題ないです。</p>
					<p>CPUもしくはGPUが非力なiPhone3Gや3GSではCSS3 Transitionsが綺麗に動作しない可能性があります。TransitionsにはGPUハードウェアアクセラレータを利用しているため、この部分で滲んだりボヤケたりするかもしれません。</p>
					<h2>というわけで</h2>
					<p><strong>何かあれば<a href="https://github.com/5509/Skroll">Github</a>からフォークしてください</strong>！</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4822&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/skroll/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>GPUアクセラレーターが使える環境で強制的に有効にできるCSSの指定方法</title>
		<link>http://5509.me/log/gpu-accelerator-with-css</link>
		<comments>http://5509.me/log/gpu-accelerator-with-css#comments</comments>
		<pubDate>Tue, 05 Jul 2011 01:55:25 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[GPU]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Transitions]]></category>
		<category><![CDATA[アニメーション]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4798</guid>
		<description><![CDATA[					CSS Transitions Module Level 3ではCSSプロパティの数値を変化させ、その結果アニメーションなどの効果を表現することができますが、iOSなどの非力なモバイル端末ではどうしてもカクカク [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://www.w3.org/TR/css3-transitions/">CSS Transitions Module Level 3</a>ではCSSプロパティの数値を変化させ、その結果アニメーションなどの効果を表現することができますが、iOSなどの非力なモバイル端末ではどうしてもカクカクしてしまう場合が多いです。</p>
					<p>特に要素の位置を動かすなどの処理はコストが高く、よくカクカクするというか、スムーズにアニメーションしてくれないときが多いです。</p>
					<p>iOSではCSS3によるGPUアクセラレーターの利用ができ、GPUアクセラレーターをONにすると、今までカクカクしていたCSSによるアニメーション効果もかなりスムーズになります。</p>
					<p>基本的には3D処理をさせている場合に有効になりますが、<strong>GPUアクセラレーターによるアニメーション処理を行う際、プロパティの指定方法によってはiOSでチラつくことがありまして、、このチラつきはGPUアクセラレーターのON/OFFが切り替わったタイミングで発生している</strong>ようで、GPUアクセラレーターを利用したい場合は、常に3D処理をさせる（常にONにしておく）のがよさそうです。</p>
					<p>3D処理のスイッチ（便宜上スイッチと呼びますが）については@<a href="http://twitter.com/Takazudo">Takazudo</a>さんのハマログに書かれてる以下の記述でも出来るのですが</p>
					<pre>target { -webkit-transform: translate3d(0, 0, 0); }</pre>
<p><a href="http://hamalog.tumblr.com/post/5011193654/ios-css">iOSでCSSアニメーション使うとなんかチカチカする</a></p>
<p>transformプロパティを使いたくない場合もあるので、transformプロパティを利用しない方法として</p>
<pre>target { -webkit-transform-style: preserve-3d; }</pre>
					<p>このようにtransform-styleにpreserve-3dを指定すると、その要素のアニメーション処理にはGPUアクセラレーターが利用されるようになります。</p>
					<h3>指摘もらったので追記、ちょっとわかりにくかったかも</h3>
					<p>transform-style: preserve-3d はGPUアクセラレーターをONにするためのプロパティではありません。3D処理を行うと指定すると、iOSでGPUアクセラレーターがONになるというだけです。</p>
					<p><a href="http://dev.w3.org/csswg/css3-3d-transforms/#transform-style-property">http://dev.w3.org/csswg/css3-3d-transforms/#transform-style-property</a></p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4798&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/gpu-accelerator-with-css/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSSでアニメーションするときはtiming-functionを効果的に使うといい感じになる</title>
		<link>http://5509.me/log/css-animation-with-timing-funtion</link>
		<comments>http://5509.me/log/css-animation-with-timing-funtion#comments</comments>
		<pubDate>Mon, 04 Jul 2011 10:14:23 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[timing-function]]></category>
		<category><![CDATA[Transitions]]></category>
		<category><![CDATA[アニメーション]]></category>
		<category><![CDATA[関西弁]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4784</guid>
		<description><![CDATA[					※ 今日はフランクな関西弁全開で書いてます
					timing-functionってJSで言うてたところのeasingやねん。timing-functionは規定値で
					
					ease
			 [...]]]></description>
			<content:encoded><![CDATA[					<p>※ 今日はフランクな関西弁全開で書いてます</p>
					<p>timing-functionってJSで言うてたところのeasingやねん。timing-functionは規定値で</p>
					<ul>
					<li>ease</li>
					<li>ease-in</li>
					<li>ease-out</li>
					<li>ease-in-out</li>
					<li>linear</li>
					</ul>
					<p>の5つが用意されとるんやけど、それだけでも結構きれいな数値の変化になるねん。でもカスタム値のcubic-bezierっていうので動きを詳細に決めることができて、これ使うと好きな動きにできるんやで。</p>
					<h3>linearの動き</h3>
					<p>例えばlinearの動きはこんな感じに表せるんやけど・・・まだよくわからんよね。</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/07/timing-linear.png"><img src="http://5509.me/wp-content/uploads/2011/07/timing-linear.png" alt="" title="timing-linear" width="431" height="431" class="alignnone size-full wp-image-4791" /></a></p>
					<h3>参考</h3>
					<dl>
					<dt>CSS Transitions Module Level 3</dt>
					<dd><a href="http://www.w3.org/TR/css3-transitions/">http://www.w3.org/TR/css3-transitions/</a></dd>
					<dt>The ‘transition-timing-function’ Property</dt>
					<dd><a href="http://www.w3.org/TR/css3-transitions/#transition-timing-function_tag">http://www.w3.org/TR/css3-transitions/#transition-timing-function_tag</a></dd>
					</dl>
					<p>で、このcubic-bezierの指定方法なんやけど、いちいち計算なんかしてられへんから、ツール使ったほうがええよね。とりあえずコレ使ってたらええよっていうのはこれな。</p>
					<ul>
					<li><a href="http://www.roblaplaca.com/examples/bezierBuilder/">CSS cubic-bezier Builder</a></li>
					</ul>
					<p>つまみが2つあって、それ動かすと好きなように曲線を変えれるねん。曲線が数値の変化にどう影響するんかってうのは次の図に書いてみたで。動きの比較もできるようになってるから、「Click Here」のとこクリックしてみてや。どんな変化になるんかっていう目安には十分なるから、好きな動きにできると思うで。</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/07/timing-desc.png"><img src="http://5509.me/wp-content/uploads/2011/07/timing-desc.png" alt="" title="timing-desc" width="432" height="431" class="alignnone size-full wp-image-4790" /></a></p>
					<p>あ、そうそう、Y軸は数値の変化、X軸は時間の変化になってるから、それに合わせて考えて曲線動かしてな。ところでJSとかASのeasingにあったbounceとかelasticとかそういう複雑な動きはでけへんから注意しといてや。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4784&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/css-animation-with-timing-funtion/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>$(fuga).wrap($boga)した後$bogaに何かしても反映されない</title>
		<link>http://5509.me/log/wrap-method</link>
		<comments>http://5509.me/log/wrap-method#comments</comments>
		<pubDate>Mon, 27 Jun 2011 02:21:05 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[wrap]]></category>
		<category><![CDATA[うっかり]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4763</guid>
		<description><![CDATA[					タイトルだけやとよくわからんですが・・・
					wrap()メソッドは全然使ったことがなくて、なんとなく使ってみたらうっかりはまった例です。よくよく考えたらその通りなのでただのうっかりです・・・
					 [...]]]></description>
			<content:encoded><![CDATA[					<p>タイトルだけやとよくわからんですが・・・</p>
					<p>wrap()メソッドは全然使ったことがなくて、なんとなく使ってみたらうっかりはまった例です。よくよく考えたらその通りなのでただのうっかりです・・・</p>
					<h2>wrap()メソッドについて</h2>
					<p>一応ふれておくとwrap()メソッドを使うと、対象のjQueryオブジェクトを指定したタグか要素で包めます。</p>
					<pre>$(boga).wrap("&lt;div&gt;&lt;/div&gt;");</pre>
<p>とかすると</p>
<pre>&lt;div&gt;boga&lt;/div&gt;</pre>
					<p>になります。このwrapする要素はタグではなくてjQueryオブジェクトでも大丈夫なんですけど、</p>
					<h2>何がだめなのか</h2>
					<pre>var $boga = $("&lt;div&gt;&lt;/div&gt;");
// これは大丈夫
$boga.method(/* something */);

$(fuga).wrap($boga);

// これはだめ
$boga.method(/* something */);</pre>
					<p>結論から言うと、次みたいに$hogeを再取得しないとだめです。（そもそもreplaceWithとかのほうがいいかもとかは置いといて）</p>
					<pre>var $boga = $("&lt;div&gt;&lt;/div&gt;");
// これは大丈夫
$boga.method(/* something */);

// wrapした後、親に移動してそれを $hoge に返す
// つまり元の$hogeを再取得する
$boga = $(fuga).wrap($boga).parent();

// これも当然大丈夫
$boga.method(/* something */);</pre>
					<h2>何がどうなってるの</h2>
					<p>wrap()メソッド自体はほぼそのままwrapAllに渡してるだけなんですけど</p>
					<pre>wrap: function( html ) {
    return this.each(function() {
        jQuery( this ).wrapAll( html );
    });
}</pre>
					<p>下にコメントで書いたように、wrapAll()メソッドでwrapする要素はclone()メソッドで複製したものなので、元の$bogaにあれやこれやしようとしても、そもそも$bogaでwrapされているわけではないのでどうしようもない、ということでした。</p>
					<pre>wrapAll: function( html ) {
    // 略

    if ( this[0] ) {
        // The elements to wrap the target around
        var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
        // ↑ 実際に追加されるのは html ではなく html を複製したもの

        if ( this[0].parentNode ) {
            wrap.insertBefore( this[0] );
            // ↑ 複製したものを追加している
        }

        wrap.map(function() {
            // 略
        }).append( this );
    }

    return this;
}</pre>
					<h2>カレー</h2>
					<p>たべたい</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4763&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/wrap-method/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>コンテンツにheight属性のない画像が含まれていると正しい高さが取れない</title>
		<link>http://5509.me/log/contents-height</link>
		<comments>http://5509.me/log/contents-height#comments</comments>
		<pubDate>Thu, 23 Jun 2011 15:43:00 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[memo]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4756</guid>
		<description><![CDATA[					画像がロードされるのを待って、高さを更新しないとだめです。ってどうしても毎回忘れててうっかり計算あわへんとかで時間潰してしまう・・・
					下のようなHTMLがあって、
					&#60;div class [...]]]></description>
			<content:encoded><![CDATA[					<p>画像がロードされるのを待って、高さを更新しないとだめです。ってどうしても毎回忘れててうっかり計算あわへんとかで時間潰してしまう・・・</p>
					<p>下のようなHTMLがあって、</p>
					<pre>&lt;div class=&quot;txt&quot;&gt;
    &lt;p class=&quot;photo left&quot;&gt;
        &lt;a href=&quot;http://farm6.static.flickr.com/5297/5428556190_6b17a2dddc_m.jpg&quot;&gt;
            &lt;img src=&quot;http://farm6.static.flickr.com/5297/5428556190_6b17a2dddc_t.jpg&quot;&gt;
        &lt;/a&gt;
        &lt;span class=&quot;caption&quot;&gt;
            Photo by &lt;a href=&quot;http://www.flickr.com/photos/kwerfeldein/5428556190/&quot;&gt;Martin Gommel&lt;/a&gt;
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p&gt;&quot;Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?&quot;&lt;/p&gt;
&lt;/div&gt;</pre>
					<p>コンテンツの高さを取得するには例えば</p>
					<pre>jQuery(function($) {
    var contentsHeight = $("div.txt").get(0).offsetHeight;
});</pre>
					<p>とかで取れるんですけど、画像にheight属性がないので、画像がロードされるとコンテンツの高さが変わってしまうんですね。なので、画像がある場合には、画像がロードされるのを待ってからもう一度取得しないとだめです。</p>
					<p>画像のロード完了はnew Image().completeを使うんですけど、そこの説明ははしょって<a href="https://github.com/5509/m5plugins/blob/master/m5ImgLoad/source/m5imgload.js">m5ImgLoad</a>っていうの使ってます。ちょっと前に$(&#8220;img&#8221;).load()（img.onloadも同じ）だと画像の読み込み完了が取れないみたいなエントリを書いてやっぱり必要なかったとか書いてたのですけど、やはりIEだと取れないので、これ使ってます。</p>
					<pre>jQuery(function($) {
    var $txt = $("div.txt"),
        contentsHeight = $txt.get(0).offsetHeight,
        $images = $("img", $txt),
        imgLength = 0,
        imgLoaded = 0;

    if ( $images.length ) {
        imgLength = $images.length;
        $images.each(function() {
            $(this).m5ImgLoad(function() {
                imgLoaded += 1;
            })
        });

        (function() {
            if ( imgLoaded === imgLength ) {
                contentsHeight = $txt.get(0).offsetHeight;
                return;
            }
            setTimeout(arguments.callee, 30);
        }());
    }
});</pre>
					<p>なんか長くなりましたけど、height属性がない場合も多いので面倒ですけど気にしておかないとはまります・・・</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4756&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/contents-height/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>jQuery1.6以降でattr(&#8220;offsetHeight&#8221;)、attr(&#8220;offsetWidth&#8221;)が取れない</title>
		<link>http://5509.me/log/jquery16s-attr</link>
		<comments>http://5509.me/log/jquery16s-attr#comments</comments>
		<pubDate>Wed, 22 Jun 2011 13:52:09 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[bug]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4748</guid>
		<description><![CDATA[					attr(&#8220;offsetWidth&#8221;)も。詳しい話は置いておいて、1.6からattr周りの仕様が変わって、prop(&#8220;offsetHeight&#8221;)とかやれってこと [...]]]></description>
			<content:encoded><![CDATA[					<p>attr(&#8220;offsetWidth&#8221;)も。詳しい話は置いておいて、1.6からattr周りの仕様が変わって、prop(&#8220;offsetHeight&#8221;)とかやれってことなんでしょうかとか思ったら、後方互換の問題が当然発生してしまうので、やっぱり1.6.1で元に戻したよとか、そういう話になってたはずなのにattr(&#8220;offsetHeight&#8221;)は取れないのです。</p>
					<p>たとえ以降のバージョンで直ったとしても、1.6と1.6.1でだめならなんかもう色々面倒なことになる気がする・・・exValidationとかjQselectableで、というか色んな場面でattr(&#8220;offsetHeight&#8221;)を乱用？してたのでこの仕様変更（バグ？）は結構辛いのです。</p>
					<p>こういう人他にもいないですかね。propと併用するよりは、ピンポイントな話なので、</p>
					<pre>$(hoge).attr("offsetHeight")
$(hoge).attr("offsetWidth")</pre>
					<p>とかやってた箇所を</p>
					<pre>$(hoge).get(0).offsetHeight
$(hoge).get(0).offsetWidth</pre>
					<p>というように、DOMから参照するように置き換えると1.6以降でも動作するようになります。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4748&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/jquery16s-attr/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使いやすいマルチプルセレクトへの道のり（セレクトボックスとチェックボックスについて）</title>
		<link>http://5509.me/log/for-graceful-multiple-select</link>
		<comments>http://5509.me/log/for-graceful-multiple-select#comments</comments>
		<pubDate>Fri, 10 Jun 2011 10:18:42 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQselectable]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[マルチプルセレクト]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4701</guid>
		<description><![CDATA[					jQselectableの拡張で、しっくりきて使いやすい、控えめなマルチプルセレクト（複数選択可能なセレクトボックス）を模索中、、つまり考察だけだす
					おさらい
					※ 仕様ではなくて、認識です
 [...]]]></description>
			<content:encoded><![CDATA[					<p>jQselectableの拡張で、しっくりきて使いやすい、控えめなマルチプルセレクト（複数選択可能なセレクトボックス）を模索中、、つまり考察だけだす</p>
					<h2>おさらい</h2>
					<p>※ 仕様ではなくて、認識です</p>
					<dl>
					<dt>セレクトボックス</dt>
					<dd>一覧の中からひとつを選択させるもの（そもそも）</dd>
					<dt>チェックボックス</dt>
					<dd>基本的には一覧である必要はなくて、複数ある項目の中から指定する項目を選択させるというもの</dd>
					</dl>
					<h3>セレクトボックスのmultiple属性</h3>
					<p>どちらもそもそもの使い方が全然違うけど、セレクトボックスにはmultiple属性があって、trueにすると（multiple属性を追加するだけやけど）、PCではShiftかCtrl(Cmd)を押しながらクリックすると複数項目が選択できる</p>
					<p><script type="text/javascript" src="http://jsdo.it/blogparts/qdPw/js?view=design"></script>
					<p class="ttlBpJsdoit" style="width: 465px; margin: 0; text-align: right; font-size: 11px;"><a href="http://jsdo.it/5509/qdPw" title="ただのmultiple select">ただのmultiple select &#8211; jsdo.it &#8211; share JavaScript, HTML5 and CSS</a></p>
					<p>この「<strong>ShiftかCtrl(Cmd)を押しながら</strong>」というのはかなり嫌な実装で、普通に見てそれが複数選択可能かなんて分からへんし、「<strong>Shift or Ctrl(Cmd)+クリック</strong>」をエンドユーザーが認識してる割合は超低い（自分周り調べ）</p>
					<p>そもそもエクスプローラーとかFinderの仕様に沿ってるのかもしれないですけど、それできるのって普通知らないですよね</p>
					<p>フォームでは複数項目選択可の場合って、だいたい「複数選択可」みたいなテキストをラベル付近に入れると思うけど、ていうか入れてほしいけど、この補助テキストがあったとしてもきっとよくわからん。マルチプルセレクトの場合。</p>
					<p><script type="text/javascript" src="http://jsdo.it/blogparts/oFWj/js?view=design"></script>
					<p class="ttlBpJsdoit" style="width: 465px; margin: 0; text-align: right; font-size: 11px;"><a href="http://jsdo.it/5509/oFWj" title="forked: ただのmultiple select">forked: ただのmultiple select &#8211; jsdo.it &#8211; share JavaScript, HTML5 and CSS</a></p>
					<p>（どうやんの？）</p>
					<p>ほんだら、補助テキストを詳しく書いたりするんでしょーか</p>
					<p><script type="text/javascript" src="http://jsdo.it/blogparts/xcGb/js?view=design"></script>
					<p class="ttlBpJsdoit" style="width: 465px; margin: 0; text-align: right; font-size: 11px;"><a href="http://jsdo.it/5509/xcGb" title="forked: ただのmultiple select">forked: ただのmultiple select &#8211; jsdo.it &#8211; share JavaScript, HTML5 and CSS</a></p>
					<p>うーん、こんなごちゃごちゃうるさいフォームは美しくない（デザインではなくて手法が）</p>
					<p>ここまでで分かることはセレクトボックスは複数選択に全くもって向いていないということ</p>
					<p>ただし、iPhoneとAndroidでマルチプルセレクトを見ると、結構みやすいし使いやすい</p>
					<p style="text-align: center"><a style="margin-right: .5em" href="http://5509.me/wp-content/uploads/2011/06/multiple-select-iphone.png"><img src="http://5509.me/wp-content/uploads/2011/06/multiple-select-iphone-200x300.png" alt="" title="マルチプルセレクト on iPhoneのキャプチャ" width="200" height="300" class="alignnone size-medium wp-image-4716" /></a> <a href="http://5509.me/wp-content/uploads/2011/06/multiple-select-android.png"><img src="http://5509.me/wp-content/uploads/2011/06/multiple-select-android-180x300.png" alt="" title="multiple-select-android" width="180" height="300" class="alignnone size-medium wp-image-4732" /></a></p>
					<p>ただし一覧性は低いのでたくさんある場合は一度一番下までスクロールして確認してから、選択という流れになりそう</p>
					<h3>チェックボックス</h3>
					<p>一方チェックボックスは複数選択に適していて、たくさん項目があってもチェックを付けていく間隔から「あ、これは複数選択できるんだな」ということが分かるし、使い方もクリックしてチェックするだけ</p>
					<p><script type="text/javascript" src="http://jsdo.it/blogparts/fJzn/js?view=design"></script>
					<p class="ttlBpJsdoit" style="width: 465px; margin: 0; text-align: right; font-size: 11px;"><a href="http://jsdo.it/5509/fJzn" title="ただのチェックボックス">ただのチェックボックス &#8211; jsdo.it &#8211; share JavaScript, HTML5 and CSS</a></p>
					<h2>つまりー</h2>
					<p>どうしたいかというと、jQselectableのいいところは「<strong>一覧性が高く、目標に到達しやすい</strong>」ということで、これをマルチプルセレクトに対応させる場合、「<strong>一覧性が高く、目標に到達しやすい上に複数選択が可能であることが見てすぐ分かる</strong>」ということ</p>
					<p>でまぁ、そもそも使いにくいセレクトボックスの更に使いにくいマルチプルセレクトなもんで、どうしようかなーというところで、とりあえず思ったこと書きだしただけです</p>
					<p>個人的にはセレクトボックスにチェックボックスをあわせたものが見やすいとは思ってて、iPhoneのやつもチェックが入ってるから複数選択できることが分かるんですね</p>
					<p style="text-align: center"><img src="http://5509.me/wp-content/uploads/2011/06/multiple-select-jquery-ui.png" alt="" title="multiple-select-jquery-ui" width="240" height="247" class="alignnone size-full wp-image-4724" /></p>
					<p>ただまぁ、非常におださい感じになってしまうので（※個人の感想です）、チェックボックス組み合わせるのはナシやなぁとかなんとか。色々見てはいるものの、こんなの使いやすかったよとかそゆのあれば教えてほしいです</p>
					<p>あと、jQselectableはWeb界隈の人たちにはご好評いただいているものの、どこまでのエンドユーザーに対してやさしいかっていうのは、把握できてないですし、もしかしたら使いにくいかもしれませんし。自分周り調べでは、結構普通に選択してはりましたけど</p>
					<p>むー</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4701&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/for-graceful-multiple-select/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ピクセルグリッドに入社しました</title>
		<link>http://5509.me/log/join-the-pixelgrid</link>
		<comments>http://5509.me/log/join-the-pixelgrid#comments</comments>
		<pubDate>Sat, 04 Jun 2011 12:16:09 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[Diary]]></category>
		<category><![CDATA[memo]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4677</guid>
		<description><![CDATA[					先月までばたばたしていて、アーカイブの穴がまた空いてしまったのですが、、それはおいておいて、5月いっぱいでマインドフリーを退職し、6月からは居住地を東京に移し、ピクセルグリッドで働いています。
					（pi [...]]]></description>
			<content:encoded><![CDATA[					<p>先月までばたばたしていて、アーカイブの穴がまた空いてしまったのですが、、それはおいておいて、5月いっぱいで<a href="http://mindfree.jp/">マインドフリー</a>を退職し、6月からは居住地を東京に移し、<a href="http://pxgrid.com/">ピクセルグリッド</a>で働いています。</p>
					<p>（pixelgrid.push(&#8220;5509&#8243;) とかしようと思ったけど意味違ってくるかと思ってやめました）</p>
					<p>色んな意味で刺激的すぎて毎日鼻血出っぱなしです。血が足りない。</p>
					<p>ディレクターからフロントエンジニアになり、いや以前もディレクターと言いつつ開発ばっかりしてましたけどｗ、UIをもっともっとアレしたいなぁと思ってるアレです。アレはソレとかコレで補完してください。</p>
					<p>関東はこれで三度目なので特にこれといって不便とかないですが、まぁ・・・車が多いし道混みすぎてますね。大体バイク移動なのですいすいです。</p>
					<p>そんなわけでせっかく東京に来たので、色々参加していこうと思ってるので、<strong>おもろいこと全然言われへん大阪人ですけど</strong>、こちらの方はよろしくです。今日Sugamo.cssに初参加して<span style="display:none">えどさんのおかげで</span>逆にやる気なくなったり、とかしてないです、恐ろしい集まりやで・・・</p>
					<p>とりあえず、雑貨屋たくさん探そー。いいとこ知ってる方教えてください:)</p>
					<p>あれ、なんか色々書こうと思ったのにいざ書いたら書いたでめっちゃ短い・・・</p>
					<h2>どうでもいいこと</h2>
					<p>直接関係ないですけどFacebookのEmployerのところ変更したら</p>
					<p><img src="http://5509.me/wp-content/uploads/2011/06/facebook_profile.png" alt="" title="facebook_profile" width="451" height="125" class="alignnone size-full wp-image-4679" /></p>
					<p>こういう表記になって、気がきいてるなぁとか思ったのでした。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4677&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/join-the-pixelgrid/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>スマートフォンで使えるフォーム入力内容を消す×ボタンを実装するJSライブラリ</title>
		<link>http://5509.me/log/deletevalue</link>
		<comments>http://5509.me/log/deletevalue#comments</comments>
		<pubDate>Mon, 25 Apr 2011 06:14:20 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[スマートフォン]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4633</guid>
		<description><![CDATA[					
					タイトルが長い・・・入力テキストを消去するUIは検索ボックス（type=search）にだけ有効で、他の（type=textなど）では使えないんですね。でもこの×ボタンの使いやすさは間違いないので。 [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2011/04/iphone_form_.png" alt="×ボタンで入力内容を消すUI" title="×ボタンで入力内容を消すUI" width="320" height="480" class="alignnone size-full wp-image-4638" /></p>
					<p>タイトルが長い・・・入力テキストを消去するUIは検索ボックス（type=search）にだけ有効で、他の（type=textなど）では使えないんですね。でもこの×ボタンの使いやすさは間違いないので。。</p>
					<p>1ヶ月くらい前に作ったのにサンプルを作るのを面倒くさがって公開してなかったものを、サンプルキレイにして公開しておきます。</p>
					<p><a href="http://5509.me/sample/deletevalue">Delete Valueのサンプル</a><br />
					サンプルはiOSとAndroid（<a href="http://5509.me/log/deletevalue#problem_issue0">※1</a>）でしか動作しません。。</p>
					<p>問題点もあるのですが、それは後述。<br />
					<span id="more-4633"></span></p>
					<h2>使い方</h2>
					<h3>ダウンロード</h3>
					<p>ファイルを<a href="https://github.com/5509/deleteValue/archives/master">Githubからダウンロードして</a>ください</p>
					<h3>ファイルの読み込みと実行</h3>
					<p>必要なファイルは<a href="https://github.com/5509/deleteValue/blob/master/source/deleteValue.js">deleteValue.js</a>だけです。<strong>jQueryは必要ありません。</strong>実行はsmartDeleteValueメソッドを実行するだけです。実行対象はjQueryでお馴染みCSSセレクタで指定します</p>
					<pre>&lt;script src="source/deleteValue.js"&gt;&lt;/script&gt;
&lt;script&gt;
&nbsp;&nbsp;GG.smartDeleteValue("#elms input");
&lt;/script&gt;
</pre>
					<h3>オプション</h3>
					<p>実行時の第二引数でオプションを指定できます。</p>
					<pre>GG.smartDeleteValue("#elms input", {
&nbsp;&nbsp;borderRadius    : "10px",
&nbsp;&nbsp;width           : "20px",
&nbsp;&nbsp;height          : "20px",
&nbsp;&nbsp;fontSize        : "20px",
&nbsp;&nbsp;color           : "#efefef",
&nbsp;&nbsp;backgroundColor : "#666",
&nbsp;&nbsp;topAdj          : 2,
&nbsp;&nbsp;leftAdj         : -3,
&nbsp;&nbsp;opacity         : .8,
&nbsp;&nbsp;closeLabel      : "&times;"
});</pre>
					<h4>対応項目一覧</h4>
					<p>以下の値を取れます</p>
					<table border="1" class="lftable">
					<tr>
					<th>borderRadius</th>
					<td>ボタンの角丸の大きさ (def &#8211; &#8220;10px&#8221;</td>
					</tr>
					<tr>
					<th>width</th>
					<td>ボタンの幅 (def &#8211; &#8220;20px&#8221;</td>
					</tr>
					<tr>
					<th>height</th>
					<td>ボタンの高さ (def &#8211; &#8220;20px&#8221;</td>
					</tr>
					<tr>
					<th>fontSize</th>
					<td>ボタンのフォントサイズ (def &#8211; &#8220;20px&#8221;</td>
					</tr>
					<tr>
					<th>color</th>
					<td>ボタンのテキストカラー (def &#8211; &#8220;#efefef&#8221;</td>
					</tr>
					<tr>
					<th>backgroundColor</th>
					<td>ボタンの背景色 (def &#8211; &#8220;#666&#8243;</td>
					</tr>
					<tr>
					<th>topAdj</th>
					<td>ボタンの位置調整上 (def &#8211; &#8220;2&#8243;</td>
					</tr>
					<tr>
					<th>leftAdj</th>
					<td>ボタンの位置調整左 (def &#8211; &#8220;-3&#8243;</td>
					</tr>
					<tr>
					<th>opacity</th>
					<td>ボタンの透過 (def &#8211; &#8220;.8&#8243;</td>
					</tr>
					<tr>
					<th>closeLabel</th>
					<td>ボタンのテキスト (def &#8211; &#8220;&times;&#8221;</td>
					</tr>
					</table>
					<h2>Problem Issues</h2>
					<p>分かる人教えてほしいです。<strong id="problem_issue0">そもそもAndroid端末を持ってないのでAndroidは正式に対応してないです</strong>。一応Galaxy Sでだけ確認しました</p>
					<ul>
					<li>input要素にフォーカスしてるときにorientationchangeが発動しないので、例えばサンプルのようなリキッドレイアウトにしている場合、×ボタンの位置が移動しない</li>
					<li>Androidだとフォーカスしてるinputの×ボタンのtouchstartが取れない（レイヤーが下にきてるような感じ）</li>
					</ul>
					<img src="http://5509.me/?ak_action=api_record_view&id=4633&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/deletevalue/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YUI 3のCSS Fontsを使っている場合のフォントサイズ対応表をCSSのコメントに書いておくと便利ですよね</title>
		<link>http://5509.me/log/yui-fonts-px-table</link>
		<comments>http://5509.me/log/yui-fonts-px-table#comments</comments>
		<pubDate>Sat, 23 Apr 2011 14:36:49 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4612</guid>
		<description><![CDATA[					CSSでフォントサイズの指定って何でしてますか？っていうのは何年も前からある話題で最近は全然見ないですけど、特にそういう議論をしたいわけじゃなくて。
					僕はYUI 3のCSS Fontsを使っていますが [...]]]></description>
			<content:encoded><![CDATA[					<p>CSSでフォントサイズの指定って何でしてますか？っていうのは何年も前からある話題で最近は全然見ないですけど、特にそういう議論をしたいわけじゃなくて。</p>
					<p>僕は<a href="http://yui.yahooapis.com/3.3.0/build/cssfonts/fonts.css">YUI 3のCSS Fonts</a>を使っていますが、%指定になるので実際何pxになるのかCSSだけでは分かりにくいときもあるので、共通CSSに下記のようなコメントでpx対応テーブルを書いておくとすぐに指定できてわかりやすいと思いますが、皆さんどうしてますか？<br />
					<span id="more-4612"></span></p>
					<p><a href="http://developer.yahoo.com/yui/3/cssfonts/#fontsize">フォントサイズのpx対応表</a>はYUI 3のページから持ってきて使ってますが、26pxまでしかないのがたまに不便かもですね。普通のサイト作ってるときは26px以上ってあまり使わないので困らないですけど。</p>
					<h3>共通CSSに記載するpx対応テーブル</h3>
					<pre>/*-----------------------------------------------------------
 hoge.css

 フォントサイズの指定はYUI Fontsに基づき
 下記テーブルで指定します

 &#124;px&#124;%&#124;
 &#124;10&#124;77&#124;
 &#124;11&#124;85&#124;
 &#124;12&#124;93&#124;
 &#124;13&#124;100&#124;
 &#124;14&#124;108&#124;
 &#124;15&#124;116&#124;
 &#124;16&#124;123.1&#124;
 &#124;17&#124;131&#124;
 &#124;18&#124;138.5&#124;
 &#124;19&#124;146.5&#124;
 &#124;20&#124;153.9&#124;
 &#124;21&#124;161.6&#124;
 &#124;22&#124;167&#124;
 &#124;23&#124;174&#124;
 &#124;24&#124;182&#124;
 &#124;25&#124;189&#124;
 &#124;26&#124;197&#124;

 ex) 12px
 element {
 	font-size: 93%;
 }
 ------------------------------------------------------------*/</pre>
					<p>あとは共通CSSで</p>
					<pre>div.main {
&nbsp;&nbsp;font-size: 93%; /* 12px */
}</pre>
					<p>とかにしたら、モジュールとか個別CSSでは最初のコメントにそれ書いておくと分かりやすいですね。</p>
					<h3>リンク</h3>
					<ul>
					<li><a href="http://yui.yahooapis.com/3.3.0/build/cssfonts/fonts.css">YUI 3: CSS Fonts</a></li>
					<li><a href="http://developer.yahoo.com/yui/3/cssfonts/#fontsize">http://developer.yahoo.com/yui/3/cssfonts/#fontsize</a></li>
					</ul>
					<img src="http://5509.me/?ak_action=api_record_view&id=4612&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/yui-fonts-px-table/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>WebStormのシンタックスハイライトのトワイライトっぽいテーマ共有しときます</title>
		<link>http://5509.me/log/webstorm-syntax-highlight</link>
		<comments>http://5509.me/log/webstorm-syntax-highlight#comments</comments>
		<pubDate>Wed, 20 Apr 2011 16:41:55 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[WebStorm]]></category>
		<category><![CDATA[シンタックスハイライト]]></category>
		<category><![CDATA[テーマ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4601</guid>
		<description><![CDATA[					
					タイトルままです。白いのはアレなのでダークなやつを。CodaをベースにちょっとVimのやつも取り入れつつ。HTML/CSS/JavaScriptはいい感じになるかもしれないけど、JSがちょっと項目多 [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2011/04/webstorm.png" alt="WebStormのシンタックスハイライトテーマ" title="WebStormのシンタックスハイライトテーマ" width="450" class="alignnone size-full wp-image-4603" /></p>
					<p>タイトルままです。白いのはアレなのでダークなやつを。CodaをベースにちょっとVimのやつも取り入れつつ。HTML/CSS/JavaScriptはいい感じになるかもしれないけど、JSがちょっと項目多すぎて断念した・・・これからまた変わっていくかも。誰かきれいなやつあったらください・・・</p>
					<p><a href="/data/09.zip" onclick="_gaq.push(['_trackEvent', 'Download', 'WebStorm Syntax'])">09.zip</a></p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4601&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/webstorm-syntax-highlight/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ブログのおれ最適化パート2: アクセスキー</title>
		<link>http://5509.me/log/blog-self-optimization-part2-access-key</link>
		<comments>http://5509.me/log/blog-self-optimization-part2-access-key#comments</comments>
		<pubDate>Tue, 19 Apr 2011 07:07:11 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[アクセシビリティ]]></category>
		<category><![CDATA[ユーザビリティ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4585</guid>
		<description><![CDATA[					パート1は前回の「めくる感覚で行き来できるページナビゲーションをCSSで実装する」です。
					アクセスキーなんか別段目新しいことなんかないですけども以下のキーで怠惰な気分になれます。絶賛実験中なのでタイミ [...]]]></description>
			<content:encoded><![CDATA[					<p>パート1は前回の「<a href="http://5509.me/log/single-column-pagenavigation">めくる感覚で行き来できるページナビゲーションをCSSで実装する</a>」です。</p>
					<p>アクセスキーなんか別段目新しいことなんかないですけども以下のキーで怠惰な気分になれます。絶賛実験中なのでタイミングと僕の気分で割り当ては変わります。<br />
					<span id="more-4585"></span></p>
					<h3>index.php</h3>
					<ul>
					<li><kbd>h</kbd>: ページトップへ移動</li>
					<li><kbd>j</kbd>: ひとつ新しい記事を先頭に</li>
					<li><kbd>k</kbd>: ひとつ古い記事を先頭に<a href="#accesskey_note1">*1</a>）</li>
					<li><kbd>u</kbd>: j,kで送った現在の記事のパーマリンクへ遷移</li>
					<li><kbd>l</kbd>: ページ一番下へ移動</li>
					</ul>
					<p class="note" id="accesskey_note1">*1 ) 最後までいくとautopagerize、但しページャー左の■をクリックして本にしておく必要あり</p>
					<p class="note">indexとsingleで<kbd>j</kbd>と<kbd>k</kbd>の動作が逆になってるけど、今のところはこれで</p>
					<h3>single.phpなど</h3>
					<ul>
					<li><kbd>h</kbd>: ページトップへ移動</li>
					<li><kbd>j</kbd>: ひとつ古い記事のパーマリンクへ遷移</li>
					<li><kbd>k</kbd>: ひとつ新しい記事のパーマリンクへ遷移</li>
					<li><kbd>u</kbd>: コメント入力欄まで移動</li>
					<li><kbd>l</kbd>: ページ一番下へ移動</li>
					</ul>
					<h3>現状のソースコード</h3>
					<pre>$(window)
&nbsp;&nbsp;// Firefoxだとalertが表示されたときにフォーカスがずれて
&nbsp;&nbsp;// 以降ドキュメントを一度クリックしないとキーコントロールが効かないので
&nbsp;&nbsp;// なんかダイアログなのをどこかで実装しないとだめっぽい
&nbsp;&nbsp;.keyup(function(e) {
&nbsp;&nbsp;&nbsp;&nbsp;var key = e.keyCode, b = $("body");
&nbsp;&nbsp;&nbsp;&nbsp;switch( key ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// h
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 72:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.scroll(0, 0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// j
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 74:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( !b.hasClass("home") ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( !$("#prev").length ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//alert("今見ている記事が一番古い記事です");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location.href = $("#prev a")[0].href;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( currentArticle === 0 ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//alert("これ以上記事がありません");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.scroll(0, articles.eq(--currentArticle).offset().top - 40);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// k
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 75:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( !b.hasClass("home") ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( !$("#next").length ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//alert("今見ている記事が最新です");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location.href = $("#next a")[0].href;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( !articles.eq(++currentArticle).length ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//alert("続きを読み込み中・・・ずっとこれが表示されたらもう記事がないです");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentArticle--;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( ( currentArticle + 1 ) === articles.length ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadingNextPage();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.scroll(0, articles.eq(currentArticle).offset().top - 40);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// l
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 76:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.scroll(0, $("html").attr("scrollHeight"));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// u
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 85:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( !b.hasClass("home") ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( !$("#respond").length ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//alert("コメントは記事詳細で確認できます");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.scroll(0, $("#respond").offset().top - 50);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location.href = articles.eq(currentArticle).find("header").find("a:first").attr("href");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;});
$("input, textarea").keyup(function(e) {
&nbsp;&nbsp;e.stopPropagation();
});</pre>
					<img src="http://5509.me/?ak_action=api_record_view&id=4585&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/blog-self-optimization-part2-access-key/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>めくる感覚で行き来できるページナビゲーションをCSSで実装する</title>
		<link>http://5509.me/log/single-column-pagenavigation</link>
		<comments>http://5509.me/log/single-column-pagenavigation#comments</comments>
		<pubDate>Thu, 07 Apr 2011 06:21:29 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[ナビゲーション]]></category>
		<category><![CDATA[ユーザビリティ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4542</guid>
		<description><![CDATA[					
					要らないものを削った結果、記事が縦に長くなってしまうもんで、ページナビゲーション（前の記事、次の記事リンク）をどうしようかなぁとか思ってた。
					ちょうど、シロさん(]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2011/04/pagenav1.png" alt="ページナビゲーションが表示された状態のキャプチャ" title="ページナビゲーションが表示された状態のキャプチャ" width="550" height="232" class="alignnone size-full wp-image-4551" /></p>
					<p>要らないものを削った結果、記事が縦に長くなってしまうもんで、ページナビゲーション（前の記事、次の記事リンク）をどうしようかなぁとか思ってた。</p>
					<p>ちょうど、シロさん(<a href="href="http://twitter.com/___shiro_">@___shiro_</a>)が<a href="http://twitter.com/___shiro_/status/55500005473132544">大胆なナビゲーション云々とTweetしてた</a>のを見て、なーるほどと思い実装してみた。</p>
					<p>こういったレイアウトのアーカイブのナビゲーションで、元のHTMLを一切触らずCSSだけで飛躍的に（？）ユーザビリティを高められるいい例になったかなぁ。どうやろ。その辺は要検証ということで。少なくとも自分で使う分には超使いやすいからこれはこれでオッケーなんですけども。<br />
					<span id="more-4542"></span></p>
					<h2>配置を決める</h2>
					<p>真ん中にでーんとコンテンツがあるので、横の余った位置に戻るとか進むとかつけます。</p>
					<p>構成とかは以下みたいにすればたぶんいけそうという感じで配置してます。</p>
					<p><img src="http://5509.me/wp-content/uploads/2011/04/pagenav3.png" alt="ナビゲーションとコンテンツの位置関係1"  width="550" height="356" class="alignnone size-full wp-image-4554" /></p>
					<p>ナビゲーションを50%:50%でprev:nextをposition: fixedで配置しておき、その上にコンテンツをかぶせる。青い部分がprev、赤い部分がnextです。</p>
					<p><img src="http://5509.me/wp-content/uploads/2011/04/pagenav2.png" alt="ナビゲーションとコンテンツの位置関係2" width="550" height="356" class="alignnone size-full wp-image-4553" /></p>
					<h2>実装コード</h2>
					<h3>HTML</h3>
					<p>諸々端折ってるんですけど、HTMLは以下みたいな感じ。</p>
					<pre>&lt;header/&gt;
&lt;div class=&quot;pagebody&quot;&gt;
&nbsp;&nbsp;&lt;article&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- hogehoge --&gt;
&nbsp;&nbsp;&lt;/article&gt;
&nbsp;&nbsp;&lt;!--//Entry --&gt;
&nbsp;&nbsp;&lt;p id=&quot;pageNavigation&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;span id=&quot;prev&quot; title=&quot;&#21069;&#12398;&#12456;&#12531;&#12488;&#12522;&#12540;&#12408;&quot;&gt;%link&lt;/span&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;span id=&quot;next&quot; title=&quot;&#27425;&#12398;&#12456;&#12531;&#12488;&#12522;&#12540;&#12408;&quot;&gt;%link&lt;/span&gt;
&nbsp;&nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;sub&quot;/&gt;
&lt;footer/&gt;</pre>
					<h3>CSS（コンテンツ部分）</h3>
					<p>ページナビゲーションはコンテンツの下に配置する必要があるので、z-index: -1;を与えて下へ。コンテンツ部分は1とかそういう感じで。</p>
					<pre>header {
&nbsp;&nbsp;position: relative;
&nbsp;&nbsp;z-index: 10;
&nbsp;&nbsp;background: #fff;
}
div.pagebody,
div.sub,
body > footer {
&nbsp;&nbsp;position: relative;
&nbsp;&nbsp;z-index: 1;
&nbsp;&nbsp;background: #fff;
}</pre>
					<p>headerだけ10なのは覆いかぶさるレイヤーがあるからです。なければ1で。</p>
					<h3>CSS（ナビゲーション）</h3>
					<p>ナビゲーションのところはCSSを利用して本来のテキストは非表示にする代わりに、:afterにcontent: &#8220;<"と">&#8220;を入れてオフのときでもよく分からなくならないように配慮したり。</p>
					<p>あとは:afterで追加される要素をspan#prev(next)のposition: relativeに対して、absoluteとネガティブマージンでいい位置にくるように調整してます。</p>
					<p>:afterで追加する要素はa要素よりも上に位置するので、これにも-1を与えてa要素より下に配置してます。そこにカーソルがのったときにリンク使えない、じゃ話にならんですしお寿司。</p>
					<pre>div.pagebody #pageNavigation {
&nbsp;&nbsp;margin: 0;
&nbsp;&nbsp;position: relative;
&nbsp;&nbsp;z-index: -1;
&nbsp;&nbsp;font-size: 100%;
}

&nbsp;&nbsp;div.pagebody #pageNavigation span {
&nbsp;&nbsp;&nbsp;&nbsp;width: 50%;
&nbsp;&nbsp;&nbsp;&nbsp;height: 100%;
&nbsp;&nbsp;&nbsp;&nbsp;position: fixed;
&nbsp;&nbsp;&nbsp;&nbsp;top: 0;
&nbsp;&nbsp;}
&nbsp;&nbsp;div.pagebody #pageNavigation #prev {
&nbsp;&nbsp;&nbsp;&nbsp;left: 0;
&nbsp;&nbsp;}
&nbsp;&nbsp;div.pagebody #pageNavigation #next {
&nbsp;&nbsp;&nbsp;&nbsp;right: 0;
&nbsp;&nbsp;}
&nbsp;&nbsp;div.pagebody #pageNavigation span:after {
&nbsp;&nbsp;&nbsp;&nbsp;margin-top: -90px;
&nbsp;&nbsp;&nbsp;&nbsp;display: block;
&nbsp;&nbsp;&nbsp;&nbsp;position: absolute;
&nbsp;&nbsp;&nbsp;&nbsp;top: 50%;
&nbsp;&nbsp;&nbsp;&nbsp;color: #888;
&nbsp;&nbsp;&nbsp;&nbsp;font-size: 100px;
&nbsp;&nbsp;&nbsp;&nbsp;font-weight: bold;
&nbsp;&nbsp;&nbsp;&nbsp;font-family: Helvetica, Verdana, sans-serif;
&nbsp;&nbsp;&nbsp;&nbsp;z-index: -1;
&nbsp;&nbsp;}
&nbsp;&nbsp;div.pagebody #pageNavigation span#prev:after {
&nbsp;&nbsp;&nbsp;&nbsp;margin-left: -50px;
&nbsp;&nbsp;&nbsp;&nbsp;content: &quot;&lt;&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;left: 20%;
&nbsp;&nbsp;}
&nbsp;&nbsp;div.pagebody #pageNavigation span#next:after {
&nbsp;&nbsp;&nbsp;&nbsp;margin-right: -50px;
&nbsp;&nbsp;&nbsp;&nbsp;content: &quot;&gt;&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;right: 20%;
&nbsp;&nbsp;}
&nbsp;&nbsp;div.pagebody #pageNavigation span:hover:after {
&nbsp;&nbsp;&nbsp;&nbsp;color: #f3e720;
&nbsp;&nbsp;}
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;div.pagebody #pageNavigation span a {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display: block;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height: 100%;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position: relative;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text-indent: -1000em;
&nbsp;&nbsp;&nbsp;&nbsp;}</pre>
					<h2>そんなわけで</h2>
					<p>:afterとかcontentプロパティはCSSオン環境でより使いやすさを向上させるためにあるんだなーとかいうのを再認識した次第です。</p>
					<p>えっと、予想してると思いますけど、IE6と7は非対応です。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4542&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/single-column-pagenavigation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQueryのbind、unbindみたいにnamespace使ってaddEventとかremoveEventできるやつ</title>
		<link>http://5509.me/log/bind-and-unbind-funcs</link>
		<comments>http://5509.me/log/bind-and-unbind-funcs#comments</comments>
		<pubDate>Tue, 05 Apr 2011 17:47:23 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[addEvent]]></category>
		<category><![CDATA[namespace]]></category>
		<category><![CDATA[removeEvent]]></category>
		<category><![CDATA[名前空間]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4518</guid>
		<description><![CDATA[					jQueryのbindとunbindは超便利やなぁと思って、arguments.calleeじゃなくてもremoveEventできるようなやつ書いた。addEventListenerとremoveEventLi [...]]]></description>
			<content:encoded><![CDATA[					<p>jQueryのbindとunbindは超便利やなぁと思って、arguments.calleeじゃなくてもremoveEventできるようなやつ書いた。addEventListenerとremoveEventLisetenerにnamespace渡して管理できる的な。iOSで動けばいいからattachEventとdetachEventは入れてないです。</p>
					<p>結局思いついたやり方でやって、jQueryちゃんと読んでないけど、やり方はこんな感じ？つまり絶賛勉強中。。</p>
					<p class="note">巡り巡ってElement.prototypeを断念、、<del datetime="2011-04-06T03:47:52+00:00">ソース修正した。どうせならこっちの方が使いやすいかも。Elementのprototypeに差し込んだ</del></p>
					<p>revision: <a href="https://gist.github.com/904063">gist: 904063</a><br />
					<span id="more-4518"></span></p>
					<h2>bindの使い方</h2>
					<h3>一番ベーシック</h3>
					<p>普通のaddEventListenerと同じ</p>
					<pre>bind(hoge, type, func);</pre>
<h3>名前空間</h3>
<p>名前空間使ってaddEventする（unbind用）</p>
<pre>bind(hoge, type.namespace, func);</pre>
					<h3>一括addEvent</h3>
					<p>複数のイベントを一括でaddEvent</p>
					<pre>bind(hoge, {
&nbsp;&nbsp;"click": func,
&nbsp;&nbsp;"dblclick": func
});</pre>
					<h2>unbindの使い方</h2>
					<h3>全てのイベントを解除</h3>
					<p>全部消える</p>
					<pre>unbind(hoge);</pre>
<h3>指定したtypeのイベントを解除</h3>
<p>&#8220;click&#8221;にひもづいてるイベントが全部消える</p>
<pre>unbind(hoge, type);</pre>
					<h3>指定したtype.namespaceのイベントを解除</h3>
					<p>&#8220;click.unko&#8221;のイベントのみ消える</p>
					<pre>unbind(hoge, type.namespace);</pre>
<p><del datetime="2011-04-06T02:32:44+00:00">なんかでも中途半端でところどころうまく動いてないかも。</del></p>
<pre>/*
 * bind, unbind
 *
 * @author    : nori(norimania@gmail.com)
 * @copyright : 5509(http://5509.me/)
 * @license   : The MIT License
 * @modified  : 2011-04-06 13:00
 *
 * HOW TO USE
 * bind event          : bind(elm, type, func) or bind(elm, {})
 * bind event.name     : bind(elm, type.name, func)
 * unbind all events   : unbind(elm)
 * unbind events(type) : unbind(elm, type)
 * unbind event.name   : unbind(elm, type.name)
 */
YOURNAMESPACE.bind = function() {
&nbsp;&nbsp;var i, _a = arguments;
&nbsp;&nbsp;// 一括登録
&nbsp;&nbsp;if ( typeof _a[1] === "object" ) {
&nbsp;&nbsp;&nbsp;&nbsp;for ( i in _a[1] ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bindFunc(i, _a[1][i]);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;// 単体登録
&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;bindFunc(_a[1], _a[2]);
&nbsp;&nbsp;}
&nbsp;&nbsp;function bindFunc(type, func) {
&nbsp;&nbsp;&nbsp;&nbsp;var i;
&nbsp;&nbsp;&nbsp;&nbsp;type = type.split(" ");
&nbsp;&nbsp;&nbsp;&nbsp;for ( i = 0, l = type.length; i < l; i++ ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 名前空間の指定がある場合
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( type[i].indexOf(".") !== -1 ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type[i] = type[i].split(".");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_a[0]["bindedNamed"] = _a[0]["bindedNamed"] || {};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_a[0]["bindedNamed"][type[i][0]] = _a[0]["bindedNamed"][type[i][0]] || {};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_a[0]["bindedNamed"][type[i][0]][type[i][1]] = func;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_a[0].addEventListener(type[i][0], func, false);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 名前空間の指定がない場合
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_a[0]["binded"] = _a[0]["binded"] || {};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_a[0]["binded"][type] = _a[0]["binded"][type] || [];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_a[0]["binded"][type][_a[0]["binded"][type].length] = func;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_a[0].addEventListener(type[i], func, false);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
}
YOURNAMESPACE.unbind = function(elm, type) {
&nbsp;&nbsp;var i = 0, c, d, bindedTypes, bindedEvents, bindedNamedEvents;
&nbsp;&nbsp;// typeがない場合は全削除
&nbsp;&nbsp;if ( !type ) {
&nbsp;&nbsp;&nbsp;&nbsp;// 名前空間無しのイベントを削除
&nbsp;&nbsp;&nbsp;&nbsp;if ( elm["binded"] ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bindedTypes = elm["binded"];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ( c in bindedTypes ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bindedEvents = bindedTypes[c];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while ( bindedEvents[i] ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elm.removeEventListener(c, bindedEvents[i], false);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bindedEvents.splice(i, i + 1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;// 名前空間有りのイベントを削除
&nbsp;&nbsp;&nbsp;&nbsp;if ( !elm["bindedNamed"] ) return false;
&nbsp;&nbsp;&nbsp;&nbsp;bindedNamedEvents = elm["bindedNamed"];
&nbsp;&nbsp;&nbsp;&nbsp;for ( c in bindedNamedEvents ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ( d in bindedNamedEvents[c] ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elm.removeEventListener(c, bindedNamedEvents[c][d], false);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete bindedNamedEvents[c];
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;} else
&nbsp;&nbsp;// namespaceの指定がある場合は単体削除
&nbsp;&nbsp;if ( type.indexOf(".") !== -1 ) {
&nbsp;&nbsp;&nbsp;&nbsp;type = type.split(".");
&nbsp;&nbsp;&nbsp;&nbsp;elm.removeEventListener(type[0], elm["bindedNamed"][type[0]][type[1]], false);
&nbsp;&nbsp;// typeはあるけど名前空間の指定がない場合はtypeだけ削除
&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;// 名前空間無しのイベントを削除
&nbsp;&nbsp;&nbsp;&nbsp;if ( elm["binded"] &#038;&#038; elm["binded"][type] ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bindedEvents = elm["binded"][type];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while ( bindedEvents[i] ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elm.removeEventListener(type, bindedEvents[i], false);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bindedEvents.splice(i, i + 1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;// 名前空間有りのイベントを削除
&nbsp;&nbsp;&nbsp;&nbsp;if ( !elm["bindedNamed"] || !elm["bindedNamed"][type] ) return false;
&nbsp;&nbsp;&nbsp;&nbsp;bindedNamedEvents = elm["bindedNamed"][type];
&nbsp;&nbsp;&nbsp;&nbsp;for ( c in bindedNamedEvents ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elm.removeEventListener(type, bindedNamedEvents[c], false);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;delete bindedNamedEvents;
&nbsp;&nbsp;}
}</pre>
					<img src="http://5509.me/?ak_action=api_record_view&id=4518&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/bind-and-unbind-funcs/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQueryでWordPressにAjax検索を実装する</title>
		<link>http://5509.me/log/making-ajax-search</link>
		<comments>http://5509.me/log/making-ajax-search#comments</comments>
		<pubDate>Mon, 04 Apr 2011 14:16:20 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[カスタマイズ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4497</guid>
		<description><![CDATA[					ナビゲーション改善のために検索をAjaxにしてリアルタイムにできるようにしました。WordPressなら楽々実装できます。本当は誰でも簡単に使えるようにコピペできるような内容にしようと思ったりもしたんですけど、 [...]]]></description>
			<content:encoded><![CDATA[					<p>ナビゲーション改善のために検索をAjaxにしてリアルタイムにできるようにしました。WordPressなら楽々実装できます。本当は誰でも簡単に使えるようにコピペできるような内容にしようと思ったりもしたんですけど、残念ながら面倒くさくなったので、僕がこのブログに実装したコードを貼るだけにします。そうです、これが手抜きです。<br />
					<span id="more-4497"></span></p>
					<h2>search.phpをXHR対応にする（JSONで返すようにする）</h2>
					<p>下のソースコードをsearch.phpの頭にペタっと。あ、テンプレート名とか書いてあるコメントの下です。</p>
					<pre>&lt;?php
if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
    header('Content-Type: application/json');
    query_posts($query_string . '&#038;posts_per_page=100');
    $response = array(
        'posts' =&gt; array()
    );
    while (have_posts()) {
        the_post();
        $response['posts'][] = array(
            'title' =&gt; the_title(&quot;&quot;,&quot;&quot;,false),
            'link' =&gt; get_permalink() // descriptionとか色々追加できる
        );
    }
    echo json_encode($response);
    exit(0);
}
?&gt;</pre>
					<p>これでXHRでリクエストするとこんな感じのJSONが返ってきます。</p>
					<pre>{"posts":[{"title":"2010\u5e74\u306e\u4eba\u6c17\u30a8\u30f3\u30c8\u30ea\u30fc\u307e\u3068\u3081\u307e\u3057\u305f\u3093\uff01","link":"http:\/\/5509.me\/log\/popular-entries"},{"title":"\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u306e\u6b8b\u308a\u5165\u529b\u6587\u5b57\u6570\u3092\u30b7\u30f3\u30d7\u30eb\u306b\u8868\u793a\u3059\u308bjQuery\u30d7\u30e9\u30b0\u30a4\u30f3 m5simpleTextCount","link":"http:\/\/5509.me\/log\/m5simpletextcount"}....]}</pre>
<h2>JSソース</h2>
<p>トリガーは検索ボックスに何か入力したときにしています。エンター押したときでもいいです。そのときは.submit()に$.ajax()を書くだけなのでもっと簡単です。とりあえずブログの検索はβなので、もしかするとsubmitタイプに変えるかもしれないです。</p>
<pre>var xhr,
    keyword = $(&quot;#s&quot;),
    searchResult = $(&quot;#searchResult&quot;).hide(),
    searchResultList = $(&quot;#searchResultList&quot;),
    searchLoading = $(&quot;#searchLoading&quot;),
    typeTimer;

keyword
    .click(function() {
        var _txt = this.value;
        if ( _txt || _txt.length !== 0 ) {
            searchResult.show();
        }
    })
    .keyup(function() {
        var _txt = this.value;
        // valueがなければ何もしないよ
        if ( !_txt || _txt.length === 0 ) {
            searchResult.hide();
            return false;
        }
        // &#38291;&#12434;&#32622;&#12363;&#12378;&#12395;&#20837;&#21147;&#12375;&#12390;&#12356;&#12427;&#22580;&#21512;&#12399;&#12461;&#12517;&#12540;&#12434;&#21066;&#38500;&#12377;&#12427;
        if ( typeTimer ) {
            clearTimeout(typeTimer);
        }
        if ( xhr ) {
            xhr.abort();
        }
        // typeTimerでkeyupのする度にリクエストするのではなくて
        // 350ミリセカンド以上間があいた場合にリクエストする
        typeTimer = setTimeout(function() {
            searchResultList.html(&quot;&quot;).hide();
            searchLoading.show();
            searchResult.show();
            xhr = $.ajax({
                // search.phpではなくて / に投げる（WPの検索仕様
                url: &quot;/&quot;,
                // 検索クエリを投げる
                data: {
                    s: _txt
                },
                // GETでいいねん
                type: &quot;GET&quot;,
                // jsonで投げるねん
                dataType: &quot;json&quot;,
                error: function() {
                    // errorのときのsomething
                },
                success: function(json) {
                    searchLoading.hide();
                    var _posts = json.posts,
                        _postsLen = _posts.length,
                        i;
                    if ( !_posts || _postsLen === 0 ) {
                        searchResultList.append(&quot;&lt;li&gt;&#12394;&#12395;&#12418;&#12397;&#12540;&#12431;&lt;/li&gt;&quot;);
                    } else {
                        for ( i = 0; i &lt; _postsLen; i++ ) {
                            searchResultList.append(
                                &quot;&lt;li&gt;&lt;a href=\&quot;&quot; + _posts[i].link + &quot;\&quot;&gt;&quot; + _posts[i].title + &quot;&lt;/a&gt;&lt;/li&gt;&quot;
                            );
                        }
                    }
                    searchResultList.show();
                }
            });
        }, 350)
    });</pre>
					<p>なんとこれだけで実装できたっていう話でしたー。本文めっちゃ短い！手抜きの記事ですなぁ。おかしいなぁ、本当なら見た人みんながあれ！簡単！実装してみたい！っていうような内容になるはずやったのに・・・と思ってコメントを少し入れておきました。。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4497&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/making-ajax-search/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ブログのテンプレートを変えました</title>
		<link>http://5509.me/log/5509-ver-3</link>
		<comments>http://5509.me/log/5509-ver-3#comments</comments>
		<pubDate>Fri, 01 Apr 2011 04:18:36 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[Others]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[お知らせ]]></category>
		<category><![CDATA[情報設計]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4471</guid>
		<description><![CDATA[					このブログも初めてもうすぐ4年な気がします。どうも気分屋な僕です、なのにこれだけ続いてるのはすごいなぁとか思いながら、テンプレートを変えました。気分屋でした。
					思いたったのが4月1日のAM1時過ぎ、今 [...]]]></description>
			<content:encoded><![CDATA[					<p>このブログも初めてもうすぐ4年な気がします。どうも気分屋な僕です、なのにこれだけ続いてるのはすごいなぁとか思いながら、テンプレートを変えました。気分屋でした。</p>
					<p>思いたったのが4月1日のAM1時過ぎ、今の状態になったのは4月1日のAM3時前くらいです。</p>
					<p>今回は以下のポイントを重要と考えました。</p>
					<ul>
					<li>文字は大きく</li>
					<li>記事だけに集中できる</li>
					<li>シンプルイズゴールデン</li>
					<li>基本的に記事を読むにあたってブログ側で提供するUIは必要ない</li>
					<li>無駄な待ち時間は発生させない（外部サービスは使わない）</li>
					<li>元のHTMLは極力そのまま使う（時間をかけたくなかったため）</li>
					</ul>
					<p><span id="more-4471"></span></p>
					<p>きれいなデザインのブログには憧れたりするわけですけども、デザインスキルなんか皆無に等しいわけで、僕に出来ることは、「出来る限りムダな情報がない読みやすい」アーカイブを設計することだけでした。</p>
					<p>諸々端折ってまとめると、<strong>「色々なブログを毎日見てるけど、その時に生まれた不満を全部解消した形にしました（ただし自分の中で）。」</strong></p>
					<p>サイトを訪れてくれているユーザーの事も考えないといけないかもしれないですが、自分のブログの一番のユーザーってやっぱり自分自身なんですね(<a href="#cap1">*1</a>)。だから自分で一番読みやすい形にしようと。</p>
					<p>そういう流れから、ソーシャルサービスへのリンクとかカウンタも全部取ってしまいました。</p>
					<p>とは言え、各記事へのアクセシビリティは現段階で最低なので、それはなんとかしたいですけども。あとやってることは全部エクスペリメントなので、もっと読みやすい形式みたいなものがあれば躊躇なく移行すると思います;)</p>
					<p><span id="cap1">*1) </span> 俺の方がヘビーユーザーだぜ！という方がいたらごめんなさい</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4471&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/5509-ver-3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Skype の開催するチャットスタイルコンテストで配布されてるサンプルデータが超便利</title>
		<link>http://5509.me/log/skype-chatstyle-contest-for-mac</link>
		<comments>http://5509.me/log/skype-chatstyle-contest-for-mac#comments</comments>
		<pubDate>Fri, 25 Mar 2011 04:38:47 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Skype]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4444</guid>
		<description><![CDATA[					
					http://macthemes.skype.com/
					Mac限定なんですけど、カスタムチャットスタイルを作って応募すればMacBook AirとかiPadとかもらえるで！っていう内容です [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2011/03/skype-contest.jpg" alt="" title="スカイプが開催するカスタムスタイルコンテストについて" width="500" height="223" class="alignnone size-full wp-image-4445" /></p>
					<p><a href="http://macthemes.skype.com/">http://macthemes.skype.com/</a></p>
					<p>Mac限定なんですけど、カスタムチャットスタイルを作って応募すればMacBook AirとかiPadとかもらえるで！っていう内容です。<br />
					<span id="more-4444"></span></p>
					<p>で、そこはどうでもよくて！</p>
					<p><a href="http://macthemes.skype.com/start" class="active"><img src="http://5509.me/wp-content/uploads/2011/03/skepe-contest2.png" alt="" title="リソースのダウンロードボタンキャプチャ" width="301" height="237" class="alignnone size-full wp-image-4447" /></a></p>
					<p>このコンテストで<a href="http://macthemes.skype.com/start">ダウンロードできるファイル</a>に、シミュレータが入ってるんですね。</p>
					<p><img src="http://5509.me/wp-content/uploads/2011/03/skype-contest3.png" alt="" title="シミュレータのHTMLファイル" width="403" height="242" class="alignnone size-full wp-image-4450" /></p>
					<p>これが超便利で、スカイプのチャットスタイル作るのには必須な感じなので、このページがいつまであるか分からないですけど、早いうちにダウンロードしておいたほうがいいと思います。</p>
					<p><img src="http://5509.me/wp-content/uploads/2011/03/skype-contest4.jpg" alt="" title="シミュレータのキャプチャ" width="500" height="318" class="alignnone size-full wp-image-4452" /><br />
					↑こういうのが入ってる</p>
					<p>SkypeのスタイルはHTML5、CSS3とJavaScriptが使える環境なので、結構面白いです。</p>
					<p>あと、14日くらいしかないみたいですけど、ちょっと触れば割と面白いことに気づくはずなので、いいのが出来たら応募してみればいいんじゃないでしょーか。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4444&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/skype-chatstyle-contest-for-mac/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ページ内の画像がどっしり構えるjQueryプラグイン NiohRoad</title>
		<link>http://5509.me/log/niohroad</link>
		<comments>http://5509.me/log/niohroad#comments</comments>
		<pubDate>Wed, 09 Mar 2011 07:33:33 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[ネタ]]></category>
		<category><![CDATA[誰得]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4397</guid>
		<description><![CDATA[					この前のLazyLoadの話で、LazyDisplayっていうのも作ったりしましたけど・・・
					.bbpBox45369648044195840 {background:url(http://a2.tw [...]]]></description>
			<content:encoded><![CDATA[					<p>この前のLazyLoadの話で、LazyDisplayっていうのも作ったりしましたけど・・・</p>
					<style type='text/css'>.bbpBox45369648044195840 {background:url(http://a2.twimg.com/a/1298664727/images/themes/theme14/bg.gif) #131516;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style>
					<div class='bbpBox45369648044195840'>
					<p class='bbpTweet' style="margin: 0">フワッと出てくる時にイラッとするから止めて欲しいな。文章中の画像表示にエフェクト要らない派なんで、スクロールしたら落ち着いてどっしりそこに構えてて欲しいな。<span class='timestamp'><a title='Wed Mar 09 06:25:41 +0000 2011' href='http://twitter.com/rewish/status/45369648044195840'>less than a minute ago</a> via <a href="http://sites.google.com/site/yorufukurou/" rel="nofollow">YoruFukurou</a></span><span class='metadata'><span class='author'><strong><a href='http://twitter.com/rewish'>Hiroshi Hoaki</a></strong><br/>rewish</span></span></p>
					</div>
					<p> <!-- end of tweet --></p>
					<p>なるほど把握しました。こういうことですか？（某GAZINEから拝借）</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/03/ss_gigazine_nihoroad.png"><img src="http://5509.me/wp-content/uploads/2011/03/ss_gigazine_nihoroad-300x297.png" alt="" title="ss_gigazine_nihoroad" width="300" height="297" class="alignnone size-medium wp-image-4416" /></a></p>
					<p>というわけで例によって<a href="http://5509.me/sample/niohroad/">プラグインにしました</a>。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4397&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/niohroad/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>チェックボックスとかラジオボタンにはlabelを・・・</title>
		<link>http://5509.me/log/checkboxes-and-radios-label</link>
		<comments>http://5509.me/log/checkboxes-and-radios-label#comments</comments>
		<pubDate>Mon, 07 Mar 2011 17:46:35 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[フォーム]]></category>
		<category><![CDATA[ユーザビリティ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4382</guid>
		<description><![CDATA[					labelでwrapされてないチェックボックスとかラジオボタンが多い気がするんですけど（たまたまかもしれないけど）、これってそんなに面倒くさいことですかね・・・いやいやこの記事読んでくれてる人にはいないと思うん [...]]]></description>
			<content:encoded><![CDATA[					<p>labelでwrapされてないチェックボックスとかラジオボタンが多い気がするんですけど（たまたまかもしれないけど）、これってそんなに面倒くさいことですかね・・・いやいやこの記事読んでくれてる人にはいないと思うんですけど。</p>
					<input type="checkbox" name="" value=""> チェックしやすいのはどっち <label><br />
					<input type="checkbox" name="" value=""> チェックしやすいのはどっち</label></p>
					<pre>&lt;input type="checkbox" name="checkbox[]" value="hoge"&gt;hoge
&lt;input type="radio" name="radio[]" value="fuga"&gt;fuga</pre>
					<p>これをlabel要素で囲って</p>
					<pre>&lt;label&gt;&lt;input type="checkbox" name="checkbox[]" value="hoge"&gt;hoge&lt;/label&gt;
&lt;label&gt;&lt;input type="radio" name="radio[]" value="fuga"&gt;fuga&lt;/label&gt;</pre>
					<p>ってするだけですよね。チェックボックスのラベルっぽいところをクリックして文字選択になったときのあの感じ・・・！</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4382&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/checkboxes-and-radios-label/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>画像に遅延表示っぽいエフェクトを与えるだけのm5LazyDisplay</title>
		<link>http://5509.me/log/m5lazydisplay</link>
		<comments>http://5509.me/log/m5lazydisplay#comments</comments>
		<pubDate>Sun, 06 Mar 2011 16:55:52 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[エフェクト]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4369</guid>
		<description><![CDATA[					スクロールしていくとフェードインで表示していくだけのプラグインです。本当にそれだけ。HTTPリクエスト減らすとか、ページロード早くなるとか一切ないです。スクロールしていったときにふわっと表示されるだけです。ちょ [...]]]></description>
			<content:encoded><![CDATA[					<p>スクロールしていくとフェードインで表示していくだけのプラグインです。本当にそれだけ。HTTPリクエスト減らすとか、ページロード早くなるとか一切ないです。スクロールしていったときにふわっと表示されるだけです。ちょっと注目ひきたいときに。</p>
					<p><a href="http://5509.me/sample/m5LazyDisplay/">サンプル</a>見てもらえば何となく伝わると思います</p>
					<p>下記のエントリも併せてどうぞ（セットになってます）<br />
					<a href="http://5509.me/log/lazyload">スクロールするまで画像を読み込まない（はずの）Lazy Loadについて</a></p>
					<h2>ダウンロード</h2>
					<p>ダウンロードは<a href="https://github.com/5509/m5plugins/tree/master/m5LazyDisplay">github</a>から</p>
					<h2>使い方とかをざっくりと</h2>
					<p>対象にしたい画像に実行するだけです。</p>
					<pre>$("img").m5LazyDisplay();</pre>
<h2>本当に</h2>
<p>ただのエフェクトだけなんで</p>
<img src="http://5509.me/?ak_action=api_record_view&id=4369&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/m5lazydisplay/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>スクロールするまで画像を読み込まない（はずの）Lazy Loadについて</title>
		<link>http://5509.me/log/lazyload</link>
		<comments>http://5509.me/log/lazyload#comments</comments>
		<pubDate>Sun, 06 Mar 2011 16:53:52 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[HTTPリクエスト]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[パフォーマンス]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4321</guid>
		<description><![CDATA[					Webパフォーマンスを考える上で重要なことのひとつにHTTPリクエストを減らすというのがありますが・・・
					HTTPリクエストを減らすために、画像の遅延読み込みをすると噂のLazy Loadっていうプラ [...]]]></description>
			<content:encoded><![CDATA[					<p>Webパフォーマンスを考える上で重要なことのひとつにHTTPリクエストを減らすというのがありますが・・・</p>
					<p>HTTPリクエストを減らすために、画像の遅延読み込みをすると噂の<a href="http://www.appelsiini.net/projects/lazyload">Lazy Load</a>っていうプラグインがあって、結構色んなサイトで使われているのを見るので、一言言っとくか的な感じで書こうとしたらいつからか<del datetime="2012-01-10T04:27:24+00:00">プラグインページに以下の注意書きが追加されてた</del>。</p>
					<div class="note">2012-01-10 追記：仕様変更して対応されたようです。とは言え、微妙な感じですが<br />
					<a href="http://www.appelsiini.net/projects/lazyload">http://www.appelsiini.net/projects/lazyload</a>
					</div>
					<blockquote><p>Lazy Load is currently not usable. It does not work with the latest browsers as expected. I have currently no time updating the code myself. Patches are always welcome. If you find a solution just fork and send a pull request. Thanks!</p>
					<p><cite>via: <a href="http://www.appelsiini.net/projects/lazyload">Lazy Load Plugin for jQuery</a></cite></p></blockquote>
					<p>新しいブラウザだと期待した通りの動きをしない、というか遅延読み込みが出来ないから使う意味がないっていう感じです。むしろHTTPリクエストを実質減らせないどころか増やすので今現在使うのはとても微妙な感じです。増やすって言っても表示後にリクエストするんで、ちょっと違いますけど。</p>
					<p>というか昔はできてたんかな・・・その辺まで調べきれてないのでアレです。。<br />
					<span id="more-4321"></span></p>
					<h2>何がどうなっているか</h2>
					<p>とりあえず現状ChromeとFirefoxは以下キャプチャのように2回リクエストしよります。</p>
					<h3>初回リクエスト</h3>
					<p>遅延表示をするはずの画像も全て読み込んでいる</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/03/lazyload_fx1.png"><img src="http://5509.me/wp-content/uploads/2011/03/lazyload_fx1-300x136.png" alt="Lazy Loadのリクエストキャプチャ1 (Firefox)" title="Lazy Loadのリクエストキャプチャ1 (Firefox)" width="300" height="136" class="alignnone size-medium wp-image-4338" /></a></p>
					<h3>キャッシュをオフにしているときにページ下部までスクロール</h3>
					<p>対象全ての画像をもう一度リクエストをしている（キャッシュがないので200）</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/03/lazyload_fx2.png"><img src="http://5509.me/wp-content/uploads/2011/03/lazyload_fx2-300x136.png" alt="Lazy Loadのリクエストキャプチャ2 (Firefox)" title="Lazy Loadのリクエストキャプチャ2 (Firefox)" width="300" height="136" class="alignnone size-medium wp-image-4339" /></a></p>
					<h3>キャッシュがオンでページ下部までスクロール</h3>
					<p>こっちは304やけど表示には時間がかかる</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/03/lazyload_fx3.png"><img src="http://5509.me/wp-content/uploads/2011/03/lazyload_fx3-300x136.png" alt="Lazy Loadのリクエストキャプチャ3 (Firefox)" title="Lazy Loadのリクエストキャプチャ3 (Firefox)" width="300" height="136" class="alignnone size-medium wp-image-4340" /></a></p>
					<h2>原因は？</h2>
					<p>Lazy Loadのアイデアは<a href="http://developer.yahoo.com/yui/3/imageloader/">YUIのImageLoder</a>に相当しますが、そもそもこれらが何をしているかと言うと、例えばこんな画像がHTMLにあったとして</p>
					<pre>&lt;img src=&quot;./images/hoge.jpg&quot; alt=&quot;hogemage&quot;&gt;</pre>
<p>ページをロードしたときに、表示エリアになければsrc属性を空にして表示しないっていうのをやってます。</p>
<pre>&lt;img src=&quot;&quot; alt=&quot;hogemage&quot;&gt;</pre>
					<p>早い話、<strong>DOM Readyの時点で画像のリクエストは走っているので、その後src属性を空にしてもとき既にお寿司で、スクロールして表示したときにsrc属性をつっこんだらまたリクエスト</strong>がっていう流れ。</p>
					<p>ちなみにソース(<a href="http://www.appelsiini.net/download/jquery.lazyload.js">jquery.lazyload.js</a>)は下の部分</p>
					<h3>src属性の削除</h3>
					<pre>if (settings.placeholder) {
&nbsp;&nbsp;$(self).attr("src", settings.placeholder);
} else {
&nbsp;&nbsp;$(self).removeAttr("src");
}</pre>
					<h3>src属性の復帰と表示</h3>
					<pre>$(self).one("appear", function() {
&nbsp;&nbsp;if (!this.loaded) {
&nbsp;&nbsp;&nbsp;&nbsp;$("&lt;img /&gt;")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.bind("load", function() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(self)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.hide()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.attr("src", $(self).attr("original"))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[settings.effect](settings.effectspeed);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.loaded = true;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.attr("src", $(self).attr("original"));
&nbsp;&nbsp;&nbsp;&nbsp;};
});</pre>
					<h2>というわけで</h2>
					<p>Lazy Loadの作者も言ってますけど、現状使う意味はない、というか無駄が多くなるので、無駄がないプラグインを作りました。</p>
					<p><a href="http://5509.me/log/m5lazydisplay">画像の遅延表示エフェクトを与えるだけのm5LazyDisplay</a></p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4321&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/lazyload/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HTML5で追加されるclassList APIについてのメモ</title>
		<link>http://5509.me/log/classlist-api</link>
		<comments>http://5509.me/log/classlist-api#comments</comments>
		<pubDate>Fri, 04 Mar 2011 04:56:39 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[classapi dom html5 jquery]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4295</guid>
		<description><![CDATA[					一部嘘を付いていたので修正しました。has ⇛ contains
					WHATWGのリンク先も修正しました。ありがとうございます＞＜
					簡単に調べたメモ。特に進展はないよ。
					早い話jQu [...]]]></description>
			<content:encoded><![CDATA[					<p class="note"><strong>一部嘘を付いていたので修正しました。has ⇛ contains<br />
					WHATWGのリンク先も修正しました。ありがとうございます＞＜</strong></p>
					<p>簡単に調べたメモ。特に進展はないよ。</p>
					<p>早い話jQueryのaddClassやremoveClass、hasClassっていうメソッドをネイティブに実装するからみんな楽朕っていうやつです。</p>
					<ul>
					<li><a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/urls.html#domtokenlist-0">WHATWG &#8211; HTML5 &#8211; 2.8.3 DOMTokenList</a>（リンク先修正しました</li>
					<li><a href="http://davidwalsh.name/classlist">HTML5 classList API</a></li>
					<li><a href="http://standards.mitsue.co.jp/archives/001479.html">classList (DOMTokenList) の実装状況</a></li>
					</ul>
					<p><span id="more-4295"></span></p>
					<h2>何が出来るの</h2>
					<pre>var div = document.getElementById("unk0");

div.classList.add("kusai"); // classにkusaiを追加
div.classList.remove("kusai"); // classからkusaiを削除

div.classList.toggle("kusai"); // kusaiを付けたり取ったり

if ( div.classList.contains("kusai") ) { // classにkusaiがあればtrue、逆はfalse
&nbsp;&nbsp;// くさければ
} else {
&nbsp;&nbsp;// くさくなければ
}</pre>
					<p>今まではめんどくさいけど、一旦取得して正規表現で判定してとか、replaceで削除してとかそういった手間が一切なくなるっていうやつです。</p>
					<h2>実装状況</h2>
					<p>IE9はちょっと手元になかったので見れてないですけど</p>
					<ul>
					<li>Firefox3.6以降</li>
					<li>Chrome10.0.648.126 (Win</li>
					<li>Chrome9.0.597.107（Mac</li>
					</ul>
					<p>で使えるっぽいです。つまりまだちょっと早い。Mobile Safari（iOS4.2）も当然まだ使えないです。</p>
					<p><a href="http://dl.dropbox.com/u/623486/classList/index.html">一応作ったサンプル置いときます</a><br />
					使えるブラウザは上のやつです。なんかどれくらい差があるんやろー思ってそういう感じにしたんですけど、よくわからんすね</p>
					<h2>classListとjQueryのメソッドの比較</h2>
					<p>jQueryだと実装されてるので、まあそういう感じだということで把握しました。もちろんjQueryはネイティブで本来やる流れを吸収してくれてるので、classListのほうが早いよね、便利やでっていうことです。</p>
					<p>あと大きな違いは、classListはひとつのDOMにしか使えないのに対してjQueryのメソッド（hasClass除く）は複数のjQueryオブジェクトに使えるっていうことですね。吸収してくれる</p>
					<h3>classList</h3>
					<pre>var div = document.getElementById("unk0");

div.classList.add("kusai"); // classにkusaiを追加
div.classList.remove("kusai"); // classからkusaiを削除

div.classList.toggle("kusai"); // kusaiを付けたり取ったり

if ( div.classList.contains("kusai") ) { // classにkusaiがあればtrue、逆はfalse
&nbsp;&nbsp;// くさければ
} else {
&nbsp;&nbsp;// くさくなければ
}</pre>
					<h3>jQuery</h3>
					<pre>var div = $("#unk0");

div.addClass("kusai"); // classにkusaiを追加
div.removeClass("kusai"); // classからkusaiを削除

div.toggleClass("kusai"); // kusaiを付けたり取ったり

if ( div.hasClass("kusai") ) { // classにkusaiがあればtrue、逆はfalse
&nbsp;&nbsp;// くさければ
} else {
&nbsp;&nbsp;// くさくなければ
}</pre>
					<img src="http://5509.me/?ak_action=api_record_view&id=4295&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/classlist-api/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQueryをmootoolsなどの他のライブラリと干渉しないようにする方法まとめ</title>
		<link>http://5509.me/log/using-jquery-safely</link>
		<comments>http://5509.me/log/using-jquery-safely#comments</comments>
		<pubDate>Wed, 02 Mar 2011 09:06:16 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[まとめ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4268</guid>
		<description><![CDATA[					ブログとかのプラグインでよく分からず使ってる人もいるみたいですし。結論は一番上のやつやってればいいんですけど、というか、プラグインソースは全部こうなってないとだめなんですけど、古いソースコードはそうなっていない [...]]]></description>
			<content:encoded><![CDATA[					<p>ブログとかのプラグインでよく分からず使ってる人もいるみたいですし。結論は一番上のやつやってればいいんですけど、というか、プラグインソースは全部こうなってないとだめなんですけど、古いソースコードはそうなっていないものもあったりして（thickboxとか）、思いつく方法全部書き出します。<br />
					<span id="more-4268"></span></p>
					<ul>
					<li><a href="#s1">カプセル化する（これだけやればOK</a></li>
					<li><a href="#s2">jQuery.noConflictを使う</a></li>
					<li><a href="#s3">$をjQueryに置き換える</a></li>
					<li><a href="#s4">jQueryを使わない</a></li>
					<li><a href="#s5">jQueryだけを使う</a></li>
					</ul>
					<h2 id="s1">カプセル化する（これだけやればOK</h2>
					<p>プラグインソースを</p>
					<pre>(function($) {
&nbsp;&nbsp;// hogehoge
})(jQuery);</pre>
					<p>で囲むだけ。ソースコードは // hogehoge のところに入れてください。これは簡単に言うと、(function($) { })(jQuery); に囲まれた中では $ = jQuery として扱われるのですね。この中はソースコードの隠蔽が行われていて外からはよく見えなくなっているので、他のライブラリと干渉することもありません。</p>
					<p>あとクラス振るとか、しましまテーブルとかそういう簡単なやつは自分で書いてると思いますが</p>
					<pre>$(function() {
&nbsp;&nbsp;// hogehoge
});</pre>
					<p>こんなやつの中に書いてると思いますけど</p>
					<pre>jQuery(function($) {
&nbsp;&nbsp;// hogehoge
});</pre>
					<p>こっちに変えてください。こっちは以前紹介したと思いますけど、そもそも</p>
					<pre>$(function() { });</pre>
<p>っていうのは</p>
<pre>$(document).ready(function() { });</pre>
					<p>の簡易版になってて（ソースコードが短くてすむ）、これの$をjQueryに置き換えたものが</p>
					<pre>jQuery(document).ready(function($) { });</pre>
<p>でさらに短く戻して</p>
<pre>jQuery(function($) { });</pre>
					<p>になるというわけです。</p>
					<h2 id="s2">jQuery.noConflictを使う</h2>
					<p>jQueryが出た当初はこれがよく使われてましたなぁ</p>
					<pre>var $j = jQuery.noConflict();
$j("hoge").addClass("hage");</pre>
					<p>つまり$を$jと置き換えるんですね。</p>
					<h2 id="s3">$をjQueryに置き換える</h2>
					<p>超手間がかかりますが $ を jQuery に置き換えていきます。え？一括置換すればいいやん、とか思ってる人はちょっと気をつけてください。正規表現とかjQueryの属性マッチングでも$は使われています。</p>
					<p>一括置換したら動かなくなった、っていうのはよくありがちな話っぽいですよ。</p>
					<h2 id="s4">jQueryを使わない</h2>
					<p>なんてことはないです。つまりjQueryを使わなければ干渉する心配もないのです。</p>
					<h2 id="s5">jQueryだけを使う</h2>
					<p>その逆もその通りｄ（ｒｙ</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4268&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/using-jquery-safely/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JSファイルを含むページをAjaxロードしたときにJSを実行しないさせないしたくない</title>
		<link>http://5509.me/log/ajax-load-and-not-to-execute-scripts</link>
		<comments>http://5509.me/log/ajax-load-and-not-to-execute-scripts#comments</comments>
		<pubDate>Mon, 28 Feb 2011 06:32:30 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4255</guid>
		<description><![CDATA[					この前ちょっと聞かれたので、メモっときます。
					AjaxでJS含んだページをそのままロードするとDOMに追加した時点で実行しよるんで、それを回避するためのやつです。Autopagerizeを参考にしたと [...]]]></description>
			<content:encoded><![CDATA[					<p>この前ちょっと聞かれたので、メモっときます。</p>
					<p>AjaxでJS含んだページをそのままロードするとDOMに追加した時点で実行しよるんで、それを回避するためのやつです。Autopagerizeを参考にしたと思います。</p>
					<p>ついでに取得したHTMLの走査方法ですが、そのまま$(html)とかにすると、一番上のwrapperとかそういうdivだったりする要素が取得できないので、一旦divをかませておきます。</p>
					<h3>Ajax部分のソースコード</h3>
					<pre>$.ajax({
&nbsp;&nbsp;url: "hoge.html",
&nbsp;&nbsp;type: "GET",
&nbsp;&nbsp;success: function(html) {
&nbsp;&nbsp;&nbsp;&nbsp;// 文字列で取得したデータを整理する
&nbsp;&nbsp;&nbsp;&nbsp;html = html.replace(/&lt;script(?:[ \t\r\n][^&gt;]*)?&gt;[\S\s]*?&lt;\/script[ \t\r\n]*&gt;|&lt;\/?(?:i?frame|html|script|object)(?:[ \t\r\n][^&lt;&gt;]*)?&gt;/gi, "");
&nbsp;&nbsp;&nbsp;&nbsp;var _div = $("&lt;div&gt;" + html + "&lt;/div&gt;");
&nbsp;&nbsp;&nbsp;&nbsp;// 取得したHTMLの走査は_div.find("a")のようにする
&nbsp;&nbsp;&nbsp;&nbsp;// hogehoge
&nbsp;&nbsp;}
});</pre>
					<h3>コピペ用</h3>
					<pre>html = html.replace(/&lt;script(?:[ \t\r\n][^&gt;]*)?&gt;[\S\s]*?&lt;\/script[ \t\r\n]*&gt;|&lt;\/?(?:i?frame|html|script|object)(?:[ \t\r\n][^&lt;&gt;]*)?&gt;/gi, "");</pre>
<img src="http://5509.me/?ak_action=api_record_view&id=4255&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/ajax-load-and-not-to-execute-scripts/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>要素のブラウザ上での位置を9ブロックの中から数値で返す m5GetElementPos</title>
		<link>http://5509.me/log/m5getelementpos</link>
		<comments>http://5509.me/log/m5getelementpos#comments</comments>
		<pubDate>Fri, 25 Feb 2011 06:44:17 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4245</guid>
		<description><![CDATA[					よくわからんと思いますけど、サンプルを見ればなんとなく伝わるような。。
					指定した要素のブラウザがその時表示している位置を以下のテーブルの数値で返します。
					┏━┳━┳━┓
					┃０┃１┃ [...]]]></description>
			<content:encoded><![CDATA[					<p>よくわからんと思いますけど、サンプルを見ればなんとなく伝わるような。。<br />
					指定した要素のブラウザがその時表示している位置を以下のテーブルの数値で返します。</p>
					<p>┏━┳━┳━┓<br />
					┃０┃１┃２┃<br />
					┣━╋━╋━┫<br />
					┃３┃４┃５┃<br />
					┣━╋━╋━┫<br />
					┃６┃７┃８┃<br />
					┗━┻━┻━┛</p>
					<p><a href="http://5509.me/sample/m5GetElementPos/">m5GetElementPosのサンプル</a></p>
					<p>返す数値は、実際returnで返ってくるわけじゃないんです。指定した要素にjQuery.dataで&#8221;ElementPos&#8221;というプロパティに書きこんでます。</p>
					<h2>ダウンロード</h2>
					<p>ダウンロードは<a href="https://github.com/5509/m5GetElementPos/">github</a>からどぞー</p>
					<h2>使い方とかをざっくりと</h2>
					<p>こんな感じで取れます。</p>
					<pre>$(target)
&nbsp;&nbsp;.m5GetElementPos()
&nbsp;&nbsp;.click(function() {
&nbsp;&nbsp;&nbsp;&nbsp;alert($.data($(this), "ElementPos"));
&nbsp;&nbsp;&nbsp;&nbsp;return false;
&nbsp;&nbsp;});</pre>
					<p>または、コールバックでも使えます。</p>
					<pre>$(target).click(function() {
&nbsp;&nbsp;$(this).m5GetElementPos({
&nbsp;&nbsp;&nbsp;&nbsp;returnNumber: false,
&nbsp;&nbsp;&nbsp;&nbsp;callback: function() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert($.data(this, "ElementPos"));
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;});
&nbsp;&nbsp;return false;
});</pre>
					<p>コールバック関数ではcallback.callしているので、thisはm5GetElementPosを実行した要素になります。</p>
					<h2>オプション</h2>
					<table border="1" class="lftable">
					<tr>
					<td>returnNumber</td>
					<td>数値で返すか、文字で返すか。デフォルトは数値でtrue</td>
					</tr>
					<tr>
					<td>returnCancel</td>
					<td>falseを指定するとthisを返さないので、メソッドチェーンができなくなります</td>
					</tr>
					<tr>
					<td>callback</td>
					<td>コールバック関数</td>
					</tr>
					</table>
					<h2>そんな感じで</h2>
					<p>バグとかあれば教えてください</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4245&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/m5getelementpos/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQselectableにdisabled、enabledオプションを追加しました</title>
		<link>http://5509.me/log/jqselectable-has-been-updated-2</link>
		<comments>http://5509.me/log/jqselectable-has-been-updated-2#comments</comments>
		<pubDate>Thu, 24 Feb 2011 06:10:02 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQselectable]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[アップデート]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4237</guid>
		<description><![CDATA[					
					jQselectableにdisabled・enabledメソッドを追加しました。
					ただし利用できるのは、対象selectable要素ひとつに対してです。複数個ある場合、任意に指定して利用 [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://5509.me/sample/jQselectable/#callbacks"><img src="http://5509.me/wp-content/uploads/2011/02/jqselectabledisabled.gif" alt="disabled、enabledのサンプルキャプチャ" title="disabledとenabledが使えるようになりました" width="300" height="151" class="alignnone size-full wp-image-4238" /></a></p>
					<p><a href="http://5509.me/log/jqueryselectable">jQselectable</a>にdisabled・enabledメソッドを追加しました。<br />
					ただし利用できるのは、対象selectable要素ひとつに対してです。複数個ある場合、任意に指定して利用します。<br />
					<span id="more-4237"></span></p>
					<h3>基本はひとつのselectableに実行できます</h3>
					<pre>var unko = $("#unko").jQselectable();
$("#unkoBtnDisabled").click(function() { unko.disabled(); });
$("#unkoBtnEnabled").click(function() { unko.enabled(); });</pre>
					<h3>複数のselectボックスにselectableをまとめて実行している場合</h3>
					<p>複数個のときは面倒くさいですけど、disabled・enabledにしたい要素を指定します。</p>
					<pre>var unko = $(".unko").jQselectable();
$("#unkoBtnDisabled").click(function() { unko[1].disabled(); });
$("#unkoBtnEnabled").click(function() { unko[1].enabled(); });</pre>
					<img src="http://5509.me/?ak_action=api_record_view&id=4237&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/jqselectable-has-been-updated-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>大友克洋風のイラストを描いてもらった</title>
		<link>http://5509.me/log/5509-illustration</link>
		<comments>http://5509.me/log/5509-illustration#comments</comments>
		<pubDate>Wed, 23 Feb 2011 02:20:40 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[Diary]]></category>
		<category><![CDATA[イラスト]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4200</guid>
		<description><![CDATA[					
					僕はマンガがめっちゃ好きなわけなんですけど、イラストレーターの友だちと大友克洋ネタで盛り上がって、大友風の似顔絵描いてって言ったら本当に描いてくれたっていう。
					できたの見て超興奮したっすよ [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2011/02/5509_ill_nr.jpg" alt="" title="5509_ill_nr" width="500" height="114" class="alignnone size-full wp-image-4233" /></p>
					<p>僕はマンガがめっちゃ好きなわけなんですけど、イラストレーターの友だちと大友克洋ネタで盛り上がって、大友風の似顔絵描いてって言ったら本当に描いてくれたっていう。</p>
					<p>できたの見て超興奮したっすよ。まだ興奮してるけど。。</p>
					<p>背景で力尽きたらしくｗ白かったのでなんかそれっぽい背景と影足してiPhone壁紙サイズにしました。気にしなければ超かっこいい壁紙として使えるです。（ただしおれ）</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/02/nori_wp2.jpg"><img src="http://5509.me/wp-content/uploads/2011/02/nori_wp2-200x300.jpg" alt="" title="nori_wp2" width="200" height="300" class="alignnone size-medium wp-image-4201" /></a> <a href="http://5509.me/wp-content/uploads/2011/02/photo.png"><img src="http://5509.me/wp-content/uploads/2011/02/photo-200x300.png" alt="iPhoneの壁紙に最適・・・！" title="iPhoneの壁紙に最適・・・！" width="200" height="300" class="alignnone size-medium wp-image-4214" /></a></p>
					<p>それにしてもかっこいいわー・・・（イラストが）</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4200&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/5509-illustration/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS3アニメーションのおさらいとローディングアイコン</title>
		<link>http://5509.me/log/css3-animation</link>
		<comments>http://5509.me/log/css3-animation#comments</comments>
		<pubDate>Tue, 22 Feb 2011 04:42:00 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[アニメーション]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4157</guid>
		<description><![CDATA[					「CSS3でつくるローディングアイコン」っていうのを何も考えずに作ったんですけど、同じこと考える人なんかたくさんいるので、1年くらい前から色々存在してました・・・でもせっかくつくったので、もうありますけど、公開 [...]]]></description>
			<content:encoded><![CDATA[					<p><strong>「CSS3でつくるローディングアイコン」</strong>っていうのを何も考えずに作ったんですけど、同じこと考える人なんかたくさんいるので、1年くらい前から色々存在してました・・・でもせっかくつくったので、もうありますけど、公開しておきます。</p>
					<p><a href="http://5509.me/sample/cssloading">くるくる</a> と <a href="http://5509.me/sample/cssloading/bound.html">ぼいんぼいん</a></p>
					<p>あ、せっかくなのでCSS3アニメーションをおさらいしましょう！（今おもいついたから強引につかったとこだけ）<br />
					<span id="more-4157"></span></p>
					<h2>CSS3アニメーションのおさらい</h2>
					<p>ご存知の通り、アニメーションは今のところWebkitだけで実装されいるので、サンプルはWebkit系ブラウザでみてください。</p>
					<p>ざっくり書いたので、説明していない項目もあるし、間違いあるかも。あると思います。指摘してください。草稿しっかり読めっていう話なんですけど・・・ざっくりしか読んでません <img src='http://5509.me/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
					<p>W3CのWorkingDraft &#8211; <a href="http://www.w3.org/TR/css3-animations/">CSS Animations Module Level 3</a></p>
					<p>草稿にはもちろん<strong>prefixの&#8221;@-webkit-&#8221;は含まれてません</strong>。</p>
					<h3>Keyframes</h3>
					<p>基本的にWebkit用に&#8221;@-webkit-&#8221;のprefixを付けます。</p>
					<pre>@-webkit-keyframes hoge {
}</pre>
					<p>のように、hogeのところにアニメーション名を入れて定義します。Keyframesの指定方法は</p>
					<pre>@-webkit-keyframes hogefuga {
&nbsp;&nbsp;0% { hoge }
&nbsp;&nbsp;50% { fuga }
&nbsp;&nbsp;100% { piyo }
}</pre>
					<p>みたいに、アニメーションを細かく%で指定する方法や</p>
					<pre>@-webkit-keyframes hogepiyo {
&nbsp;&nbsp;from { hoge }
&nbsp;&nbsp;to { fuga }
}</pre>
					<p>みたいに、fromとtoで指定する2つの方法があります。</p>
					<p>Keyframesは、下記のように&#8221;-webkit-transform&#8221;やopacity、top、leftなど数値を伴うCSSプロパティが使えます。background-colorなどの色も可。</p>
					<pre>@-webkit-keyframes rotate {
&nbsp;&nbsp;0% { -webkit-transform: rotate(0); }
&nbsp;&nbsp;100% { -webkit-transform: rotate(360deg); }
}

@-webkit-keyframes fade {
&nbsp;&nbsp;0% { opacity: 1; }
&nbsp;&nbsp;50% { opacity: .2; }
&nbsp;&nbsp;100% { opacity: 1; }
}</pre>
					<h3>Animation behavior</h3>
					<p>どういうアニメーションをするかをKeyframesで指定しておいたので、実行する環境を用意します。</p>
					<p>いくつかあるのですが、ここでは&#8221;duration&#8221;, &#8220;timing-function&#8221;, &#8220;count&#8221;, &#8220;name&#8221;の指定方法だけ解説しておきます。対象要素にbehaviorプロパティを割り振ります。</p>
					<h4>duration</h4>
					<p>durationは&#8221;○s&#8221;で指定、1以下は0.8や.8のように秒で指定します。デフォルトは0。</p>
					<pre>webkit-animation-duration: .8s; </pre>
<h4>timing-function</h4>
<p>jQueryの.animate()メソッドで言うところの<strong>easing</strong>です。</p>
<blockquote><p>ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(<number>, <number>, <number>, <number>)</p>
<p><cite>via: <a href="http://www.w3.org/TR/css3-animations/#animation-timing-function_tag">The ‘animation-timing-function’ Property</a></cite></p></blockquote>
<p>の6つが利用できます。デフォルトはease。</p>
<pre>-webkit-animation-timing-function: linear;</pre>
					<h4>iteration-count</h4>
					<p>実行回数を指定できます。単純に数字で指定でき、リピートしたい場合は、<strong>infinite</strong>を指定します。デフォルトは1。</p>
					<pre>-webkit-animation-iteration-count: infinite;</pre>
<h4>name</h4>
<p>実行するKeyframe名を指定します。これが指定されているとアニメーションが実行されます。</p>
<pre>div.cssloading.justLoading {
&nbsp;&nbsp;-webkit-animation-name: fade, rotate;
}</pre>
					<h2>CSS3 Loading</h2>
					<p>さらっとおさらいしたところで、ローディングアイコンを書いてみましょう。本当はこっちメインだったのに、もう手抜き。説明はソース見てくださいまし。</p>
					<h3>Circular</h3>
					<p>まずは超ベーシックはくるくる回転タイプ。</p>
					<p><script type="text/javascript" src="http://jsdo.it/blogparts/y4En/js"></script>
					<p class="ttlBpJsdoit" style="width: 465px; margin: 0; text-align: right; font-size: 11px;"><a href="http://jsdo.it/5509/cssloader1" title="CSS loader - kurukuru -">CSS loader &#8211; kurukuru &#8211; - jsdo.it &#8211; share JavaScript, HTML5 and CSS</a></p>
					<h4>アニメーション以外</h4>
					<pre style="height: 150px">div.cssloading {
&nbsp;&nbsp;width: 48px;
&nbsp;&nbsp;height: 48px;
&nbsp;&nbsp;position: relative;
}

&nbsp;&nbsp;div.cssloading span {
&nbsp;&nbsp;&nbsp;&nbsp;border-radius: 5px;
&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius: 5px;
&nbsp;&nbsp;&nbsp;&nbsp;display: block;
&nbsp;&nbsp;&nbsp;&nbsp;width: 10px;
&nbsp;&nbsp;&nbsp;&nbsp;height: 10px;
&nbsp;&nbsp;&nbsp;&nbsp;position: absolute;
&nbsp;&nbsp;}
&nbsp;&nbsp;div.cssloading span.loadingCircle1 {
&nbsp;&nbsp;&nbsp;&nbsp;top: 3px;
&nbsp;&nbsp;&nbsp;&nbsp;left: 19px;
&nbsp;&nbsp;&nbsp;&nbsp;background: #000;
&nbsp;&nbsp;}
&nbsp;&nbsp;div.cssloading span.loadingCircle2 {
&nbsp;&nbsp;&nbsp;&nbsp;top: 7px;
&nbsp;&nbsp;&nbsp;&nbsp;left: 30px;
&nbsp;&nbsp;}
&nbsp;&nbsp;div.cssloading span.loadingCircle3 {
&nbsp;&nbsp;&nbsp;&nbsp;top: 19px;
&nbsp;&nbsp;&nbsp;&nbsp;left: 35px;
&nbsp;&nbsp;}
&nbsp;&nbsp;div.cssloading span.loadingCircle4 {
&nbsp;&nbsp;&nbsp;&nbsp;top: 30px;
&nbsp;&nbsp;&nbsp;&nbsp;left: 30px;
&nbsp;&nbsp;}
&nbsp;&nbsp;div.cssloading span.loadingCircle5 {
&nbsp;&nbsp;&nbsp;&nbsp;top: 35px;
&nbsp;&nbsp;&nbsp;&nbsp;left: 19px;
&nbsp;&nbsp;&nbsp;&nbsp;background: #CACACA;
&nbsp;&nbsp;}
&nbsp;&nbsp;div.cssloading span.loadingCircle6 {
&nbsp;&nbsp;&nbsp;&nbsp;top: 30px;
&nbsp;&nbsp;&nbsp;&nbsp;left: 8px;
&nbsp;&nbsp;&nbsp;&nbsp;background: #979797;
&nbsp;&nbsp;}
&nbsp;&nbsp;div.cssloading span.loadingCircle7 {
&nbsp;&nbsp;&nbsp;&nbsp;top: 19px;
&nbsp;&nbsp;&nbsp;&nbsp;left: 3px;
&nbsp;&nbsp;&nbsp;&nbsp;background: #676767;
&nbsp;&nbsp;}
&nbsp;&nbsp;div.cssloading span.loadingCircle8 {
&nbsp;&nbsp;&nbsp;&nbsp;top: 7px;
&nbsp;&nbsp;&nbsp;&nbsp;left: 8px;
&nbsp;&nbsp;&nbsp;&nbsp;background: #343434;
&nbsp;&nbsp;}</pre>
					<h4>アニメーション該当箇所のみ</h4>
					<pre>/* 回転する name: rotate */
@-webkit-keyframes rotate {
&nbsp;&nbsp;0% { -webkit-transform: rotate(0); }
&nbsp;&nbsp;100% { -webkit-transform: rotate(360deg); }
}
/* フェードエフェクト name: fade */
@-webkit-keyframes fade {
&nbsp;&nbsp;0% { opacity: 1; }
&nbsp;&nbsp;50% { opacity: .2; }
&nbsp;&nbsp;100% { opacity: 1; }
}

/* アニメーションプロパティのセット */
div.cssloading {
&nbsp;&nbsp;-webkit-animation-duration: .8s;
&nbsp;&nbsp;-webkit-animation-timing-function: linear;
&nbsp;&nbsp;-webkit-animation-iteration-count: infinite;
}
/* classに"justLoading"が付いているときは
"fade", "rotate"のアニメーションを行う */
div.cssloading.justLoading {
&nbsp;&nbsp;-webkit-animation-name: fade, rotate;
}</pre>
					<h3>Horizontal</h3>
					<p>次は横にぼいんぼいんはねる玉っぽいの</p>
					<p><script type="text/javascript" src="http://jsdo.it/blogparts/ffw7/js"></script>
					<p class="ttlBpJsdoit" style="width: 465px; margin: 0; text-align: right; font-size: 11px;"><a href="http://jsdo.it/5509/cssloader2" title="CSS loader - boinboin -">CSS loader &#8211; boinboin &#8211; - jsdo.it &#8211; share JavaScript, HTML5 and CSS</a></p>
					<h4>アニメーション以外</h4>
					<pre style="height: 150px">div.cssloading {
&nbsp;&nbsp;width: 200px;
&nbsp;&nbsp;height: 40px;
&nbsp;&nbsp;position: relative;
&nbsp;&nbsp;-webkit-animation-duration: 1s;
&nbsp;&nbsp;-webkit-animation-timing-function: ease-in;
&nbsp;&nbsp;-webkit-animation-iteration-count: infinite;
}
div.cssloading.justLoading {
&nbsp;&nbsp;-webkit-animation-name: move, bound, fade;
}

&nbsp;&nbsp;div.cssloading span {
&nbsp;&nbsp;&nbsp;&nbsp;border-radius: 20px;
&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius: 20px;
&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius: 20px;
&nbsp;&nbsp;&nbsp;&nbsp;display: block;
&nbsp;&nbsp;&nbsp;&nbsp;width: 40px;
&nbsp;&nbsp;&nbsp;&nbsp;height: 40px;
&nbsp;&nbsp;&nbsp;&nbsp;position: absolute;
&nbsp;&nbsp;&nbsp;&nbsp;left: 80px;
&nbsp;&nbsp;&nbsp;&nbsp;background: #000;
&nbsp;&nbsp;}</pre>
					<h4>アニメーション該当箇所のみ</h4>
					<pre>/* ぼいんぼいん name: bound */
@-webkit-keyframes bound {
&nbsp;&nbsp;0% { -webkit-transform: scale(1.5, .5); }
&nbsp;&nbsp;10% { -webkit-transform: scale(1, 1); }
&nbsp;&nbsp;25% { -webkit-transform: scale(.5, 1); }
&nbsp;&nbsp;50% { -webkit-transform: scale(1.5, .5); }
&nbsp;&nbsp;60% { -webkit-transform: scale(1, 1); }
&nbsp;&nbsp;75% { -webkit-transform: scale(.5, 1); }
&nbsp;&nbsp;100% { -webkit-transform: scale(1.5, .5); }
}

/* 横移動 name: move */
@-webkit-keyframes move {
&nbsp;&nbsp;0% { left: 0px; }
&nbsp;&nbsp;10% { left: 70px; }
&nbsp;&nbsp;25% { left: 80px; }
&nbsp;&nbsp;35% { left: 70px; }
&nbsp;&nbsp;50% { left: 0px; }
&nbsp;&nbsp;60% { left: -70px; }
&nbsp;&nbsp;75% { left: -80px; }
&nbsp;&nbsp;85% { left: -70px; }
&nbsp;&nbsp;100% { left: 0px; }
}

/* アニメーションプロパティのセット */
&nbsp;&nbsp;div.cssloading {
&nbsp;&nbsp;-webkit-animation-duration: 1s;
&nbsp;&nbsp;-webkit-animation-timing-function: ease-in;
&nbsp;&nbsp;-webkit-animation-iteration-count: infinite;
}
/* classに"justLoading"が付いているときは
"fade", "rotate"のアニメーションを行う */
div.cssloading.justLoading {
&nbsp;&nbsp;-webkit-animation-name: move, bound, fade;
}</pre>
					<h2>そんなわけで</h2>
					<p>ローディングアイコンメインのはずが、かぶったからおさらいメインになったという話。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4157&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/css3-animation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScriptのconsoleをちょっと拡張して快適なデバッグ環境にする</title>
		<link>http://5509.me/log/extend-console-log</link>
		<comments>http://5509.me/log/extend-console-log#comments</comments>
		<pubDate>Thu, 17 Feb 2011 06:37:07 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[デバッグ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4146</guid>
		<description><![CDATA[					どこかで元ネタを見たんやけど、忘れた・・・
					console.logとかdebugって開発してるとき便利ですけど、納品時に消すのを忘れたりして、うっかりconsoleに
					unko
とか表示され [...]]]></description>
			<content:encoded><![CDATA[					<p>どこかで元ネタを見たんやけど、忘れた・・・</p>
					<p>console.logとかdebugって開発してるとき便利ですけど、納品時に消すのを忘れたりして、うっかりconsoleに</p>
					<pre>unko</pre>
<p>とか表示されたら死ぬしかないですよね。</p>
<p>消したやつ納品して後で改修とかになったとき、前のconsoleは当然ないわけで、面倒くさいなと思って。<br />
<span id="more-4146"></span></p>
<p>下記のコードをソースファイルの頭に貼り付けておいて<br />
頭の「window.console.debugMode」を「true」にすればconsole.logが動きます。それだけです。これなら、元のコードも変更せず、debugModeを切り替えるだけで楽々デバッグ。</p>
<pre>// デバグモードの切り替え
window.console.debugMode = false;
// console.logのプチ整形
window.console._log = window.console.log;
window.console.log = function(log) {
&nbsp;&nbsp;if ( window.console.debugMode &#038;&#038; window.console )
&nbsp;&nbsp;&nbsp;&nbsp;console._log.apply(this, arguments);
}</pre>
					<p>ところで、普段はconsole.debugを使ってるのですが、debugだと当然行番号が、拡張したとこになってしまいまして・・・debugでも使えるコード、ご存知の方いれば教えてください＞＜</p>
					<h2>追記</h2>
					<p>Twitterで<a href="http://twitter.com/azu_re">@azu_re</a>さんにFirebugでの対応方法を教えてもらいました。</p>
					<pre>// http://d.hatena.ne.jp/javascripter/20080825/1219686109
window.console.debugMode = true;
// console.debug
window.console._debug = window.console.debug;
window.console.debug = function(log) {
&nbsp;&nbsp;if (window.console.debugMode &#038;&#038; window.console) {
&nbsp;&nbsp;&nbsp;&nbsp;// Firebugだけ
&nbsp;&nbsp;&nbsp;&nbsp;window.console.notifyFirebug(arguments, "debug", "firebugAppendConsole");
&nbsp;&nbsp;}
};</pre>
					<p>&#8211; <a href="http://jsfiddle.net/daAGM/">http://jsfiddle.net/daAGM/</a></p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4146&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/extend-console-log/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPressでOpen Graph Protocolを実装したい</title>
		<link>http://5509.me/log/wordpress-with-ogp</link>
		<comments>http://5509.me/log/wordpress-with-ogp#comments</comments>
		<pubDate>Mon, 14 Feb 2011 09:15:51 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[OGP]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4135</guid>
		<description><![CDATA[					Custom Field GUI Utilityを使ってサイトに話題のOGPを入れようなメモ。Facebookとかなんかその辺にも最適化したほうがいい流れですし。
					
					対象はトップページ等と記 [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://www.tinybeans.net/blog/download/wp-plugin/cfg-utility-3.html">Custom Field GUI Utility</a>を使ってサイトに<del datetime="2011-02-14T08:03:15+00:00">話題の</del>OGPを入れようなメモ。Facebookとかなんかその辺にも最適化したほうがいい流れですし。<br />
					<span id="more-4135"></span></p>
					<p><strong>対象はトップページ等と記事に表示するOGPの切り分け</strong>。Custom Field GUI Utilityの使い方も超簡単に書いときます。情報足りないかもやけど。</p>
					<p>概要としては、記事投稿ページにカスタムフィールド</p>
					<ul>
					<li>meta description（og:descriptionと共通）</li>
					<li>meta keywords</li>
					<li>meta og:image</li>
					</ul>
					<p>を追加します。記事ページでは追加したカスタムフィールドに入力されたテキスト・URLにしたがって下記のようなmeta要素がはきだされます。他のページはデフォルトの内容が表示されます。</p>
					<pre>&lt;meta property="og:type" content="article"&gt;
&lt;meta property="og:site_name" content="hogehoge"&gt;
&lt;meta name="keywords" content="hogehoge"&gt;
&lt;meta name="description" content="hogehoge"&gt;
&lt;meta property="og:title" content="hogehoge"&gt;
&lt;meta property="og:url" content="記事のURL"&gt;
&lt;meta property="og:description" content="hogehoge"&gt;
&lt;meta property="og:image" content="画像パス"&gt;</pre>
					<h2>Custom Field GUI Utilityのダウンロードとインストールまで</h2>
					<p><a href="http://www.tinybeans.net/blog/download/wp-plugin/cfg-utility-3.html">Custom Field GUI Utility</a>からプラグインソースをダウンロード、解凍すると中に入っている</p>
					<ul>
					<li>conf-common.ini</li>
					<li>conf-page.ini</li>
					</ul>
					<p>は今回使わないので、中身全部削除しておいてください。<br />
					編集するのは、<strong>conf-post.ini</strong>です。</p>
					<p>conf-post.iniの内容を以下に書き換え、WPのプラグインディレクトリにプラグインフォルダごとアップロードしたのち、Custom Field GUI Utilityを有効化しておきます。</p>
					<pre>[cf_keywords]
fieldname = Keywords
type = textfield
size = 60
sample = jQuery,WordPress,Plugin
must = 1

[cf_description]
fieldname = Description
type = textfield
size = 60
sample = input the example or the caption
must = 1

[cf_ogimage]
fieldname = OGP用画像
type = imagefield
class = post page
size = 35
sample = 画像パス（abspath）をメディアダイアログかURLで指定する</pre>
					<p>ここまでやると、記事作成画面に下図のようなカスタムフィールドが表示されます。</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/02/ogp_cfu1.jpg"><img src="http://5509.me/wp-content/uploads/2011/02/ogp_cfu1.jpg" alt="" title="表示されるカスタムフィールド" width="450" height="372" class="alignnone size-full wp-image-4137" /></a></p>
					<h2>header.phpに追加する</h2>
					<p>次に、header.phpを編集、以下のソースをぺたっと。All in One SEO Packとか使ってないので分かりません。これやるときは使うのやめて、Custom Field GUI Utility一本にしてくださいｗ</p>
					<pre>&lt;?php /* typeとsite_nameは共通で入れておく */ ?&gt;
&lt;meta property="og:type" content="blog"&gt;
&lt;meta property="og:site_name" content="&lt;?php bloginfo('name'); ?&gt;"&gt;

&lt;?php /* ここから下記事 */ ?&gt;
&lt;?php if ( is_singular() &#038;&#038; have_posts() ) : while ( have_posts() ) : the_post(); ?&gt;

&nbsp;&nbsp;&lt;?php /* ただのmeta keywordsとdescription */ ?&gt;
&nbsp;&nbsp;&lt;meta name="keywords" content="&lt;?php echo post_custom('cf_keywords'); ?&gt;"&gt;
&nbsp;&nbsp;&lt;meta name="description" content="&lt;?php echo post_custom('cf_description'); ?&gt;"&gt;

&nbsp;&nbsp;&lt;?php /* ここからmeta ogp */ ?&gt;
&nbsp;&nbsp;&lt;meta property="og:title" content="&lt;?php wp_title('', true); ?&gt;"&gt;
&nbsp;&nbsp;&lt;meta property="og:url" content="&lt;?php the_permalink() ?&gt;"&gt;
&nbsp;&nbsp;&lt;?php /* og:descriptionはdescriptionと同じものを使う */ ?&gt;
&nbsp;&nbsp;&lt;meta property="og:description" content="&lt;?php echo post_custom('cf_description'); ?&gt;"&gt;
&nbsp;&nbsp;&lt;?php /* og:imageがカスタムフィールドで指定されている場合だけ下記入る */ ?&gt;
&nbsp;&nbsp;&lt;?php if ( post_custom('cf_ogimage') ) { ?&gt;&lt;meta property="og:image" content="&lt;?php echo post_custom('cf_ogimage'); ?&gt;"&gt;&lt;?php } ?&gt;
&nbsp;&nbsp;
&lt;?php /* ここから下記事以外（トップページなど） */ ?&gt;
&lt;?php endwhile; else: ?&gt;

&nbsp;&nbsp;&lt;?php /* ただのmeta keywordsとdescription */ ?&gt;
&nbsp;&nbsp;&lt;meta name="keywords" content="デフォルトキーワード"&gt;
&nbsp;&nbsp;&lt;meta name="description" content="&lt;?php bloginfo('description'); ?&gt;"&gt;

&nbsp;&nbsp;&lt;?php /* ここからmeta ogp */ ?&gt;
&nbsp;&nbsp;&lt;meta property="og:title" content="&lt;?php wp_title('', true); ?&gt;"&gt;
&nbsp;&nbsp;&lt;meta property="og:url" content="&lt;?php the_permalink() ?&gt;"&gt;
&nbsp;&nbsp;&lt;meta property="og:description" content="&lt;?php bloginfo('description'); ?&gt;"&gt;
&nbsp;&nbsp;&lt;meta property="og:image" content="デフォルトOG画像がある場合はなんかいれとく"&gt;
&lt;?php endif; ?&gt;</pre>
					<p>というわけで、これだけです。このブログは実装してないんですけど・・・！</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4135&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/wordpress-with-ogp/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>携帯（ガラケー）動画の各社仕様とエンコードツールまとめ</title>
		<link>http://5509.me/log/mobile-movies-encoding</link>
		<comments>http://5509.me/log/mobile-movies-encoding#comments</comments>
		<pubDate>Thu, 10 Feb 2011 02:47:49 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[エンコード]]></category>
		<category><![CDATA[ガラケー]]></category>
		<category><![CDATA[動画]]></category>
		<category><![CDATA[無料ツール]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4117</guid>
		<description><![CDATA[					色々調べたのでオレオレメモ。ストリーミングできたりできなかったりガラケーは大変すなぁ。
					一応、幅広く対応できるんかな的な感じです。詳しいことはわかってないので、もっといい方法あればコメントで教えてくだ [...]]]></description>
			<content:encoded><![CDATA[					<p>色々調べたのでオレオレメモ。ストリーミングできたりできなかったりガラケーは大変すなぁ。</p>
					<p>一応、幅広く対応できるんかな的な感じです。詳しいことはわかってないので、もっといい方法あればコメントで教えてください。</p>
					<h2>各社の技術仕様</h2>
					<dl>
					<dt>ドコモ（3gp、音声はAAC</dt>
					<dd><a href="http://www.nttdocomo.co.jp/service/imode/make/content/imotion/mp4/about/">MP4対応iモーションコンテンツ仕様</a></dd>
					<dt>AU（3gp,3g2、音声はAAC、ファイル容量1.5MBまで</dt>
					<dd><a href="http://www.au.kddi.com/ezfactory/tec/spec/ezmovie01.html">EZムービー</a></dd>
					<dt>ソフトバンク（3gp、ファイル容量300KB以内、音声はAMR</dt>
					<dd><a href="http://creation.mb.softbank.jp/doc_tool/movie.html">ムービー　技術資料</a></dd>
					</dl>
					<p class="memo">※ さらにAUの動画はparam要素で実際のデータサイズを入れないとだめ。</p>
					<h2>エンコードのソフト</h2>
					<p>無料のツールで試したところ、ドコモ用とAU用は<a href="http://www.vector.co.jp/soft/win95/net/se442862.html">どこでも！ケータイ動画</a>というソフトでいけたけど、音声のAMR出力ができなかったもんで、ソフトバンクがだめだった。</p>
					<p>探してたら<a href="http://www.woopiedesktop.com/">Woopie Desktop</a>の動画変換ツールを使えばなんでも対応できるっぽい雰囲気だった。Woopie最強説</p>
					<h2>HTMLの書き方の例</h2>
					<h3>ドコモ</h3>
					<pre>&lt;object declare id="ID" data="動画のURL" type="video/3gpp"&gt;
&lt;param name="count" value="0" valuetype="data" /&gt;
&lt;/object&gt;
&lt;a href="#ID"&gt;動画のタイトル&lt;/a&gt;</pre>
					<h3>AU</h3>
					<pre>&lt;object data="動画のURL" type="video/3gpp2" copyright="no" standby="動画のタイトル"&gt;
&lt;param name="disposition" value="devmpzz" valuetype="data" /&gt;
&lt;param name="size" value="動画のデータサイズ（バイト）" valuetype="data" /&gt;
&lt;param name="title" value="動画のタイトル" valuetype="data" /&gt;</pre>
					<h3>ソフトバンク</h3>
					<pre>&lt;a href="動画のURL"&gt;動画のタイトル&lt;/a&gt;</pre>
<img src="http://5509.me/?ak_action=api_record_view&id=4117&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/mobile-movies-encoding/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>超シンプルなjQueryのイメージビューアプラグイン m5ImageViewer</title>
		<link>http://5509.me/log/m5imageviewer</link>
		<comments>http://5509.me/log/m5imageviewer#comments</comments>
		<pubDate>Wed, 09 Feb 2011 01:30:10 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4098</guid>
		<description><![CDATA[					
					色々オプション付けてもいいけど、とりあえず公開時は全部とったろーと思いまして。最小構成のイメージビューアなjQueryプラグインです。その場でチラッと見せたいときに使えるかも。
					高機能なや [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://5509.me/sample/m5ImageViewer/"><img src="http://5509.me/wp-content/uploads/2011/02/m5imageviewer.png" alt="" title="m5imageviewer" width="460" class="alignnone size-full wp-image-4100" /></a></p>
					<p>色々オプション付けてもいいけど、とりあえず公開時は全部とったろーと思いまして。最小構成のイメージビューアなjQueryプラグインです。その場でチラッと見せたいときに使えるかも。</p>
					<p>高機能なやつは探せばいくらでも出ると思うので、たくさん機能ほしい人はそっち使えばいいと思います。</p>
					<p><a href="http://5509.me/sample/m5ImageViewer/">サンプル</a><br />
					<span id="more-4098"></span></p>
					<h2>ダウンロード</h2>
					<p>ダウンロードは<a href="https://github.com/5509/m5ImageViewer/archives/master">github</a>からどぞー</p>
					<h2>必要なファイルを読み込む</h2>
					<p>jQueryと<a href="https://github.com/5509/m5ImageViewer/blob/master/m5ImageViewer/js/m5imageviewer.js" onclick="_gaq.push(['_trackEvent', 'js', this.href])">m5ImageViewer.js</a>、<a href="https://github.com/5509/m5ImageViewer/blob/master/m5ImageViewer/css/m5imageviewer.css">m5ImageViewer.css</a>を読み込みます。</p>
					<pre>&lt;link rel="stylesheet" href="m5ImageViewer/css/m5ImageViewer.css"&gt;
&lt;script src=&quot;js/jquery.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/m5ImageViewer.js&quot;&gt;&lt;/script&gt;</pre>
					<h2>任意の要素に対して実行する</h2>
					<p>画像を指定したa要素にimg要素が入っている要素に対して実行します。<strong>これ以外の要素構成は想定していません。</strong></p>
					<h3>HTML</h3>
					<pre>&lt;a class="m5ImageViewer" href=&quot;http://farm6.static.flickr.com/5297/5428556190_6b17a2dddc_m.jpg&quot;&gt;
&nbsp;&nbsp;&lt;img src=&quot;http://farm6.static.flickr.com/5297/5428556190_6b17a2dddc_t.jpg&quot;&gt;
&lt;/a&gt;</pre>
					<h3>JS</h3>
					<pre>jQuery(function($) {
&nbsp;&nbsp;$("a.m5ImageViewer").m5ImageViewer();
});</pre>
					<h2>オプション</h2>
					<p>いまのところオプションは画像拡大時のdurationだけです。コールバックすらありませんよ</p>
					<table border="1" class="lftable">
					<tr>
					<th>項目</th>
					<th>値</th>
					</tr>
					<tr>
					<td>duration</td>
					<td>(def &#8211; 200</td>
					</tr>
					</table>
					<h2>捕捉</h2>
					<p>特に特別な機能があるわけでもないし、便利かっていうとそうでもないんですけどね。。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4098&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/m5imageviewer/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQueryのセレクタを自作して遊ぶ</title>
		<link>http://5509.me/log/playing-with-jquery-custom-selector</link>
		<comments>http://5509.me/log/playing-with-jquery-custom-selector#comments</comments>
		<pubDate>Thu, 03 Feb 2011 16:23:28 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[unko]]></category>
		<category><![CDATA[カスタムセレクタ]]></category>
		<category><![CDATA[ネタ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4083</guid>
		<description><![CDATA[					jQuery("div:unkomorimori").css("background", "#89640d");
「:unkomorimori」っていうセレクタを作ってみようっていうそういう話です。簡単です。ま [...]]]></description>
			<content:encoded><![CDATA[					<pre>jQuery("div:unkomorimori").css("background", "#89640d");</pre>
<p>「:unkomorimori」っていうセレクタを作ってみようっていうそういう話です。簡単です。まあunkomorimoriなんてふざけたセレクタなんで、きっと中身はunkoでいっぱいなんでしょう。</p>
<p><script type="text/javascript" src="http://jsdo.it/blogparts/oihC/js"></script></p>
<p>結局やってることってfilterと同じような感じなんですけど</p>
<pre>&lt;div&gt;
&nbsp;&nbsp;&lt;p&gt;&#12358;&#12435;&#12371;&#12358;&#12435;&#12371;&#12358;&#12435;&#12371;&#12358;&#12435;&#12371;&#12358;&#12435;&#12371;&#12358;&#12435;&#12371;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&nbsp;&nbsp;&lt;p&gt;&#12358;&#12435;&#12371;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&nbsp;&nbsp;&lt;p&gt;&#12358;&#12435;&#12371;&#12358;&#12435;&#12371;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&nbsp;&nbsp;&lt;p&gt;&#12358;&#12435;&#12371;&lt;/p&gt;
&lt;/div&gt;</pre>
					<p>なんかうんこって書いてあるdivがたくさんありました、と。後から気づいたんですけど、これdiv要らないですね。pだけでいい・・・でJSとしてはセレクタの記述をのぞけば</p>
					<pre>jQuery("div:unkomorimori").css("background", "#89640d");</pre>
<p>これだけです。:unkomorimoriの基準は対象要素内で「うんこ」が3回以上出てくるかどうかです。出てきた要素だけを返します。ちなみにfilterでやった場合はこんな感じ。</p>
<p><script type="text/javascript" src="http://jsdo.it/blogparts/c6Id/js"></script></p>
<p>カスタムセレクタを使う利点は、何回も同じfilter書くときとか、めんどいんでじゃあセレクタでやりましょうか、ってなる感じですね。気をつけないといけないのは、今回の書き方は全てのdiv要素の中身を文字列で取得した上で、正規表現使って「うんこ」を探してるんですけど、処理的にはうんこだけにくそ重いっていう点ですね。うまく落ちたところで、あ、うんこだけに落ちたところで、この辺で。</p>
<img src="http://5509.me/?ak_action=api_record_view&id=4083&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/playing-with-jquery-custom-selector/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【必要なかった】動的に読み込んだ画像の高さ・幅が取得できるタイミングでコールバックを実行するm5ImgLoad</title>
		<link>http://5509.me/log/m5imgload</link>
		<comments>http://5509.me/log/m5imgload#comments</comments>
		<pubDate>Tue, 01 Feb 2011 08:47:53 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4067</guid>
		<description><![CDATA[					追記：うーん、なんか色々あかんっぽい。わかる人以外はとりあえず放置してくださいーそもそも必要なかった感じでした
					$("&#60;img src='hogehoge.jpg' /&#62;").load(f [...]]]></description>
			<content:encoded><![CDATA[					<p><strong>追記：<del datetime="2011-02-01T11:56:31+00:00">うーん、なんか色々あかんっぽい。わかる人以外はとりあえず放置してくださいー</del>そもそも必要なかった感じでした</strong></p>
					<pre>$("&lt;img src='hogehoge.jpg' /&gt;").load(function() {
&nbsp;&nbsp;alert("width: " + $(this).width() + "\nheight: " + $(this).height());
});</pre>
					<p><del datetime="2011-02-01T11:56:31+00:00">とかやると高さと幅を取得できたりできなかったりするので、.load()に置き換わるようなやつ書いといた。単純に置き換えるだけ使えるはずー</del>だめだった</p>
					<pre>$("&lt;img src='hogehoge.jpg' /&gt;").m5ImgLoad(function() {
&nbsp;&nbsp;alert("width: " + $(this).width() + "\nheight: " + $(this).height());
});</pre>
					<h3>結局のところ、.load()メソッドで取れてた</h3>
					<pre>$("&lt;img src='hogehoge.jpg' /&gt;").load(function() {
&nbsp;&nbsp;alert("width: " + $(this).width() + "\nheight: " + $(this).height());
});</pre>
					<p>↑これみたいに、width()、height()メソッドを使うと動的に呼び出した画像に対しては0で返されるので、、、</p>
					<pre>$("&lt;img src='hogehoge.jpg' /&gt;").load(function() {
&nbsp;&nbsp;alert("width: " + $(this).attr("width") + "\nheight: " + $(this).attr("height"));
});</pre>
					<p>↑画像の属性から取ればいける感じです。これはどんな場合でもいけるんかなぁー</p>
					<h3>動作サンプル</h3>
					<p><del datetime="2011-02-01T11:56:31+00:00">サンプル</del><br />
					<del datetime="2011-02-01T11:56:31+00:00">左のボタンはただの.load()メソッドでこれだと高さと幅が取れないけど、右の.m5ImgLoad()メソッドを使えば高さと幅がとれとりますね</del></p>
					<p><del datetime="2011-02-01T11:56:31+00:00">img.completeを使ってみたっすよ。</del></p>
					<h3>ダウンロードとか</h3>
					<p><del datetime="2011-02-01T11:56:31+00:00">ダウンロードとかソースコードはgithubからどぞー</del></p>
					<p>https://github.com/5509/m5ImgLoad</p>
					<h3>対応ブラウザ</h3>
					<p><del datetime="2011-02-01T11:56:31+00:00">クロスブラウザ的なのはどうでしょう。手元のIE6～8、Safari5、Fx3、Chrome9、Opera10は問題なかったけど・・・<strong>バグとかあったらフォークして教えてください</strong>^ω^</del></p>
					<img src="http://5509.me/?ak_action=api_record_view&id=4067&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/m5imgload/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>第5回リクリセミナー「明日からjQueryがもっと好きになる。」が開催されます</title>
		<link>http://5509.me/log/recreators-seminar-5</link>
		<comments>http://5509.me/log/recreators-seminar-5#comments</comments>
		<pubDate>Wed, 12 Jan 2011 05:21:22 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[セミナー]]></category>
		<category><![CDATA[リクリ]]></category>
		<category><![CDATA[告知]]></category>

		<guid isPermaLink="false">http://5509.me/?p=4023</guid>
		<description><![CDATA[					12月に出版されたjQuery逆引きマニュアル著書の西畑さん、中村さんとセミナーを行います。お二人のお話が同時に聞けるセミナーはなかなかないので関西圏の方はぜひ参加を・・・！（僕のセッションはトイレ休憩に行くと [...]]]></description>
			<content:encoded><![CDATA[					<p>12月に出版された<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844329618/norimania-22/ref=nosim/">jQuery逆引きマニュアル</a>著書の<a href="http://blog.webcreativepark.net/">西畑さん</a>、<a href="http://kyosuke.jp/">中村さん</a>とセミナーを行います。<strong>お二人のお話が同時に聞けるセミナーはなかなかない</strong>ので関西圏の方はぜひ参加を・・・！<del datetime="2011-01-12T01:57:51+00:00">（僕のセッションはトイレ休憩に行くとか寝るなど有意義におすごしください）</del></p>
					<p>冗談はさておき、僕のセッションでは<strong>UIの設計からjQueryでの実装まで</strong>をフローとコードで解説しようと思っています。対象は中級者くらいになると思いますが、なるべくわかりやすく説明しますので、よろしくお願いします <img src='http://5509.me/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
					<p><a class="act" href="http://www.re-creators.jp/vol5"><img src="http://www.re-creators.jp/vol5/banner_resem_05.png" alt="明日からjQueryがもっと好きになる。jQuery セミナー - 第5回リクリセミナー" width="160" height="160" /></a></p>
					<blockquote><dl class="vevent">
					<dt>&lt;イベント名&gt;</dt>
					<dd class="summary"><a href="http://www.re-creators.jp/vol5/">第5回リクリセミナー 『明日からjQueryがもっと好きになる。』</a></dd>
					<dt>&lt;日時&gt;</dt>
					<dd><abbr class="dtstart" title="2011-02-20T15:0000">2/20（日） 15:00</abbr>〜<abbr class="dtend" title="2011-02-20T18:0000">18:00</abbr></dd>
					<dt>&lt;場所&gt;</dt>
					<dd class="location">デジタルハリウッド大阪校 地下セミナールーム<br />
					（大阪市北区西天満6-5-17 デジタルエイトビル地下1F）</dd>
					<dt>&lt;参加費&gt;</dt>
					<dd>一般：4,000円<br />
					デジハリ生：無料（※学生証をお持ちください。）</p>
					<p>※スポンサーの協賛、参加者の人数に応じてディスカウント予定です。<br />
					講師陣の書籍、『jQuery逆引きマニュアル』を持参し、受付で提示していただきますと<span style="color: #ff0000;"><strong>500円割引</strong></span>をいたします。<br />
					※対象は<strong>一般の参加者のみ</strong>となります。
					</dd>
					<dt>&lt;定員&gt;</dt>
					<dd>80名</dd>
					<dt>&lt;参加方法&gt;</dt>
					<dd><a href="http://www.re-creators.jp/vol5/">セミナー特設ページから参加表明して下さい</a></p>
					<p>URL：<a href="http://www.re-creators.jp/vol5/">http://www.re-creators.jp/vol5/</a></dd>
					<dt>&lt;懇親会&gt;</dt>
					<dd>セミナー終了後、18:30から開催予定。</dd>
					</dl>
					<p><cite>via: <a href="http://www.re-creators.jp/seminar/2011/01/12_655.html">2/20（日）第5回リクリセミナー「明日からjQueryがもっと好きになる。」参加受付開始！</a></cite></p></blockquote>
					<img src="http://5509.me/?ak_action=api_record_view&id=4023&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/recreators-seminar-5/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>YouTube(HTML5で表示しているもの)から動画をダウンロードするためのブックマークレット</title>
		<link>http://5509.me/log/download-a-video-from-youtube</link>
		<comments>http://5509.me/log/download-a-video-from-youtube#comments</comments>
		<pubDate>Sun, 09 Jan 2011 10:20:51 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[YouTube]]></category>
		<category><![CDATA[ダウンロード]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3995</guid>
		<description><![CDATA[					HTML5（というかvideo要素）で表示されている場合は簡単に閲覧可能な動画をダウンロードすることができます。
					この辺Flashだとflvだったりして再生しにくかったりするのが、HTML5だとmp4 [...]]]></description>
			<content:encoded><![CDATA[					<p>HTML5（というかvideo要素）で表示されている場合は簡単に閲覧可能な動画をダウンロードすることができます。</p>
					<p>この辺Flashだとflvだったりして再生しにくかったりするのが、HTML5だとmp4とか割と再生しやすいファイルになるので便利かも。ChromeとかSafariで実行するのがおすすめです。</p>
					<h3>ブックマークレット</h3>
					<p><strong>以下のリンクをブックマークバーにドラッグして、YouTubeのサイトでクリックするだけです。</strong>クリックすると動画ファイルそのものが表示されるので、名前を付けて保存的なアクションで保存できます。</p>
					<p>動画のファイル名は常に「videoplayback」になるので適当に変更したほうがよさそう。<strong>「WEBM」バッジがついている動画は形式がWEBMになっているのですがそのまま拡張子なしでダウンロードすると再生できないので、「.webm」の拡張子をつけるといいみたい</strong>です。.webmで保存するとVLCで再生できます。</p>
					<p>ブックマークレット：<a href="javascript:location.href = document.getElementById('video-player').getElementsByTagName('video')[0].src;">HTML5動画からダウンロード</a><br />
					<span id="more-3995"></span></p>
					<h3>ためしに</h3>
					<p>バッジが表示されているときだけブックマークレットが有効です。以下の動画ページで実行してみてください。（<strong>要HTML5 試用版の設定：<a href="#setting-for-html5">設定していない人は下に説明あります</a>）</strong></p>
					<p><a href="http://www.youtube.com/watch?v=2-owTwP1l7k">http://www.youtube.com/watch?v=2-owTwP1l7k</a></p>
					<h4>HD(高画質動画)動画をダウンロードするには？</h4>
					<p>720のサイズで再生している状態でブックマークレットを実行すれば高画質動画をダウンロードできます。</p>
					<h3 id="setting-for-html5">HTML5 試用版未設定の人</h3>
					<p>いちおう書いておきます。HTML5で表示するにはまず</p>
					<p><a href="http://www.youtube.com/html5">http://www.youtube.com/html5</a></p>
					<p>にアクセスして「<strong>HTML5 試用版を有効にする</strong>」をクリックします。</p>
					<p><img src="http://5509.me/wp-content/uploads/2011/01/youtube1.png" alt="" title="YouTubeの設定でHTML5を有効にする 1" width="252" height="46" class="alignnone size-full wp-image-3998" /></p>
					<p>表記が「HTML5 試用版が有効になっています。」に変わります。</p>
					<p><img src="http://5509.me/wp-content/uploads/2011/01/youtube2.png" alt="" title="YouTubeの設定でHTML5を有効にする 2" width="251" height="47" class="alignnone size-full wp-image-3999" /></p>
					<p>表示できるものとできないものがあり、できるものの場合は動画ページを表示したとき以下の画像のように <strong>HTML5</strong> のバッジが表示されます。</p>
					<p><a href="http://5509.me/wp-content/uploads/2011/01/youtube3.png"><img src="http://5509.me/wp-content/uploads/2011/01/youtube3-300x232.png" alt="" title="HTML5 試用版で表示された動画" width="300" height="232" class="alignnone size-medium wp-image-4000" /></a></p>
					<h3>それにしても・・・</h3>
					<p>ちろるがかわいい・・・じゃなかった、ソースも解説がいらないレベル・・・</p>
					<pre>javascript:location.href = document.getElementById('video-player').getElementsByTagName('video')[0].src;</pre>
<img src="http://5509.me/?ak_action=api_record_view&id=3995&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/download-a-video-from-youtube/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery逆引きマニュアルのモニターを募集しています</title>
		<link>http://5509.me/log/call-for-monitor-of-jquery-reference</link>
		<comments>http://5509.me/log/call-for-monitor-of-jquery-reference#comments</comments>
		<pubDate>Thu, 06 Jan 2011 12:42:44 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[お知らせ]]></category>
		<category><![CDATA[著書]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3981</guid>
		<description><![CDATA[					先日出版された「jQuery逆引きマニュアル」ですが、出版元のインプレスジャパンさんで読者モニターを募集しています。
					なんと書籍ではなく、PDFの電子書籍です。電子書籍は非売品なので、興味のある方はよ [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844329618/norimania-22/ref=nosim/" id="book" style="float: left; background: none; padding: none; font-size: 0px;" onclick="_gaq.push(['_trackEvent', 'Books', 'book'])"><img src="http://ecx.images-amazon.com/images/I/51QAqthVkYL._SL160_.jpg" alt="jQuery逆引きマニュアル Webデザインの現場で役立つ基本と実践" border="0"></a>先日出版された「<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844329618/norimania-22/ref=nosim/" onclick="_gaq.push(['_trackEvent', 'Books', 'text'])">jQuery逆引きマニュアル</a>」ですが、出版元のインプレスジャパンさんで読者モニターを募集しています。<br />
					なんと書籍ではなく、PDFの電子書籍です。電子書籍は非売品なので、興味のある方はよければ応募してみてください <img src='http://5509.me/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
					<p><a href="http://www.impressjapan.jp/readers/2010/12/web-1.html">申し込みページ（申し込みは終了しました）</a></p>
					<blockquote style="clear: left"><p>＜モニター応募要項＞<br />
					●応募受付期間：2010年12月28日（火）～2011年1月11日（火）<br />
					●募集予定人数：最大30名（モニター事務局での選考とさせていただきます）<br />
					●応募方法：<br />
					最下部の「応募する」ボタンよりエントリーください。<br />
					モニター当選の方へは、応募受付終了後別途メールにて詳細をご連絡します。<br />
					●モニター実施予定期間：2011年1月14日（金）～2011年2月28日（月）（約1ヶ月間半）<br />
					●モニター品：『jQuery逆引きマニュアル　Webデザインの現場で役立つ基本と実践』電子書籍版（PDF形式。本文のテキストコピー不可。サンプルコードはネット上で公開中 <a href="http://www.impressjapan.jp/support/aftercare/2961">http://www.impressjapan.jp/support/aftercare/2961</a>）<br />
					●モニター期間中のお願い：<br />
					ブログやツイッターなどで以下のような感想・コメントを書いていただき、ぜひ読者の皆様でjQueryについての情報を共有しましょう！<br />
					◎本書のこの記事は試してみたい！<br />
					◎本書の内容をこんな風に試してみた<br />
					◎本書のこの記事は役に立ちそう<br />
					◎本書の内容をこんな風に応用した！<br />
					◎jQueryでこんなことがしたい！<br />
					◎jQueryでこんなことができた！<br />
					◎jQueryについてこんな新しい発見があった　などなど<br />
					情報共有がスムーズに行えるように、本書専用のツイッターアカウント<a href="http://twitter.com/jQuery_Manual">@jQuery_Manual</a>を設置しました。<br />
					ツイッターをご利用されている方は、ぜひこちらのアカウントのフォローをお願いいたします。<br />
					たくさんのご応募をお待ちしております！</p></blockquote>
					<img src="http://5509.me/?ak_action=api_record_view&id=3981&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/call-for-monitor-of-jquery-reference/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>動的にvideo要素の動画を入れ替えるときに気をつけること</title>
		<link>http://5509.me/log/notification-of-using-video-element</link>
		<comments>http://5509.me/log/notification-of-using-video-element#comments</comments>
		<pubDate>Wed, 05 Jan 2011 12:54:43 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3957</guid>
		<description><![CDATA[					HTML5ではvideo要素で（手軽に？）動画を再生できますが、枠だけ書き出しておいて（別にHTML直書きでいいですが）、動画を入れ替える場合は少し注意が必要です。たぶん。
					現状で動画フォーマットがい [...]]]></description>
			<content:encoded><![CDATA[					<p>HTML5ではvideo要素で（手軽に？）動画を再生できますが、枠だけ書き出しておいて（別にHTML直書きでいいですが）、動画を入れ替える場合は少し注意が必要です。たぶん。</p>
					<p>現状で動画フォーマットがいくつか存在しますが、複数のフォーマットをサポートしたい場合は以下のように書きます。</p>
					<pre>&lt;video controls="controls" width="352" height="198" preload="none" id="videoElm"&gt;
&nbsp;&nbsp;&lt;source src="hoge.mp4" type="video/mp4" id="mp4" /&gt;
&nbsp;&nbsp;&lt;source src="hoge.ogg" type="video/ogg" id="ogg" /&gt;
&lt;/video&gt;</pre>
					<p>動的に書き換えるので、次のような関数用意して再生したい動画のURLを入れればよさげです。</p>
					<pre>function playMovie(mp4, ogg) {
&nbsp;&nbsp;$('#videoElm')
&nbsp;&nbsp;&nbsp;&nbsp;.html([ // ソースファイルをつっこむ
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;source src="' + mp4 + '" type="video/mp4" id="mp4" /&gt;',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;source src="' + ogg + '" type="video/ogg" id="ogg" /&gt;'
&nbsp;&nbsp;&nbsp;&nbsp;].join(''));
}

playMovie(piyo.mp4, piyo.ogg);</pre>
					<p>で結局何に注意しないとあかんかっていうのは、<strong>このままだとiOSで再生ができない</strong>んですね。iOSはmp4ファイル等で再生す<br />
					るんですけど、source要素を動的につっこんでもだめな様子。。</p>
					<div class="note"><strong>追記：</strong>内容が曖昧すぎたので追記します。<br />
					iOSで再生ができない<br />
					↓<br />
					iOSで<strong>入れ替えた動画が読み込まれず</strong>再生できない</div>
					<p>なので以下のようになりました。<br />
					source要素を動的につっこむのではなく、素直にsrc属性に入れてるだけです。</p>
					<pre>function playMovie(mp4, ogg) {
&nbsp;&nbsp;if ( /AppleWebKit/.test(navigator.userAgent) ) {
&nbsp;&nbsp;// iOSのとき
&nbsp;&nbsp;&nbsp;&nbsp;$('#videoElm')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.attr('src', mp4); // 素直にsrc属性に書く
&nbsp;&nbsp;} else {
&nbsp;&nbsp;// iOS以外
&nbsp;&nbsp;&nbsp;&nbsp;$('#videoElm')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.html([
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;source src="' + mp4 + '" type="video/mp4" id="mp4" /&gt;',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;source src="' + ogg + '" type="video/ogg" id="ogg" /&gt;'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;].join(''));
&nbsp;&nbsp;}
}</pre>
					<p><strong>※ UA判定はもっと良い方法あったらそっち使ってください。</strong></p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3957&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/notification-of-using-video-element/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>まだまだ間に合うCanvasでアニメーション入門（まとめと実践）</title>
		<link>http://5509.me/log/animation-with-canvas</link>
		<comments>http://5509.me/log/animation-with-canvas#comments</comments>
		<pubDate>Wed, 22 Dec 2010 01:35:13 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[tuts]]></category>
		<category><![CDATA[まとめ]]></category>
		<category><![CDATA[アニメーション]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3886</guid>
		<description><![CDATA[					JavaScript Advent Calendar 2010も22日目！あと3日ですよ。僕はちょうど学んだばかりのCanvasをアウトプットもかねて、まとめと実践を書いてみます。知ることと行うことは同一である [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://atnd.org/events/10497">JavaScript Advent Calendar 2010</a>も22日目！あと3日ですよ。僕はちょうど学んだばかりのCanvasをアウトプットもかねて、<strong>まとめと実践</strong>を書いてみます。知ることと行うことは同一である、最近行ったセミナーでも言ってました。</p>
					<p><a href="http://jsdo.it/">jsdo.it</a>にはほんまにこれCanvasなん？なサンプルいっぱいありますね。あーいうの書けるようになりたいなぁとか思いつつ、jQueryばっかりさわってた僕は.animate()メソッドの便利さに取り憑かれていたので、Canvasの絵もまだ上下左右で動かすくらいしかできません。慣れが必要です。。</p>
					<p>どうでもいい情報としてCanvasの読み方なんですけど、<del datetime="2010-12-22T17:31:51+00:00">「キャンバス」じゃなくて「カンバス」が正しいようです。</del>キャンバス・カンバスどっちでもよさげ。僕はキャンバスって読んでました<del datetime="2010-12-22T17:31:51+00:00">。</del>けどカンバスにします。</p>
					<p>前置きはこれくらいにして、今回は次のようなカラフルな箱が延々と落ちていくっていうのを書いてみます。今回のサンプルはすべてCanvasなのでIE8以下だと見れないと思います。あと<strong>jsdo.itのサンプルをいくつか貼っているのでRSSだと表示されません</strong>。</p>
					<p><script type="text/javascript" src="http://jsdo.it/blogparts/qaAo/js"></script></p>
					<p>先に参考サイト紹介してますが、いらない人は<a href="http://5509.me/log/animation-with-canvas#canv">飛ばしてください</a>。レッツカンバス！<br />
					<span id="more-3886"></span></p>
					<h2>参考サイトなど</h2>
					<p>動かす前に、そもそもCanvas自体さわったことがなかったので色々調べもってやってみました。とりあえずこれから始める人も多いと思うのでお世話になったサイトあげておきますね。あーこんな風にね的な。</p>
					<h3><a href="http://www.html5.jp/canvas/">HTML5.jpのCanvasページ</a></h3>
					<p>Canvasの超基本。メソッドの<a href="http://www.html5.jp/canvas/ref.html">リファレンスはこっち</a></p>
					<h3><a href="http://tech.kayac.com/archive/canvas-tutorial.html">今更聞けないcanvasの基礎の基礎</a></h3>
					<p>とりあえず見とくエントリー。ボールが弾むやつとか全然理解できませんでしたけどね！</p>
					<h3><a href="http://tech.kayac.com/archive/canvas_background.html">canvasでキラキラした背景を作る方法</a></h3>
					<p>アイデアって大事ですよね</p>
					<h3>なかにしさんのサンプルは最初に見るのにちょうどいい</h3>
					<p>canvasで遊んでみたい【<a href="http://factory.yusukenakanishi.com/html/html5/canvas/001/">その1</a>、<a href="http://factory.yusukenakanishi.com/html/html5/canvas/002/">その2</a>、<a href="http://factory.yusukenakanishi.com/html/html5/canvas/003/">その3</a>、<a href="http://factory.yusukenakanishi.com/html/html5/canvas/004/">その4</a>、<a href="http://factory.yusukenakanishi.com/html/html5/canvas/005/">その5</a>】まであります<br />
					とりあえず星空描いてみましょうか</p>
					<h3><a href="http://blog.wonder-boys.net/?p=315">canvasでアニメーションする時のコツ</a></h3>
					<p>僕がアニメーションやるっていうときに最初に見たんですけどさっぱりでした。後からみて納得</p>
					<h3><a href="http://blog.wonder-boys.net/?p=436">JS + Canvas = 3D しました</a></h3>
					<p>3Dもできるようになりたいです・・・</p>
					<h3><a href="http://web-mugen.com/canvas/bgcolorfulroundsizeanime/">Canvasで実現するカラフルな円が小さくなったり大きくなったりする背景</a></h3>
					<p>これも超参考にしました。重なるとことかどうなってるんかなーとか。</p>
					<h3><a href="http://1ka2ka.com/archives/201006/16_092531.html">[HTML5 canvas] 簡単な 3D アニメーション</a></h3>
					<p>こんな感じにXYZ座標をあやつりたい・・・</p>
					<h3><a href="http://d.hatena.ne.jp/mindcat/20100815/1281877127">HTML5 Canvasのブラウザによって異なる微妙な振る舞いについてまとめてみた。</a></h3>
					<p>ブラウザによって描画され方がちがうらしいです。気にしておかないとだめですね。</p>
					<h3><a href="http://d.hatena.ne.jp/sandai/20101211/p1">canvasが手軽にウェブで試せるアプリFirstCanvasを作ったよ</a></h3>
					<p>Canvasだけならjsdo.itよりもお手軽に試せます</p>
					<h2 id="canv">実際になんか書いてみる</h2>
					<p>参考サイト見てテンションがあがったところで、早速実践です。</p>
					<p>HTMLで用意するのはこれだけです。今回ソースコードの表示とサンプルにjsdo.itを利用してるので、フォークしたりできます。</p>
					<pre>&lt;canvas id="canvas" width="300" height="300"&gt;&lt;/canvas&gt;</pre>
<h3>まずはかく</h3>
<p>さーさーなんか書いてみましょう！お約束の矩形描画です。これは簡単。</p>
<p><script type="text/javascript" src="http://jsdo.it/blogparts/b6Sd/js"></script></p>
<h3>とりあえずうごかす</h3>
<p>次は描いた矩形を少し動かしてみましょう。最初は簡単にsetTimeoutでいいでしょう。<strong>最初の矩形を描いたあとに、Canvas全体を塗りつぶし、その後位置をずらしてもう一度矩形を描画しているだけ</strong>です。</p>
<p><script type="text/javascript" src="http://jsdo.it/blogparts/dIHO/js"></script></p>
<h3>くりかえしうごかす</h3>
<p>つまりこれを繰り返せば動くんじゃ・・・的な発想ですね！間違ってないと思います。上から下まで動かしてみましょう。</p>
<p><script type="text/javascript" src="http://jsdo.it/blogparts/6xxC/js"></script></p>
<p>アニメーションできた・・・！これがアニメーションといえるのかどうか・・・でも動いてるからいいでしょ。最初はこんなもんです。</p>
<h3>アニメーションのポイント</h3>
<p>アニメーション自体はsetIntervalで繰り返すことでも行えますが、ここでは</p>
<pre>(function() {
&nbsp;&nbsp;// hogehoge
&nbsp;&nbsp;setTimeout(arguments.callee, 1000 / rate);
})();</pre>
					<p>というような書き方で実行しています。これをsetIntervalで書き直すとこんな感じ</p>
					<pre>setInterval(function() {
&nbsp;&nbsp;// hogehoge
}, 1000 / rate);</pre>
					<p>無名関数で実行するときは、// hogehoge の部分が終わってからsetTimeoutが呼ばれるのに対して<br />
					setIntervalは // hogehoge が終わっていなくても 1000 / rateミリ秒後にもう一度 // hogehoge が実行されます。</p>
					<p>もうひとつの違いはタイマーのクリア方法です。無名関数は関数内でreturn false;するだけなのに対して、setIntervalはタイマー変数をclearIntervalする必要があります。</p>
					<h4>無名関数</h4>
					<pre>(function() {
&nbsp;&nbsp;if ( fuga ) return false;
&nbsp;&nbsp;// hogehoge
&nbsp;&nbsp;setTimeout(arguments.callee, 1000 / rate);
})();</pre>
					<h4>setInterval</h4>
					<pre>var timer = setInterval(function() {
&nbsp;&nbsp;if ( fuga ) clearInterval(timer);
&nbsp;&nbsp;// hogehoge
}, 1000 / rate);</pre>
					<p>ここはその内僕が書くかもしれないし、誰かが書いてくれるかもしれないし、難しいことは考えずにとりあえずはどちらでもよいでしょう。</p>
					<h3>つづき：アニメーションのループ</h3>
					<p>次は下まで降りていったらまた上からでてくるようにしてみましょう。簡単です。</p>
					<p><script type="text/javascript" src="http://jsdo.it/blogparts/dRCd/js"></script></p>
					<h3>複数同時にうごかす</h3>
					<p>なんか上から下まで落ちるブロックみたいなんできました。数を増やして色もランダムにしてみましょう。難易度がいきなりあがる感じです。とりあえず同じタイミングで矩形を10個描いて落下させます。</p>
					<p><script type="text/javascript" src="http://jsdo.it/blogparts/h6fF/js"></script></p>
					<h3>複数個の矩形を描いて動かす</h3>
					<p>矩形がひとつと複数個あるでは対応の仕方が全然違います。ひとつの場合は、fillRectが一回だけでよかったのに対して複数個描画する場合は、その個数回fillRectする必要がありますし、個数分の矩形情報が必要です。</p>
					<p>矩形情報の生成に Box()という関数を用意しました。</p>
					<pre>// 新しい矩形を生成する
var Box = function() {
  // サイズ、移動速度、横座標の位置、色はランダム
  this.size = randomNum(20, 10);
  this.speed = randomNum(5, 2);
  this.color = 'rgba(' + randomNum(255) + ',' + randomNum(255) + ',' + randomNum(255) + ',' + .6 + ')';
  this.basePos = {
    x: randomNum(300),
    y: 0
  }
}</pre>
					<p>ちなみにランダムな数を返す関数を作っておくと便利に使えます。</p>
					<pre>// 最小〜最大の間でランダムな数値を返す
// 最小値を省くと1〜最大値の間でランダムな数値
function randomNum(maxInt, minInt) {
&nbsp;&nbsp;var ran = Math.random();
&nbsp;&nbsp;if ( minInt ) {
&nbsp;&nbsp;&nbsp;&nbsp;if (Math.floor(ran * maxInt) < minInt ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return minInt;
&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Math.floor(ran * maxInt);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;return Math.floor(ran * maxInt) + 1;
&nbsp;&nbsp;}
}</pre>
					<p>いままではひとつだけの矩形でしたが、10個の矩形を扱います。単純にboxPoolという配列を用意して、そこに矩形の情報をつめこんでおきます。</p>
					<pre>// 矩形を生成しておく（描画はまだ
for ( var i=0; i&lt;boxNum; i++ ) {
&nbsp;&nbsp;boxPool[i] = new Box();
}</pre>
					<p>あとは矩形の個数回fillRectするだけです。</p>
					<pre>// 矩形毎に描画していく
for ( var i=0; i&lt;boxNum; i++ ) {
&nbsp;&nbsp;ctx.fillStyle = boxPool[i].color;
&nbsp;&nbsp;ctx.fillRect(
&nbsp;&nbsp;&nbsp;&nbsp;boxPool[i].basePos.x,
&nbsp;&nbsp;&nbsp;&nbsp;boxPool[i].basePos.y,
&nbsp;&nbsp;&nbsp;&nbsp;boxPool[i].size,
&nbsp;&nbsp;&nbsp;&nbsp;boxPool[i].size
&nbsp;&nbsp;);

&nbsp;&nbsp;// この矩形の次の位置を決めておく
&nbsp;&nbsp;boxPool[i].basePos.y = boxPool[i].basePos.y + boxPool[i].speed;
}</pre>
					<h3>完成：複数の矩形を動かしてループ</h3>
					<p>落ちるだけだったので、最後にループさせて完成っぽいですね。仕組みは、さっきのループを応用します。矩形がcanvas外に出たら外にでた矩形を削除して、新しく矩形を生成します。つまりこれを繰り返し行うだけです。56行目〜80行目が追加・修正した部分です。</p>
					<p><script type="text/javascript" src="http://jsdo.it/blogparts/qaAo/js"></script></p>
					<p>特に重要なのは56〜61行目、canvas外に出た矩形情報を取り除くところ</p>
					<pre>// 矩形がcanvas外に出たら一旦削除する
if ( thisBox.basePos.y &gt; canvas.height ) {
&nbsp;&nbsp;boxPool.splice(i--, 1);
&nbsp;&nbsp;boxLen--;
&nbsp;&nbsp;continue;
}</pre>
					<p>76〜80行目の10個以下になった場合は矩形情報を新規で追加するところでしょう。</p>
					<pre>// 矩形の数が10個以下であれば
// 新しい矩形を生成する
if ( boxPool.length &lt; 10 ) {
&nbsp;&nbsp;boxPool.push(new Box());
}</pre>
					<h2>おわり</h2>
					<p>ちょっと駆け足でしたが、Canvasを使ったアニメーションが書けました。なんでもやってみることが重要です。やってみないことには先に進まないので、少しずつでもやってみてバリエーションが増えてくれば、そのうちぐりぐり動かせるようになるんじゃないでしょうか。インプットの先のアウトプットまでできればなおいいですね。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3886&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/animation-with-canvas/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>deliciousライクでシンプルなSBMサービス「Pinboard.in」の使い方</title>
		<link>http://5509.me/log/how-to-use-the-pinborard</link>
		<comments>http://5509.me/log/how-to-use-the-pinborard#comments</comments>
		<pubDate>Sat, 18 Dec 2010 06:15:48 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[delicious]]></category>
		<category><![CDATA[pinboard]]></category>
		<category><![CDATA[socialbookmark]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3821</guid>
		<description><![CDATA[					
					閉鎖するとか存続するとか話題のdeliciousですが、delicious（というかYahoo）に嫌気がさしたファウンダーが運営している（らしい）Pinboardを使い方も含めて簡単に紹介します。
 [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard.png" alt="" title="pinboard" width="274" height="131" class="alignnone size-full wp-image-3823" /></p>
					<p><a href="http://jp.techcrunch.com/archives/20101216is-yahoo-shutting-down-del-icio-us/">閉鎖する</a>とか<a href="http://jp.techcrunch.com/archives/20101217yahoo-trying-to-sell-del-icio-us-not-to-shut-it-down/">存続するとか</a>話題の<a href="http://www.delicious.com/">delicious</a>ですが、delicious（というかYahoo）に嫌気がさしたファウンダーが運営している（らしい）<a href="http://pinboard.in/">Pinboard</a>を使い方も含めて簡単に紹介します。<br />
					<span id="more-3821"></span></p>
					<h2>deliciousと違うところ</h2>
					<h3>無料じゃない</h3>
					<p>サインアップフィーが必要です。（<a href="#signup">後述</a>）</p>
					<h3>超絶シンプル</h3>
					<p>無駄な装飾はなにもないです・・・</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard9.png" alt="" title="インポートできた" width="490" class="alignnone size-full wp-image-3859" /></p>
					<h3>あとで読む</h3>
					<p>あとで読むための一時ブックマークがあります。何気に便利。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard12.png" alt="" title="あとでよむ機能" width="490" class="alignnone size-full wp-image-3867" /></p>
					<h3>スター</h3>
					<p>重要なブックマークにはスターを。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard13.png" alt="" title="スター機能" width="301" height="29" class="alignnone size-full wp-image-3868" /></p>
					<h2 id="signup">Pinboardのサインアップ</h2>
					<p><strong>Pinboardは無料のサービスではなく</strong>、<a href="http://pinboard.in/help/fee/">サインアップフィーが必要</a>です。サインアップフィーについてはフィーのページにもある通り</p>
					<p><strong>登録ユーザー数 * $0.001</strong></p>
					<p>です。早く登録したユーザーのほうが安くいいから早く登録しちゃえよ！的な。Yahooのレイオフ騒動のおかげでフィーがあがってきています・・・ｗ記事を書いてるタイミング（18日の14時過ぎ）では<strong>$8.49</strong>、僕が登録したとき（17日の23時くらい）は<strong>$7.44</strong>、レイオフ記事が発表されたときはたしか$7弱くらいでした。<strong>登録を考えてる人はお早めに</strong>。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard2.png" alt="" title="pinboardのサインアップ" width="490" class="alignnone size-full wp-image-3833" /></p>
					<p>サインアップ時にBasic account（サインアップ時にフィーが必要）かArchival account（年間$25必要）を選択します。<strong>deliciousと同じように使うならBasicで十分</strong>です。Archivalはブックマークしたページをアーカイブ化してローカル環境でも見れるようにできる？ぽいです。</p>
					<p>有料なので、サインアップフォームの後に支払いフォームがあります。日本から使うならPaypalのほうですかね。</p>
					<h2>delicousからのインポート</h2>
					<p>インポートは超簡単です。もちろん<strong>個別プライベート設定もそのままインポートできます</strong>。</p>
					<p>とりあえずdeliciousに登録しているブックマークをエクスポートしましょう。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard3.png" alt="" title="deliciousのブックマークをエクスポート1" width="225" height="261" class="alignnone size-full wp-image-3844" /></p>
					<p>Exportページへ</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard4.png" alt="" title="deliciousのブックマークをエクスポート2" width="240" height="308" class="alignnone size-full wp-image-3845" /></p>
					<p>赤枠のチェックボックスはチェックを入れて、「Export」ボタンを押すてエクスポートファイルをダウンロードします。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard5.png" alt="" title="エクスポートされたファイル" width="224" height="48" class="alignnone size-full wp-image-3847" /></p>
					<p>次はPinboardでインポートします</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard6.png" alt="" title="インポート" width="182" height="76" class="alignnone size-full wp-image-3849" /></p>
					<p>インポートするファイルを選択してUploadします</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard7.png" alt="" title="インポート2" width="490" class="alignnone size-full wp-image-3850" /></p>
					<p>インポートが完了したら完了しましたステータスになります。なんか今混んでるみたいで（ｗ）ちょっと時間かかるかもしれないですね。そのときはステータスが「<strong>Pending</strong>」になります。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard81.png" alt="" title="インポート完了" width="339" height="118" class="alignnone size-full wp-image-3852" /></p>
					<p>インポートできた！</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard9.png" alt="" title="インポートできた" width="490" class="alignnone size-full wp-image-3859" /></p>
					<h2>ブックマークレット</h2>
					<p><a href="http://pinboard.in/howto/">ブックマークレット</a>も当然あります。いつものポップアップのやつとか同じページで移動するやつとか。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard11.png" alt="" title="Pinboardのブックマークレット" width="426" height="367" class="alignnone size-full wp-image-3864" /></p>
					<p>「popup with tags」と「Read later」がメインでしょうね。でもだいたいの人は下で書いてるChromeエクステンション使ったほうがいいと思います。キーボードショートカット使えますし。</p>
					<h2>ブックマーク以外の機能</h2>
					<p>まー基本的にはdeliciousと似たような感じです。<del datetime="2010-12-18T07:25:06+00:00">Twitterに投稿したり。</del>あ、deliciousに投稿されたブックマークをSyncする機能もありますよ。（これいるの？）</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard10.png" alt="" title="機能とか" width="387" height="393" class="alignnone size-full wp-image-3861" /></p>
					<h2>ブラウザのエクステンション・アドオン</h2>
					<p>現状Chromeなら割と便利に使えます。</p>
					<dl>
					<dt><a href="https://chrome.google.com/extensions/detail/nfccdohlgojifgadgnbjoejdfaalaehn?hl=ja">Pinboard by Jacob Buck</a></dt>
					<dd>ブラウザショートカットキーにアサインできるのが便利。Cmd+Shift+Eにブックマーク、Cmd+Shift+Lにあとでよむをあてて使ってます</dd>
					</dl>
					<p>インストールするとアイコンがでます</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard14.png" alt="" title="Chromeエクステンション" width="158" height="53" class="alignnone size-full wp-image-3878" /></p>
					<p>Keyboard ShortcutsをEnabledにして、ショートカットをアサインすると便利！</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard16.png" alt="" title="エクステンションの設定" width="262" height="321" class="alignnone size-full wp-image-3882" /></p>
					<p>Cmd+Shift+Eでブックマークウィンドウをひらく</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/pinboard151.png" alt="" title="Chromeエクステンション2" width="490" class="alignnone size-full wp-image-3880" /></p>
					<h2>お早めに（フィーがあがるまえに）</h2>
					<p>というわけで登録を考えてる人はお早めに！</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3821&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/how-to-use-the-pinborard/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2010年の人気エントリーまとめましたん！</title>
		<link>http://5509.me/log/popular-entries</link>
		<comments>http://5509.me/log/popular-entries#comments</comments>
		<pubDate>Fri, 17 Dec 2010 01:33:42 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[まとめ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3805</guid>
		<description><![CDATA[					2010年の人気エントリーまとめました! &#8211; MOLに触発されて（まねじゃない）振り返りもかねて僕も書きますです。
					でも5月にドメインを変えたので5月からの集計です。それ以前も統合するのは [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://t32k.com/mol/2010/12/popular-entries/">2010年の人気エントリーまとめました! &#8211; MOL</a>に触発されて（まねじゃない）振り返りもかねて僕も書きますです。</p>
					<p>でも5月にドメインを変えたので5月からの集計です。それ以前も統合するのは主にめんどくさい的な理由でやりたくないです・・・アクセス数も全然多くないですけど、今年は初めてから今までで一番記事書いた気がする。特に12月に入ってからは14日以外の平日は毎日更新した・・・！どこかで誰かの役にたてばうれしいです<br />
					<span id="more-3805"></span></p>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/access.png" alt="" title="accessしゅーけー" width="416" height="295" class="alignnone size-full wp-image-3807 round" /><br />
					5月からの上位こんてんつ（セッション数）</p>
					<h3>1位: <a href="http://5509.me/log/jqueryselectable">selectボックスをシンプルなプルダウンに拡張するjQselectable</a></h3>
					<p>jQselectableとしてGooglecodeで公開したタイミングでPHP SPOTさんで紹介してもらって爆発しました。<strong>いやこれ本当におすすめなんで使ったことない方はぜひ。一番おすすめです。</strong></p>
					<h3>2位: <a href="http://5509.me/log/realtimeformvalidation">リアルタイムフォームバリデーション jQuery.validation.js</a></h3>
					<p>公開したのって2008年の8月なんで・・・もう2年以上経ってるんですよ。もうexValidationを公開した関係でサポートはしていませんが、色んなところで使われてるのを見ましたね。うれしかったっす。</p>
					<h3>3位: <a href="http://5509.me/log/using-wordpress-as-cms">CMSとしてのWordPressでサイト構築をするときに便利な13のプラグイン</a></h3>
					<p>これも結構古い記事なんですけどねー。今でもブックマーク数が増え続ける人気エントリーですね<strong>。でも僕はこの記事を書きなおしたい・・・All in One SEO Packとか使ってないし。。。</strong></p>
					<h3>4位: <a href="http://5509.me/log/page-scrolling-with-jqueryeasing">ひと味違ったページ内スクロールをjQuery Easingプラグインで実装する jQuery.easing.scroll.js</a></h3>
					<p>jQueryのアニメーションはほんまに便利ですなー</p>
					<h3>5位: <a href="/log/jqueryplugins-i-have-used">これまでに使った20のjQueryプラグイン</a></h3>
					<p>最近はプラグインって決まったやつばっかりで前ほど使ってないですが、、自分で書くほうが楽しいですよ。なによりも<strong>ちゃんと仕様を理解して使うっていうのは重要</strong>です。</p>
					<h3>6位: <a href="http://5509.me/log/exvalidation">どんなフォームにも使えるjQueryのフォームバリデーション exValidation</a></h3>
					<p>これはかなりいいと思うんですけど・・・<strong>jQselectableと併用できるっていうのがポイント</strong>です。併用するのって僕くらいしかいないんですけど</p>
					<h3>7位: <a href="http://5509.me/log/jqueryslidescrolljs">スライドスクロールページ内リンク jQuery.slideScroll.js</a></h3>
					<p>なぜこれが・・・ページトップに移動するだけなら<a href="http://5509.me/log/snipets-2010#sn1">スニペット</a>で十分やし、これ使うくらいなら上にもある<a href="http://5509.me/log/page-scrolling-with-jqueryeasing">jQuery.easing.scroll.js</a>つかったほうがいいですｗ</p>
					<h3>8位: <a href="http://5509.me/log/jquery-with-animation">jQueryのアニメーション関連いろいろまとめ</a></h3>
					<p>簡単に使える分いろいろ方法を知ってると色んな動きを実装できて楽しいですね！</p>
					<h3>9位: <a href="http://5509.me/log/10-worthless-jquery-plugins">誰が使うの？何の役にも立たないjQueryプラグイン10選</a></h3>
					<p>なんでこれ1位じゃないの？これ<strong>一番がんばった</strong>んやで・・・みんなにも手伝ってもらって・・・TwitterのTLはだいぶ汚しましたけど・・・ｗ</p>
					<h3>10位: <a href="http://5509.me/log/jdtrunaway">クリックさせないリンク jdtRunAway.js</a></h3>
					<p>まさか単身くいこんでくるなんて・・・idea*ideaパワーですね。また来年も誰得ぷるぎんの続きやりますきっと。<a href="http://prog.re-d.net/?page_id=698">kamiyam</a>さんがひとりで続けてくれてますし・・・ｗ</p>
					<p>来年はjQuery以外でがんばりたい（｀・ω・´）</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3805&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/popular-entries/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>個人的に使うことが多い9つのjQuery・JavaScriptスニペット</title>
		<link>http://5509.me/log/snipets-2010</link>
		<comments>http://5509.me/log/snipets-2010#comments</comments>
		<pubDate>Thu, 16 Dec 2010 02:13:24 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[スニペット]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3760</guid>
		<description><![CDATA[					プラグインだけど公開してないものだったり、いつも使ってるプラグインとの組み合わせだったり、ショートコードとかなんだか色々。どれもCodaにスニペットで登録してて一発変換で使ってます。
					コードはアレなん [...]]]></description>
			<content:encoded><![CDATA[					<p>プラグインだけど公開してないものだったり、いつも使ってるプラグインとの組み合わせだったり、ショートコードとかなんだか色々。どれもCodaにスニペットで登録してて一発変換で使ってます。</p>
					<p>コードはアレなんですけど、ひょっとしてひょっとすると誰かの役に立つかもしれないので恥ずかしながら公開します。対象はちょっとだけJS書けるとかそういう人ですかねたぶん。書ける人はもっとキレイなやつ使ってるでしょうし。（もっときれいに書けとか何そのコードとかも歓迎）</p>
					<h3>紹介してるスニペットたち</h3>
					<ul>
					<li><a href="#sn1">ページトップにスクロールするだけ</a></li>
					<li><a href="#sn2">テキストボックスにラベル表示するやつ</a></li>
					<li><a href="#sn3">要素のサイズを取得するやつ</a></li>
					<li><a href="#sn4">タブきりかえるやつ</a></li>
					<li><a href="#sn5">IEで透過pngをフェードしたときに黒くなるやつ対策のshow()とhide()</a></li>
					<li><a href="#sn6">Google Analyticsのトラックイベント一括bind</a></li>
					<li><a href="#sn7">Ajaxサイトにするときに使うリンク置き換えプラグイン</a></li>
					<li><a href="#sn8">スクロール位置を取得する</a></li>
					<li><a href="#sn9">表示領域のサイズを得る</a></li>
					</ul>
					<h3>まとめたやつのファイル</h3>
					<p>今回紹介した原文コードをまとめたものと、圧縮したものを置いておきます。</p>
					<ul>
					<li><a href="/sample/snipets.js">snipets.js</a></li>
					<li><a href="/sample/snipets_min.js">snipets_min.js</a></li>
					</ul>
					<h3>ライセンス（が気になる人へ）</h3>
					<p><a href="http://ja.wikipedia.org/wiki/WTFPL">WTFPL</a>ライセンスにしておくので好きなようにつかってください<br />
					<span id="more-3760"></span></p>
					<h2 id="sn1">ページトップにスクロールするだけ</h2>
					<p>#pageTop&gt;aみたいな要素に適用するだけならこれコピって使うほうがいいですね。easingは使わないならswingとかに変えてください。</p>
					<h3>ソースコード</h3>
					<pre>function pageScroll() {
&nbsp;&nbsp;$('html, body').animate({
&nbsp;&nbsp;&nbsp;&nbsp;scrollTop: 0
&nbsp;&nbsp;}, {
&nbsp;&nbsp;&nbsp;&nbsp;easing: 'easeInOutCirc',
&nbsp;&nbsp;&nbsp;&nbsp;duration: 500
&nbsp;&nbsp;});
}
$('#pageTop&gt;a').click(function() {
&nbsp;&nbsp;pageScroll();
&nbsp;&nbsp;return false;
});</pre>
					<h2 id="sn2">テキストボックスにラベル表示するやつ</h2>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/sni_label.png" alt="" title="inputlabel" width="209" height="140" class="alignnone size-full wp-image-3763" /><br />
					↑こういう具合にラベル表示するやつ</p>
					<p>引数にどの属性からひっぱるか指定して使います。僕はtitleを指定することが多いです</p>
					<h3>ソースコード</h3>
					<pre style="height: 150px">$.fn.inputLabel = function(attr){
&nbsp;&nbsp;var formElms = $(this);
&nbsp;&nbsp;for(var i=0;i&lt;formElms.length;i++){
&nbsp;&nbsp;&nbsp;&nbsp;var self = formElms[i];
&nbsp;&nbsp;&nbsp;&nbsp;var parent = $(self).parent();
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;if($(self).attr(attr) &amp;&#038; $(self).attr(attr).length&gt;0){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent.css('position','relative')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var label = $(self).attr(attr);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var pos = $(self).position();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(self).removeAttr('title');
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var insertLabel = $('&lt;span/&gt;')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.attr('id','label_'+self.id)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(label)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.addClass('label')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.css({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position: 'absolute',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top: pos.top + 6,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left: pos.left + 7,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zIndex: 100,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color: '#666'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent.append(insertLabel);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(self.value &amp;&#038; self.value.length&gt;0){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insertLabel.hide();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insertLabel.click(function(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var relationInputId = this.id.replace('label_','');
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(this).hide();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$('#'+relationInputId).focus();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(self).focus(function(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$('#label_'+this.id).hide();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}).blur(function(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(this.value.length&lt;1){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$('#label_'+this.id).show();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
&nbsp;&nbsp;return this;
}</pre>
					<h3>実行例</h3>
					<pre>$(hoge).inputLabel('title');</pre>
<h2 id="sn3">要素のサイズを取得するやつ</h2>
<p>非表示の要素とかいちいちshow()して取得してhide()してとかめんどい</p>
<p>任意のタイミングで</p>
<pre>$(hoge).m5getSize()</pre>
					<p>ってしたら</p>
					<pre>$.data(hoge, 'boxSize')</pre>
<p>で色んなサイズが取れます</p>
<h3>ソースコード</h3>
<pre>$.fn.m5getSize = function(options) {
&nbsp;&nbsp;$(this).each(function() {
&nbsp;&nbsp;&nbsp;&nbsp;var $this = $(this),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prevBoxStyle = $this.css('display');
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;$this.show();
&nbsp;&nbsp;&nbsp;&nbsp;$.data($this, 'boxSize', {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width: $this.width(),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height: $this.height(),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offsetWidth: $this.attr('offsetWidth'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offsetHeight: $this.attr('offsetHeight'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientWidth: $this.attr('clientWidth'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientHeight: $this.attr('clientHeight'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scrollWidth: $this.attr('scrollWidth'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scrollHeight: $this.attr('scrollHeight'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top: $this.offset().top,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left: $this.offset().left
&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;$this.css('display', prevBoxStyle);
&nbsp;&nbsp;});
&nbsp;&nbsp;return this;
}</pre>
					<h2 id="sn4">タブきりかえるやつ</h2>
					<p>なんか結局自分で作ったやつが一番使いやすいっていうか、いつも同じHTML書いてればいいし楽ですよね。</p>
					<h3>HTML</h3>
					<p>こんなHTMLを用意してtabSwitchを実行するだけです。</p>
					<pre>&lt;div class=&quot;tabArea&quot;&gt;
&nbsp;&nbsp;&lt;ul class=&quot;tab&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;&lt;a href=&quot;#hoge&quot; class=&quot;active&quot;&gt;hoge&lt;/a&gt;&lt;/li&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;&lt;a href=&quot;#fuga&quot;&gt;fuga&lt;/a&gt;&lt;/li&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;&lt;a href=&quot;#piyo&quot;&gt;piyo&lt;/a&gt;&lt;/li&gt;
&nbsp;&nbsp;&lt;/ul&gt;
&nbsp;&nbsp;
&nbsp;&nbsp;&lt;div id=&quot;hoge&quot;&gt;hogehoge&lt;/div&gt;
&nbsp;&nbsp;&lt;div id=&quot;fuga&quot;&gt;fugafuga&lt;/div&gt;
&nbsp;&nbsp;&lt;div id=&quot;piyo&quot;&gt;piyopiyp&lt;/div&gt;
&lt;/div&gt;</pre>
					<h3>ソースコード</h3>
					<pre style="height: 150px">$.fn.tabSwitch = function(options){
&nbsp;&nbsp;
&nbsp;&nbsp;var c = $.extend({
&nbsp;&nbsp;&nbsp;&nbsp;defaultCondition: true,
&nbsp;&nbsp;&nbsp;&nbsp;effect: false,
&nbsp;&nbsp;},options);
&nbsp;&nbsp;
&nbsp;&nbsp;var switchEffect = {
&nbsp;&nbsp;&nbsp;&nbsp;show: function(o){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(c.effect) $(o).fadeIn(&quot;normal&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else $(o).show();
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;hide: function(o){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(c.effect) $(o).fadeOut(&quot;fast&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else $(o).hide();
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
&nbsp;&nbsp;
&nbsp;&nbsp;function tabHide(o,flag){
&nbsp;&nbsp;&nbsp;&nbsp;if(flag || !c.defaultCondition){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(o).each(function(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switchEffect.hide(this.hash);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;}else{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($(o).hasClass(&quot;active&quot;)){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(o).each(function(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!$(this).hasClass(&quot;active&quot;))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switchEffect.hide(this.hash);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var i=0;i&lt;o.length;i++){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i==0) $(o[i]).addClass(&quot;active&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else switchEffect.hide(o[i].hash);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
&nbsp;&nbsp;
&nbsp;&nbsp;function tabSet(o){
&nbsp;&nbsp;&nbsp;&nbsp;$(o).each(function(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var anchor = $(&quot;ul.tab a&quot;,this).filter(function(){return this.hash;});
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var j=0;j&lt;anchor.length;j++){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tabHide(anchor,false);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(anchor[j]).click(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tabHide(anchor,true);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(anchor).not(this).removeClass(&quot;active&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switchEffect.show(this.hash);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(this).addClass(&quot;active&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(this).blur();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(location.hash &amp;&#038; $(location.hash,this).length&gt;0){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.scroll(0,0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tabHide(anchor,true);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(anchor).removeClass(&quot;active&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switchEffect.show(location.hash);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(&quot;a[href*='&quot;+location.hash+&quot;']&quot;,&quot;ul.tab&quot;).addClass(&quot;active&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;}
&nbsp;&nbsp;
&nbsp;&nbsp;$(this).each(function(){ tabSet(this);});
&nbsp;&nbsp;
&nbsp;&nbsp;return this;
}</pre>
					<h3>実行例</h3>
					<pre>$("div.tabArea").tabSwitch();</pre>
<h2 id="sn5">IEで透過pngをfadeしたときに黒くなるやつ対策のshow()とhide()</h2>
<p>あの黒くなるのなんとかなりませんかね！単純にIEにはフェードじゃなくてshow()hide()にするだけで、使い方はfadeIn(), fadeOut()と置き換えるだけです。IE9だと黒くならないかも。そのへん未検証</p>
<h3>ソースコード</h3>
<pre>$.fn.exShow = function(duration, callback) {
&nbsp;&nbsp;if (!$.support.opacity) {
&nbsp;&nbsp;&nbsp;&nbsp;$(this).show();
&nbsp;&nbsp;&nbsp;&nbsp;if (callback &amp;&#038; typeof callback == 'function') {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback.call(this);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;$(this).fadeIn(duration, callback);
&nbsp;&nbsp;}
&nbsp;&nbsp;return this;
}
$.fn.exHide = function(duration, callback) {
&nbsp;&nbsp;if (!$.support.opacity) {
&nbsp;&nbsp;&nbsp;&nbsp;$(this).hide();
&nbsp;&nbsp;&nbsp;&nbsp;if (callback &amp;&#038; typeof callback == 'function') {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback.call(this);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;$(this).fadeOut(duration, callback);
&nbsp;&nbsp;}
&nbsp;&nbsp;return this;
}</pre>
					<h2 id="sn6">Google Analyticsのトラックイベント一括bind</h2>
					<p>トップページ全部のリンクに・・・とかめんどくさくてやってられません！classにgaTrackEvent、idにテキトーなやつ入れておけば自動で集計してくれます。自動なんで目安はURLなんですけど・・・</p>
					<h3>ソースコード</h3>
					<p>ところで、ひとつ前の非同期じゃないやつなんで非同期の人は_gaq.pushに置き換えてください。</p>
					<pre>$('div.gaTrackEvent').each(function() {
&nbsp;&nbsp;var _thisId = $(this).attr('id'),
&nbsp;&nbsp;&nbsp;&nbsp;_thisChildAnchors = $('a', this);
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;_thisChildAnchors.each(function() {
&nbsp;&nbsp;&nbsp;&nbsp;var _thisHref = $(this).attr('href');
&nbsp;&nbsp;&nbsp;&nbsp;if ( pageTracker ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(this).click(function() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageTracker._trackEvent('hogehoge', _thisId, _thisHref);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;});
});</pre>
					<h2 id="sn7">Ajaxサイトにするときに使うリンク置き換えプラグイン</h2>
					<p>任意のリンクに対して実行するだけで</p>
					<pre>http://hoge.com/hogehoge/hoge2/</pre>
<p>みたいな普通のリンクを</p>
<pre>http://hoge.com/#/hogehoge/hoge2/</pre>
					<p>みたいにハッシュフラグメントリンクに置き換えます</p>
					<h3>ソースコード</h3>
					<pre>$.fn.ggReplaceHrefs = function() {
&nbsp;&nbsp;var elms = $(this);
&nbsp;&nbsp;elms.each(function() {
&nbsp;&nbsp;&nbsp;&nbsp;$(this)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(function() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.href.indexOf(domain) != -1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.attr('href', $(this).attr('href').match(/^\./)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;? $(this).attr('href')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replace(domain, '')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replace(/^\./, '#')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: '#' + $(this).attr('href').replace(domain, ''))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.click(function() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location.hash = this.hash;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;});
}</pre>
					<h2 id="sn8">スクロール位置を取得する</h2>
					<p>スニペットにすると楽です。要素の位置を計算するときがよくあるんですけど、windowのリサイズに対応したり色々めんどうですよね。。</p>
					<p>ちなみにサイズ取得関連は何回お世話になってるか分からないcyokodogさんの記事をいつも見てます<br />
					<a href="http://d.hatena.ne.jp/cyokodog/20090224/jQueryPosSet01">jQuery の位置・サイズ関連メソッドまとめ &#8211; cyokodog</a></p>
					<h3>ソースコード</h3>
					<pre>var returnScrollTop = function() {
&nbsp;&nbsp;return {
&nbsp;&nbsp;&nbsp;&nbsp;y: document.body.scrollTop || document.documentElement.scrollTop,
&nbsp;&nbsp;&nbsp;&nbsp;x: document.body.scrollLeft || document.documentElement.scrollLeft
&nbsp;&nbsp;}
}</pre>
					<h2 id="sn9">表示領域のサイズを得る</h2>
					<p>要はHTMLドキュメントの高さと幅に当たるところです。これもスニペットで</p>
					<h3>ソースコード</h3>
					<pre>var returnClientSize = function() {
&nbsp;&nbsp;return {
&nbsp;&nbsp;&nbsp;&nbsp;x: document.body.clientWidth || document.documentElement.clientWidth,
&nbsp;&nbsp;&nbsp;&nbsp;y: document.body.clientHeight || document.documentElement.clientHeight
&nbsp;&nbsp;}
}</pre>
					<h2>というわけで</h2>
					<p>便利なスニペットコードあれば教えてください！</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3760&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/snipets-2010/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ブログ・サイトに貼る主要ソーシャルサービスのボタンソースジェネレータ</title>
		<link>http://5509.me/log/social-service-buttons-generator</link>
		<comments>http://5509.me/log/social-service-buttons-generator#comments</comments>
		<pubDate>Wed, 15 Dec 2010 01:40:20 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[MovableType]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[いいね]]></category>
		<category><![CDATA[ジェネレータ]]></category>
		<category><![CDATA[ソーシャルサービス]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3706</guid>
		<description><![CDATA[					
					はてなブックマークとかTwitterのつぶやくボタンはブログやサイトにあると便利ですよね。でも作るときにいちいちソース探すのも手間やし、一括一発でソースコピれるやつがあったら便利かなと思ったので一発 [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/12/sbm_c.png" alt="" title="ソーシャルサービスのボタン" width="450" height="88" class="alignnone size-full wp-image-3753" /></p>
					<p>はてなブックマークとかTwitterのつぶやくボタンはブログやサイトにあると便利ですよね。でも作るときにいちいちソース探すのも手間やし、一括一発でソースコピれるやつがあったら便利かなと思ったので一発でソース生成するやつ作りました。</p>
					<p>URLとタイトル入れて「これでつくる」ボタンクリックでソースが表示されるのでコピって使えると思います。<br />
					<span id="more-3706"></span></p>
					<p>今のところ対応してるのは</p>
					<ul>
					<li>はてなブックマーク</li>
					<li>Twitter</li>
					<li>Facebookのいいね</li>
					<li>Evernoteのクリップ</li>
					<li>mixiチェック</li>
					<li>mixiイイネ</li>
					</ul>
					<p>です。必要なやつだけコピって使ってください。mixiが要るのかはアレです・・・</p>
					<h3>使い方など</h3>
					<ol>
					<li>用途を選ぶ。WPとMTの場合はURLとタイトル必要ないです。出てきたソースをループの中に入れるだけですね</li>
					<li><strong>はてブ・Twitter・Facebookのボタンは大きいサイズも選べます</strong>（プレビューはずれるけど気にしない）</li>
					<li>mixiのボタンを利用する場合は、<strong>チェックキーを取得して入力</strong>してください<br />チェックキーの取得は西畑さんの記事を参考にしてください : <a href="http://blog.webcreativepark.net/2010/09/11-042911.html">チェックキーの取得について &#8211; to-R</a></li>
					<li><strong>「これでつくる」</strong>ボタンをクリックする</li>
					<li>生成されるボタンのプレビューがみれます</li>
					<li>表示されたソースコードをコピーペーストする。タブクリックすると個別のソースコードでコピーできます</li>
					</ol>
					<p>※ Evernoteも入れたかったけど項目が多くてあきらめました・・・</p>
					<h3>ジェネレータ</h3>
					<p><iframe src="/sbm/" width="500" height="980" frameborder="0"></iframe><br />
					※ iframeで表示しているのでRSSで読んでる方は<a href="http://5509.me/log/social-service-buttons-generator">記事で見てください</a>　:)</p>
					<p>ジェネレータのボタンは<a href="http://www.css-lecture.com/log/css3/css3-button-sample.html">CSS3 でボタンを作る為のテクニック、サンプル集 &#8211; CSS Lecture</a>のサンプルボタンをそのまま使わせてもらいました・・・ｗ</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3706&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/social-service-buttons-generator/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>HTML5でコーディングしたページでjQueryを使うときに気をつけること</title>
		<link>http://5509.me/log/notification-of-using-jquery-with-html5</link>
		<comments>http://5509.me/log/notification-of-using-jquery-with-html5#comments</comments>
		<pubDate>Mon, 13 Dec 2010 01:30:01 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[memo]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3682</guid>
		<description><![CDATA[					そろそろHTML5でコーディングする機会も増えてきたりするかもしれませんが、どうしてもブラウザ対応はしておきたいもの。jQueryで（※）要素をごにょごにょする際にちょっとはまったので一応書いておきます。
		 [...]]]></description>
			<content:encoded><![CDATA[					<p>そろそろHTML5でコーディングする機会も増えてきたりするかもしれませんが、どうしてもブラウザ対応はしておきたいもの。jQueryで（※）要素をごにょごにょする際にちょっとはまったので一応書いておきます。<br />
					<span id="more-3682"></span></p>
					<p>IE8以下での話ですが、IE8以下でHTML5を利用するときはHTML5の要素にCSSが適用されないので、<a href="http://remysharp.com/2009/01/07/html5-enabling-script/">html5.js</a>のようなスクリプトを<strong>ヘッダで</strong>読み込ませたりすると思います。</p>
					<pre>&lt;!--[if lt IE 9]&gt;
&lt;script src="http://html5shim.googlecode.com/svn/trunk/html5.js"&gt;&lt;/script&gt;
&lt;![endif]--&gt;</pre>
					<p>ちなみに僕はわざわざ読み込むのもアレなので、以下のものを毎回貼ってます。</p>
					<pre>&lt;!--[if lt IE 9]&gt;
&lt;script&gt;
var html5 = ['header', 'footer', 'section', 'article', 'aside', 'time', 'hgroup'];
// ↑使う要素を配列に入れておく
for ( var i=0, j=html5.length; i&lt;j; i++ ) {
&nbsp;&nbsp;document.createElement(html5[i]);
}
&lt;/script&gt;
&lt;![endif]--&gt;</pre>
					<p>こんな感じでJavaScriptのcreateElementメソッドでHTML5の要素を追加すれば、CSSが使えるようになって見た目もだいたいばっちりになるんですけど・・・</p>
					<p>jQueryで</p>
					<pre>$(hoge).append('&lt;section&gt;セクション&lt;/section&gt;')</pre>
<p>とか</p>
<pre>$(hoge).append([
&nbsp;&nbsp;'&lt;section&gt;',
&nbsp;&nbsp;&nbsp;&nbsp;'&lt;header&gt;',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;hgroup&gt;',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;h1&gt;&#12479;&#12452;&#12488;&#12523;&lt;/h1&gt;',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;h2&gt;&#12469;&#12502;&#12479;&#12452;&#12488;&#12523;&lt;/h2&gt;',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;/hgroup&gt;',
&nbsp;&nbsp;&nbsp;&nbsp;'&lt;/header&gt;',
&nbsp;&nbsp;&nbsp;&nbsp;// hogehoge
&nbsp;&nbsp;&nbsp;&nbsp;'&lt;footer&gt;',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;time datetime=&quot;hogehoge&quot;&gt;hogehoge&lt;/time&gt;'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// hogehogehoge
&nbsp;&nbsp;&nbsp;&nbsp;'&lt;/footer&gt;',
&nbsp;&nbsp;'&lt;/section&gt;'
].join(''));</pre>
					<p>とか</p>
					<pre>&lt;header id="hoge"&gt;hogehogehoge&lt;/header&gt;</pre>
<p>を</p>
<pre>var hogeClone = $('#hoge');
$('body').append(hogeClone);</pre>
					<p>とか（コードの内容に意味はないです）するとCSSが適用されない訳ですよ。つまり<strong>ページロード時にはcreateElementで要素を作ってるんだけど、それ以降に新しく追加されたりしたHTML5の要素にはcreateElementしてたやつは効果がない</strong>っぽい。</p>
					<p>単純に上に書いたようなDOM操作なら、ちょっとめんどいけど</p>
					<pre>$(hoge).append(document.createElement('section'))</pre>
<p>みたいにすればよさそう。でもAjaxでとってきたページにHTML5の要素が含まれててそいつらを追加すると、なんかどうやってもうまくいかなかった。</p>
<p>そんなわけでAjax使うところはHTML5の要素を入れなかったりしてます。でもAjaxなくても毎回createElementとかあほらしいし、そういう処理使う場合はHTML5の要素は使わない方がいいんじゃないですかね。<br />
とか言いながら使いまわせるメソッドとかスニペットとかあればそれでいいのかも。</p>
<h3>20101213 11:43 追記</h3>
<p>対応方法と原因を曖昧にしていた（だめっぽいとかいけるっぽいとか・・・）ので、Webtech Walkerさんの記事へのリンクを追記します。<br />
<a href="http://webtech-walker.com/archive/2010/07/01155948.html">HTML5の新要素をjQueryでappendとかするとバグる件 &#8211; Webtech Walker</a></p>
<p>jQueryのappend、after等の要素追加メソッドで使うときは<a href="http://jdbartlett.github.com/innershiv/">innershiv.js</a>を利用すればだいたい大丈夫です。</p>
<h3>まとめ</h3>
<p>つまり何が言いたかったかというと<br />
jQueryぷるぎんって要素をclone()メソッドでコピーしたりなんか色々DOM要素をごにょごにょしたりするやつもあったりするので（僕が作ったやつにもあるんですけど・・・）何気なく使ってる人はそういうこともあるっていう事を知っておかないと、CSSあたらへんねん！意味わからん！とかになったりしそうなので気をつけておかないとなぁーっていうことです。</p>
<p>これくらいはjQueryでネイティブに対応してほしいですね。。</p>
<p><strong>※）jQueryというかJavaScriptですが</strong></p>
<img src="http://5509.me/?ak_action=api_record_view&id=3682&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/notification-of-using-jquery-with-html5/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>iPhoneの索引一覧みたいにタイトルがついてくるUIを実装できるjQueryプラグイン m5elementFollow</title>
		<link>http://5509.me/log/m5elementfollow</link>
		<comments>http://5509.me/log/m5elementfollow#comments</comments>
		<pubDate>Fri, 10 Dec 2010 02:20:35 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[ユーザビリティ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3644</guid>
		<description><![CDATA[					
					画像はiPhoneのiPodでアーティストを探しているところですが、同じようなUIを実装したいと思っていて、簡単に言うとスクロールに追従してくる感じなんですけど、複数要素の対応だったり、索引一覧みた [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://5509.me/wp-content/uploads/2010/12/m5elementfollow.jpg"><img src="http://5509.me/wp-content/uploads/2010/12/m5elementfollow-200x300.jpg" alt="" title="m5elementfollow" width="200" height="300" class="alignright size-medium wp-image-3666" /></a></p>
					<p>画像はiPhoneのiPodでアーティストを探しているところですが、同じようなUIを実装したいと思っていて、簡単に言うとスクロールに追従してくる感じなんですけど、複数要素の対応だったり、索引一覧みたいにひっかかった場合に次のタイトルがついてくる的な動きがほしかったのでつくってみました。</p>
					<p>サンプルを見たほうが早いと思いますが、このブログのトップのようにタイトルをついてこさせたり、記事ページのようにソーシャルサービスへのリンクやメタ情報などの要素を固定できます。</p>
					<p>このブログにも試験的に取り入れていますので確認できますが、HTML5の要素を利用しているためIE8以下では確認することができません。IE8以下での確認は一番上のサンプルでみてください。</p>
					<ul>
					<li><a href="http://5509.me/sample/m5elementFollow/">動作サンプル（IE6以外で動作)</a></li>
					<li><a href="http://5509.me/">いくつもタイトルがある場合（このブログのトップ）</a></li>
					<li><strong>指定要素を表示しておきたい場合（今見ているページ）</strong></li>
					</ul>
					<p><span id="more-3644"></span></p>
					<h2>必要なファイルを読み込む</h2>
					<p>jQueryと<a href="http://5509.me/sample/m5elementFollow/js/m5elementFollow.js" onclick="_gaq.push(['_trackEvent', 'js', this.href])">m5elementFollow.js</a>を読み込みます。</p>
					<pre>&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/m5elementFollow.js&quot;&gt;&lt;/script&gt;</pre>
					<h2>任意の要素に対して実行する</h2>
					<p>実行した要素はスクロールについてきているとき「<strong>following</strong>」というクラスが付与されます。</p>
					<h3>JS</h3>
					<pre>jQuery(function($) {
&nbsp;&nbsp;// 指定したい要素の親要素に対して実行する
&nbsp;&nbsp;$('article.entry').m5elementFollow({
&nbsp;&nbsp;&nbsp;&nbsp;// ついてこさせる要素は親要素内にある物を指定できる
&nbsp;&nbsp;&nbsp;&nbsp;follow: 'header, footer'
&nbsp;&nbsp;});
});</pre>
					<h2>オプション</h2>
					<p>トップから少し下にずらすこともできます。</p>
					<table border="1" class="lftable">
					<tr>
					<th>項目</th>
					<th>値</th>
					</tr>
					<tr>
					<td>follow</td>
					<td>追従させる要素 (def &#8211; &#8216;.title&#8217;</td>
					</tr>
					<tr>
					<td>top</td>
					<td>トップから指定ピクセル分下にずらせます (def &#8211; 0</td>
					</tr>
					</table>
					<p><strong>いまのところIE6は非対応です。</strong></p>
					<ul>
					<li><a href="http://5509.me/sample/m5elementFollow/">動作サンプル（IE6以外で動作)</a></li>
					<li><a href="http://5509.me/">いくつもタイトルがある場合（このブログのトップ）</a></li>
					<li><a href="http://5509.me/log/m5noticedisplay">指定要素を表示しておきたい場合（このブログの記事詳細）</a></li>
					</ul>
					<img src="http://5509.me/?ak_action=api_record_view&id=3644&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/m5elementfollow/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>マウスホバー時にボックスをくるっとひっくり返すようなエフェクトで中身を切り替えるjQueryプラグイン m5flipElement</title>
		<link>http://5509.me/log/m5flipelement</link>
		<comments>http://5509.me/log/m5flipelement#comments</comments>
		<pubDate>Thu, 09 Dec 2010 01:07:19 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[エフェクト]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3643</guid>
		<description><![CDATA[					
					マウスオーバーしたときにくるっとひっくり返す（ような）エフェクトで目をひけるかもしれないjQueryプラグインです。ちょっと今日は・・・自信ないですｗぷるぎんのくせに使い方がややこしくなってしまった [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/12/m5flipelement.png" alt="" title="m5flipelementの動作解説" width="500" height="131" class="alignright size-full wp-image-3659" /></p>
					<p>マウスオーバーしたときにくるっとひっくり返す（ような）エフェクトで目をひけるかもしれないjQueryプラグインです<del datetime="2010-12-08T23:07:17+00:00">。ちょっと今日は・・・自信ないですｗ</del>ぷるぎんのくせに使い方がややこしくなってしまったんですけど反省はしてません。最低限必要やったんやで・・・</p>
					<ul>
					<li><a href="http://5509.me/sample/m5flipElement">動作サンプル</a></li>
					</ul>
					<p><span id="more-3643"></span></p>
					<h2>必要なファイルを読み込む</h2>
					<p>jQueryと<a href="http://5509.me/sample/m5flipElement/js/m5flipElement.js" onclick="_gaq.push(['_trackEvent', 'js', this.href])">m5flipElement.js</a>を読み込みます。</p>
					<pre>&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/m5flipElement.js&quot;&gt;&lt;/script&gt;</pre>
					<h2>任意の要素に対して実行する</h2>
					<p>元のHTMLとCSSの書き方などに制約が多いところがややこしいので、それぞれポイントを書いてます。</p>
					<h3>HTML</h3>
					<ul>
					<li>要素の中身はなんでもよくて以下の2つを含んでいるとよさげ</li>
					<li><strong>class: flipDefault</strong> は初期表示要素</li>
					<li><strong>class: flipHide</strong> はフリップ後に表示される要素</li>
					<li><strong>フリップ後は_boxの要素にclass: flipped が追加</strong>されます</li>
					</ul>
					<pre>&lt;div class="flipElement"&gt;
&nbsp;&nbsp;&lt;h2&gt;フリップエレメント&lt;/h2&gt;
&nbsp;&nbsp;&lt;p class="flipDefault"&gt;カーソルをあわせると・・・&lt;/p&gt;
&nbsp;&nbsp;&lt;p class="flipHide"&gt;コメントコメントコメントコメントコメントコメントコメントコメントコメントコメントコメントコメントコメントコメントコメント&lt;/p&gt;
&lt;/div&gt;</pre>
					<p>JavaScriptを実行すると元のHTMLが下記のように置き換わります。元の要素にclassがある場合classを、classがなくてidしかない場合はidをそれぞれ継承して_container、_boxを付与したものでwrapされます。（ややこしい）</p>
					<pre>&lt;div class="flipElement_container flip_container"&gt;
&nbsp;&nbsp;&lt;div class="flipElement_box flip_box"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="flipElement flip_elem"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h2&gt;フリップエレメント&lt;/h2&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p class="flipDefault"&gt;カーソルをあわせると・・・&lt;/p&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p class="flipHide"&gt;コメントコメントコメントコメントコメントコメントコメントコメントコメントコメントコメントコメントコメントコメントコメント&lt;/p&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;
&nbsp;&nbsp;&lt;/div&gt;
&lt;/dd&gt;</pre>
					<h3>CSS</h3>
					<ul>
					<li><strong>div.flipElement_container</strong>は、floatやmarginなど配置を決定するプロパティを指定します</li>
					<li><strong>div.flieElement_box</strong>は、元の要素でborderを指定している場合同じborderを指定します</li>
					<li>.flipped でスタイルをがらりと変えたほうが効果的な気がします</li>
					</ul>
					<pre>/* ここからJSで生成する要素 */
div.flipElement_container {
&nbsp;&nbsp;margin-right: 10px;
&nbsp;&nbsp;margin-bottom: 10px;
&nbsp;&nbsp;display: inline-block;
&nbsp;&nbsp;/display: inline;
&nbsp;&nbsp;/zoom: 1;
}
div.flipElement_box {
&nbsp;&nbsp;border: solid #ddd 1px;
}
/* ここまで */
div.flipElement {
&nbsp;&nbsp;margin-right: 10px;
&nbsp;&nbsp;margin-bottom: 10px;
&nbsp;&nbsp;border: solid #ddd 1px;
&nbsp;&nbsp;display: inline-block;
&nbsp;&nbsp;/display: inline;
&nbsp;&nbsp;/zoom: 1;
&nbsp;&nbsp;width: 250px;
&nbsp;&nbsp;height: 100px;
}
/* フリップ後 */
div.flipped {
&nbsp;&nbsp;background: #000;
}

div.flipElement h2 {
&nbsp;&nbsp;margin: 0 auto;
&nbsp;&nbsp;padding: 5px;
&nbsp;&nbsp;background: #eee;
&nbsp;&nbsp;text-align: center;
}

div.flipElement p {
&nbsp;&nbsp;padding: 5px 10px;
&nbsp;&nbsp;line-height: 1.4;
}
/* フリップ後 */
div.flipped p {
&nbsp;&nbsp;color: #fff;
}
&nbsp;&nbsp;
/* デフォルトは非表示 */
.flipHide {
&nbsp;&nbsp;display: none !important;
}</pre>
					<h3>JS</h3>
					<p>元の要素がborderを含んでいる場合はboxBorderAdjustプロパティで左右のボーダー幅を渡すときれいになります。（ややこしい）</p>
					<pre>jQuery(function($) {
&nbsp;&nbsp;$('.flipElement').m5flipElement({
&nbsp;&nbsp;&nbsp;&nbsp;boxBorderAdjust: 1
&nbsp;&nbsp;});
});</pre>
					<h2>オプション</h2>
					<p>おきまりのeasingなど</p>
					<table border="1" class="lftable">
					<tr>
					<th>項目</th>
					<th>値</th>
					</tr>
					<tr>
					<td>boxBorderAdjust</td>
					<td>元の要素にボーダーがある場合その幅を指定（左右のみ）<br />(def &#8211; 150</td>
					</tr>
					<tr>
					<td>easing</td>
					<td>フリップアニメーションのeasing (def &#8211; &#8216;swing&#8217;</td>
					</tr>
					<tr>
					<td>duration</td>
					<td>フリップアニメーションの速度 (def &#8211; 300</td>
					</tr>
					<tr>
					<td>callback</td>
					<td>コールバック function() {}</td>
					</tr>
					</table>
					<ul>
					<li><a href="http://5509.me/sample/m5flipElement">動作サンプル</a></li>
					</ul>
					<img src="http://5509.me/?ak_action=api_record_view&id=3643&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/m5flipelement/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ちょっとは入力しやすくなるかも？選択中のテキストエリアを拡大して見易くするjQueryプラグイン m5enlargeInput</title>
		<link>http://5509.me/log/m5enlargeinput</link>
		<comments>http://5509.me/log/m5enlargeinput#comments</comments>
		<pubDate>Wed, 08 Dec 2010 01:20:11 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[pluign]]></category>
		<category><![CDATA[ユーザビリティ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3621</guid>
		<description><![CDATA[					
					テキスト入力エリア（input, textarea）にフォーカスすると入力エリアを拡大して見やすく表示することができるプラグインです。クラスを付与するためフォントサイズもあわせて大きくすることができ [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/12/m5enlargeinput.png" alt="" title="m5enlargeinputの解説画像" width="500" height="166" class="alignright size-full wp-image-3624 round" /></p>
					<p>テキスト入力エリア（input, textarea）にフォーカスすると入力エリアを拡大して見やすく表示することができるプラグインです。クラスを付与するためフォントサイズもあわせて大きくすることができます。</p>
					<ul>
					<li><a href="http://5509.me/sample/m5enlargeInput">動作サンプル</a></li>
					</ul>
					<p><span id="more-3621"></span></p>
					<h2>必要なファイルを読み込む</h2>
					<p>jQueryと<a href="http://5509.me/sample/m5enlargeInput/js/m5enlargeInput.js" onclick="_gaq.push(['_trackEvent', 'js', this.href])">m5enlargeInput.js</a>を読み込みます。</p>
					<pre>&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/m5enlargeInput.js&quot;&gt;&lt;/script&gt;</pre>
					<h2>任意の要素に対して実行する</h2>
					<p>input、textarea要素に対して実行します。（以下はサンプルのHTMLです。）</p>
					<h3>HTML</h3>
					<pre>&lt;dl&gt;
&nbsp;&nbsp;&lt;dt&gt;input (single)&lt;/dt&gt;
&nbsp;&nbsp;&lt;dd&gt;&lt;input type=&quot;text&quot; id=&quot;text&quot; class=&quot;enlargeInput&quot; value=&quot;&quot; /&gt;&lt;/dd&gt;
&nbsp;&nbsp;&lt;dt&gt;input (double)&lt;/dt&gt;
&nbsp;&nbsp;&lt;dd&gt;&lt;input type=&quot;text&quot; class=&quot;enlargeInput&quot; value=&quot;&quot; /&gt;
&nbsp;&nbsp;&lt;input type=&quot;text&quot; class=&quot;enlargeInput&quot; value=&quot;&quot; /&gt;&lt;/dd&gt;
&nbsp;&nbsp;&lt;dt&gt;textarea (with custom options)&lt;/dt&gt;
&nbsp;&nbsp;&lt;dd&gt;&lt;textarea id=&quot;area&quot; cols=&quot;5&quot; rows=&quot;5&quot;&gt;&lt;/textarea&gt;&lt;/dd&gt;
&lt;/dl&gt;
</pre>
					<h3>JS</h3>
					<pre>jQuery(function($) {
&nbsp;&nbsp;$('.enlargeInput').m5enlargeInput();
});</pre>
					<h2>オプション</h2>
					<p>ホバー効果や拡大時のセンタリング（元の位置に対して真ん中にくるように上と左を別個設定可）などを設定できます。</p>
					<table border="1" class="lftable">
					<tr>
					<th>項目</th>
					<th>値</th>
					</tr>
					<tr>
					<td>enlargeRatioWidth</td>
					<td>拡大時の幅（元に対して%指定）<br />(def &#8211; 150</td>
					</tr>
					<tr>
					<td>enlargeRatioHeight</td>
					<td>拡大時の高さ（元に対して%指定）<br />(def &#8211; 200</td>
					</tr>
					<tr>
					<td>hoverEnlarge</td>
					<td>ホバー効果のオンオフ (def &#8211; true</td>
					</tr>
					<tr>
					<td>hoverEnlargeRatioWidth</td>
					<td>ホバー時の幅（元に対して%指定）<br />(def &#8211; 110</td>
					</tr>
					<tr>
					<td>hoverEnlargeRatioHeight</td>
					<td>ホバー時の高さ（元に対して%指定）<br />(def &#8211; 120</td>
					</tr>
					<tr>
					<td>hoverClass</td>
					<td>ホバーしたときに付与するクラス<br />(def &#8211; &#8216;enlargedHover&#8217;</td>
					</tr>
					<tr>
					<td>movingTop</td>
					<td>拡大時にtopを(拡大した高さ/2)戻すか<br />(def &#8211; false</td>
					</tr>
					<tr>
					<td>movingLeft</td>
					<td>拡大時にleftを(拡大した幅/2)戻すか<br />(def &#8211; false</td>
					</tr>
					<tr>
					<td>enlargeClass</td>
					<td>拡大時に付与するクラス (def &#8211; &#8216;enlarged&#8217;</td>
					</tr>
					<tr>
					<td>zIndex</td>
					<td>拡大時のzIndex (def &#8211; 100</td>
					</tr>
					<tr>
					<td>easing</td>
					<td>拡大アニメーションのeasing (def &#8211; &#8216;swing&#8217;</td>
					</tr>
					<tr>
					<td>duration</td>
					<td>拡大アニメーションの速度 (def &#8211; 300</td>
					</tr>
					<tr>
					<td>callback</td>
					<td>コールバック function() {}</td>
					</tr>
					</table>
					<h3>サンプル最後の指定例</h3>
					<p>拡大するときに左上を軸にしないで、要素の真ん中を軸にして広がります。こっちのほうが使いやすそうな気がする</p>
					<pre>$('#area').m5enlargeInput({
&nbsp;&nbsp;enlargeRatioWidth: '200',
&nbsp;&nbsp;enlargeRatioHeight: '150',
&nbsp;&nbsp;hoverEnlarge: true,
&nbsp;&nbsp;hoverEnlargeRatioWidth: '110',
&nbsp;&nbsp;hoverEnlargeRatioHeight: '120',
&nbsp;&nbsp;movingTop: false,
&nbsp;&nbsp;movingLeft: true
});</pre>
					<ul>
					<li><a href="http://5509.me/sample/m5enlargeInput">動作サンプル</a></li>
					</ul>
					<img src="http://5509.me/?ak_action=api_record_view&id=3621&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/m5enlargeinput/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>指定位置までスクロールするとレイヤーをにょきっと表示して注意を引くjQueryプラグイン m5noticeDisplay</title>
		<link>http://5509.me/log/m5noticedisplay</link>
		<comments>http://5509.me/log/m5noticedisplay#comments</comments>
		<pubDate>Tue, 07 Dec 2010 01:47:22 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[ユーザビリティ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3580</guid>
		<description><![CDATA[					
					指定位置までスクロールしたときにレイヤーを表示させることができます。
					ブログを読み終わったあとに注意を引きたいレイヤーを表示して、ソーシャルサービス等への投稿などを促す効果も簡単に実装でき [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/12/m5noticedisplay_4.png" alt="" title="m5noticeDisplayの動作解説" width="500" height="194" class="alignright size-full wp-image-3619 round" /></p>
					<p>指定位置までスクロールしたときにレイヤーを表示させることができます。</p>
					<p>ブログを読み終わったあとに注意を引きたいレイヤーを表示して、ソーシャルサービス等への投稿などを促す効果も簡単に実装できます。（レイヤーの中身は別途必要です）</p>
					<p>元ネタは、長谷川恭久さんの<a href="http://www.yasuhisa.com/could/">could</a>から。「いかがでしたか？」というレイヤーが出てくるのですが同じような効果を簡単に実装できます。</p>
					<p>上からにょきっと表示する以外にも、指定レイヤーをフェードやスライドで表示させたりできます。</p>
					<ul>
					<li><a href="http://5509.me/sample/m5noticeDisplay">動作サンプル a (上からにょきっと</a></li>
					<li><a href="http://5509.me/sample/m5noticeDisplay/index2.html">動作サンプル b (フェード</a></li>
					</ul>
					<p><span id="more-3580"></span></p>
					<h2>必要なファイルを読み込む</h2>
					<p>jQueryと<a href="http://5509.me/sample/m5noticeDisplay/js/m5noticeDisplay.js" onclick="_gaq.push(['_trackEvent', 'js', this.href])">m5noticeDisplay.js</a>を読み込みます。</p>
					<pre>&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/m5noticeDisplay.js&quot;&gt;&lt;/script&gt;</pre>
					<h2>任意の要素に対して実行する</h2>
					<p>トリガーとする要素に対して実行します。トリガーとなる要素が画面内に入る直前あたりで注目させたいレイヤーを表示します。</p>
					<h3>HTML</h3>
					<pre>&lt;cite id=&quot;notice&quot;&gt;&lt;a href=&quot;http://ja.wikipedia.org/wiki/Www&quot;&gt;via: World Wide Web - Wikipedia&lt;/a&gt;&lt;/cite&gt;
&lt;!-- ↑トリガー --&gt;
~ (中略
&lt;div id=&quot;noticeBlock&quot;&gt;
&nbsp;&nbsp;&lt;h2&gt;Thanks for your reading! &lt;/h2&gt;
&nbsp;&nbsp;&lt;a href=&quot;http://b.hatena.ne.jp/entry/http://5509.me/log/m5noticedisplay&quot; class=&quot;hatena-bookmark-button&quot; data-hatena-bookmark-title=&quot;noticeDisplay&quot; data-hatena-bookmark-layout=&quot;standard&quot; title=&quot;&#12371;&#12398;&#12456;&#12531;&#12488;&#12522;&#12540;&#12434;&#12399;&#12390;&#12394;&#12502;&#12483;&#12463;&#12510;&#12540;&#12463;&#12395;&#36861;&#21152;&quot;&gt;&lt;img src=&quot;http://b.st-hatena.com/images/entry-button/button-only.gif&quot; alt=&quot;&#12371;&#12398;&#12456;&#12531;&#12488;&#12522;&#12540;&#12434;&#12399;&#12390;&#12394;&#12502;&#12483;&#12463;&#12510;&#12540;&#12463;&#12395;&#36861;&#21152;&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;border: none;&quot; /&gt;&lt;/a&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://b.st-hatena.com/js/bookmark_button.js&quot; charset=&quot;utf-8&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
&nbsp;&nbsp;&lt;a href=&quot;http://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-url=&quot;http://5509.me/log/m5noticedisplay&quot; data-text=&quot;指定位置までスクロールするとレイヤーをにょきっと表示して注意を引くjQueryプラグイン m5noticeDisplay&quot; data-count=&quot;horizontal&quot; data-via=&quot;5509&quot;&gt;Tweet&lt;/a&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://platform.twitter.com/widgets.js&quot;&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;!-- ↑これを表示する --&gt; </pre>
					<h3>JS</h3>
					<pre>jQuery(function($) {
&nbsp;&nbsp;// トリガーに対して実行する
&nbsp;&nbsp;$('#notice').m5noticeDisplay({
&nbsp;&nbsp;&nbsp;&nbsp;// noticeBlockで表示するレイヤーを指定する(CSSセレクタで指定できます
&nbsp;&nbsp;&nbsp;&nbsp;noticeBlock: '#noticeBlock'
&nbsp;&nbsp;});
});</pre>
					<h2>オプション</h2>
					<p>表示するレイヤー、アニメーションタイプなどを設定できます。</p>
					<table border="1" class="lftable">
					<tr>
					<th>項目</th>
					<th>値</th>
					</tr>
					<tr>
					<td>noticeBlock</td>
					<td>表示するレイヤー（ID推奨) (def &#8211; &#8216;#noticeBlock&#8217;</td>
					</tr>
					<tr>
					<td>animateIn</td>
					<td>表示アニメーション slide, slideDown, fadeInの中から<br />（※後述）</td>
					</tr>
					<tr>
					<td>animateOut</td>
					<td>非表示アニメーション slide, slideUp, fadeOutの中から<br />（※後述）</td>
					</tr>
					<tr>
					<td>duration</td>
					<td>アニメーションの速度 (def &#8211; 300</td>
					</tr>
					<tr>
					<td>easing</td>
					<td>好きなeasingを指定できます (def &#8211; &#8216;swing&#8217;</td>
					</tr>
					<tr>
					<td>callback</td>
					<td>表示後のコールバック関数</td>
					</tr>
					</table>
					<h3>noticeBlockの指定要素について</h3>
					<p>JavaScriptが実行されるタイミングで非表示になりますが、チラつくのが気になる場合はCSS側でdisplay: none;にしておいてください。</p>
					<h3>animateInとanimateOutについて</h3>
					<p>slideDownとfadeInに関してはそのままの効果ですが、「<strong>slide</strong>」という値がデフォルトになっています。slideが指定されている場合は、noticeBlock要素は画面上部にposition: fixedで固定されているものとします。</p>
					<p>例えばサンプルは以下のようにCSSで指定した#noticeBlockに対してm5noticeDisplayを実行しています。</p>
					<pre>#noticeBlock {
&nbsp;&nbsp;position: fixed;
&nbsp;&nbsp;top: 0;
&nbsp;&nbsp;left: 0;
&nbsp;&nbsp;width: 100%;
&nbsp;&nbsp;height: 50px;
&nbsp;&nbsp;color: #fff;
&nbsp;&nbsp;background: #000;
&nbsp;&nbsp;opacity: .9;
&nbsp;&nbsp;line-height: 50px;
&nbsp;&nbsp;text-align: center;
}</pre>
					<p><strong>というわけでサンプルはどちらもIE6はCSS的に非対応です。</strong></p>
					<ul>
					<li><a href="http://5509.me/sample/m5noticeDisplay">動作サンプル a (上からにょきっと</a></li>
					<li><a href="http://5509.me/sample/m5noticeDisplay/index2.html">動作サンプル b (フェード</a></li>
					</ul>
					<img src="http://5509.me/?ak_action=api_record_view&id=3580&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/m5noticedisplay/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>テキストボックスの残り入力文字数をシンプルに表示するjQueryプラグイン m5simpleTextCount</title>
		<link>http://5509.me/log/m5simpletextcount</link>
		<comments>http://5509.me/log/m5simpletextcount#comments</comments>
		<pubDate>Mon, 06 Dec 2010 02:20:43 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[イライラ解消]]></category>
		<category><![CDATA[フォーム]]></category>
		<category><![CDATA[ユーザビリティ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3543</guid>
		<description><![CDATA[					
					テキスト入力エリアなどの残り入力文字数をシンプルに表示するjQueryプラグインです。使い方も簡単で、指定要素に入力文字数と一緒に実行するだけです。
					動作サンプル
					
					必 [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/12/simpletextcount.png" alt="" title="simpleTextCountの動作画面サンプルキャプチャ" width="241" height="228" class="alignright size-full wp-image-3552" /></p>
					<p>テキスト入力エリアなどの残り入力文字数をシンプルに表示するjQueryプラグインです。使い方も簡単で、指定要素に入力文字数と一緒に実行するだけです。</p>
					<p><a href="http://5509.me/sample/m5simpleTextCount/" onclick="_gaq.push(['_trackEvent', 'sample', this.href])">動作サンプル</a><br />
					<span id="more-3543"></span></p>
					<h2>必要なファイルを読み込む</h2>
					<p>jQueryと<a href="http://5509.me/sample/m5simpleTextCount/js/m5simpleTextCount.js" onclick="_gaq.push(['_trackEvent', 'js', this.href])">m5simpleTextCount.js</a>を読み込みます。</p>
					<pre>&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/simpletextcount.js&quot;&gt;&lt;/script&gt;</pre>
					<h2>任意の要素に対して実行する</h2>
					<p>任意のinput, textareaに対して実行します。</p>
					<h3>HTML</h3>
					<pre>&lt;input type=&quot;password&quot; class=&quot;simpleTextCount&quot; value=&quot;&quot; /&gt;
&lt;textarea class=&quot;simpleTextCount&quot; cols=&quot;5&quot; rows=&quot;5&quot;&gt;&lt;/textarea&gt;</pre>
					<h3>JS</h3>
					<pre>jQuery(function($) {
&nbsp;&nbsp;$('.simpleTextCount').simpleTextCount({
&nbsp;&nbsp;&nbsp;&nbsp;maxLength: 12
&nbsp;&nbsp;});
});</pre>
					<p>ちなみにm5simpleTextCountを実行したinput要素はpaddingRight、textarea要素はpaddingRight, paddingBottomに適当な数値を当てたほうがいいと思いますよ！(そこは手動やねんで・・・</p>
					<h2>オプション</h2>
					<p>オプションを指定するデフォルトの文字・背景色、残り文字数が少なくなったときの文字・背景色などを任意に指定できます。全て残り文字数を表示する要素が対象です。</p>
					<pre>$('.simpleTextCount').simpleTextCount({
&nbsp;&nbsp;atColor: '#fff',
&nbsp;&nbsp;atBackground: '#000',
&nbsp;&nbsp;alertLength: 5,
&nbsp;&nbsp;maxLength: 12
});</pre>
					<table border="1" class="lftable">
					<tr>
					<th>name</th>
					<th>value</th>
					</tr>
					<tr>
					<td>focusDisplay</td>
					<td>trueを指定するとフォーカスしたときだけ残り文字数を表示する (def &#8211; false</td>
					</tr>
					<tr>
					<td>padding</td>
					<td>padding (def &#8211; &#8217;3px&#8217;</td>
					</tr>
					<tr>
					<td>color</td>
					<td>文字色 (def &#8211; &#8216;#000&#8242;</td>
					</tr>
					<tr>
					<td>background</td>
					<td>背景色 (def &#8211; &#8216;#eee&#8217;</td>
					</tr>
					<tr>
					<td>fontWeight</td>
					<td>文字の太さ (def &#8211; &#8216;normal&#8217;</td>
					</tr>
					<tr>
					<td>atColor</td>
					<td>少なくなったときの文字色 (def &#8211; &#8216;#f00&#8242;</td>
					</tr>
					<tr>
					<td>atBackground</td>
					<td>少なくなったときの背景色 (def &#8211; &#8216;#eee&#8217;</td>
					</tr>
					<tr>
					<td>atFontWeight</td>
					<td>少なくなったときの文字の太さ (def &#8211; &#8216;bold&#8217;</td>
					</tr>
					<tr>
					<td>opacity</td>
					<td>透過度 (def &#8211; .8</td>
					</tr>
					<tr>
					<td>alertLength</td>
					<td>スタイルを変える文字数 (def &#8211; 0</td>
					</tr>
					<tr>
					<td>maxLength</td>
					<td>残り入力文字数 (def &#8211; 10</td>
					</tr>
					</table>
					<h2>ひとりごと</h2>
					<p><a href="http://5509.me/log/exvalidation">exValidation</a>の文字数制限バリデーションと併用したくて作ったので、併用するといい気がします。機能をモジュールにしたほうがいい気もしてきた</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3543&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/m5simpletextcount/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>AjaxコンテンツとGooglebot、インデックスの話</title>
		<link>http://5509.me/log/ikenkudasai</link>
		<comments>http://5509.me/log/ikenkudasai#comments</comments>
		<pubDate>Fri, 03 Dec 2010 03:40:50 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[アクセシビリティ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3527</guid>
		<description><![CDATA[					最近しつこいAjaxシリーズですが、今日は実際にAjaxをほぼ全てのコンテンツで実装した際にGoogleにインデックスされるかどうかの話を。
					結論から言うと、されるようです（結論のくせに曖昧ですけど！ [...]]]></description>
			<content:encoded><![CDATA[					<p>最近しつこいAjaxシリーズですが、今日は実際に<strong>Ajaxをほぼ全てのコンテンツで実装した際にGoogleにインデックスされるかどうか</strong>の話を。</p>
					<p>結論から言うと、<strong>されるようです</strong>（結論のくせに曖昧ですけど！）。</p>
					<p>今回は結局のところ、<strong>制作者の人たちはフルAjaxサイト（ってこの言葉使うの嫌なんですけど）をどうやって実装してるのかなーっていう、実例とか意見くださいエントリーです。意見ください！</strong><br />
					<span id="more-3527"></span></p>
					<p>ちょうど遷移にAjaxを利用したサイトを2つ作りまして</p>
					<ul>
					<li><a href="http://mindfree.jp/">マインドフリー株式会社</a> : デザイン以外を担当</li>
					<li><a href="http://m-clinic.net/">松本クリニック</a> : JSの実装のみ担当</li>
					</ul>
					<p>どちらも仕組みは同じで（動きが違うだけなんですけど）、配慮した点に関しては<a href="http://5509.me/log/to-make-ajax-contents">SEOやJSオフ環境にも配慮したAjaxコンテンツを制作するためにできること</a>で書いたように、WordPressを利用していてJavaScriptオフでも見られるようにベースを作ってて、JavaScriptでリンクをAjax用に置き換えてます。なのでどちらもJavaScriptを切った状態で閲覧すると、普通のサイトになります。</p>
					<h3>サイト内リンクとインデックス</h3>
					<p>以前も書いたようにJavaScriptがオフの状態ではサイト内のリンクURLは</p>
					<pre>http://hogehoge.com/piyo</pre>
<p>JavaScriptがオンの状態では</p>
<pre>http://hogehoge.com/#/piyo</pre>
					<p>のようになります。</p>
					<blockquote><p>検索エンジンでは、URL のパラメータは理解されますが、フラグメントは無視されることが多いため、これは重要です。</p>
					<p><cite>via: <a href="http://www.google.com/support/webmasters/bin/answer.py?hl=jp&#038;answer=81766">ウェブマスター ツール ヘルプ：ウェブサイトと Google の関係</a></cite></p></blockquote>
					<p>上記のように正しくインデックスされないことが多いようなので、Googleにインデックスされるためには、サイト内リンクであるとかサイトマップであるとかが重要になると思います。この辺は辺り前というか、広く知られたことだと思いますが、この最低ラインはJavaScriptオフでも見られるように作ることでクリアできますね。（つまり静的なHTML、代替コンテンツを用意する）</p>
					<h3>インデックス状況</h3>
					<p>そんな感じで実装したサイトですが、以下でインデックス状況を見てみると</p>
					<ul>
					<li><a href="http://www.google.co.jp/search?q=site%3Amindfree.jp&#038;ie=utf-8&#038;oe=utf-8&#038;aq=t&#038;rls=org.mozilla:ja-JP:official&#038;hl=ja&#038;client=firefox-a">site:mindfree.jp</a></li>
					<li><a href="http://www.google.co.jp/search?q=site%3Am-clinic.net&#038;ie=utf-8&#038;oe=utf-8&#038;aq=t&#038;rls=org.mozilla:ja-JP:official&#038;hl=ja&#038;client=firefox-a">site:m-clinic.net</a></li>
					</ul>
					<p><img src="http://5509.me/wp-content/uploads/2010/12/googleajax.png" alt="" title="インデックスされたコンテンツ" width="343" height="482" class="alignright size-full wp-image-3536" /></p>
					<p>しっかりと<strong>元のURL</strong>でインデックスされています。</p>
					<h3>（今のところ）Ajax用にリンクを置き換えるという処理は見ていない</h3>
					<p>結局のところGoogleがどこまでJavaScriptを確認することができるのか、っていうところが把握できていないところだったので、少なくとも<strong>Ajax用にリンクを置き換えるという処理は見ていない</strong>ということが分かりました。これ重要です。</p>
					<p>ただし、以下の記述にもあるように、よりブラウザに近い動作をするように、とされているため、その内JavaScriptでリンクを置き換えるところも認識されるようになってしまうかもしれませんが・・・</p>
					<blockquote><p>Google では、Googlebot がよりブラウザに近い動作をするよう対応を続けています。サイトで必要な機能は実装されているため、特に何もしなくても Googlebot によってページが適切にインデックスに登録される可能性はあります。</p>
					<p><cite>via: <a href="http://www.google.com/support/webmasters/bin/answer.py?hl=jp&#038;answer=174993">ウェブマスター ツール ヘルプ：AJAX: よくある質問</a></cite></p></blockquote>
					<h3>皆さんの対応方法が知りたいです</h3>
					<p>フルでAjaxを利用したコンテンツはまだまだ少ないような気がするのですが、そのときのSEOやJSオフ環境の対応ってみなさんどうしてるんでしょうか。その辺知りたいのでコメントとかTwitterで広がるとうれしいなぁ・・・</p>
					<p>HTMLsnapshotを利用して作ったフルAjaxサイト（ってこの言葉使うの嫌なんですけど）ってあるのかなー（Twitter以外</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3527&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/ikenkudasai/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>これでますます便利！jQselectableをアップデートしました</title>
		<link>http://5509.me/log/jqselectable-has-been-updated</link>
		<comments>http://5509.me/log/jqselectable-has-been-updated#comments</comments>
		<pubDate>Thu, 02 Dec 2010 06:52:33 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[ユーザビリティ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3520</guid>
		<description><![CDATA[					
					キャプチャ画像のように、selectボックスがウィンドウの下方にあるときプルダウンを上部に表示するようにしました。
					slideDownを選択している場合は上ににょきっとはえるようなアニメー [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://jqselectable.googlecode.com/svn/trunk/index.html"><img src="http://5509.me/wp-content/uploads/2010/12/jqselectable132.png" alt="" title="jqselectable132" width="450" height="187" class="alignright size-full wp-image-3522" /></a></p>
					<p>キャプチャ画像のように、selectボックスがウィンドウの下方にあるときプルダウンを上部に表示するようにしました。</p>
					<p>slideDownを選択している場合は上ににょきっとはえるようなアニメーションになってちょっと気持ちいいですｗ</p>
					<ul>
					<li><a href="http://jqselectable.googlecode.com/files/jqselectable.1.3.2.zip" onclick="_gaq.push(['_trackEvent', 'jQselectable-updated', '1.3.2'])">jQselectable 1.3.2をダウンロードする</a></li>
					<li><a href="http://5509.me/log/jqueryselectable">jQselectableの詳細・使い方など</a></li>
					</ul>
					<img src="http://5509.me/?ak_action=api_record_view&id=3520&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/jqselectable-has-been-updated/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>共著「jQuery逆引きマニュアル Webデザインの現場で役立つ基本と実践」が発売されます</title>
		<link>http://5509.me/log/jquery-manual-is-pre-ordered</link>
		<comments>http://5509.me/log/jquery-manual-is-pre-ordered#comments</comments>
		<pubDate>Wed, 01 Dec 2010 15:28:35 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[著書]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3485</guid>
		<description><![CDATA[					トゥーアールの西畑さん、ピクセルグリッドの中村さんとの共著「jQuery逆引きマニュアル Webデザインの現場で役立つ基本と実践」が12月17日に発売されます！
					お二人は僕がJavaScriptを始め [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://to-r.net/">トゥーアール</a>の<a href="http://blog.webcreativepark.net/">西畑さん</a>、<a href="http://www.pxgrid.com/">ピクセルグリッド</a>の<a href="http://kyosuke.jp/">中村さん</a>との共著<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844329618/norimania-22/ref=nosim/" onclick="_gaq.push(['_trackEvent', 'Books', 'text'])">「jQuery逆引きマニュアル Webデザインの現場で役立つ基本と実践」</a>が12月17日に発売されます！</p>
					<p>お二人は僕がJavaScriptを始めるきっかけになった大先生なもんで、、とてもうれしいです・・・（いまうっすら涙しながら書いてます）</p>
					<p>ちなみに僕はいつものフォームバリデーションをはじめ、25項目ほどお手伝いさせてもらいました。</p>
					<table  border="0" cellpadding="5" class="amazon" style="margin-top: 0;">
					<tr>
					<td colspan="2"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844329618/norimania-22/ref=nosim/" onclick="_gaq.push(['_trackEvent', 'Books', 'title'])">jQuery逆引きマニュアル Webデザインの現場で役立つ基本と実践</a></td>
					</tr>
					<tr>
					<td valign="top" width="130" style="padding-right: 0"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844329618/norimania-22/ref=nosim/" onclick="_gaq.push(['_trackEvent', 'Books', 'image'])"><img src="http://ecx.images-amazon.com/images/I/51QAqthVkYL._SL160_.jpg" border="0" alt="jQuery逆引きマニュアル Webデザインの現場で役立つ基本と実践" /></a></td>
					<td valign="top"><font size="-1">西畑一馬 中村享介 徳田和規 </p>
					<p>インプレスジャパン  2010-12-17<br />売り上げランキング : 106533</p>
					<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844329618/norimania-22/ref=nosim/" onclick="_gaq.push(['_trackEvent', 'Books', 'detail'])">Amazonで詳しく見る</a></font><font size="-2"> by <a href="http://www.goodpic.com/mt/aws/index.html" >G-Tools</a></font></td>
					</tr>
					</table>
					<p>jQueryをより便利に扱うためのJavaScriptの基礎から一般的なUIの実装コード、TwitterやFlickrとの連携方法、Visual Studioでの扱い方など幅広い内容でお手元に一冊あると便利ですよきっと！</p>
					<p>興味ある方はぜひに！</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3485&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/jquery-manual-is-pre-ordered/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SEOやJSオフ環境にも配慮したAjaxコンテンツを制作するためにできること</title>
		<link>http://5509.me/log/to-make-ajax-contents</link>
		<comments>http://5509.me/log/to-make-ajax-contents#comments</comments>
		<pubDate>Wed, 01 Dec 2010 04:59:35 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3453</guid>
		<description><![CDATA[					Ajaxを利用したコンテンツは、ユーザビリティを向上したりリッチなサイトを制作するために一役かってくれたりします。その反面Ajaxだけの視点で実装するとページ内を動的に書き換えていくため、SEOができなかったり [...]]]></description>
			<content:encoded><![CDATA[					<p>Ajaxを利用したコンテンツは、ユーザビリティを向上したりリッチなサイトを制作するために一役かってくれたりします。その反面Ajaxだけの視点で実装するとページ内を動的に書き換えていくため、SEOができなかったり、JSオフ環境だと閲覧できないというジレンマがあります。</p>
					<p>解決方法を少しあげてみましょう。（以下主に全ページAjaxで構成されているようなサイトを前提にしています）<br />
					<span id="more-3453"></span></p>
					<h2>1. HTMLsnapshotを利用する</h2>
					<p><a href="http://5509.me/log/making-crawrable-contents-with-ajax">SEOにも強いクローラブルなAJAXコンテンツを作成するために</a>という翻訳記事を先日書きましたが、Googleが対応している、というよりもGoogleにインデックスしてもらうための対応策ですかね。Twitterで導入されていますが、ユーザーが切り替えない限りはまだ旧サイトに飛んでいるはずなので、効果は分かりません。</p>
					<ul>
					<li>システムの対応が必須</li>
					<li>クエリをHTMLsnapshotに対応しないといけない</li>
					<li>結局bot向けに同じ内容のページを用意するくらいなら全ユーザーが利用できるほうがいいのでは？</li>
					</ul>
					<p>など、こちらの対応をするならはじめから静的なページを用意したほうが無難な気がします。（ページ数が膨大な）Webアプリケーション等はこちらのほうがいいんですかね。</p>
					<h2>2. JSオフでも閲覧可能なページ（HTML）を用意する</h2>
					<p>今のところ現実的なのはこれでしょうか。ポイントはサイトをJSオフでも見られるように設計しておいて、JS側でリンクをハッシュリンクに書き換えるという感じですね。</p>
					<p>この方法の要点は以下のとおりです。</p>
					<ul>
					<li>全てのページを作成する（いつも通り）</li>
					<li>リンクはJSでフラグメントハッシュリンクに置き換える</li>
					<li>Ajaxでページを読み込み必要なところだけ置き換える</li>
					</ul>
					<p>実装方法の詳細はまた別に<del datetime="2010-12-01T04:37:07+00:00">書くと思いますが、</del>書きますが、一例をあげるとページロード時に、以下のようなスクリプトを実行して各a要素のhref属性を書き換えてしまいます。サイト自体がJSオフ環境でも見ることができるため、サイトのSEOも従来通り。インデックスも元のURLでされます。</p>
					<pre>$('a').each(function() {
&nbsp;&nbsp;$(this)
&nbsp;&nbsp;&nbsp;&nbsp;.filter(function() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.href.indexOf(domain) != -1;
&nbsp;&nbsp;&nbsp;&nbsp;})
&nbsp;&nbsp;&nbsp;&nbsp;.attr('href', $(this).attr('href').match(/^\./)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;? $(this).attr('href')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replace(domain, '')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replace(/^\./, '#')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: '#' + $(this).attr('href').replace(domain, ''))
});</pre>
					<p>これを実行するとhrefの中身が</p>
					<pre>&lt;a href="/about/"&gt;</pre>
<p>から</p>
<pre>&lt;a href="#/about/"&gt;</pre>
					<p>へ変わります。</p>
					<p>クリックするとURLのフラグメントハッシュが変わり、ハッシュチェンジイベントが呼び出されるので、それにあわせてコンテンツを変更するようにします。</p>
					<p>ハッシュチェンジイベントは「<a href="http://5509.me/log/jquery-hash-change-event">jQuery hashchange event</a>」を利用すると簡単に実装することができます。</p>
					<p>ただしデメリットも当然あり、ハッシュリンクのせいでトップページURLが</p>
					<pre>http://hoge.com/</pre>
<p>と</p>
<pre>http://hoge.com/#</pre>
					<p>のように2つできてしまい、例えばソーシャルブックマークのブックマークが分かれてしまったりします。そのために使えるであろうcanonicalもまだ対応されていないことが多いのでなんとも。。はてなは対応しているはずですが、分かりにくいですね。</p>
					<p>あとはページ全体をAjaxで呼び出しがちなので、その辺りはサーバーサイドでAjaxリクエストだった場合はこのデータだけ、のような仕組みで利用したほうがエコっぽいです。</p>
					<h3>pushStateとreplaceState</h3>
					<p>hashchangeイベントの微妙なところはWHATWGで用意されている「pushState」「replaceState」を使えば解消されるような感じです。</p>
					<blockquote><p><strong>window . history . pushState(data, title [, url ] )</strong><br />
					Pushes the given data onto the session history, with the given title, and, if provided, the given URL.</p>
					<p><strong>window . history . replaceState(data, title [, url ] )</strong><br />
					Updates the current entry in the session history to have the given data, title, and, if provided, URL.</p>
					<p><cite>via: <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html">HTML5 (including next generation additions still in development) &#8211; 6.4 Session history and navigation</a></cite></p></blockquote>
					<p>hashchangeイベントがlocation.hashを利用するのに対してpushState・replaceStateはhistoryのメソッドになり、URLそのもの（location.pathname）を書き換えることができるようです。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3453&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/to-make-ajax-contents/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MacBookのTrackpadを超便利にするBetterTouchTool（Magic Mouseでも使えるよ！）</title>
		<link>http://5509.me/log/bettertouchtool</link>
		<comments>http://5509.me/log/bettertouchtool#comments</comments>
		<pubDate>Thu, 25 Nov 2010 01:40:39 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[BetterTouchTool]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3400</guid>
		<description><![CDATA[					
					ブラウザでCmd+Clickとか使いませんか？BetterTouchToolを使ってCmd+WとかCmd+Qとかよく使うショートカットをトラックパッドのジェスチャーにアサインすると普段の操作便利にな [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/11/btt2.png" alt="" title="btt" width="500" class="alignnone size-full wp-image-3410" /></p>
					<p>ブラウザでCmd+Clickとか使いませんか？BetterTouchToolを使ってCmd+WとかCmd+Qとかよく使うショートカットをトラックパッドのジェスチャーにアサインすると普段の操作便利になって業務効率もアップするかも・・・！</p>
					<p>（キーボード派の人には・・・あれですけど・・・<br />
					<span id="more-3400"></span></p>
					<h2>BetterTouchTool</h2>
					<p>BetterTouchToolはキーボードショートカットに、<strong>Magic Mouseのマルチタッチジェスチャ</strong>や<strong>Trackpadのマルチタッチジェスチャ</strong>をアサインすることができたりする超便利ツールです。</p>
					<p>なんだか色々機能がありすぎて僕は使いこなせてないんですけど・・・<br />
					MacBookの人はTrackpadジェスチャをちょっとアサインするだけでもかなり便利になります。Magic Mouseのジェスチャアサインは・・・あのせまいところで指動かすのは正直アレですけど、それなりに使いやすくはなるでしょう。</p>
					<h2>ダウンロードとインストール</h2>
					<p>ダウンロードは以下のリンクから</p>
					<p>ダウンロードとか：<a href="http://boastr.net/">http://boastr.net/</a><br />
					ドキュメント・ビデオとか：<a href="http://blog.boastr.net/?page_id=1619">http://blog.boastr.net/?page_id=1619</a></p>
					<p>インストールはいつものように楽々ですね。インストールしたらとりあえず以下の設定でMacを起動したときに同時にBTTが起動するようにしておきましょう。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/btt_task.png" alt="" title="btt_task" width="382" height="244" class="alignnone size-full wp-image-3417" /><br />
					タスクバーからPreferenceを選択する</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/btt_task2.png" alt="" title="btt_task2" width="356" height="195" class="alignnone size-full wp-image-3419" /><br />
					<strong>Launch BetterTouchTool on startupにチェック</strong>を入れる</p>
					<h2>ジェスチャのアサイン</h2>
					<p>ここからは正直好みなんですけど、最初はよくわからないと思うのでとりあえず僕と同じように設定して使ってみてください。</p>
					<h3>ジェスチャをショートカットにアサインする</h3>
					<p>たとえば、Three Finger Tap（3本指タップ）を<strong>Cmd+Click</strong>に指定すると、ブラウザでリンクを3本指タップCmd+Clickになります。わざわざCmdを押しながらタップしなくていいなんて便利ですね。</p>
					<p>同じようによく使うキーボードショートカットは</p>
					<ul>
					<li>Cmd+W（タブを閉じる）</li>
					<li>Cmd+Q（アプリを終了する）</li>
					<li>Cmd+↑（ページ上部へ）</li>
					<li>Cmd+↓（ページ下部へ）</li>
					<li>^+Tab（タブ送り）</li>
					<li>^+Shift+Tab（タブ戻し）</li>
					</ul>
					<p>のような感じであるので、それぞれをTrackpadジェスチャにアサインしてみます。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/btt_gesture.png" alt="" title="btt_gesture" width="500" class="alignnone size-full wp-image-3424" /><br />
					Preference画面のGesturesタブ内、Trackpadを選択する</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/btt_global.png" alt="" title="btt_global" width="163" height="82" class="alignnone size-full wp-image-3440" /><br />
					ジェスチャをアサインするアプリを細かく指定できますが、ここではGlobal（Finderを含む全てに適用）を選択します</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/btt_add.png" alt="" title="btt_add" width="204" height="73" class="alignnone size-full wp-image-3425" /><br />
					<strong>Add New Gestures</strong>からジェスチャーを登録する</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/btt_asign.png" alt="" title="btt_asign" width="500" class="alignnone size-full wp-image-3426" /><br />
					任意のジェスチャーに対して任意のアクションをアサインする</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/btt_setting_1.png" alt="" title="btt_setting_1" width="494" height="201" class="alignnone size-full wp-image-3421" /><br />
					これを繰り返して上記のようにしてみます</p>
					<p>ただ初期設定だとTip TapやRorateのブロックタイムがけっこう長いので短くしておくと使いやすくなります。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/btt_setting2.png" alt="" title="btt_setting2" width="500" class="alignnone size-full wp-image-3436" /><br />
					Tip Tapの感度を少しさげると使いやすいかも</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/btt_setting3.png" alt="" title="btt_setting3" width="500" class="alignnone size-full wp-image-3437" /><br />
					Rotateのブロックタイムとdegreeを短く、ちょっとの角度でいいように設定しておきます</p>
					<p>上で割り当てたジェスチャーを動画で撮ってみました。ちょっときもいんですけど、こんな感じでジェスチャーするとキーボードショートカットが実行されます。</p>
					<h3>Rotate Left</h3>
					<p><iframe title="YouTube video player" class="youtube-player" type="text/html" width="500" height="311" src="http://www.youtube.com/embed/CsusPnKFbE0" frameborder="0"></iframe></p>
					<h3>Rotate Right</h3>
					<p><iframe title="YouTube video player" class="youtube-player" type="text/html" width="500" height="311" src="http://www.youtube.com/embed/75VhXveH0iU" frameborder="0"></iframe></p>
					<h3>Three Finger Tap</h3>
					<p><iframe title="YouTube video player" class="youtube-player" type="text/html" width="500" height="311" src="http://www.youtube.com/embed/81H4sBHRREM?rel=0" frameborder="0"></iframe></p>
					<h3>Tip Tap Left</h3>
					<p><iframe title="YouTube video player" class="youtube-player" type="text/html" width="500" height="311" src="http://www.youtube.com/embed/kDCz242xGfs" frameborder="0"></iframe></p>
					<h3>Tip Tap Right</h3>
					<p><iframe title="YouTube video player" class="youtube-player" type="text/html" width="500" height="311" src="http://www.youtube.com/embed/m51pSmuM20w" frameborder="0"></iframe></p>
					<h2>慣れてきたら好きなジェスチャでアサインを</h2>
					<p>認識するジェスチャもかなりの種類が用意されていて、キーボードショートカットやさまざまなアクションにアサインすることができるため設定次第ではかなり便利に使うことができるでしょう。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3400&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/bettertouchtool/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ajaxやタブ切替には必須かも？ブラウザの「戻る」「進む」を有効にするjQueryのhashchangeプラグイン</title>
		<link>http://5509.me/log/jquery-hash-change-event</link>
		<comments>http://5509.me/log/jquery-hash-change-event#comments</comments>
		<pubDate>Fri, 19 Nov 2010 02:09:42 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3109</guid>
		<description><![CDATA[					Ajaxやタブクリックなどのイベントでもブラウザの「戻る」「進む」を有効にすることができるjQueryのhashchange eventというプラグインを紹介します。同じような効果を得られるスクリプトより断然使 [...]]]></description>
			<content:encoded><![CDATA[					<p>Ajaxやタブクリックなどのイベントでもブラウザの「戻る」「進む」を有効にすることができるjQueryのhashchange eventというプラグインを紹介します。同じような効果を得られるスクリプトより断然使いやすいのでおすすめです。<br />
					<span id="more-3109"></span></p>
					<p>使い方はとても簡単で<br />
					<strong>windowにhashchangeイベントをbindするだけ</strong>です。</p>
					<pre>$(window)
&nbsp;&nbsp;.hashchange(function() {
&nbsp;&nbsp;&nbsp;&nbsp;Hoge(location.hash.replace('#', ''));
&nbsp;&nbsp;}); // ハッシュフラグメントが変わったときにHoge()を実行する

$(window).hashchange(); // Windowロード時に実行できる</pre>
					<p><a href="http://benalman.com/projects/jquery-hashchange-plugin/">Ben Alman &raquo; jQuery hashchange event</a><br />
					<a href="http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/">jQuery hashchange eventのデモ</a></p>
					<p><strong>実際にhashchange eventプラグインを利用して作ったサイト</strong><br />
					<a href="http://m-clinic.net">松本クリニック</a></p>
					<p>hashchangeイベントというのは</p>
					<pre>&lt;a href="./#fugafuga"&gt;fugafuga&lt;/a&gt;</pre>
<p>のようなハッシュフラグメントリンクをクリックしたときにURLが</p>
<pre>http://hogehoge.com/</pre>
					<p>から</p>
					<pre>http://hogehoge.com/#fugafuga</pre>
<p>のように変わるタイミングで実行されるイベントです。</p>
<p>「戻る」「進む」が使えないと何度もクリックして中身が切り替わってるのに、いきなりだいぶ前のページに戻ってしまうのでユーザーを迷わせてしまいがちです。ユーザーがコンテンツを便利に閲覧できるようにhashchangeプラグインのようなものの利用はぜひ検討すべきでしょう。</p>
<p><del datetime="2011-01-20T12:15:30+00:00">具体的な使い方については次回の記事に続きます。</del>続きませんでした・・・が、<a href="http://5509.me/log/to-make-ajax-contents">トリガーになるリンクの話など少し書きました</a>。</p>
<img src="http://5509.me/?ak_action=api_record_view&id=3109&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/jquery-hash-change-event/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SEOにも強いクローラブルなAJAXコンテンツを作成するために</title>
		<link>http://5509.me/log/making-crawrable-contents-with-ajax</link>
		<comments>http://5509.me/log/making-crawrable-contents-with-ajax#comments</comments>
		<pubDate>Wed, 17 Nov 2010 01:40:33 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[クローラー]]></category>
		<category><![CDATA[翻訳]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3304</guid>
		<description><![CDATA[					AJAXコンテンツが増えるにつれて問題になるのは、SEOというか、検索エンジンにどうクローリング、インデックスさせるのか、という点ですよね。
					この前JavaScriptの実装を担当した松本クリニックは [...]]]></description>
			<content:encoded><![CDATA[					<p>AJAXコンテンツが増えるにつれて問題になるのは、<strong>SEOというか、検索エンジンにどうクローリング、インデックスさせるのか</strong>、という点ですよね。</p>
					<p>この前JavaScriptの実装を担当した<a href="http://m-clinic.net/">松本クリニック</a>は、<strong>AJAXでほぼ全てのページを切り替える</strong>っていうのが最大のポイントなんですけど、これの良いところはWordPressで全てのページを生成してて、JSオンでもオフでも見られるんですね。つまり、クローラはオフのコンテンツを見るような作りにしてあります。</p>
					<p>で、こういうのって小規模～中規模なサイトならまだいいと思いますけど、大規模なサイトになってきたりするとページは存在しないでデータだけが存在したりする（ハンドラにリクエストをかけてJSONだけを返してもらって内容を入れ替える、など・・・）わけで、実現が難しくなるんですね。</p>
					<p>この問題に対してGoogleが現在公表している方法は、<strong>HTML snapshotという代替ページをサーバーから返すようにして、クエリなどを含んだイケてないugly URLと#!を含むクールなpretty URLを用意しろ</strong>、というものです。いやー言ってることは分かるんですけどね、これってめんｄ（ｒｙ</p>
					<p>HTML snapshotの作り方も書いてあるんですけど、それはそれで置いておいて、とりあえずGetting Startedのページを見てみましょう。</p>
					<div class="note">原文 : <a href="http://code.google.com/intl/ja/web/ajaxcrawling/docs/getting-started.html">Making AJAX Applications Crawlable &#8211; Getting Started</a></div>
					<p>✄－－－－－－－－－－－－ 翻訳ここから －－－－－－－－－－－－✄</p>
					<h2>概要</h2>
					<p>簡単にまとめると、クローラが仕様に沿ったAJAX URL（ハッシュフラグメント#!を含んだもの）を見つけると、クローラはAJAXコンテンツではなくHTML Snapshotをリクエストし、ページを解析した上でAJAX URLを検索結果ページに表示します。</p>
					<p><a href="http://5509.me/wp-content/uploads/2010/11/crawlerserver2.png"><img src="http://5509.me/wp-content/uploads/2010/11/crawlerserver2.png" alt="" title="クローラとサーバー" width="490" class="alignnone size-full wp-image-3324" /></a><br />
					<span id="more-3304"></span></p>
					<h2>Step-by-stepガイド</h2>
					<h3>1. サイトがAJAXクローリングスキームに対応していることをクローラに伝える</h3>
					<p>AJAXサイトがインデックスされるための初めのステップは、クローラにサイトがAJAXクローリングスキームをサポートしていることを示すことです。</p>
					<p>このはステップを踏むには、特別なトークンをハッシュセグメント（ハッシュセグメント：URLのなかの#サイン以降の全て）内で使います。つまりハッシュセグメントはエクスクラメーションマーク（!）で始めなければなりません。</p>
					<p>つまり、AJAXアプリケーションがこのようなURLなら</p>
					<pre>www.example.com/ajax.html#key=value</pre>
<p>以下のようにします。</p>
<pre>www.example.com/ajax.html#!key=value</pre>
					<p>このスキームを使えば、サイトが”<strong>AJAXクローリングが可能である</strong>”と判断されます。クローラがもしHTML snapshotを使っていればアプリケーションのコンテンツを確認可能になります。</p>
					<h3>2. サーバーを_escaped_fragment_を含んだURLのリクエストをハンドル出来るように設定してください。</h3>
					<p>例えば“ www.example.com/index.html#!key=value”をインデックスされたいなら、このURLのHTML snapshotをクローラに提供することが必要になります。HTML snapshotを用意することで、クローラがコンテンツをみることができるわけです。ではサーバーはどうやってレギュラーページ（AJAXコンテンツ）を返すのとHTML snapshotを返すときを見分けるのでしょう。答えはクローラからリクエストされたURLにあります。クローラはそれぞれの下記のようなAJAX URL(<strong>pretty URL</strong>)を</p>
					<pre>www.example.com/ajax.html#!key=value</pre>
<p>一時的に下記のように書き換えます(<strong>ugly URL</strong>)。</p>
<pre>www.example.com/ajax.html?_escaped_fragment_=key=value</pre>
					<p>なぜこんな面倒くさいことをさせるのかというと、ここで重要なポイントは2つあります。</p>
					<ul>
					<li><strong>ハッシュセグメントは（仕様として）HTTPリクエストの一部としてサーバーに送られることはありません</strong>。つまり、<strong>クローラはどうにかしてサーバーに www.example.com/ajax.html#!key=value のコンテンツがほしいということを伝える方法が必要</strong>なのです。（www.example.com/ajax.htmlのようなURLの比較として）</li>
					<li><strong>一方でサーバーはブラウザーに送るノーマルなページ（ここで言うノーマルなページはAJAXコンテンツ）ではなくて、HTML snapshotを返す必要があることを知らなければなりません</strong>。HTML snapshotはJavaScriptが実行された後のページに表示されるコンテンツ全てであることを覚えておいてください。最終的に、あなたのサーバーはHTML snapshot www.example.com/index.html#!key=value (オリジナルのURL)をクローラに返すことが必要というわけです。</li>
					</ul>
					<div class="note">注意：<strong>クローラは、変換時にフラグメントで一定のキャラクターをエスケープします。オリジナルのフラグメントを改修するには、フラグメントの中の全ての%XX文字をエスケープしない</strong>ように気をつけてください。もっと具体的にいうと<strong>%26は&#038;で%20はスペース、%23 sは #, %25は %にするなど</strong>です。</div>
					<p>オリジナルのURLとクローラがどのようなコンテンツをリクエストしているかがわかったらHTML snapshotをつくる必要があります。HTML snapshotの作成方法は色々あります。いくつか紹介します。</p>
					<ul>
					<li>コンテンツの多くがJavaScriptで生成されていれば、HTML snapshotを取得するために<a href="http://htmlunit.sourceforge.net/">HtmlUnit</a>のようなヘッドレスブラウザーを使ったほうがいいかもしれません。また、 <a href="http://crawljax.com/">crawljax</a>や<a href="http://watij.com/">watij.com</a>のようなツールを使うこともできます。</li>
					<li><strong>コンテンツがPHPやASP.NETのようなサーバーサイドの技術を使って作られているのなら、すでに存在するコードを使って、JavaScriptの部分をStaticなものか、サーバーサイドで作ったHTMLに置き換えてください</strong>。（つまりWordPressでページを生成しておくようなものですね。）</li>
					<li><strong>現行方式のようにオフラインでstaticなページをつくることもできます</strong>。たとえば、多くのアプリケーションはデータベースからコンテンツを引っ張ってきてブラウザーにレンダリングします。それではなくて、それぞれのAJAXURLにつき別々のHTMLページを作ります。（つまり自力で静的ページを作れという意味ですよ）</li>
					</ul>
					<p>HTML snapshotのメカニズムを使ってみることを強く推薦します。ヘッドレスブラウザーが確実にあなたのコンテンツのアプリ件の状態を正確にレンダーしているか確認することが大切です。クローラに実際どのように見えているのかを知るのは、小さなテストアプリケーションをつくって、どのようになるのか見ることもできるし、<a href="http://www.googlelabs.com/show_details?app_key=agtnbGFiczIwLXd3d3IUCxIMTGFic0FwcE1vZGVsGJukUgw">Fetch as Googlebot</a>のようなツールを使って試すこともできます。</p>
					<p>まとめると、下記のことがサーバーで動いていることを確認して下さい。</p>
					<ul>
					<li><strong>www.example.com/ajax.html?_escaped_fragment_=key=value のような形のURLがオリジナルのwww.example.com/ajax.html#!key=valueへマッピングされている</strong>こと。</li>
					<li>トークンはエスケープされていないURLであること。一番簡単な方法は、スタンダードURLでコーディングを行うこと。例えばJAVAでは下記のようにできます。</li>
					</ul>
					<pre>mydecodedfragment = URLDecoder.decode(myencodedfragment, "UTF-8");</pre>
<ul>
<li>理想的にはページの上部にある主なリンクと一緒にHTML snapshotがもどってきたら、エンドユーザーがエラーで_escaped_fragment_ URLへアクセスしたことを知らせることです。（<strong>_escaped_fragment_ URLはクローラによりのみアクセスできるURLであることを忘れてはいけません。</strong>）_escaped_fragment_ が無い全てのリクエストに対して、サーバーはコンテンツを返します。</li>
</ul>
<h3>3. ハッシュフラグメントなしにページを扱う。</h3>
<p>あなたのページの一部はハッシュフラグメントが無いかもしれません。例えばホームページのURLをwww.example.com#!homeより www.example.comにしたい場合です。この理由により、ハッシュフラグメントの無いページ用に特別な方法を用意しました。<strong>ハッシュフラグメントの無いページをクローラがアクセスできるようにするには、ページのトップ部分に特別なメタタグを追加しないといけません</strong>。</p>
<p>そのメタタグはこのようになります。</p>
<pre>&lt;meta name="fragment" content="!"&gt;</pre>
					<p>これはクローラに対して、このugly URLをクロールするべきだと指示しています。これらにより、クローラは一時的にugly URLに相当するpretty URLをマップします。言い換えると、もしwww.example.comへ&lt;meta name=&#8221;fragment&#8221; content=&#8221;!&#8221;&gt;を設置すると、クローラが一時的にwww.example.com?_escaped_fragment_= をマッピングし、サーバーへリクエストします。そうすると、サーバーがwww.example.comに相当するHTML snapshotを返します。このメタタグを使うに当たって大切な制限があります。それは、唯一の有効なコンテンツは“！（エクスクラメーションマーク）”です。つまり、このメタタグはいつも正確なフォーム<meta name="fragment" content="!">を必要とします。<strong>このタグは空のハッシュフラグメントだが、AJAXコンテンツを含んだページであることを指します。</strong></p>
					<h3>4. 新しいAJAX URLをリストするためにサイトマップの更新を考える。</h3>
					<p>クローラは発見したクロールを補足するためにサイトマップを使います。サイトマップは検索結果で表示されたいURLを含んだバージョンであるべきです。大体の場合pretty URLつまり</p>
					<pre>http://example.com/ajax.html#!key=value</pre>
<p>になります。サイトマップには</p>
<pre>http://example.com/ajax.html?_escaped_fragment_=key=value</pre>
					<p>のようなugly URLはふくめないこと。Googlebotは<strong>_escaped_fragment_</strong>を含んだリンクを（サイトマップURLとしては）理解しません。</p>
					<p>たとえば、下のようなバージョンを検索結果に表示させたいのであれば</p>
					<pre>http://example.com/</pre>
<p>下記を含めましょう。</p>
<pre>http://example.com/</pre>
					<p>そうしてHTMLドキュメントのヘッダーに<meta name="fragment" content="!">を含めましょう。これについてもっと知りたい場合はSitemapsで追加のドキュメントを確認して下さい。</p>
					<div class="note">最後のところ原文でもURLが同じになっててちょっとよく分からなかった</div>
					<h3>5.オプションでも重要なアプリケーションのクローリング可否テスト：&#8221;Fetch as Googlebot&#8221;でクローラがみているものをみる</h3>
					<p>Googleではクローラが実際に見ているコンテンツを確認できる<a href="http://www.googlelabs.com/show_details?app_key=agtnbGFiczIwLXd3d3IUCxIMTGFic0FwcE1vZGVsGJukUgw">Fetch as Googlebot</a>を提供しているので、正しく実装されているか確認しておきましょう。また、サイトがクローキングしていないことを確かめるためにもこのツールを使うことが重要になります。</p>
					<p>✄－－－－－－－－－－－－ 翻訳ここまで －－－－－－－－－－－－✄</p>
					<h2>おまけ</h2>
					<p>けっこう長かったのですけど、早い話、概要の図につきると思います。</p>
					<p><a href="http://5509.me/wp-content/uploads/2010/11/crawlerserver2.png"><img src="http://5509.me/wp-content/uploads/2010/11/crawlerserver2.png" alt="" title="クローラとサーバー" width="490" class="alignnone size-full wp-image-3324" /></a></p>
					<p>結局AJAXコンテンツはそのままのURLではクローリングされないので、それ用の施策と代替コンテンツを用意しろとそういうわけですね。。。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3304&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/making-crawrable-contents-with-ajax/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>いまさらjQueryのLightboxぽいプラグインいろいろ</title>
		<link>http://5509.me/log/some-lightbox-plugins</link>
		<comments>http://5509.me/log/some-lightbox-plugins#comments</comments>
		<pubDate>Fri, 12 Nov 2010 01:55:22 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[memo]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[誰得]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3243</guid>
		<description><![CDATA[					最近あまり見なくなってきたし、個人的にも使う機会も減ったLightbox系のプラグインを久しぶりに探したついでにメモ。またいつか使うときのために・・・ライセンス形態と対応メディアも付けたのでそれなりに見やすいか [...]]]></description>
			<content:encoded><![CDATA[					<p>最近あまり見なくなってきたし、個人的にも使う機会も減ったLightbox系のプラグインを久しぶりに探したついでにメモ。またいつか使うときのために・・・ライセンス形態と対応メディアも付けたのでそれなりに見やすいかもかもかも。</p>
					<p>（デモもつけようと思ったけどめんどくさいからやめた・・・</p>
					<h2>jQuery LightBox plugin</h2>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/lightbox.png" alt="" title="lightbox" class="alignnone size-full wp-image-3259" /></p>
					<p>いつものLightbox。お世話になった人も多そう。</p>
					<table border="1" class="lftable">
					<tr>
					<th>ページ</th>
					<td><a href="http://leandrovieira.com/projects/jquery/lightbox/">アーカイブ・デモ</a></td>
					</tr>
					<tr>
					<th>対応メディア</th>
					<td>画像</td>
					</tr>
					<tr>
					<th>ライセンス</th>
					<td>MITライセンス</td>
					</tr>
					<tr>
					<th>その他</th>
					<td>ふつーのLightbox</td>
					</tr>
					</table>
					<h2>ThickBox 3.1</h2>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/thickbox.png" width="500" alt="" title="thickbox" class="alignnone size-medium wp-image-3263"></p>
					<p>jQueryと言えばのThickbox。当初iframeが使えたのはこれだけだったもんで色々表示してた記憶があります。</p>
					<table border="1" class="lftable">
					<tr>
					<th>ページ</th>
					<td><a href="http://jquery.com/demo/thickbox/">アーカイブ</a><br /><a href="http://jquery.com/demo/thickbox/#examplesTitle">デモ</a></td>
					</tr>
					<tr>
					<th>対応メディア</th>
					<td>画像・iframe・Inline・Ajax・Youtubeとかも可</td>
					</tr>
					<tr>
					<th>ライセンス</th>
					<td>MITライセンス</td>
					</tr>
					<tr>
					<th>その他</th>
					<td>よく使われていたプラグインな印象</td>
					</tr>
					</table>
					<h2>PrettyPhoto</h2>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/prettyphoto.png" width="500" alt="" title="prettyphoto" class="alignnone size-medium wp-image-3261"></p>
					<p>角丸スタイルと拡大ボタンなどちょっとリッチなLightboxみたいなの。</p>
					<table border="1" class="lftable">
					<tr>
					<th>ページ</th>
					<td><a href="http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/">アーカイブ・デモ</a></td>
					</tr>
					<tr>
					<th>対応メディア</th>
					<td>画像・SWF・Youtube・Vimeo・MOV・iframe・Inline</td>
					</tr>
					<tr>
					<th>ライセンス</th>
					<td>Creative Commons Attribution 2.5</td>
					</tr>
					<tr>
					<th>その他</th>
					<td>ギャラリー・スライドショー</td>
					</tr>
					</table>
					<h2>jQuery.popeye 2.0</h2>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/popeye.jpg" width="500" alt="" title="popeye" class="alignnone size-medium wp-image-3260"></p>
					<p>Lightboxみたいな効果を画像にインラインで埋め込めるかなり素敵プラグインやけどまだ使ったことないなー。。あ、WordPressプラグインで使ってみればいいのかも。</p>
					<table border="1" class="lftable">
					<tr>
					<th>ページ</th>
					<td><a href="http://dev.herr-schuessler.de/jquery/popeye/">アーカイブデモ</a><br /><a href="http://dev.herr-schuessler.de/jquery/popeye/demo.html">デモ</a></td>
					</tr>
					<tr>
					<th>対応メディア</th>
					<td>画像</td>
					</tr>
					<tr>
					<th>ライセンス</th>
					<td>GPL 2.0</td>
					</tr>
					<tr>
					<th>その他</th>
					<td>WordPressプラグインもあるよ</td>
					</tr>
					</table>
					<h2>Shadowbox.js</h2>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/shadowbox" width="500" alt="" title="shadowbox" class="alignnone size-medium wp-image-3262"></p>
					<p>商用は有償なだけあって多機能なやつ。</p>
					<table border="1" class="lftable">
					<tr>
					<th>ページ</th>
					<td><a href="http://www.shadowbox-js.com/index.html">アーカイブ・デモ</a></td>
					</tr>
					<tr>
					<th>対応メディア</th>
					<td>画像・SWF・Youtube・MOV・Vimeo・FLV</td>
					</tr>
					<tr>
					<th>ライセンス</th>
					<td><strong>Shadowbox.js License</strong>（商用$20～）</td>
					</tr>
					<tr>
					<th>その他</th>
					<td>jQuery以外の多数のフレームワークで動く</td>
					</tr>
					</table>
					<h2>YoxView</h2>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/yoxview.jpg" width="500" alt="" title="yoxview" class="alignnone size-medium wp-image-3264"></p>
					<p>表示が割ときれい。テーマをきれいにすればちょうどよくなりそうな気もする。。</p>
					<table border="1" class="lftable">
					<tr>
					<th>ページ</th>
					<td><a href="http://www.yoxigen.com/yoxview/">アーカイブ・デモ</a></td>
					</tr>
					<tr>
					<th>対応メディア</th>
					<td>画像</td>
					</tr>
					<tr>
					<th>ライセンス</th>
					<td>MITライセンス</td>
					</tr>
					<tr>
					<th>その他</th>
					<td>多言語サポート</td>
					</tr>
					</table>
					<h2>fancybox</h2>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/fancybox.png" width="500" alt="" title="fancybox" class="alignnone size-medium wp-image-3258"></p>
					<p>スッキリしててみやすいさすがファンシー。</p>
					<table border="1" class="lftable">
					<tr>
					<th>ページ</th>
					<td><a href="http://fancybox.net/">アーカイブ・デモ</a></td>
					</tr>
					<tr>
					<th>対応メディア</th>
					<td>画像</td>
					</tr>
					<tr>
					<th>ライセンス</th>
					<td>MITとGPLのデュアルライセンス</td>
					</tr>
					<tr>
					<th>その他</th>
					<td>個人的にこのみ</td>
					</tr>
					</table>
					<h2>ColorBox</h2>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/colorbox.png" width="500" alt="" title="colorbox" class="alignnone size-medium wp-image-3257"></p>
					<p>なにやら人気っぽいColorBox（<a href="http://www.xmarks.com/topic/lightbox?sid=ggeeyxbq&#038;product=xmarks&#038;featured=147983550&#038;xplat=SearchBoost001:C&#038;cid=serp.shmear.rating&#038;mid=g32b452s">Xmarks調べ</a>）。テーマが5つ用意されていて簡単に見た目を変えられます。スライドショーとかギャラリーっぽい機能も。</p>
					<table border="1" class="lftable">
					<tr>
					<th>ページ</th>
					<td><a href="http://colorpowered.com/colorbox/">アーカイブ</a><br /><a href="http://colorpowered.com/colorbox/core/example1/index.html">デモ1</a>・<a href="http://colorpowered.com/colorbox/core/example2/index.html">デモ2</a>・<a href="http://colorpowered.com/colorbox/core/example3/index.html">デモ3</a>・<a href="http://colorpowered.com/colorbox/core/example4/index.html">デモ4</a>・<a href="http://colorpowered.com/colorbox/core/example5/index.html">デモ5</a><br />（デモによってスタイルが違う）</td>
					</tr>
					<tr>
					<th>対応メディア</th>
					<td>画像</td>
					</tr>
					<tr>
					<th>ライセンス</th>
					<td>MITライセンス</td>
					</tr>
					<tr>
					<th>その他</th>
					<td>オプションが豊富</td>
					</tr>
					</table>
					<p>使うならfancyboxかColorBoxかな。。。おれおれLightboxを汎用的にして公開する手もあるけど・・・おれおれと言えば「<a href="http://5509.me/log/jdtlightbox">これからの新標準LightBox jDTLightBox.js</a>」何の役にも立たへんLightboxもあるで・・・</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3243&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/some-lightbox-plugins/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Skype 5.0 Beta for Macを最適な環境に変更するチャットスタイル</title>
		<link>http://5509.me/log/customizing-skype-5beta-for-mac</link>
		<comments>http://5509.me/log/customizing-skype-5beta-for-mac#comments</comments>
		<pubDate>Wed, 10 Nov 2010 04:58:55 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[Others]]></category>
		<category><![CDATA[Skype]]></category>
		<category><![CDATA[チャットスタイル]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3201</guid>
		<description><![CDATA[					
					Skype for Macの5.0beta(5.0 betaが見れない方はSkypeのブログから)が公開されてUIが新しくなりましたね。Macのインターフェースならでは？の気持よさがいいです。なんか [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/11/skype5_1.png" alt="Skype 5.0 Beta for Mac" title="" width="500" height="80" class="alignnone size-full wp-image-3227" /></p>
					<p><a href="http://www.skype.com/intl/en/get-skype/on-your-computer/macosx/beta/">Skype for Macの5.0beta</a>(5.0 betaが見れない方は<a href="http://blogs.skype.com/garage/2010/11/skype_50_beta_for_mac.html">Skypeのブログ</a>から)が公開されてUIが新しくなりましたね。Macのインターフェースならでは？の気持よさがいいです。なんかでも全体的にでかいねん。ほんで自分のアイコンでーへんの寂しいねん。</p>
					<h3>でかいねん</h3>
					<p><a href="http://5509.me/wp-content/uploads/2010/11/skype5default.png"><img src="http://5509.me/wp-content/uploads/2010/11/skype5default.png" alt="でかいやろ" width="480" class="alignnone size-full wp-image-3212" /></a></p>
					<p>全体的にでかいやろ・・・<br />
					<span id="more-3201"></span></p>
					<h3>そんなわけで</h3>
					<p><a href="http://www.miekd.com/">miekd</a>で配布されている素敵スタイル<a href="http://www.miekd.com/articles/presenting-skype-simple-skypechatstyle/">Simple.skypeChatStyle</a>をちょろちょろカスタマイズしたものを使っているのですが、作者の方に配布許可をもらいましたので、公開しておきます。Thanks to <a href="http://twitter.com/miekd">@miekd</a>!!!</p>
					<h3>ダウンロードとキャプチャ</h3>
					<p>ダウンロード : <a href="http://5509.me/data/SkypeSimple55.zip">Skype Simple 55</a></p>
					<p><a href="http://5509.me/wp-content/uploads/2010/11/skype5simple.png"><img src="http://5509.me/wp-content/uploads/2010/11/skype5simple.png" alt="Simple.skypeChatStyle edited" title="" width="480" class="alignnone size-full wp-image-3220" /></a></p>
					<p>すっきり！</p>
					<h3>チャットスタイルの変更方法</h3>
					<p>一応書いておきます。</p>
					<p><strong>/ユーザー/ライブラリ/Application Support/Skype/</strong></p>
					<p>に「ChatStyles」というディレクトリを作ってダウンロード解凍して出てくる「Skype Simple 55.SkypeChatStyle」を入れ、Skypeを再起動する。<br />
					「設定＞チャット＞形式のプルダウン」から「Skype Simple 55」を選択する。</p>
					<p>選択後新規で開いた会話ウィンドウにチャットスタイルが適用されます。</p>
					<h3>SkypeのチャットスタイルはHTML5+CSS3+JavaScriptで書かれている</h3>
					<p>全然知らなかったのですが、SkypeのチャットスタイルHTMLなんですねー。SkypeはWebkitベースっぽいです。ちなみにJSはjQueryが使われてました。。</p>
					<p>ということは誰でもチャットスタイルを作れるんじゃないですか！触ってて結構面白かったです。メンドイけど。興味ある方はチャットスタイルファイルのコンテキストメニューから<strong>「パッケージの内容を表示」</strong>してみてください <img src='http://5509.me/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3201&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/customizing-skype-5beta-for-mac/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pocket WifiをUSB接続して給電しながらモデムとして使う(Mac)</title>
		<link>http://5509.me/log/using-pocketwifi-as-a-modem</link>
		<comments>http://5509.me/log/using-pocketwifi-as-a-modem#comments</comments>
		<pubDate>Mon, 08 Nov 2010 01:30:41 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[Gadget]]></category>
		<category><![CDATA[Pocket Wifi]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3163</guid>
		<description><![CDATA[					
					超いまさら感のあるPocket Wifiネタなんですけど、Pocket WifiをUSBで繋いで給電（充電じゃない）しながらモデムとして使う方法ってあんまり知られてないんですかね。
					※ 追 [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/11/12.jpg" alt="" title="1" width="500" height="250" class="alignnone size-full wp-image-3168" /></p>
					<p>超いまさら感のあるPocket Wifiネタなんですけど、Pocket Wifiを<strong>USBで繋いで給電（充電じゃない）しながらモデムとして使う方法</strong>ってあんまり知られてないんですかね。</p>
					<p><strong>※ 追記：設定しなくても繋がる人もいるようです。<br />
					何が原因なんでしょう？？？</strong></p>
					<p>確かにどこにも載ってない気もする・・・少なくとも僕の検索方法が悪いのか見当たらないし、知り合いも店員にそれは出来ません的なことを言われたとか言ってた。</p>
					<p>そんなわけで誰かの検索にひっかかるように記事にしておきます。簡単だよ！<br />
					この記事はE-mobileのPocket Wifiについて書いているので、Softbankのやつはちょっと違うと思います。（アカウントとかパスとか）<br />
					<span id="more-3163"></span></p>
					<h2>USIMカードの電話番号を確認する</h2>
					<p>超重要です。Pocket Wifiは電話できないんですけど、<strong>USIMカードには電話番号が書いてあります</strong>。あとで使うので用意しておきます。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/2.jpg" alt="" title="2" width="500" height="250" class="alignnone size-full wp-image-3175" /><br />
					USIMカードがついてたやつ</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/3.jpg" alt="" title="3" width="500" height="250" class="alignnone size-full wp-image-3176" /><br />
					電話番号が書いてある</p>
					<h2>ドライバをインストールする</h2>
					<p>たぶんこれは普通にインストールしてると思うんですけど、下の画像のやつですね。USBでつないだらSDカード認識できるようになるアレです。インストール済みの人はパスで。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/1.png" alt="" title="1" width="186" height="145" class="alignnone size-full wp-image-3173" /></p>
					<h2>ネットワークの設定</h2>
					<p>ドライバをインストールしたときに</p>
					<ul>
					<li>HUAWEIMobile-Pcui</li>
					<li>HUAWEI Mobile Connect</li>
					</ul>
					<p>の2つの項目がネットワークに追加されるのですが「<strong>HUAWEIMobile-Pcui</strong>」のほうを設定します。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/4.png" alt="" title="4" width="191" height="145" class="alignnone size-full wp-image-3178" /><br />
					電話マークがついてるほう</p>
					<p>選択すると右のペインに下のような画面が表示されるので、項目を埋めます。</p>
					<ul>
					<li>電話番号：<strong>さっき調べておいた番号（ハイフンなし）</strong></li>
					<li>アカウント名：<strong>em</strong></li>
					<li>パスワード：<strong>em</strong></li>
					</ul>
					<p>上記を入力したら、その下にある「接続」ボタンを押すだけです。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/5.jpg" alt="" title="5" width="414" height="175" class="alignnone size-full wp-image-3179" /></p>
					<p>エラーとか出ても気にせずキャンセルだかOKだかを押しておきます。接続できたらネットワークの項目が入れ替わって「HUAWEI Mobile Connect」が一番上にきてモデムとして使えるようになります。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/11/6.png" alt="" title="6" width="187" height="144" class="alignnone size-full wp-image-3181" /></p>
					<p>一度設定したら次回からはUSBでつなぐだけで勝手にネットワークにつながるので便利ですね！</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3163&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/using-pocketwifi-as-a-modem/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>コピペで実装する「ユーザーに優しいドロップダウンメニュー」</title>
		<link>http://5509.me/log/dropdownmenu-with-delay</link>
		<comments>http://5509.me/log/dropdownmenu-with-delay#comments</comments>
		<pubDate>Mon, 08 Nov 2010 01:30:35 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[ユーザビリティ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3141</guid>
		<description><![CDATA[					
					ドロップダウンメニューが便利な場合もありますが、ドロップダウンしてるエリアからカーソルが離れた際の素っ気なさときたら・・・
					とりあえずサンプル2つ用意したので比較してみてください。
			 [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/11/dmd.png" alt="" title="dmd" width="330" height="186" class="alignnone size-full wp-image-3154" /></p>
					<p>ドロップダウンメニューが便利な場合もありますが、<em>ドロップダウンしてるエリアからカーソルが離れた際の素っ気なさ</em>ときたら・・・<br />
					とりあえずサンプル2つ用意したので比較してみてください。</p>
					<h3>比較用サンプル</h3>
					<p><a href="http://5509.me/sample/dropdownmenuwithdelay/index2.html">素っ気ないドロップダウンメニュー</a><br />
					<a href="http://5509.me/sample/dropdownmenuwithdelay/">優しいドロップダウンメニュー</a></p>
					<h3>ちょっとした気遣いで優しいUIに</h3>
					<p>彼女（彼）とバイバイしたあと見えなくなるまで見守ったりしませんか？名残惜しい的なのでもいいです。振り返ったとき既にいないとか寂しいじゃないですか。そういう気持ちって重要じゃないですか。</p>
					<p>UIにもそういう小さな優しさというか思いやりを持たせてあげましょう。普通のことですけどね。<strong>カーソルが離れてもすぐ消えずにちょっと待ってくれるドロップダウンメニュー</strong>を簡単に実装できるコードを用意したので、ちょっとした優しさを持ってコピペで使ってやってください。<br />
					<span id="more-3141"></span></p>
					<h2>こっからコード</h2>
					<h3>HTML</h3>
					<pre>&lt;ul id=&quot;nav&quot;&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Home&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Photo&lt;/a&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;2008&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;2007&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;2006&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;2005&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;2004&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Archive&lt;/a&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;2008&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;2007&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;2006&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;2005&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;&#32771;&#12360;&#12427;&#12398;&#12513;&#12531;&#12489;&#12452;&lt;/a&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;&#12513;&#12531;&#12489;&#12452;&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;&#12513;&#12531;&#12489;&#12452;&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;&#12513;&#12531;&#12489;&#12452;&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;&#32771;&#12360;&#12427;&#12398;&#12513;&#12531;&#12489;&#12452;&lt;/a&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;&#12513;&#12531;&#12489;&#12452;&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;&#12513;&#12531;&#12489;&#12452;&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Contact Me&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</pre>
					<h3>CSS</h3>
					<pre>ul#nav {
    margin: 2em 0 0 2em;
    float: left;
    border: solid #ccc 1px;
    border-right: none;
    height: 40px;
}

    ul#nav li {
        float: left;
        border-right: solid #ccc 1px;
        height: 40px;
        width: 120px;
        text-align: center;
        line-height: 40px;
    }
    ul#nav li.hover {
        background: #eee;
    }

        ul#nav li a {
            display: block;
            color: #252525;
            text-decoration: none;
        }

        ul#nav li ul {
            border: none;
            display: none;
            background: #666;
            overflow: hidden;
            opacity: .9;
            filter: alpha(opacity=90);
        }

            ul#nav li ul li {
                border: none;
            }
            ul#nav li ul li.hover {
                background: #777;
            }

                ul#nav li ul li a {
                    color: #efefef;
                }</pre>
					<h3>JavaScript</h3>
					<pre>jQuery(function($) {
    // Global menu
    $('#nav li').hover(function() {
        $(this).addClass('hover');
    }, function() {
        $(this).removeClass('hover');
    });

    var eachTimeout = [],
        target = $('#nav ul');

    target.each(function(i) {
        var $this = $(this);
        $this.parent().hover(function() {
            target.hide();
            for ( var i=0; i&lt;eachTimeout.length; i++ ) {
                clearTimeout(eachTimeout[i]);
            }
            $this.show();
        }, function() {
            eachTimeout[i] = setTimeout(function() {
                $this.hide();
            }, 300); // ここの300を大きくすると消えるまでの待ち時間が増える
        });
    });
});</pre>
					<img src="http://5509.me/?ak_action=api_record_view&id=3141&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/dropdownmenu-with-delay/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ドットコーダーセッション5 「ワイワイガヤガヤアクセシビリティ」</title>
		<link>http://5509.me/log/dotcoder5</link>
		<comments>http://5509.me/log/dotcoder5#comments</comments>
		<pubDate>Thu, 30 Sep 2010 03:41:20 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[dotcoder]]></category>
		<category><![CDATA[お知らせ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3085</guid>
		<description><![CDATA[					
					最初に言っておきます。「アクセシビリティ」と聞くとどうも固そうなイメージがある方が多いと思うのですが、ドットコーダーの基本方針はゆるふわやで・・・気軽にどぞー
					3月に始めたドットコーダー勉 [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://tweetvite.com/event/dotcoder_s5"><img src="http://5509.me/img/docoda5.png" alt="ワイワイガヤガヤアクセシビリティ"></a></p>
					<p><strong>最初に言っておきます。<br />「アクセシビリティ」と聞くとどうも固そうなイメージがある方が多いと思うのですが、ドットコーダーの基本方針はゆるふわやで・・・気軽にどぞー</strong></p>
					<p>3月に始めたドットコーダー勉強会も10月で5回目になりました。月替わりでテーマを変えていて、10月のテーマは「アクセシビリティ」です。</p>
					<p>今回もゲストをお呼びしてますが、セミナー形式だけでなく、<br />
					みんなでワイワイガヤガヤしながら アクセシビリティのことを考えてみましょう。 </p>
					<ul>
					<li>音声読み上げブラウザで読み上げるとどうなるの？</li>
					<li>動画はアクセシビリティ的にどうなの？</li>
					<li>alt属性の良い書き方って？</li>
					<li>JIS改訂ってあったけど何に気をつければいいの？</li>
					<li>そもそもアクセシビリティって？</li>
					</ul>
					<p>アクセシビリティは全然わからない、なんか対応した方がいいような気がするけど、どうすればいいかわからない、そんなコーダー・デザイナー・ディレクターなど、どんな方でも気軽にご参加ください。 </p>
					<h3>日時</h3>
					<p>2010/10/16 15:00～18:00</p>
					<h3>場所</h3>
					<p>大阪研修センター<br />
					<a href="http://maps.google.co.jp/maps?hl=ja&#038;q=%E5%A4%A7%E9%98%AA%E5%B8%82%E6%B7%80%E5%B7%9D%E5%8C%BA%E5%8D%81%E4%B8%89%E6%9C%AC%E7%94%BA1-12-15&#038;ie=UTF8&#038;hq=&#038;hnear=%E5%A4%A7%E9%98%AA%E5%BA%9C%E5%A4%A7%E9%98%AA%E5%B8%82%E6%B7%80%E5%B7%9D%E5%8C%BA%E5%8D%81%E4%B8%89%E6%9C%AC%E7%94%BA%EF%BC%91%E4%B8%81%E7%9B%AE%EF%BC%91%EF%BC%92&#038;gl=jp&#038;ei=bgakTM-QA4imcJPHnK0I&#038;ved=0CBYQ8gEwAA&#038;z=14&#038;brcurrent=3,0x6000e5cf95fe29f3:0x9b972eceb3c5dc4d,0">大阪市淀川区十三本町1-12-15 ドルチェヴィータファースト3</a></p>
					<h3>概要 </h3>
					<p>ショートプレゼン、質疑応答・ディスカッション</p>
					<h3>対象</h3>
					<p>フロント関連の方、ディレクター、デザイナー、むしろ興味ある方</p>
					<h3>出演者 </h3>
					<ul>
					<li>アルファサード 持田 徹 さん（<a href="http://twitter.com/motchie">@motchie</a>） </li>
					<li>NPO法人しゃらく 小嶋 新 さん（<a href="http://twitter.com/aratakojima">@aratakojima</a>） </li>
					<li>みるく さん（<a href="http://twitter.com/milk54">@milk54</a>） <br />
					「<strong>優しく　楽しく　幸せに　アクセシビリティ</strong>」 <br />
					アクセシビリティをもっと身近に感じていただけるよう、音声読上げのデモ等を体感していただきます。そして、「これだけは実践しよう！」という基本中の基本をお話します。 </li>
					</ul>
					<h3>参加費</h3>
					<p>1000円</p>
					<h3>参加表明</h3>
					<p><a href="http://tweetvite.com/event/dotcoder_s5">Tweetviteからどうぞー</a></p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3085&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/dotcoder5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Analyticsでサブドメインのトラッキングを行う</title>
		<link>http://5509.me/log/tracking-subdomain-by-google-analytics</link>
		<comments>http://5509.me/log/tracking-subdomain-by-google-analytics#comments</comments>
		<pubDate>Thu, 09 Sep 2010 08:21:16 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[memo]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3051</guid>
		<description><![CDATA[					
					サブドメインのトラッキングなんて基本の基本で、いまさらなんですけど、いつも忘れるもんで…記事にすれば忘れないんじゃないかとかそういう感じです。
					埋め込みコードの修正
					
					 [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/09/ga.png" alt="" title="google analytics" width="231" height="54" class="alignnone size-full wp-image-3055" /></p>
					<p>サブドメインのトラッキングなんて基本の基本で、いまさらなんですけど、いつも忘れるもんで…記事にすれば忘れないんじゃないかとかそういう感じです。</p>
					<h2>埋め込みコードの修正</h2>
					<p><img src="http://5509.me/wp-content/uploads/2010/09/ga2.png" alt="" title="ga2" width="254" height="210" class="alignnone size-full wp-image-3057" /></p>
					<p>コードの発行のときに「複数のサブドメインがある １ つのドメイン」を選択するか下記のコメント部分を追加します。</p>
					<pre>&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
  _gaq.push(['_setDomainName', '.example.com']); // これを追加
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;</pre>
					<h2>フィルタの作成と適用</h2>
					<p>ふつうは新しくプロファイルを作ると思うので、新しいプロファイルを同じドメインで作成して下図のようなフィルタを作成して適用します。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/09/gasubdomain.png" alt="サブドメインフィルタの設定" title="gasubdomain" width="491" height="369" class="alignnone size-full wp-image-3053" /></p>
					<p>これでもう忘れることはないでしょう。。きっと。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3051&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/tracking-subdomain-by-google-analytics/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQueryでbackgroundPositionを取得するときの注意</title>
		<link>http://5509.me/log/get-css-background-position-with-jquer</link>
		<comments>http://5509.me/log/get-css-background-position-with-jquer#comments</comments>
		<pubDate>Mon, 23 Aug 2010 07:41:08 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[memo]]></category>

		<guid isPermaLink="false">http://5509.me/?p=3040</guid>
		<description><![CDATA[					$(&#8216;hoge&#8217;).css(&#8216;backgroundPosition&#8217;)だとIEで値が取れないんですね、不便か。
					XとYを別々に取得したい
					値の [...]]]></description>
			<content:encoded><![CDATA[					<p><strong>$(&#8216;hoge&#8217;).css(&#8216;backgroundPosition&#8217;)</strong>だとIEで値が取れないんですね、不便か。</p>
					<h2>XとYを別々に取得したい</h2>
					<h3>値の検証</h3>
					<pre>var bgPosDef = $('#hoge').css('backgroundPosition');</pre>
<h4>IE8まで（9は未検証）</h4>
<pre>console: null（空）</pre>
					<h4>Firefox, Chrome, Safari, Operaなど</h4>
					<pre>console: 50px 50px</pre>
<p>IEは返されるデータがない！こういうところがみんなが嫌いな所以ですかね。IEはbackgroundPositionではなくて、<strong>backgroundPositionXのようにXかYを指定</strong>して個別に引き抜きます。</p>
<pre>var bgPosX = $('#hoge').css('backgroundPositionX');
var bgPosY = $('#hoge').css('backgroundPositionY');</pre>
					<h3>XとYを取得する</h3>
					<p>計算を行う場合は、数値にしておく必要があるのでついでに。</p>
					<pre>var bgPos = bgPosDef.split(' '), // 半スペで分ける
  // bgPos[0] == X, bgPos[1] == Y
  bgPosX = 0,
  bgPosY = 0;
bgPosX = bgPos[0].replace('px', '');
bgPosY = bgPos[1].replace('px', '');
// pxを削除する</pre>
					<p>IEはpxを削るだけです。</p>
					<pre>bgPosX = $('#hoge').css('backgroundPositionX').replace('px', '');
bgPosY = $('#hoge').css('backgroundPositionY').replace('px', '');</pre>
					<h3>条件分岐で分ける</h3>
					<pre>var bgPosDef = $('#hoge').css('backgroundPosition'),
&nbsp;&nbsp;bgPosX = bgPosY = 0;
if ( bgPosDef ) { // backgroundPositionの値が取れた場合
&nbsp;&nbsp;var bgPos = bgPosDef.split(' '),
&nbsp;&nbsp;bgPosX = bgPos[0].replace('px', '');
&nbsp;&nbsp;bgPosY = bgPos[1].replace('px', '');
} else { // 取れなかった場合
&nbsp;&nbsp;bgPosX = $('#hoge').css('backgroundPositionX').replace('px', '');
&nbsp;&nbsp;bgPosY = $('#hoge').css('backgroundPositionY').replace('px', '');
}</pre>
					<p>これくらいはjQueryで対応してくれてもいいような気がしないでもない。。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=3040&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/get-css-background-position-with-jquer/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Twitterの@Anywhereを使ってつぶやけるだけのクライアントを作る</title>
		<link>http://5509.me/log/creating-twitter-client-with-anywhere</link>
		<comments>http://5509.me/log/creating-twitter-client-with-anywhere#comments</comments>
		<pubDate>Thu, 19 Aug 2010 01:20:33 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[tuts]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://5509.me/?p=2998</guid>
		<description><![CDATA[					
					どんだけ話題に乗り遅れてるねんっていう話なんですけど、いまさら@Anywhereを使ってみました。
					つぶやけるだけのTwitterクライアント &#8211; Only tweet
			 [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://onlytweet.5509.me/"><img src="http://5509.me/wp-content/uploads/2010/08/onlytweet.png" alt="" title="onlytweet" width="450" class="alignnone size-full wp-image-3001" /></a></p>
					<p>どんだけ話題に乗り遅れてるねんっていう話なんですけど、いまさら<a href="http://dev.twitter.com/anywhere">@Anywhere</a>を使ってみました。</p>
					<p><a href="http://onlytweet.5509.me/">つぶやけるだけのTwitterクライアント &#8211; Only tweet</a></p>
					<p>きっかけは、つぶやけるだけの俺俺クライアントがほしくて、<a href="http://rewish.org/javascript/twitter_anywhere">Twitterの機能をJSで簡単に導入できる「@Anywhere」の使い方メモ &#8211; Rewish</a>でなんとなく出来ることは読んでいた@Anywhereで十分やんじゃあつくれるな、という理由です。</p>
					<p>はっきり言ってChrome(Windowsだけ)のアプリケーション登録がないとまったく使えないしょうもないやつです。でもアプリケーション登録すればキャプチャみたいに使えます。結構便利。</p>
					<p>JavaScriptだけで作れるので、JavaScriptしかわからないけどちょっとやってみたい人にはちょうどいい感じかもです。<br />
					<span id="more-2998"></span></p>
					<h2>開発環境を整える</h2>
					<p>開発と言っても@AnywhereはJavaScriptだけで使えるので、用意するものは、テキストエディタとTwitterのAPIキーだけです。</p>
					<p>APIキーの発行と、読み込むソースまでは、Rewishの<a href="http://rewish.org/javascript/twitter_anywhere"><br />
					Twitterの機能をJSで簡単に導入できる「@Anywhere」の使い方メモ &#8211; Rewish</a>を見てもらえば分かると思いますし、<del datetime="2010-08-19T01:22:47+00:00">面倒くさいので</del>省略します。</p>
					<p>アクセス権限については、<a href="http://dev.twitter.com/apps">http://dev.twitter.com/apps</a>で変更できるようになってるので、Read &#038; Writeにしておきます。</p>
					<h2>@Anywhereの基礎知識</h2>
					<pre>twttr.anywhere(function(twitter) {
&nbsp;&nbsp;// 引数のtwitterがデータを持っているため
&nbsp;&nbsp;// ここで@Anywhereの機能が使える
});</pre>
					<p>@Anywhereの機能を使いたいときは上記のように<strong>twttr.anywhere(function(twitter){ });</strong>の中に記述します。</p>
					<h2>サインインとサインアウトなど機能の実装</h2>
					<h3>サインイン</h3>
					<pre>twitter.signIn()</pre>
<p>を使うかRewishでも紹介されている</p>
<pre>connectButton()</pre>
					<p>を使います。connectButtonは以下のように引数でオプションを指定することができます。</p>
					<pre>twitter("#hoge").connectButton({
&nbsp;&nbsp;authComplete: function() {
&nbsp;&nbsp;&nbsp;&nbsp;// 認証が完了した後の処理
&nbsp;&nbsp;},
&nbsp;&nbsp;signOut: function() {
&nbsp;&nbsp;&nbsp;&nbsp;// サインアウトした後の処理
&nbsp;&nbsp;}
});</pre>
					<p>が、今回はtwitter.signIn()を利用しました。一番簡単な方法は指定した要素のonclickで実行するだけです。超簡単ですね。</p>
					<pre>document.getElementById("signIn").onclick = function() {
&nbsp;&nbsp;twitter.signIn();
&nbsp;&nbsp;return false;
}</pre>
					<p>signIn()を実行すると、TwitterのOAuthウィンドウが開いてそちらで認証後に元のアプリケーションに返されます。返ってきたときに何か実行したい場合は、authCompleteというトリガーを使います。</p>
					<p>↓のようにjQueryみたいにトリガーをbindすることができます。トリガーにbindするfunctionは2つ引数を持っていて、イベントハンドラのeと、@Anywhereから渡されるuserです。userには、サインインしたユーザーの情報が入っているので、2つ目の引数は必ず受け取りましょう。</p>
					<pre>twitter.bind("authComplete", function(e, user) {
&nbsp;&nbsp;// hogehoge
});</pre>
					<p>Only Tweetでは、サインイン後に</p>
					<ul>
					<li>ユーザー名を表示</li>
					<li>ユーザー名の後ろにサインアウトリンクを表示</li>
					<li>使い方をTweetボックスに置き換え</li>
					</ul>
					<p>というように置き換えています。</p>
					<h4>受け取ったuserの使い方</h4>
					<p>user.data(プロパティ)でscreen_nameやアイコン画像などを表示できます。</p>
					<pre>sign.innerHTML = [
&nbsp;&nbsp;'&lt;p&gt;Logged in as : &lt;a href="http://twitter.com/' + user.data('screen_name') + '"&gt;',
&nbsp;&nbsp;&nbsp;&nbsp;user.data('screen_name'),
&nbsp;&nbsp;'&lt;/a&gt; (&lt;a href="javascript:void(0)" onclick="twttr.anywhere.signOut();"&gt;Sign out&lt;/a&gt;)&lt;/p&gt;',
].join('');</pre>
					<h3>サインアウト</h3>
					<p>サインアウトアクション自体は任意の要素でtwttr.anywhere.signOut()を実行するだけです。HTMLに入れる場合は、アンカーのonclickにでも入れておけばいいと思います。</p>
					<pre>&lt;a href="javascript:void(0)" onclick="twttr.anywhere.signOut();"&gt;Sign out&lt;/a&gt;</pre>
<p>サインアウト後に何か実行したいときはautoCompleteと同じように、signOutというトリガーにfunctionをbindします。</p>
<pre>twitter.bind("signOut", function(e) {
&nbsp;&nbsp;// hogehoge
});</pre>
					<h3>アクセス時のサインイン判定</h3>
					<p>アプリケーションにアクセスしたときに、すでにサインインしているかどうかで表示する内容を変えたい場合</p>
					<pre>twitter.isConnected()</pre>
<p>を利用します。既にサインインしていればtrue、そうでない場合はfalseが返されます。</p>
<pre>if ( twitter.isConnected() ) {
&nbsp;&nbsp;// サインインしている場合
} else {
&nbsp;&nbsp;// サインインしていない場合
}</pre>
					<h3>Tweetボックス（つぶやくやつ）の表示</h3>
					<p>サインインしているとき、指定したIDの要素にTweetボックスを表示します。これには文字数カウントやらつぶやくボタンやら含まれているので、表示すればそのままつぶやくことができます。ただしこのTweetボックスはiframeで書き出されるので動作の微調整とかは行えません。むーん不便。。</p>
					<pre>twitter("hoge").tweetBox({
&nbsp;&nbsp;label: /* いまなにしてる？のところ */,
&nbsp;&nbsp;defaultContent: /* 予め表示しておく文言 */,
&nbsp;&nbsp;onTweet: function(e) { // Tweet後のコールバック
&nbsp;&nbsp;&nbsp;&nbsp; // hogeking
&nbsp;&nbsp;}
});</pre>
					<h2>つぶやけるだけのTwitterクライアントの実装</h2>
					<p>サインイン前<br />
					<img src="http://5509.me/wp-content/uploads/2010/08/onlytweet3-e1282179789539.png" alt="" title="onlytweet3" width="450" height="271" class="alignnone size-full wp-image-3003" /></p>
					<p>サインイン後<br />
					<img src="http://5509.me/wp-content/uploads/2010/08/onlytweet.png" alt="" title="onlytweet" width="450" class="alignnone size-full wp-image-3001" /></p>
					<p>CSSは置いておくとして、用意したHTMLはこんなのです。</p>
					<pre>&lt;div id=&quot;wrap&quot;&gt;
&nbsp;&nbsp;&lt;div id=&quot;header&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;&lt;a href=&quot;./&quot;&gt;Only tweet&lt;/a&gt;&lt;/h1&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;p id=&quot;sign&quot;&gt;&lt;/p&gt;
&nbsp;&nbsp;&lt;/div&gt;
&nbsp;&nbsp;&lt;p class=&quot;desc&quot;&gt;つぶやけるだけのTwitterクライアント&lt;/p&gt;
&nbsp;&nbsp;&lt;div id=&quot;tweetBox&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;ol id=&quot;step&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;&lt;em&gt;HOP&lt;/em&gt;: Connect with Twitterボタンを押す&lt;/li&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;&lt;em&gt;STEP&lt;/em&gt;: OAuth認証画面でconnectを押す&lt;/li&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;&lt;em&gt;JUMP&lt;/em&gt;: つぶやく&lt;/li&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ol&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;p id=&quot;attention&quot;&gt;Tweeted&lt;/p&gt;
&nbsp;&nbsp;&lt;/div&gt;

&nbsp;&nbsp;&lt;div id=&quot;footer&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;small&gt;Powered by &lt;a href=&quot;http://twitter.com/&quot;&gt;Twitter&lt;/a&gt;. | &lt;a href=&quot;./about.html&quot;&gt;about&lt;/a&gt; | &lt;a href=&quot;http://twitter.com/5509&quot;&gt;5509&lt;/a&gt;&lt;/small&gt;
&nbsp;&nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;loadingBg&quot;&gt;&lt;/div&gt;
&lt;div id=&quot;loading&quot;&gt;&lt;p&gt;Connecting @anywhere...&lt;/p&gt;&lt;/div&gt;</pre>
					<p>なんかソース的に微妙なところもあると思いますけど、俺俺クライアントなので放っておきましょう。JSで追加すればいいやんなところも書いてあったりしますし。</p>
					<h3>仕様を決める</h3>
					<ul>
					<li>authCompleteでp#signをSigned inに書き換え、div#tweetBoxもつぶやけるように書き換え</li>
					<li>アクセス時にサインインしていなければ、p#signはサインインボタンを表示</li>
					<li>アクセス時にサインインしていれば、authCompleteと同じ状態にする</li>
					<li>待ち時間が発生するような箇所ではローディングのくるくるを表示</li>
					<li>Tweetが成功したら、成功したよ！的な文言を表示する</li>
					</ul>
					<h3>使いそうなものを変数に、機能を関数にしておく</h3>
					<pre>var d = document;
var $d = function(id) { return d.getElementById(id); };
var sign = $d("sign");
var tweetBox = $d("tweetBox");
var step = $d("step");
var loadingBg = $d("loadingBg");
var loading = $d("loading");
var attention = $d("attention");</pre>
					<p>だいたい2回以上使うようなものは変数にいれときます。使ってなくても気にしない。</p>
					<pre>// ローディングの表示
function showLoading() {
&nbsp;&nbsp;loadingBg.style.display = "block";
&nbsp;&nbsp;loading.style.display = "block";
}
// ローディングの非表示
function hideLoading() {
&nbsp;&nbsp;loadingBg.style.display = "none";
&nbsp;&nbsp;loading.style.display = "none";
}
// サインインの表示、サインインクリック時は一旦ローディングを表示する
function addConnect(T) {
&nbsp;&nbsp;sign.innerHTML = &quot;&lt;a href='javascript:void(0);' id='signIn'&gt;&lt;img src='img/connect.gif' alt='Connect with Twitter'&gt;&lt;/a&gt;&quot;;
&nbsp;&nbsp;d.getElementById(&quot;signIn&quot;).onclick = function() {
&nbsp;&nbsp;&nbsp;&nbsp;showLoading();
&nbsp;&nbsp;&nbsp;&nbsp;T.signIn();
&nbsp;&nbsp;&nbsp;&nbsp;return false;
&nbsp;&nbsp;}
&nbsp;&nbsp;hideLoading();
}</pre>
					<p>やっぱり2回以上使いそうなものはfunctionにしておきます。使ってなくても気にならない。</p>
					<h3>@Anywhereを利用して実装する</h3>
					<pre>twttr.anywhere(function(twitter) {
&nbsp;&nbsp;// 基本的に処理はここに書く
});</pre>
					<p>サインイン時にHTMLを入れ替えるfunctionを定義しておく。</p>
					<pre>var addHTML = function(User) {
&nbsp;&nbsp;sign.innerHTML = [
&nbsp;&nbsp;&nbsp;&nbsp;'&lt;p&gt;Logged in as : &lt;a href=&quot;http://twitter.com/' + User.data('screen_name') + '&quot;&gt;',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User.data('screen_name'),
&nbsp;&nbsp;&nbsp;&nbsp;'&lt;/a&gt; (&lt;a href=&quot;javascript:void(0)&quot; onclick=&quot;twttr.anywhere.signOut();&quot;&gt;Sign out&lt;/a&gt;)&lt;/p&gt;',
&nbsp;&nbsp;].join('');
&nbsp;&nbsp;
&nbsp;&nbsp;twitter("#tweetBox").tweetBox({
&nbsp;&nbsp;&nbsp;&nbsp;label: "Tweet, tweet, tweet, tweet and tweet",
&nbsp;&nbsp;&nbsp;&nbsp;defaultContent: "",
&nbsp;&nbsp;&nbsp;&nbsp;onTweet: function(e) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attention.style.display = "block";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(function() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attention.style.display = "none";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, 2000);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;});
&nbsp;&nbsp;hideLoading();
}</pre>
					<p>アクセスしたときにサインインしているか、いないかで行う処理を変える</p>
					<pre>if ( !twitter.isConnected() ) {
&nbsp;&nbsp;// サインインしていない場合は、addConnectでサインインリンクを表示
&nbsp;&nbsp;addConnect(twitter);
} else {
&nbsp;&nbsp;// サインインしている場合はstepを非表示にして、tweetBoxを表示する
&nbsp;&nbsp;var User = twitter.currentUser;
&nbsp;&nbsp;step.style.display = "none";
&nbsp;&nbsp;addHTML(User);
&nbsp;&nbsp;hideLoading();
}</pre>
					<p>最後にauthCompleteとsignOut時にコールバックをbindする。</p>
					<pre>twitter.bind("authComplete", function(e, user) {
&nbsp;&nbsp;// ステップを非表示にしてtweetBoxを表示後ローディングを隠す
&nbsp;&nbsp;step.style.display = "none";
&nbsp;&nbsp;addHTML(user);
&nbsp;&nbsp;hideLoading();
});
twitter.bind("signOut", function(e) {
&nbsp;&nbsp;// サインアウトが完了するまでローディングを表示する
&nbsp;&nbsp;// #signを空にして、tweetBoxを削除して、addConnectを実行する
&nbsp;&nbsp;showLoading();
&nbsp;&nbsp;sign.innerHTML = "";
&nbsp;&nbsp;tweetBox.removeChild(tweetBox.getElementsByTagName("iframe")[0]);
&nbsp;&nbsp;addConnect(twitter);
&nbsp;&nbsp;step.style.display = "block";
});</pre>
					<h2>完成ソースコード</h2>
					<p>ちなみにJavaScriptは全て&lt;/body&gt;直前に書いてるので、window.onload的なやつは必要ないです。そのまま実行しましょう。</p>
					<pre>&lt;script src=&quot;http://platform.twitter.com/anywhere.js?id=r3awJe8TS1nZhH4hUxtk4w&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;//&lt;![CDATA[
var d = document;
var $d = function(id) { return d.getElementById(id); };
var sign = $d(&quot;sign&quot;);
var tweetBox = $d(&quot;tweetBox&quot;);
var step = $d(&quot;step&quot;);
var loadingBg = $d(&quot;loadingBg&quot;);
var loading = $d(&quot;loading&quot;);
var attention = $d(&quot;attention&quot;);

function showLoading() {
&nbsp;&nbsp;loadingBg.style.display = &quot;block&quot;;
&nbsp;&nbsp;loading.style.display = &quot;block&quot;;
}
function hideLoading() {
&nbsp;&nbsp;loadingBg.style.display = &quot;none&quot;;
&nbsp;&nbsp;loading.style.display = &quot;none&quot;;
}
function addConnect(T) {
&nbsp;&nbsp;sign.innerHTML = &quot;&lt;a href='javascript:void(0);' id='signIn'&gt;&lt;img src='img/connect.gif' alt='Connect with Twitter'&gt;&lt;/a&gt;&quot;;
&nbsp;&nbsp;d.getElementById(&quot;signIn&quot;).onclick = function() {
&nbsp;&nbsp;&nbsp;&nbsp;showLoading();
&nbsp;&nbsp;&nbsp;&nbsp;T.signIn();
&nbsp;&nbsp;&nbsp;&nbsp;return false;
&nbsp;&nbsp;}
&nbsp;&nbsp;hideLoading();
}
twttr.anywhere(function(twitter) {
&nbsp;&nbsp;//addConnect(twitter);
&nbsp;&nbsp;var addHTML = function(User) {
&nbsp;&nbsp;&nbsp;&nbsp;sign.innerHTML = [
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;p&gt;Logged in as : &lt;a href=&quot;http://twitter.com/' + User.data('screen_name') + '&quot;&gt;',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User.data('screen_name'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;/a&gt; (&lt;a href=&quot;javascript:void(0)&quot; onclick=&quot;twttr.anywhere.signOut();&quot;&gt;Sign out&lt;/a&gt;)&lt;/p&gt;',
&nbsp;&nbsp;&nbsp;&nbsp;].join('');
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;twitter(&quot;#tweetBox&quot;).tweetBox({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label: &quot;Tweet, tweet, tweet, tweet and tweet&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;defaultContent: &quot;&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onTweet: function(e) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attention.style.display = &quot;block&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(function() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attention.style.display = &quot;none&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, 2000);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;hideLoading();
&nbsp;&nbsp;}
&nbsp;&nbsp;if ( !twitter.isConnected() ) {
&nbsp;&nbsp;&nbsp;&nbsp;addConnect(twitter);
&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;var User = twitter.currentUser;
&nbsp;&nbsp;&nbsp;&nbsp;step.style.display = &quot;none&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;addHTML(User);
&nbsp;&nbsp;&nbsp;&nbsp;hideLoading();
&nbsp;&nbsp;}
&nbsp;&nbsp;twitter.bind(&quot;authComplete&quot;, function(e, user) {
&nbsp;&nbsp;&nbsp;&nbsp;step.style.display = &quot;none&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;addHTML(user);
&nbsp;&nbsp;&nbsp;&nbsp;hideLoading();
&nbsp;&nbsp;});
&nbsp;&nbsp;twitter.bind(&quot;signOut&quot;, function(e) {
&nbsp;&nbsp;&nbsp;&nbsp;showLoading();
&nbsp;&nbsp;&nbsp;&nbsp;sign.innerHTML = &quot;&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;tweetBox.removeChild(tweetBox.getElementsByTagName(&quot;iframe&quot;)[0]);
&nbsp;&nbsp;&nbsp;&nbsp;addConnect(twitter);
&nbsp;&nbsp;&nbsp;&nbsp;step.style.display = &quot;block&quot;;
&nbsp;&nbsp;});
});
//]]&gt;&lt;/script&gt;</pre>
					<p><a href="http://onlytweet.5509.me/">つぶやけるだけのTwitterクライアント &#8211; Only tweet</a></p>
					<p>あとはTwitter APIのJSONPからscreen_nameでTLとか取得すればなんとなくTwitterっぽいのもできるので、興味がある人はぜひ。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=2998&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/creating-twitter-client-with-anywhere/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>今までに公開したjQueryプラグイン</title>
		<link>http://5509.me/log/jquery-plugins-have-been-published</link>
		<comments>http://5509.me/log/jquery-plugins-have-been-published#comments</comments>
		<pubDate>Thu, 12 Aug 2010 04:48:41 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[memo]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://5509.me/?p=2945</guid>
		<description><![CDATA[					
					はじめに、この記事は役に立つリンク集ではないです。
					ブログを初めて2年ちょっとが過ぎ、半年くらいやるやる言ってやらなかったexValidationもようやく公開できたのもあって、自分の中で [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/08/jquery.png" alt="" title="jquery" width="400" height="150" class="alignnone size-full wp-image-2986" /></p>
					<p>はじめに、この記事は役に立つリンク集ではないです。</p>
					<p>ブログを初めて2年ちょっとが過ぎ、半年くらいやるやる言ってやらなかったexValidationもようやく公開できたのもあって、自分の中で一段落したので、今まで公開したプラグインの振り返り等も兼ねて書きました。</p>
					<p>そもそもは誰かの役に立てばいいなと思って始めたブログなので（ほとんど役に立たないものだと思いますけど）もしかするともしかしてどこかで誰かの役に立てるものもあるかもしれません。</p>
					<p>ところで最初のプラグインを公開したときは、（JavaScript的な意味で）それはもう何も知りませんでした。そんな感じで今でも恥ずかしいコードなんですけど、最初の頃はもっと恥ずかしいコードなんですね。だから見ないで…<br />
					<span id="more-2945"></span></p>
					<h2>いままで公開したjQueryぷるぎんたち</h2>
					<h3><a href="http://5509.me/log/datesupport">プルダウンで日付を入力(選択)するイライラを解消するDateSupport.js</a></h3>
					<p><img src="http://5509.me/wp-content/uploads/2010/08/datesupport.png" alt="" title="datesupport" width="400" height="150" class="alignnone size-full wp-image-2965" /></p>
					<p><a href="http://5509.me/sample/dateSupport/index.html">サンプル</a></p>
					<p>この頃は些細な生年月日の日付選択にもイライラしてました。。そんなことはさておいて、ただのしがないコーダーだったこの頃の僕にとってjQueryの存在はかなり大きかったです。</p>
					<p>JavaScriptというよりプログラミングの基礎知識も何もなしに、とりあえずやってみよう的な感じで始めて最初にできたプラグインがこのDateSupportでした。記念すべき（？）最初のプラグインなのにまったく懐かしくないのはなぜだろう…</p>
					<h3><a href="http://5509.me/log/prefsupport">プルダウンで都道府県などを入力(選択)するイライラを解消するPrefSupport.js</a></h3>
					<p><img src="http://5509.me/wp-content/uploads/2010/08/prefsupport.png" alt="" title="prefsupport" width="400" height="150" class="alignnone size-full wp-image-2967" /></p>
					<p><a href="http://5509.me/sample/prefSupport/index.html">サンプル</a></p>
					<p>DateSupportでHTMLを取得してDOMを操る技術（？）を身につけて（？）調子に乗った（！）のか、あの鬱陶しい都道府県のプルダウンも展開しました。</p>
					<p>今思えばどうしてタイトルに「jQuery」「プラグイン」の2つが入っていないのか。。これもやっぱり懐かしく思えないのはなぜ…</p>
					<h3><a href="http://5509.me/log/realtimeformvalidation">リアルタイムフォームバリデーション jQuery.validation.js</a></h3>
					<p><img src="http://5509.me/wp-content/uploads/2010/08/jqueryvalidation.png" alt="" title="jqueryvalidation" width="400" height="150" class="alignnone size-full wp-image-2969" /></p>
					<p><a href="http://5509.me/sample/validation/">サンプル</a></p>
					<p><span style="display: none">確か国産のバリデーションプラグインがなかった、という理由で作ったjquery.validation.jsですが、正直実装方法が全く分からず、正規表現やcallback、書き方などその他もろもろ色々勉強になったやつですこいつ。最初に叩きで書いたバリデーションエンジンを<a href="http://twitter.com/akkun_choi">@akkun_choi</a>に書き直してもらって、今でも基盤として使ってます。書き直してもらったコードは当時全く意味が分かりませんでした。ありがとう…</span>このプラグインは利用してくれた方のコメント（要望）を元に、徐々にバージョンアップして最終的に色んなバリデーションを行えるようになりました。最終バージョンでは開発当初は絶対書けなかったようなことまで書けるようになってました。</p>
					<p>このプラグインは人生を少なからず変えた重要なやつかもしれないです。</p>
					<h3><a href="http://5509.me/log/jqueryselectable">selectボックスをシンプルなプルダウンに拡張するjQselectable(jQuery.selectable.js)</a></h3>
					<p><img src="http://5509.me/wp-content/uploads/2010/08/selectable.png" alt="" title="selectable" width="400" height="150" class="alignnone size-full wp-image-2970" /></p>
					<p><a href="http://jqselectable.googlecode.com/svn/trunk/index.html">サンプル</a></p>
					<p>何ヶ月か前に作ったDateSupportとPrefSupportを元に作りなおしたのがこのselectableでした。今は書き直して色々仕様も変わったりしていますが、公開当初はそれはもう色々ひどかったような気がします。</p>
					<p>個人的には最高のユーザー体験じゃろ、って思ってるんですけどね。どうなんでしょう。</p>
					<h3><a href="http://5509.me/log/jqueryslidescrolljs">スライドスクロールページ内リンク jQuery.slideScroll.js</a></h3>
					<p><a href="http://5509.me/sample/slidescroll/">サンプル</a></p>
					<p>JavaScriptを始めたきっかけはするんするんスクロールだったので、ちゃんと内容を理解してこれを書けたっていうのはなんだか前へ進めた気がしてうれしかったですね。</p>
					<h3><a href="http://5509.me/log/page-scrolling-with-jqueryeasing">ひと味違ったページ内スクロールをjQuery Easingプラグインで実装する jQuery.easing.scroll.js</a></h3>
					<p><a href="http://5509.me/sample/easingScroll/">サンプル</a></p>
					<p>せっかくするするスクロールを書いたのに、jQueryを使うと数行でもっとすごい動きを実装できるといういい例でした。easing使ったほうがきれいにスクロールするんです。これは使わなくていいので、easingを使いましょうよ。</p>
					<h3><a href="http://5509.me/log/preview_default_url_shorten_by_bitly">bit.lyで短縮された元のURLをプレビューする jQueryプラグイン</a></h3>
					<p><img src="http://5509.me/wp-content/uploads/2009/05/prebitly.gif"></p>
					<p><a href="http://5509.me/sample/prebitly/">サンプル</a></p>
					<p>思い入れが全然ないなこれ…</p>
					<h3><a href="http://5509.me/log/tangohokanjs">入力補助でユーザーの負担を減らそう 予約語を表示するtangoHokan.js</a></h3>
					<p><img src="http://5509.me/wp-content/uploads/2010/08/tangohokan.png" alt="" title="tangohokan" width="399" height="150" class="alignnone size-full wp-image-2973" /></p>
					<p><a href="http://5509.me/sample/tangohokan/">サンプル</a></p>
					<p>たしかこの辺は管理画面を使いやすくしたくて作ってました。</p>
					<h3><a href="http://5509.me/log/editableselect">セレクトボックスに新しいオプションを追加していけるスクリプト</a></h3>
					<p><img src="http://5509.me/wp-content/uploads/2010/08/editable.png" alt="" title="editable" width="400" height="150" class="alignnone size-full wp-image-2974" /></p>
					<p><a href="http://5509.me/sample/editableselect/">サンプル</a></p>
					<p>なんかちょっと斬新なことがしたくて、作ってみたものの使いどころはまったくありませんでした。一番微妙なやつですねこいつは。</p>
					<h3><a href="http://5509.me/log/hintmask">パスワード入力欄の最後の文字列をヒントとして表示するjQueryプラグイン</a></h3>
					<p><img src="http://5509.me/wp-content/uploads/2010/08/hint.png" alt="" title="hint" width="401" height="151" class="alignnone size-full wp-image-2975" /></p>
					<p><a href="http://5509.me/sample/hintmask/">サンプル</a><br />
					iPhoneのUIみたいなのが作りたくて、でもロジックが分からなくて逃げたらこういう形になりました。公開したら、まさにiPhoneのやつみたいなのを海外で公開した人がいて、ロジックみたら僕には無理やったなっていう結果でした。</p>
					<h3><a href="http://5509.me/log/twitter-float-tip">TwitterのHover Cardを実装するjQueryプラグイン twttrFloatTip</a></h3>
					<p><img src="http://5509.me/wp-content/uploads/2010/08/hovercard.png" alt="" title="hovercard" width="400" height="148" class="alignnone size-full wp-image-2976" /></p>
					<p><a href="http://twitter-float-tip.googlecode.com/svn/trunk/index.html">サンプル</a></p>
					<p>@anywhereが公開されるちょっと前くらいに、HoverCardを使いたいなと思って書いたんですけど、数ヵ月後に案の定@anywhereでHoverCardが実装できるようになったので、不要になったかわいそうなやつです。</p>
					<h3><a href="http://5509.me/log/whatinout">ありそうでなかった？要素をふわっと表示させるjQueryプラグイン whatInOut</a></h3>
					<p><a href="http://5509.me/sample/whatinout/">サンプル</a></p>
					<p>斬新なタイトルで注目を集めた（嘘）whatInOutはWindows7のウィンドウを開くときみたいな、ふんわりとしたアニメーションがほしくて書きました。今さらというか、今だからというか、whatInとwhatOutはほとんど使い物にならなくて、whatSlideInとwhatSlideOutがいい感じですね。</p>
					<h3><a href="http://5509.me/log/exvalidation">どんなフォームにも使えるjQueryのフォームバリデーション exValidation</a></h3>
					<p><img src="http://5509.me/wp-content/uploads/2010/08/exvalidation.png" alt="" title="exvalidation" width="400" height="150" class="alignnone size-full wp-image-2977" /></p>
					<p><a href="http://ex-validation.googlecode.com/svn/trunk/index.html">サンプル</a></p>
					<p>ずっと書き直したかったjQuery.validation.jsを仕様変更などして書き直したものです。やりたいようにやっていったら「<a href="http://www.position-absolute.com/articles/jquery-form-validator-because-form-validation-is-a-mess/">jquery Inline Form Validation Engine</a>」にかなり近いものになってしまったのですけど、jQselectableと一緒に使えるとかexValidationにしかないようなオプションとかもあるしこれでいいか、で公開しました。</p>
					<h2>ふりかえり</h2>
					<p>僕は別にJavaScriptの知識が豊富なわけでもないし、すごいコードを書けるわけでもないですが、その時できる範囲内でたまに出来ないことが必要になったりして、聞いたりしてちょっとずつ理解して今ではなーんとなく理解できるようになりました。</p>
					<p>本当にしがないコーダーだった頃に比べると、できることは増えていて、それもこれもjQueryのおかげだったりするんですけど、jQueryにばっかり頼っていてもできることは増えないのでJavaScriptはもっと理解したい。</p>
					<p>プラグインとかは特に誰に向けて書いてるわけではないですけど、コメントとかTwitterで反応があるとうれしいです。コメントの返事さぼったりしてすみません。これからもさぼったりすると思いますけど、コメント本当にうれしいです。</p>
					<p>そんなわけで、これからもぼちぼち書いていけたらいいなとか思いながらも、そろそろ次のステップに進まないとなぁと思っているわけで、次の言語をどうしようと重たい腰が一向にあがらない毎日です。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=2945&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/jquery-plugins-have-been-published/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>どんなフォームにも使えるjQueryのフォームバリデーション exValidation</title>
		<link>http://5509.me/log/exvalidation</link>
		<comments>http://5509.me/log/exvalidation#comments</comments>
		<pubDate>Fri, 06 Aug 2010 01:15:12 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[validation]]></category>
		<category><![CDATA[フォーム]]></category>
		<category><![CDATA[ユーザビリティ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=2864</guid>
		<description><![CDATA[					
					jquery.validation.jsというフォームバリデーションプラグインを公開していますが、使える場面が割と限定されてしまうような作りだったので、より幅広く使えるようにexValidation [...]]]></description>
			<content:encoded><![CDATA[					<p><a class="act" href="http://5509.me/sample/exvalidation/"><img class="alignnone size-full wp-image-2872" title="validation" src="http://5509.me/wp-content/uploads/2010/08/validation.png" alt="" width="450" height="202" /></a></p>
					<p><a href="http://5509.me/log/realtimeformvalidation">jquery.validation.js</a>というフォームバリデーションプラグインを公開していますが、使える場面が割と限定されてしまうような作りだったので、<strong>より幅広く使えるようにexValidationという名前で新しいjQueryプラグインとして作り直しました。</strong>伴って仕様や使い方が異なる部分も多いので、ドキュメントとして書いておきます。ただし前半のバリデーションルール周りは同じエンジンを使ってるので、ほぼ同じです。ちなみにすごい長いです。。</p>
					<p class="note">ルールを割り当てる際の<strong>class名がhogeからchkhogeに代わりました</strong>。アップデートして使う場合は注意してください。</p>
					<ul>
					<li><a href="http://5509.me/sample/exvalidation/">サンプル1: エラーを右上に表示</a></li>
					<li><a href="http://5509.me/sample/exvalidation/index2.html">サンプル2: エラーを下に表示</a></li>
					</ul>
					<p><span id="more-2864"></span></p>
					<h2>トピックス</h2>
					<ul>
					<li><a href="#download">ダウンロード</a></li>
					<li><a href="#install">使い方</a>
					<ul>
					<li><a href="#install1">1. JSファイルを読み込む</a></li>
					<li><a href="#install2">2. 基本バリデーションルール</a></li>
					<li><a href="#install3">3. select, checkbox、radio、複数項目の場合</a></li>
					<li><a href="#install4">4. select要素を対象にする場合</a></li>
					<li><a href="#install5">5. 再入力をチェックする場合</a></li>
					<li><a href="#install6">6. 入力文字数をチェックする場合</a></li>
					<li><a href="#install7">7. チェックボックスで対象inputの必須をトグルする</a></li>
					<li><a href="#install8">8. アクティベート</a></li>
					<li><a href="#install9">9. アクティベート（ここでルールを指定する場合）</a></li>
					</ul>
					</li>
					<li><a href="#options">オプション</a>
					<ul>
					<li><a href="#sample1">サンプル1のパターンで実行する</a></li>
					<li><a href="#sample2">サンプル2のパターンで実行する</a></li>
					<li><a href="#errfocus">errFocusを使う</a></li>
					<li><a href="#ajaxpost">Ajaxでポストする</a></li>
					<li><a href="#custombind">任意の要素にバリデーションをbindする</a></li>
					<li><a href="#customError">エラー時に関数を実行する、エラーがない場合に関数を実行する、スクロール位置を固定する</a>
					<ul>
					<li><a href="#customAddError">エラー時に関数を実行する</a></li>
					<li><a href="#customClearError">エラーがない場合に関数を実行する</a></li>
					<li><a href="#customScrollAdjust">スクロール位置を固定する</a></li>
					</ul>
					</li>
					</ul>
					</li>
					<li><a href="#api">API</a>
					<ul>
					<li><a href="#selectable">jQselectableとの併用</a></li>
					</ul>
					</li>
					<li><a href="#reg">バリデーションルール</a></li>
					<li><a href="#license">ライセンス</a></li>
					<li><a href="#other">その他</a></li>
					</ul>
					<h2 id="download">ダウンロード</h2>
					<dl>
					<dt>バリデーションエンジン </dt>
					<dd><a href="https://github.com/5509/exValidation/blob/master/js/exvalidation.js">exValidation.js</a></dd>
					<dt>バリデーションルール</dt>
					<dd><a href="https://github.com/5509/exValidation/blob/master/js/exchecker-ja.js">exChecker-ja.js</a></dd>
					<dt>サンプルファイル</dt>
					<dd><a href="https://github.com/5509/exValidation/archives/master">exValidation.zip</a></dd>
					</dl>
					<h2 id="install">使い方</h2>
					<h3 id="install1">1. JS・CSSファイルを読み込む</h3>
					<p>exValidaitonに必要なファイルは<strong>「exvalidation.css」「jQuery」「exvalidation.js」「exchecker-ja.js」</strong>の4つです。</p>
					<pre>&lt;link type="text/css" rel="stylesheet" href="css/exvalidation.css" /&gt;
&lt;script type="text/javascript" src="http://www.google.com/jsapi"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;google.load("jquery", "1.4.2");&lt;/script&gt;
&lt;script type="text/javascript" src="js/exvalidation.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="js/exchecker-ja.js"&gt;&lt;/script&gt;</pre>
					<p>「exchecker-ja.js」は基本的なバリデーションルールを記述したファイルなので、これを読み込むことで以下に記述する最低限のバリデーションを行うことができます。</p>
					<h3 id="install2">2. 基本バリデーションルール</h3>
					<p>exchecker-ja.jsに基本のバリデーションルールを記述しています。下記のclassをフォーム要素（グループの場合はspanなどの要素）に割り振るか実行時にrulesというプロパティで指定すること（実行時のプロパティでバリデーションルールを指定する）でルールを決めることができます。</p>
					<ul>
					<li>chkrequired &#8211; 必須項目</li>
					<li>chkselect &#8211; select要素用の必須項目</li>
					<li>chkradio &#8211; radioボタン（いずれかひとつ、グループ分けの親要素必須</li>
					<li>chkcheckbox &#8211; checkbox（いずれかひとつ、グループ分けの親要素必須</li>
					<li>chkgroup &#8211; 複数の項目をまとめる場合（詳しくは後述</li>
					<li>chkretype-対象にするID &#8211; 再入力チェック</li>
					<li>chkemail &#8211; メールアドレスチェック（*@*.*）</li>
					<li>chkhankaku &#8211; 全角禁止</li>
					<li>chkzenkaku &#8211; 全角のみ</li>
					<li>chkhiragana &#8211; ひらがなのみ</li>
					<li>chkkatakana &#8211; カタカナのみ</li>
					<li>chkfurigana &#8211; ふりがな（ひらがな、数字、アルファベット、〜、ー、()）</li>
					<li>chktel &#8211; 電話番号(形式チェックはなし)</li>
					<li>chknumonly &#8211; 数字のみ</li>
					<li>chknocaps &#8211; 英数字（小文字）のみ</li>
					<li>chkzip &#8211; 郵便番号(形式チェックはなし)</li>
					<li>chkurl &#8211; URL（http(s)://）</li>
					<li>chkminX &#8211; X文字以下</li>
					<li>chkmaxX &#8211; X文字以上</li>
					<li>chkfile &#8211; type=&#8221;file&#8221;のチェック、chkrequiredは不要</li>
					</ul>
					<p>また、適用させる項目はchkrequiredとchkhankakuは他の項目と同時に含めることが出来ます。例えば下記のようにクラスにchkemail, chkhankaku, chkrequiredを指定した場合は</p>
					<pre>&lt;input type="text" name="mail" id="mail" value="" class="chkemail chkhankaku chkrequired" /&gt;</pre>
<p>必須項目・メールアドレスチェック・全角禁止になります。またクラスに記述する順序は任意で構いません。ところでバリデーションを行う<strong>input要素には固有のidが必須</strong>になります。</p>
<h4>特殊なタイプのチェック形式は以下のようになります。カッコ内はあってもなくても可</h4>
<p>メールアドレス：*@*.*<br />
電話番号：*(-)*(-)*<br />
郵便番号：***(-)****</p>
<h3 id="install3">3. checkbox、radio、複数項目のバリデーション</h3>
<p>checkbox、radio、複数項目をチェックする場合は<br />
<strong>spanなどのインライン要素<a href="#note1">(*1)</a>でグループを明示した上で</strong>ここではspan要素としますが span要素にid、classを割り当てます。</p>
<p>例えば、メールアドレスを@前と後で分ける場合は</p>
<pre>&lt;input type="text" name="mail2" id="mail2" value="" class="" /&gt;
@
&lt;input type="text" name="mai3" id="mail3" value="" class="" /&gt;</pre>
					<p>といったように分けるのが一般的なのでこれをチェックする場合は以下のようになります。</p>
					<pre>&lt;span class="chkgroup chkrequired chkhankaku chkemail" id="groupmail"&gt;&lt;input type="text" name="mail3" id="mail3" value="" class="" /&gt;
@
&lt;input type="text" name="mail2" id="mail2" value="" class="" /&gt;&lt;/span&gt;</pre>
					<p>ポイントは上にも記述していますが、<strong>複数のinput要素をまとめるspanを用意してそのspan要素にid、classを割り当てます</strong>。</p>
					<p><strong>classはgroupが必須になり、あとはinput単体で指定するものが使えます</strong>。なので今回の場合はclassには <strong>chkgroup, chkrequired, chkhankaku, chkemail</strong> が入ることになります。</p>
					<p>以下はradioボタンの例です。</p>
					<pre>&lt;ul class="chkradio" id="radioarray"&gt;
&nbsp;&nbsp;&lt;li&gt;&lt;label for="radio1"&gt;&lt;input type="radio" name="radio" id="radio1" value="" /&gt; 男&lt;/label&gt;&lt;/li&gt;
&nbsp;&nbsp;&lt;li&gt;&lt;label for="radio2"&gt;&lt;input type="radio" name="radio" id="radio2" value="" /&gt; 女&lt;/label&gt;&lt;/li&gt;
&lt;/ul&gt;</pre>
					<p>radio、checkboxは例外になり、必須項目としてしかチェック出来ないので<strong>classにchkrequiredは必要ありません</strong>。</p>
					<p>上記の例ではグループ化がspan要素ではなくul要素になっていますがCSSでinline指定<a href="#note1">(*1)</a>すれば大丈夫です。要はdisplayプロパティがinline(inline-blockでも可)であればなんでも大丈夫です。</p>
					<p id="note1" class="attention"><strong>*1) 幅を持たせたブロック要素でも可ブロック要素は幅初期値が親に対して100%になるので エラーチップが画面から見切れることがあります。</strong></p>
					<h3 id="install4">4. select要素を対象にする場合</h3>
					<p>select要素を対象にする場合は</p>
					<pre>&lt;select name="sex" id="sex" class="chkselect"&gt;
&nbsp;&nbsp;&lt;option value="" selected="selected"&gt;選択してください&lt;/option&gt;
&nbsp;&nbsp;&lt;option value="male"&gt;男&lt;/option&gt;
&nbsp;&nbsp;&lt;option value="female"&gt;女&lt;/option&gt;
&lt;/select&gt;</pre>
					<p>のようにvalueが空のoption要素を含めます。value属性を指定しないとvalidationは行われません。初期値には<strong>必ず空のvalue属性を指定してください</strong>。(初期値にはselected属性を指定することが<a href="http://w3g.jp/xhtml/dic/option#selected">推奨</a>されています)<br />
					select要素は選択されているoptionが変わった場合にvalidationが行われます。</p>
					<h3 id="install5">5. 再入力をチェックする場合</h3>
					<p>メールアドレスやパスワードなど再入力を促す項目がある場合、それもvalidationの対象にすることができます。たとえば、</p>
					<pre>&lt;input type="text" id="mail" name="mail" value="" class="chkemail chkhankaku chkrequired" /&gt;</pre>
<p>の後に</p>
<pre>&lt;input type="text" id="remail" name="remail" value="" class="" /&gt;</pre>
					<p>といった再入力項目があるとします。この項目は<strong>先のメールアドレス入力項目 input#mail と同じものを入力してもらう</strong>ので</p>
					<pre>&lt;input type="text" id="remail" name="remail" value="" class="chkretype-mail chkrequired" /&gt;</pre>
<p>のようにクラスに <strong>chkretype-対象にする項目のID</strong> を含めます。今回は<strong>対象にする項目(メールアドレス入力項目)のIDはmailとなっているので chkretype-mail</strong> としています。</p>
<p>再入力チェックは複数項目の場合も有効で、単純に3と組み合わせるだけです。</p>
<pre>&lt;span class="chkgroup chkrequired chkhankaku chkemail" id="groupmail"&gt;&lt;input type="text" name="mail2" id="mail2" value="" class="" /&gt;
@
&lt;input type="text" name="mail3" id="mail3" value="" class="" /&gt;&lt;/span&gt;</pre>
					<p>の再入力項目は</p>
					<pre>&lt;span class="chkgroup chkrequired chkretype-groupmail" id="regroupmail"&gt;&lt;input type="text" name="remail2" id="remail3" value="" class="" /&gt;
@
&lt;input type="text" name="remail3" id="remail3" value="" class="" /&gt;&lt;/span&gt;</pre>
					<p>となります。</p>
					<h3 id="install6">6. 入力文字数をチェックする場合</h3>
					<p>パスワードなどの項目に入力文字数の制限をかけたいときは</p>
					<pre>&lt;input type="password" id="pass" name="pass" value="" class="chkrequired chkmin6 chkmax12" /&gt;</pre>
<p>のようにclassに</p>
<ul>
<li>minX</li>
<li>maxX (Xはともに任意の数字)</li>
</ul>
<p>を含ませます。もちろんmin・maxどちらか一方だけを指定でき、また他のすべてのチェックと併用することができます。<br />
ただし複数項目のメールアドレスは 文字列に@を含めるので1文字多く数えられます。(メールアドレスに入力文字数制限を使うことはないと思うのでそのままにしてます。)</p>
<h3 id="install7">7. チェックボックスで対象inputの必須をトグルする</h3>
<p>以下該当部分の抜粋コードです。ポイントは<strong>トグルにしたい要素はルールを書くときにchkrequiredを必ず含めてください</strong>。</p>
<pre>&lt;tr&gt;
  &lt;th&gt;Favorite&lt;span&gt;*&lt;/span&gt;&lt;/th&gt;
  &lt;td&gt;
    &lt;span id=&quot;fav&quot;&gt;
      &lt;label for=&quot;f1&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;f1&quot; name=&quot;fav[]&quot; value=&quot;f1&quot;&gt;books&lt;/label&gt;
      &lt;label for=&quot;f2&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;f2&quot; name=&quot;fav[]&quot; value=&quot;f2&quot;&gt;music&lt;/label&gt;
      &lt;label for=&quot;f3&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;f3&quot; name=&quot;fav[]&quot; value=&quot;f3&quot;&gt;game&lt;/label&gt;
      &lt;label for=&quot;f4&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;f4&quot; name=&quot;fav[]&quot; value=&quot;f4&quot;&gt;study&lt;/label&gt;
      &lt;label for=&quot;f5&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;f5&quot; name=&quot;fav[]&quot; value=&quot;f5&quot;&gt;fishing&lt;/label&gt;
      &lt;label for=&quot;f6&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;f6&quot; name=&quot;fav[]&quot; value=&quot;f6&quot;&gt;other&lt;/label&gt;
    &lt;/span&gt;
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;th&gt;Favorite Other&lt;/th&gt;
  &lt;td&gt;
    &lt;input type=&quot;text&quot; id=&quot;favOther&quot; name=&quot;favOther&quot; value=&quot;&quot;&gt;
  &lt;/td&gt;
&lt;/tr&gt;</pre>
					<p>で、チェックボックスを含むグループには<strong>chktoggle_hoge_fuga</strong>のように</p>
					<ul>
					<li>hoge: トグルを発火させるためのチェックボックスのID</li>
					<li>fuga: チェックボックスの状態によって必須をトグルさせるinputのID</li>
					</ul>
					<p>この後説明しているアクティベート時にトグルを行うためのルールを入れておきます。これだけです。</p>
					<pre>$("form")
  .exValidation({
    rules: {
      fav: "chkgroup chktoggle_f6_favOther", // chktoggle_f6_favOther の部分
      favOther: "chkrequired"
    },
    stepValidation: true
  });</pre>
					<h3 id="install8">8. アクティベート</h3>
					<p>最後に任意のJSファイルで以下のように実行します。</p>
					<pre>$(function(){
&nbsp;&nbsp;$("form").validation();
});</pre>
					<h3 id="install9">9. アクティベート（ここでルールを指定する場合）</h3>
					<p>input要素に直接ルール（class）を指定しなくても、実行時に指定することができます。<strong>この方法のほうがHTMLを極力汚さないのでおすすめ</strong>です。（ちょっとだけ処理遅いですが）</p>
					<pre>$("form")
&nbsp;&nbsp;.exValidation({
&nbsp;&nbsp;&nbsp;&nbsp;rules: {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name: "chkrequired",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kana: "chkrequired chkkatakana",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;email: "chkrequired chkemail chkhankaku chkgroup",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pass: "chkrequired chkmin6 chkmax12",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;repass: "chkrequired chkretype-pass",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;radio: "chkradio",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkbox: "chkcheckbox"
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;});</pre>
					<p>上記のように、rulesというオプションで指定します。値はそれぞれ [id: rules] となります。</p>
					<h2 id="options">オプション</h2>
					<p>exValidationは汎用性を持たせるために色々なオプションがあります。</p>
					<table border="1" class="lftable">
					<tr>
					<th>オプション項目</th>
					<th>値</th>
					</tr>
					<tr>
					<td>rules</td>
					<td>classではなく、実行時に指定する場合 rules: { id, rules, &#8230; }</td>
					</tr>
					<tr>
					<td>errInsertPos</td>
					<td>エラーの挿入位置。デフォルトはbody直下、他に対象要素の前(before)と後ろ(after)</td>
					</tr>
					<tr>
					<td>err</td>
					<td>エラー時に実行するカスタム処理 function(target, id, message) {}</td>
					</tr>
					<tr>
					<td>ok</td>
					<td>処理が通ったときに実行するカスタム処理 funtion(target, id) {}</td>
					</tr>
					<tr>
					<td>errFocus</td>
					<td>エラーが表示されているとき、そのinput要素にfocusすると他のエラーにfadeOutというclassを付与する。デフォルトはfalse</td>
					</tr>
					<tr>
					<td>errHoverHide</td>
					<td>エラーにカーソルを乗せると非表示にする</td>
					</tr>
					<tr>
					<td>stepValidation</td>
					<td>複数個のエラーがある場合、ひとつひとつ処理する。デフォルトはfalse</td>
					</tr>
					<tr>
					<td>scrollToErr</td>
					<td>エラーがある場合、画面一番上のエラーまでスクロールする。デフォルトはtrue</td>
					</tr>
					<tr>
					<td>scrollDuration</td>
					<td>スクロールのduration</td>
					</tr>
					<tr>
					<td>scrollAdjust</td>
					<td>スクロール量の微調整。デフォルトは-10</td>
					</tr>
					<tr>
					<td>customScrollAdjust</td>
					<td>スクロール位置の指定。デフォルトはfalseで、<strong>数値または数値を返すfunctionを指定</strong></td>
					</tr>
					<tr>
					<td>errPosition</td>
					<td>errInsertPosがbodyならabsolute、before(after)ならfixedを指定する。デフォルトはabsolute</td>
					</tr>
					<tr>
					<td>errTipPos</td>
					<td>エラーの表示位置。errPositionがabsoluteのときのみ。左か右か。デフォルトはright</td>
					</tr>
					<tr>
					<td>errTipCloseBtn</td>
					<td>エラーに閉じるボタンを表示するかしないか。デフォルトはtrue</td>
					</tr>
					<tr>
					<td>errTipCloseLabel</td>
					<td>閉じるボタンのラベル。</td>
					</tr>
					<tr>
					<td>errZIndex</td>
					<td>エラーのzIndex。指定があるときのみ。デフォルトは500</td>
					</tr>
					<tr>
					<td>errMsgPrefix</td>
					<td>エラーメッセージの頭に付ける文字</td>
					</tr>
					<tr>
					<td>customAddError</td>
					<td>エラーがあるとき、スクロール前に実行する関数</td>
					</tr>
					<tr>
					<td>customClearError</td>
					<td>エラーがないとき、Submit前に実行する関数</td>
					</tr>
					<tr>
					<td>customSubmit</td>
					<td>デフォルトのポストバックをキャンセルして実行する。Ajaxで通信を行う場合は、ここで指定する</td>
					</tr>
					<tr>
					<td>customListener</td>
					<td>input要素などにbindするlistenerを変更できる</td>
					</tr>
					<tr>
					<td>customBind</td>
					<td>2つのボタンにbindする場合、もう一方はこちらで指定 { object: $(), listener: &#8216;hoge&#8217;, callback: function }</td>
					</tr>
					<tr>
					<td>customGetErrHeight</td>
					<td>その内追記します</td>
					</tr>
					<tr>
					<td>firstValidate</td>
					<td>デフォルトはfalseで、送信ボタンを押すまで実行しない。trueにすると、入力毎にバリデーションを行う</td>
					</tr>
					</table>
					<p>使い方は見てるだけだと分からないと思うので、具体的なサンプルを2つ用意してます。</p>
					<ul>
					<li><a href="http://5509.me/sample/exvalidation/">サンプル1: エラーを右上に表示</a></li>
					<li><a href="http://5509.me/sample/exvalidation/index2.html">サンプル2: エラーを下に表示</a></li>
					</ul>
					<h3 id="sample1">サンプルのパターン1</h3>
					<p><img class="alignnone size-full wp-image-2872" title="validation" src="http://5509.me/wp-content/uploads/2010/08/validation.png" alt="" width="450" height="202" /></p>
					<p><a href="http://5509.me/sample/exvalidation/">サンプル1</a>の形式で実行する場合は以下のようにします。（サンプルではrulesをオプションで指定しています）</p>
					<pre>$("form")
&nbsp;&nbsp;.exValidation({
&nbsp;&nbsp;&nbsp;&nbsp;rules: {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 略
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;stepValidation: true
&nbsp;&nbsp;});</pre>
					<h3 id="sample2">サンプルのパターン2</h3>
					<p><img class="alignnone size-full wp-image-2935" title="validation2" src="http://5509.me/wp-content/uploads/2010/08/validation21.png" alt="" width="450" height="201" /></p>
					<p><a href="http://5509.me/sample/exvalidation/index2.html">サンプル2</a>の形式で実行する場合は以下の通りです。errInsertPosとerrPositionを指定することでサンプル2のような形のエラー表示にすることができます。</p>
					<pre>$("form")
&nbsp;&nbsp;.exValidation({
&nbsp;&nbsp;&nbsp;&nbsp;rules: {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 略
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;errInsertPos: 'after',
&nbsp;&nbsp;&nbsp;&nbsp;errPosition: 'fixed'
&nbsp;&nbsp;});</pre>
					<h3 id="errfocus">errFocusを使う</h3>
					<p>errFocusを使うとエラーが出ている状態で対象要素にフォーカスすると、エラーチップ以外に[<strong>fadeOut</strong>]というclassを付与します。デフォルトでは<strong> .fadeOut { opacity: .2 } </strong>を指定しているので他のエラーが透ける感じですね。(ただしIEでは動作しません。。)</p>
					<p><img class="alignnone size-full wp-image-2936" title="validation3" src="http://5509.me/wp-content/uploads/2010/08/validation3.png" alt="" width="450" height="200" /></p>
					<p><a href="http://5509.me/sample/exvalidation/index4.html">errFocusのサンプル</a></p>
					<h3 id="ajaxpost">Ajaxでポストする</h3>
					<p>exValidationでは<strong>通常のポストバックに加え、customSubmitというオプションを使うことでAjaxによるポストや、その他独自のポストを行うことができます</strong>。customSubmit実行時は通常のポストバックはキャンセルされます。</p>
					<pre>$("form")
&nbsp;&nbsp;.exValidation({
&nbsp;&nbsp;&nbsp;&nbsp;customSubmit: function() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.ajax({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url: "data.php",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type: "POST",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataType: "json",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data: {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name: $("#name").val()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success: function(data) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(data);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;});</pre>
					<p>下記のサンプルで、エラーがない状態でポストすると、コンソールログにObjectが表示されます。（コンソールがある環境で確認してください）</p>
					<p><a href="http://5509.media-track.biz/project/validation/">Ajaxポストのサンプル</a></p>
					<h3 id="custombind">任意の要素にバリデーションをbindする</h3>
					<p>customBindを使うと<strong>任意のボタンぽい要素（例えばアンカーとか）にポスト時のバリデーションを付加</strong>することができます。ポスト内容はcallbackで設定します。</p>
					<pre>customBind: {
&nbsp;&nbsp;object: $(任意のhoge),
&nbsp;&nbsp;listener: '任意のpiyo',
&nbsp;&nbsp;callback: function() { /*実行したいfuga*/ }
}</pre>
					<p>例えば、日記を書くフォームがあったとして、<strong>通常のボタンに通常Ajaxポスト、プレビューボタンにはcustomBindでAjaxポスト、などのように使うことができます</strong>。</p>
					<pre>$("form")
&nbsp;&nbsp;.exValidation({
&nbsp;&nbsp;&nbsp;&nbsp;customBind: {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object: $('#submit'),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listener: 'click',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback: function() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('Fake POST');
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;});</pre>
					<p>サンプルではただのアンカー要素にcustomBindしています。</p>
					<p><a href="http://5509.me/sample/exvalidation/index5.html">customBindのサンプル</a></p>
					<h3 id="customError">エラー時に関数を実行する、エラーがない場合に関数を実行する、スクロール位置を固定する</h3>
					<h4 id="customAddError">エラー時に関数を実行する</h4>
					<p>エラーがあったときに関数を実行したい場合は<strong>customAddError</strong>を指定します。指定した関数はスクロール前に実行されます。</p>
					<h4 id="customClearError">エラーがない場合に関数を実行する</h4>
					<p>エラーがないときに関数を実行した場合は<strong>customClearError</strong>を指定します。指定した関数はsubmitやcustomSubmit前に実行されます。</p>
					<h4 id="customScrollAdjust">スクロール位置を固定する</h4>
					<p>スクロール位置を固定したい場合は、<strong>customScrollAdjust</strong>を指定します。customScrollAdjustはデフォルトはfalseになっていますが、<strong>数値または数値を返す関数を指定</strong>できます。</p>
					<p>この3つを一連の流れで実装したサンプルがありますので確認してください。</p>
					<pre>var validation = $("form")
&nbsp;&nbsp;.exValidation({
&nbsp;&nbsp;&nbsp;&nbsp;rules: {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 略
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;errInsertPos: 'after',
&nbsp;&nbsp;&nbsp;&nbsp;errPosition: 'fixed',
&nbsp;&nbsp;&nbsp;&nbsp;customAddError: function() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( $("#alert").length&lt;1 ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$("p.attention").before("&lt;div id=\"alert\"&gt;&lt;strong&gt;入力内容に誤りがあります。&lt;/strong&gt;&lt;/div&gt;");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;customClearError: function() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$("#alert").remove();
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;customScrollAdjust: function() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $("#alert").offset().top;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;});</pre>
					<p>ポイントは<strong>customScrollAdjustではcustomAddErrorで表示した追加エラー分のポジションを取得して返している</strong>ところでしょう。</p>
					<p><a href="http://5509.me/sample/exvalidation/index6.html">スクロール位置の固定やエラー時の追加関数のサンプル</a></p>
					<h2 id="api">API</h2>
					<p>実行時にインスタンスを指定しておくと、APIを利用することができます。</p>
					<pre>var validation = $('form').exValidation();</pre>
<table border="1" class="lftable">
<tr>
<td>API</td>
<td>値</td>
</tr>
<tr>
<td>laterCall</td>
<td>function(id) {} 任意のinput要素に対してバリデーションを任意のタイミングで行う</td>
</tr>
</table>
<h3>laterCall</h3>
<p>laterCallを使うと<strong>任意のタイミングで指定したフォーム要素をバリデーション</strong>できます。</p>
<pre>var validation = $('form').exValidation();
$('#button').click(function() {
&nbsp;&nbsp;validation.laterCall('#name');
});</pre>
					<p><a href="http://5509.me/sample/exvalidation/index3.html">laterCallのサンプル</a></p>
					<h3 id="selectable">jQselectableとの併用</h3>
					<p>laterCallを利用すると<a href="http://5509.me/log/jqueryselectable">jQselectable</a>と併用することができます。具体例は<a href="http://5509.me/sample/exvalidation/index.html">サンプル</a>を確認してください。</p>
					<pre>var validation = $("form").exValidation();
var selectable = $('#pref').selectable({
&nbsp;&nbsp;callback: function() {
&nbsp;&nbsp;&nbsp;&nbsp;validation.laterCall('#pref');
&nbsp;&nbsp;}
});</pre>
					<h2 id="reg">バリデーションルール</h2>
					<p><a href="https://github.com/5509/exValidation/blob/master/js/exchecker-ja.js">exChecker-ja.js</a>を読みこめば基本的なバリデーションは行えますが、独自のルールを使いたいときは、exChecker-ja.jsを修正、追記するか、新しいバリデーションルールを書いたファイルを読み込みます。バリデーションルールは以下のように定義します。</p>
					<pre>(function($) {
&nbsp;&nbsp;// Extend validation rules
&nbsp;&nbsp;$.extend(validationRules, {
&nbsp;&nbsp;&nbsp;&nbsp;chkretype: [
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'入力内容が異なります',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function(txt, t) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var elm = $('#'+$(t).attr('class').split('retype\-')[1].split(/\b/)[0]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( elm.hasClass('group') ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var chktxt = $('input', elm), txt = $('input', t);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ( var i=0, flag=false; i&lt;chktxt.length; i++ ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( chktxt[i].value==txt[i].value ) flag = true;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else flag = false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( flag ) return true;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return elm.val() == txt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;email: [
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'正しいメールアドレスの形式を入力してください',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/^[^\@]+?@[A-Za-z0-9_\.\-]+\.+[A-Za-z\.\-\_]+$/
&nbsp;&nbsp;&nbsp;&nbsp;]
&nbsp;&nbsp;});
})(jQuery);</pre>
					<p><strong>$.validationRules</strong>をextendする形でルールを記述します。バリデーションはclass名で行うので</p>
					<pre>class: [
&nbsp;&nbsp;"エラーメッセージ",
&nbsp;&nbsp;/RegExp/ or function(txt, t) {}
]</pre>
					<p>のようにハッシュのプロパティの中にメッセージとルールを配列として記述します。単純に正規表現だけでチェックするときは、<strong>Array[1]には/RegExp/</strong>、その中でさらに分岐などの条件を含む複雑なバリデーションルールの場合は、<strong>Array[1]にfunction(受け取るテキスト, 対象フォーム要素のid: 省略可) {}</strong>で記述します。</p>
					<h2 id="license">ライセンス</h2>
					<p>MITライセンスなので、ライセンス部分を改変しない限り個人商用問わず利用することができます。<br />
					ただし、不具合など発生しても作者は責任を負いませんのでご了承ください。</p>
					<h2 id="other">その他</h2>
					<p>たぶんバグとか潜んでるので、あればコメントやTwitterで教えてください。前のvalidation.jsもそうでしたが、利用してる人の支えで安定していくので、、よろしくお願いします。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=2864&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/exvalidation/feed</wfw:commentRss>
		<slash:comments>122</slash:comments>
		</item>
		<item>
		<title>[訂正:間違い] formのaction先が異なる文字コードのときに文字化けさせない</title>
		<link>http://5509.me/log/form-encoding</link>
		<comments>http://5509.me/log/form-encoding#comments</comments>
		<pubDate>Mon, 02 Aug 2010 12:10:00 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[memo]]></category>
		<category><![CDATA[文字コード]]></category>
		<category><![CDATA[文字化け]]></category>

		<guid isPermaLink="false">http://5509.me/?p=2847</guid>
		<description><![CDATA[					10.08.03追記：この記事を見てくれた方へごめんなさい、以下の内容は検索エンジン側が &#038;charset=UTF-8 でパラメータを受け付けるときのみに有効な方法でした。つまり間違いです。
				 [...]]]></description>
			<content:encoded><![CDATA[					<p class="attention" style="border: 2px solid rgb(226, 154, 27); padding: 5px 10px; background: none repeat scroll 0% 0% rgb(255, 255, 255);"><strong>10.08.03追記：この記事を見てくれた方へ</strong><br />ごめんなさい、以下の内容は<em>検索エンジン側が &#038;charset=UTF-8 でパラメータを受け付けるときのみに有効</em>な方法でした。つまり間違いです。</p>
					<p>サイトの検索で外部検索エンジンを使うときなど、<strong>サイトはUTF-8なのに用意された検索エンジンはShift_JIS、、のようにサイトと検索エンジン側の文字コードが違う</strong>、というのはよくある話で、そうすると文字化けを起こします。</p>
					<h2>hiddenパラメータで文字コードを送る</h2>
					<p>そういうときはhiddenパラメータで<strong>サイト側の文字コード</strong>を埋め込んでおくといいです。</p>
					<pre>&lt;input type="hidden" name="charset" value="UTF-8" /&gt;</pre>
<p>以下のようにform要素に入れておきます。</p>
<pre>&lt;form action="hogehoge"&gt;
&nbsp;&nbsp;&lt;input type="hidden" name="charset" value="UTF-8" /&gt;
&nbsp;&nbsp;&lt;input type="text" name"text" value="" /&gt;
&nbsp;&nbsp;&lt;input type="submit" value="submit" /&gt;
&lt;/form&gt;</pre>
					<h2>accept-charset属性</h2>
					<p>formのaccept-charsetという属性で<strong>検索エンジン側の文字コードを指定する</strong>ことでも回避できるようですが、IEが未対応なようで、実用的ではないです。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=2847&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/form-encoding/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>リンクが一斉に捕まえてごらーんな状態になるブックマークレット</title>
		<link>http://5509.me/log/runaway-bookmarklet</link>
		<comments>http://5509.me/log/runaway-bookmarklet#comments</comments>
		<pubDate>Thu, 01 Jul 2010 03:49:55 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Bookmarklet]]></category>
		<category><![CDATA[dt]]></category>
		<category><![CDATA[ネタ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=2820</guid>
		<description><![CDATA[					先日公開したリンクが逃げ回るjDTRunAwayをブックマークレットにしました。ブログやサイトの地雷リンクにいかがですか？鬱陶しいこと間違いないです。
					
					概要など
					リンクがマウスカ [...]]]></description>
			<content:encoded><![CDATA[					<p>先日公開したリンクが逃げ回る<a href="http://5509.me/log/jdtrunaway">jDTRunAway</a>をブックマークレットにしました。<strong>ブログやサイトの地雷リンクにいかがですか？</strong>鬱陶しいこと間違いないです。<br />
					<span id="more-2820"></span></p>
					<h2>概要など</h2>
					<p>リンクがマウスカーソルから逃げ回ります。それだけです。</p>
					<h3>注意とか</h3>
					<ul>
					<li>捕まえにくいやつもいれば簡単に捕まえられるやつもいます</li>
					<li>小さいやつは逃げ足が速いです注意。</li>
					<li>リンクが多ければ多いほど重くなります。</li>
					<li>IEだとだいたい重いです。</li>
					<li>Chromeでさくさく。</li>
					</ul>
					<h3>使い方</h3>
					<p>以下のリンクをブックマークバーにドラッグして、ブックマークバーからクリックするだけです。また、サイトのリンクに埋め込むことで、自分のサイトで使うこともできます。</p>
					<p><a href="javascript:(function(){var s=document.createElement('script');s.charset='UTF-8';s.src='http://5509.me/sample/bookmarklet/runaway.js'; document.body.appendChild(s)})();">つかまえてごらーん</a></p>
					<p>どんなものか分からない方は、とりあえず上のリンクをクリックしてみるといいです。</p>
					<h3>ブックマークレットのソース</h3>
					<pre>javascript:(function(){var s=document.createElement('script');s.charset='UTF-8';s.src='http://5509.me/sample/bookmarklet/runaway.js'; document.body.appendChild(s)})();</pre>
<h3>ソースコード</h3>
<p><a href="http://5509.me/sample/bookmarklet/runaway.js">RunAway.js</a></p>
<h2>うーん</h2>
<p>誰得プラグインシリーズは大体ブックマークレットのほうが面白かったのかもしれないとか思ったり思わなかったり。</p>
<h2>Thanks</h2>
<p>アニメーション部分のソースは<a href="http://twitter.com/hisasann">hisasann</a>さんが以下の記事で作成していたものを、許可を得て転用しています。</p>
<p><a href="http://hisasann.com/housetect/2009/04/jqueryrunawayfrommouse_part2.html">jQueryでマウスから逃げるRunAwayFromMouse書いてみた Part2 | HouseTect, JavaScript Blog </a></p>
<img src="http://5509.me/?ak_action=api_record_view&id=2820&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/runaway-bookmarklet/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ブログ記事でよく見られている箇所とかユーザーの動きを晒してみる</title>
		<link>http://5509.me/log/userheat-summary-math</link>
		<comments>http://5509.me/log/userheat-summary-math#comments</comments>
		<pubDate>Wed, 30 Jun 2010 01:36:39 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[UserHeat]]></category>
		<category><![CDATA[まとめ]]></category>
		<category><![CDATA[ユーザビリティ]]></category>

		<guid isPermaLink="false">http://5509.me/?p=2755</guid>
		<description><![CDATA[					
					ユーザーローカルさんのUserHeatというサービスを使っているのですが、マウスの動き・よくクリックされている箇所・どこがよく見られている等が一目で分かるので、ナビゲーションや記事の書き方の改善など [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/06/5509validation.png" alt="" title="5509validation" width="450" height="273" class="alignnone size-full wp-image-2764" /></p>
					<p><a href="http://www.userlocal.jp/">ユーザーローカル</a>さんの<a href="http://userheat.com/">UserHeat</a>というサービスを使っているのですが、マウスの動き・よくクリックされている箇所・どこがよく見られている等が一目で分かるので、ナビゲーションや記事の書き方の改善などに役立てることができますね。（<strong>全然役立てれてませんけど</strong>）<br />
					<span id="more-2755"></span></p>
					<h2>どこが見られてるの？</h2>
					<p>個人的に全然役に立てられていないこのUserHeatでの集計結果ですが、ひょっとしてひょっとすると誰かの役に立つかもしれないので晒して共有します。ただページが長くて全部入りきってないものがほとんどですけど…その辺は想像でカバーですね！</p>
					<p>ちなみにサムネイルは<strong>左から順にマウストラック、クリックマップ、ヒートマップ</strong>です。サムネイルクリックでフルサイズのキャプチャを開きます。</p>
					<p>あ、どなたか解析してくれる人募集してます。。</p>
					<h3>リアルタイムフォームバリデーション jQuery.validation.js</h3>
					<p><a href="http://5509.me/wp-content/uploads/2010/06/5509validation_mouse.jpg"><img src="http://5509.me/wp-content/uploads/2010/06/5509validation_mouse-150x150.jpg" alt="" title="5509validation_mouse" width="150" height="150" class="alignnone size-thumbnail wp-image-2759" /></a> <a href="http://5509.me/wp-content/uploads/2010/06/5509validation_click.jpg"><img src="http://5509.me/wp-content/uploads/2010/06/5509validation_click-150x150.jpg" alt="" title="5509validation_click" width="150" height="150" class="alignnone size-thumbnail wp-image-2757" /></a> <a href="http://5509.me/wp-content/uploads/2010/06/5509validation_heat.jpg"><img src="http://5509.me/wp-content/uploads/2010/06/5509validation_heat-150x150.jpg" alt="" title="5509validation_heat" width="150" height="150" class="alignnone size-thumbnail wp-image-2758" /></a></p>
					<p>自作プラグインの紹介ページで、ページ上部にダウンロードインストールなど主要セクションがあり、中盤以下は細かい使い方になってます。ありがたいことにダウンロードに集中してますね。ほんとありがとうございます。</p>
					<ul>
					<li><a href="http://5509.me/log/realtimeformvalidation">リアルタイムフォームバリデーションのアーカイブ</a></li>
					</ul>
					<h3>CMSとしてのWordPressでサイト構築をするときに便利な13のプラグイン</h3>
					<p><a href="http://5509.me/wp-content/uploads/2010/06/5509wp_mouse.jpeg"><img src="http://5509.me/wp-content/uploads/2010/06/5509wp_mouse-150x150.jpg" alt="" title="5509wp_mouse" width="150" height="150" class="alignnone size-thumbnail wp-image-2794" /></a> <a href="http://5509.me/wp-content/uploads/2010/06/5509wp_click.jpeg"><img src="http://5509.me/wp-content/uploads/2010/06/5509wp_click-150x150.jpg" alt="" title="5509wp_click" width="150" height="150" class="alignnone size-thumbnail wp-image-2792" /></a> <a href="http://5509.me/wp-content/uploads/2010/06/5509wp_heat.jpeg"><img src="http://5509.me/wp-content/uploads/2010/06/5509wp_heat-150x150.jpg" alt="" title="5509wp_heat" width="150" height="150" class="alignnone size-thumbnail wp-image-2793" /></a></p>
					<p>よくあるプラグインまとめページです。上の方からざっと見てブックマークして離脱、という行動パターンが多そうです。これは一番紹介したかった<a href="http://www.tinybeans.net/blog/download/wp-plugin/cfg-utility-100.html">Custom Field GUI Utility</a>にクリックが集中してるのでよかったパターンですね。</p>
					<ul>
					<li><a href="http://5509.me/log/using-wordpress-as-cms">CMSとして使うWordPressプラグインのアーカイブ</a></li>
					</ul>
					<h3>jQueryを使ったスライド開閉メニューをCookieでコントロールする</h3>
					<p><a href="http://5509.me/wp-content/uploads/2010/06/5509ctrl_mouse.jpeg"><img src="http://5509.me/wp-content/uploads/2010/06/5509ctrl_mouse-150x150.jpg" alt="" title="5509ctrl_mouse" width="150" height="150" class="alignnone size-thumbnail wp-image-2799" /></a> <a href="http://5509.me/wp-content/uploads/2010/06/5509ctrl_click.jpeg"><img src="http://5509.me/wp-content/uploads/2010/06/5509ctrl_click-150x150.jpg" alt="" title="5509ctrl_click" width="150" height="150" class="alignnone size-thumbnail wp-image-2797" /></a> <a href="http://5509.me/wp-content/uploads/2010/06/5509ctrl_heat.jpeg"><img src="http://5509.me/wp-content/uploads/2010/06/5509ctrl_heat-150x150.jpg" alt="" title="5509ctrl_heat" width="150" height="150" class="alignnone size-thumbnail wp-image-2798" /></a></p>
					<p>チュートリアル系の記事です。比較的下のほうまで見られてますね。ソースコード部分に集中してそうな感じなので、もっと補足コメント入れたほうがいいのかも。</p>
					<ul>
					<li><a href="http://5509.me/log/control-slide-navigation-with-jquery-cookie">アコーディオンナビゲーションのコントロールのアーカイブ</a></li>
					</ul>
					<h3>じわじわ便利なjQuery1.4で追加された機能いろいろ+α</h3>
					<p><a href="http://5509.me/wp-content/uploads/2010/06/5509jquery_mouse.jpeg"><img src="http://5509.me/wp-content/uploads/2010/06/5509jquery_mouse-150x150.jpg" alt="" title="5509jquery_mouse" width="150" height="150" class="alignnone size-thumbnail wp-image-2805" /></a> <a href="http://5509.me/wp-content/uploads/2010/06/5509jquery_click.jpeg"><img src="http://5509.me/wp-content/uploads/2010/06/5509jquery_click-150x150.jpg" alt="" title="5509jquery_click" width="150" height="150" class="alignnone size-thumbnail wp-image-2803" /></a> <a href="http://5509.me/wp-content/uploads/2010/06/5509jquery_heat.jpeg"><img src="http://5509.me/wp-content/uploads/2010/06/5509jquery_heat-150x150.jpg" alt="" title="5509jquery_heat" width="150" height="150" class="alignnone size-thumbnail wp-image-2804" /></a></p>
					<p>むしろ1.4の新機能よりも伝えたかったjQueryの機能部分が全然見られてないYO。。やっぱりおまけはおまけでしかない感じですね。書き方が悪いのか。。</p>
					<ul>
					<li><a href="http://5509.me/log/jquery1-4-plus-alpha">jQuery1.4の新機能とあんまり知られてない機能のアーカイブ</a></li>
					</ul>
					<h2>まとめ</h2>
					<p>はてなスターが面白いほど認知されてないｗ<br />
					たしかにデザインというか色味的にみえにくいですし。。それか左の記事メタ部分にその辺（SBM、Twitter含め）置いて、スクロールに付いてきたほうがクリックされそう。</p>
					<p>広告がもっと入ってるブログとか、実際のサイトの結果で見たらもっとおもしろいかもしれませんね。</p>
					<p>ちなみに<a href="http://userheat.com/">UserHeat</a>のトップページ下部にはサンプルとして、登録されているサイトの集計結果を一部見ることができる（そもそも集計結果のページはURLさえあれば誰でも見れます）ので、参考になりますよ。<a href="http://userheat.com/map/7219687d3c31843d35a44b2c_100032/heatmap/">nanapi</a>とか<a href="http://userheat.com/map/b26d2fa8f16d1902359059d2_100027/heatmap/">百式</a>の集計結果など参考になりそうです。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=2755&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/userheat-summary-math/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>知っておくべきjQueryオブジェクトの扱い</title>
		<link>http://5509.me/log/jquery-and-dom-object</link>
		<comments>http://5509.me/log/jquery-and-dom-object#comments</comments>
		<pubDate>Tue, 29 Jun 2010 05:48:09 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[memo]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://5509.me/?p=2735</guid>
		<description><![CDATA[					
					jQueryオブジェクトからDOM要素にアクセスする方法やメソッドで渡されるjQueryオブジェクトの扱いなど基本といえば基本ですが、再認識メモです。なので、タイトルは自分に覚えとけよってことです。 [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/06/jquerydom.png" alt="" title="jquerydom" width="327" height="246" class="alignnone size-full wp-image-2743" /></p>
					<p>jQueryオブジェクトからDOM要素にアクセスする方法やメソッドで渡されるjQueryオブジェクトの扱いなど基本といえば基本ですが、再認識メモです。なので、タイトルは自分に覚えとけよってことです。。<br />
					<span id="more-2735"></span></p>
					<h2>jQueryオブジェクトからDOMにアクセスする</h2>
					<p>$(&#8216;#id&#8217;)にすれば#idを取得できますが、この状態だとDOM要素を選らんでいる状態ではないので、DOM要素のプロパティにはアクセスできません。</p>
					<pre>$('#link').href
// これは無理</pre>
					<h3>1-1. $()[0]</h3>
					<p>要素を引数にしたjQueryオブジェクトはDOM要素が配列で格納されている状態なので</p>
					<pre>$('#link')[0]
// DOM要素の参照になる

console.debug($('#link')[0]);
// 評価結果 - DOM要素
// &lt;a id="link" href="llink.html"&gt;</pre>
					<p>とすることで配列の中からDOM要素を指定することができるので、プロパティにアクセスすることができます。</p>
					<pre>var href = $('#link')[0].href;
<del datetime="2010-06-29T07:01:49+00:00">// 以下と同じですけどね</del>
var href = $('#link').attr('href');</pre>
					<p><strong>※ 追記 10.06.29</strong><br />
					コメントいただきましたので追記します。上記は同じ値ではないようなので注意が必要です。（僕が注意します）</p>
					<blockquote><p>this.hrefはDOM上の記述に寄らずhttp://からのパスが返りますが、$(this).attr(&#8216;href&#8217;)はDOM上の記述に沿った内容が返ります。</p>
					<p>via: <a href="http://tech.kayac.com/archive/jquery-first-questions.html">jQueryを使い始めたときに感じる 13の疑問</a></p></blockquote>
					<h3>1-2. $().get(0)</h3>
					<p>そもそも配列だけを抜きたいときは.get()メソッドを使いますが.get(0)というように引数に0(index)を入れると上記と同じ効果が得られます。</p>
					<pre>$('#link')[0]
// ↑と↓は同じ意味
$('#link').get(0)

console.debug($('#link').get(0));
// 評価結果 - DOM要素
// &lt;a id="link" href="llink.html"&gt;</pre>
					<h2>jQueryオブジェクトに対してメソッドで渡されるthisの扱い</h2>
					<p>DOM要素の取得方法は上記の通りですが、$().each(function() {});のようにjQueryがもっているメソッドを実行する際、メソッド内で実行対象を受け取ることができます。ただ、この受け取れるthisについても補足しておくと、、</p>
					<h3>2-1. eachとかclickなどのjQueryメソッド内でのthis</h3>
					<p>これはちょっと肝なのですが、eachメソッドやclickメソッドなどのjQueryがもともと持っているメソッド内で渡されるthisはjQueryオブジェクトではないんですね。DOM要素になっています。要素が複数ある場合は配列として渡されます。</p>
					<pre>$('#link').each(function() {
    console.debug(this);
});

// 評価結果 - DOM要素になっている
// &lt;a id="link" href="llink.html"&gt;</pre>
					<p>※ 単一のjQueryオブジェクトに対してeach使うの気持ち悪いですけど、例ってことで。。</p>
					<h3>2-2. 自作メソッド内でのthis</h3>
					<p>2-1に対して、jQueryがもともと持っているメソッドに対して自作メソッド（プラグイン関数など）で渡されるthisはjQueryオブジェクトになっています。</p>
					<pre>$.fn.myMethod = function() {
    console.debug(this);
}
$('#link').myMethod();

// 評価結果 - jQueryオブジェクトとして渡される
// jQuery(a#link llink.html)</pre>
					<h2>つまり。。。</h2>
					<p>基礎はちゃんと押さえておかないと後で面倒くさいってことです。。</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=2735&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/jquery-and-dom-object/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>HootSuiteユーザは必須？(非)公式RTを超簡単に切り替えるGreasemonkey</title>
		<link>http://5509.me/log/hootsuite-rt-userscript</link>
		<comments>http://5509.me/log/hootsuite-rt-userscript#comments</comments>
		<pubDate>Mon, 28 Jun 2010 01:30:37 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Greasemonkey]]></category>
		<category><![CDATA[HootSuite]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[UserScript]]></category>

		<guid isPermaLink="false">http://5509.me/?p=2699</guid>
		<description><![CDATA[					
					先日のHootSuiteバージョンアップで公式RTと引用する形のRTを切り替えられるようになりましたね。今までは引用する形のRTしか使えなかったので少し不便でしたが、これで両方を使い分けられるように [...]]]></description>
			<content:encoded><![CDATA[					<p><img src="http://5509.me/wp-content/uploads/2010/06/hootsuite2.png" alt="" title="hootsuite" width="483" height="170" class="alignnone size-full wp-image-2715" /></p>
					<p>先日の<a href="http://hootsuite.com/">HootSuite</a>バージョンアップで<strong>公式RTと引用する形のRT</strong>を切り替えられるようになりましたね。今<strong>までは引用する形のRTしか使えなかった</strong>ので少し不便でしたが、これで両方を使い分けられるようになりました。なったんですけど、いちいち切り替えるのがかなり面倒くさくて、毎回同じことなんかやってられないです。</p>
					<p>そこで探していたところ<a href="http://twitter.com/h_kurosawa">@h_kurosawa</a>さんが<a href="http://tweet-code.appspot.com/code/20001">Bookmarklet</a>を公開してくれていたので、UserScript化させてもらいました。ChromeとFirefoxで動作確認してます。<br />
					<span id="more-2699"></span></p>
					<h2>インストール</h2>
					<p><strong>This script for Chrome and Firefox with Greasemonkey</strong></p>
					<ul>
					<li><a href="http://userscripts.org/scripts/source/80179.user.js">Install UserScript</a></li>
					</ul>
					<h2>使い方</h2>
					<p>インストールした状態でHootSuiteを開くとフッターに以下のようなチェックボックスが追加されています。引用する形のRTを「<strong>Web Retweet</strong>」、公式RTは「<strong>Official RT</strong>」の表記にしています。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/06/hootsuite_footer1.png" alt="" title="hootsuite_footer" width="215" height="49" class="alignnone size-full wp-image-2716" /></p>
					<p>これをクリックすることで公式RTに切り替えることができます。</p>
					<p><img src="http://5509.me/wp-content/uploads/2010/06/hootsuite_footer2.png" alt="" title="hootsuite_footer2" width="227" height="45" class="alignnone size-full wp-image-2719" /></p>
					<p>チェックした状態としてない状態でRTを試してみてください。簡単ですね！</p>
					<img src="http://5509.me/?ak_action=api_record_view&id=2699&type=feed" alt="" />
]]></content:encoded>
			<wfw:commentRss>http://5509.me/log/hootsuite-rt-userscript/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>マウスホバーでスムーズにjQueryのアニメーションをコントロールする方法</title>
		<link>http://5509.me/log/jquery-animate-que-tips</link>
		<comments>http://5509.me/log/jquery-animate-que-tips#comments</comments>
		<pubDate>Thu, 24 Jun 2010 01:45:52 +0000</pubDate>
		<dc:creator>nori</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[アニメーション]]></category>

		<guid isPermaLink="false">http://5509.me/?p=2661</guid>
		<description><![CDATA[					
					jQueryを使えば超簡単にアニメーションもできますし、フェード効果の実装も楽々できますね。簡単に実装できるので結構使ってるサイトを見ますが、カーソルを素早く乗せたり外したりするとチラチラすることが [...]]]></description>
			<content:encoded><![CDATA[					<p><a href="http://5509.me/sample/animationque/"><img src="http://5509.me/wp-content/uploads/2010/06/animation.png" alt="" title="animation" width="333" height="138" class="alignnone size-full wp-image-2669" /></a></p>
					<p>jQueryを使えば超簡単にアニメーションもできますし、フェード効果の実装も楽々できますね。簡単に実装できるので結構使ってるサイトを見ますが、カーソルを素早く乗せたり外したりするとチラチラすることが多いんですよね。</p>
					<p>何言ってるか文章だと伝わりにくいので、<a href="http://5509.me/sample/animationque/">サンプル1</a>を確認してみてください。</p>
					<p>どうでもいいっちゃどうでもいいのかも知れないですけど、こういう小さなこだわりって結構重要なんじゃないでしょうか。</p>
					<p>で、このチラチラ、簡単に解決できるので知らなかった人は覚えておくといいかもです。<br />
					<span id="more-2661"></span></p>
					<p>結論は簡単で</p>
					<ul>
					<li><strong>.stop(true, false)を.animate()の前に入れる</strong></li>
					<li><strong>.animate()メソッドのオプション部分でqueue: falseを指定する</strong></li>
					</ul>
					<p>のいずれかです。</p>
					<p>このときに.stop()メソッドを利用するのですが、.stop()メソッドには2つ引数を指定できて、引数の値で動作もちょっと変わったりします。実際に動作を見てもらったほうが早いのでサンプルを用意しました。</p>
					<p>サンプルと同じように順番に見ていきましょう。</p>
					<h2>1. そのまま</h2>
					<p><a href="http://5509.me/sample/animationque/#s2">サンプル1のボックス</a>に連続してホバーしてください。チラチラしますよね。</p>
					<h3>ソースコード</h3>
					<pre>$('#s1 div.box')
&nbsp;&nbsp;&nbsp;&nbsp;.hover(function()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(this).animate({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opacity:&nbsp;.5
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;duration:&nbsp;200
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})
&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;function()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(this).animate({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n
