<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
   <channel>
      <title>HouseTect, JavaScriptな情報をあなたに</title>
      <link>http://hisasann.com/housetect/</link>
      <description>Javascriptをメインに使っているプログラマーの技術ブログです。ちょっぴりアートでちょっぴりオモシロイものを作ってます。記事の内容はjQuery、jQueryMobile、HTML5、CSS3などなど…</description>
      <language>ja</language>
      <copyright>Copyright 2012</copyright>
      <lastBuildDate>Sun, 29 Jan 2012 15:23:14 +0900</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

      
      <item>
         <title>Vimをちゃんと使い始めてみる</title>
         <description><![CDATA[僕が大好きな<strong>TextMate</strong>のカラーテーマ<a href="http://www.monokai.nl/blog/2006/07/15/textmate-color-theme/" target="_blank">Monokai » Blog Archive » Textmate color theme</a>の<strong>Vim版</strong>があったので、もうこうなったらちゃんとやる！
Vimをちゃんとやる！
ということで、とりあえずやった設定と<strong>.vimrc</strong>と<strong>.gvimrc</strong>をメモしておく。

Vimはちょいちょい使ってみてはいるんですが、すぐにTextMateやWebStormなんかに浮気して、すぐに使わなくなって、また使う頃にはコマンドほとんど覚えていない現象に陥っているので、今後は小さなtxtファイルの編集でもなるべくVimを使って行ってみようと思う。
とはいえ、コーディングはTextMateになるんだとは思いますが...


<h2>vimのカラースキーマを変更する</h2>

僕はいっつもエディターをいじるときに色から入ります。
色がうまいこといかないと、ヘコみます。

XXX.vimファイルをダウンロードし、以下のディレクトリに配置する。


<h2>カラースキーマの保存場所 - windowsの場合</h2>

<blockquote>
$HOME/vimfiles/colors/
</blockquote>


<h2>カラースキーマの保存場所 - macの場合</h2>

<blockquote>
$HOME/.vim/colors/
</blockquote>


<h2>colorschemeを選ぶ</h2>

<a href="http://d.hatena.ne.jp/kattton/20110425/1303746056" target="_blank">新卒さんのための人気Vimカラースキーマランキング5+1(vim.org & github調べ) - 常識という迷信</a>
を参考に、<a href="http://www.vim.org/scripts/script.php?script_id=2340" target="_blank">molokai - A port of the monokai scheme for TextMate : vim online</a>にしてみました。

これはTextMateのほうで僕はこの色を使っているので、もうこれ以外考えられないです！
（<a href="http://www.monokai.nl/blog/2006/07/15/textmate-color-theme/" target="_blank">Monokai » Blog Archive » Textmate color theme</a>）

■参考リンク
<a href="http://nanasi.jp/articles/howto/config/colorscheme.html" target="_blank">カラースキーマの使い方 -- 名無しのvim使い</a>


<h2>.gvimrcにcolorschemeの設定を書く</h2>

<a href="http://d.hatena.ne.jp/kuri27/20110526/1306422757" target="_blank">MacVim-KaoriYaでcolorschemeの設定 - 脳みそHack</a>
これ毎回ハマるんですが、MacVim-KaoriYaの設定ファイルの読み込みの順番が

<blockquote>
<p><p><span class="highlight">MacVim</span>.app/Contents/Resources/vim/vimrc</p>
			<p>ホームフォルダ/.vimrc または _vimrc</p>
			<p><span class="highlight">MacVim</span>.app/Contents/Resources/vim/gvimrc</p>
			<p>ホームフォルダ/.gvimrc または _gvimrc</p></p>
<cite>via: <a href="http://d.hatena.ne.jp/kuri27/20110526/1306422757" target="_blank">MacVim-KaoriYaでcolorschemeの設定 - 脳みそHack</a></cite>
</blockquote>

なので、.vimrcに書いてもいまいちcolorschemeが反映されない。
なので、.gvimrcをtouchにしてここに、

<blockquote>
colorscheme molokai
</blockquote>

と記載します。
これでテーマがちゃんと反映されます。

また<a href="http://nanasi.jp/colorscheme.html" target="_blank">カラースキーマ -- 名無しのvim使い</a>にたくさんテーマがあるので、自分に合うのを探してみるのも楽しいかもしれません。


<h2>タブと全角スペースは色を変える</h2>

はじめ.vimrcのほうにいろいろと書いてためしてみたんですが、いっこうに全角スペースが可視化されなくてハマってて、
どうやら<strong>.gvimrc</strong>に書くのがいいみたい。

<a href="http://blog.blueblack.net/item_110" target="_blank">Vim初心者的導入メモ 2/3 「vimrc設定」編 - ナレッジエース</a>
から

<blockquote>
"全角スペースを視覚化
highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=#666666
au BufNewFile,BufRead * match ZenkakuSpace /　/
</blockquote>

を拝借。

タブの表示に関しては、<a href="http://d.hatena.ne.jp/potappo2/20061107/1162862536" target="_blank">vimでスペースやTabなどの見えない文字を表示させる方法 - Life is Try and Error</a>を参考にさせていただいた。

<blockquote>
"特殊文字(SpecialKey)の見える化。listcharsはlcsでも設定可能。
"trailは行末スペース。
set list
set listchars=tab:&gt;-,trail:-,nbsp:%,extends:&gt;,precedes:&lt;
</blockquote>

上記2つを.gvimrcに追記すればOK！

<hr>

<h2>Pluginを入れる</h2>


<h2>Zen-Coding</h2>

やっぱりZenがないと不便！

<a href="http://d.hatena.ne.jp/sakurako_s/20110126/1295988873" target="_blank">ZenCoding for Vim 導入方法（初心者さん向け） - sakurako_sの日記</a>


<h2>vimのプロセス間でのコピペ</h2>

<a href="http://d.hatena.ne.jp/tujikiri/20090225/1235540036" target="_blank">複数のvimプロセス間でコピペするためのplugin - while(1){die; respawn;}</a>

vimからTextMateへもペーストできるので便利！


<h2>vim-autocomplpop</h2>

<a href="http://d.hatena.ne.jp/rdera/20090113/1231819016" target="_blank">autocomplpop.vimを入れてやったこと-vimプラグイン - rderaログ</a>を見ながら入れてみた。
入力補完プラグイン。

<blockquote>
<p><p>C-pとかC-nで移動して、C-yで選択が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D5%A5%A9%A5%EB%A5%C8">デフォルト</a>みたいだけど。</p>
			<p>やはり、tabで移動したい。</p></p>
<cite>via: <a href="http://d.hatena.ne.jp/rdera/20090113/1231819016" target="_blank">autocomplpop.vimを入れてやったこと-vimプラグイン - rderaログ</a></cite>
</blockquote>

のタブ切り替えは非常に便利。

<hr>


<h2>便利機能</h2>


<h2>括弧とかダブルコート入力時に←に戻る</h2>

<a href="http://www.e2esound.com/wp/2010/11/07/add_vimrc_settings/" target="_blank">「もっと早く知りたかった」と思ったvimrc設定 - e2esound.com業務日誌</a>

この設定のおかげで今後のvimライフが大きく左右されるんだろうなー。

<textarea name="code" class="js">
imap {} {}<Left>
imap [] []<Left>
imap () ()<Left>
imap "" ""<Left>
imap '' ''<Left>
imap <> <><Left>
</textarea>

を.vimrcに追記すればOK！


<h2>Esc以外でノーマルモードに戻る方法</h2>

<a href="http://d.hatena.ne.jp/yuta84q/20101216/1292508997" target="_blank">Vimにおける Esc と Ctrl-cの違い。 - 備忘録 beta</a>の記事を読むと、

<ul>
	<li>Ctrl + c</li>
	<li>Ctrl + [</li>
</ul>

とこの2つの方法があるようですが、<strong>Ctrl + c</strong>のほうは、ちょっとクセがありそうなので、<strong>Ctrl + [</strong>が今後活躍しそうです。
でも、Escはちょっと遠いけど、慣れるとEscが一番速そう。

<hr>


<h2>.vimrc</h2>

<textarea name="code" class="js">
" 全般設定
" ---------------------
set nocompatible            " 必ず最初に書く
set viminfo='20,<50,s10,h,! " YankRing用に!を追加
set shellslash              " Windowsでディレクトリパスの区切り文字に / を使えるようにする
set lazyredraw              " マクロなどを実行中は描画を中断
set number
set ruler
set cmdheight=2
set laststatus=2
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P
set title
set linespace=0
set wildmenu
set showcmd

" コマンド補完
" ---------------------
set wildmenu           " コマンド補完を強化
set wildmode=list:full " リスト表示，最長マッチ

" syntax color
" ---------------------
syntax on
"colorscheme molokai	" .gvimrcに書かないと反映されないのでコメントアウト
highlight LineNr ctermfg=darkgrey

" search
" ----------------------
set ignorecase	" 大文字小文字無視
set smartcase	" 大文字ではじめたら大文字小文字無視しない
set wrapscan	" 最後まで検索したら先頭へ戻る
"set nowrapscan  " 検索をファイルの先頭へループしない
set hlsearch	" 検索文字をハイライト
"set incsearch

" edit
" ---------------------
set autoindent
set cindent
set showmatch			" 括弧の対応をハイライト
set backspace=indent,eol,start
set clipboard=unnamed
set pastetoggle=<F12>
set guioptions+=a

" tab
" --------------------
set tabstop=4		" tabstopはTab文字を画面上で何文字分に展開するか
"set expandtab		" タブを空白文字に展開
set smarttab
set shiftwidth=4
set shiftround
set nowrap

" backup
" --------------------
set backup
set backupdir=~/vim_backup
set swapfile
set directory=~/vim_swap
"set nobackup   " バックアップ取らない
"set autoread   " 他で書き換えられたら自動で読み直す
"set noswapfile " スワップファイル作らない
"set hidden     " 編集中でも他のファイルを開けるようにする

" doc
" --------------------
helptags ~/.vim/doc

" 文字コードの自動認識
if &encoding !=# 'utf-8'
  set encoding=japan
  set fileencoding=japan
endif
if has('iconv')
  let s:enc_euc = 'euc-jp'
  let s:enc_jis = 'iso-2022-jp'
  " iconvがeucJP-msに対応しているかをチェック
  if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'eucjp-ms'
    let s:enc_jis = 'iso-2022-jp-3'
  " iconvがJISX0213に対応しているかをチェック
  elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'euc-jisx0213'
    let s:enc_jis = 'iso-2022-jp-3'
  endif
  " fileencodingsを構築
  if &encoding ==# 'utf-8'
    let s:fileencodings_default = &fileencodings
    let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
    let &fileencodings = &fileencodings .','. s:fileencodings_default
    unlet s:fileencodings_default
  else
    let &fileencodings = &fileencodings .','. s:enc_jis
    set fileencodings+=utf-8,ucs-2le,ucs-2
    if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
      set fileencodings+=cp932
      set fileencodings-=euc-jp
      set fileencodings-=euc-jisx0213
      set fileencodings-=eucjp-ms
      let &encoding = s:enc_euc
      let &fileencoding = s:enc_euc
    else
      let &fileencodings = &fileencodings .','. s:enc_euc
    endif
  endif
  " 定数を処分
  unlet s:enc_euc
  unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has('autocmd')
  function! AU_ReCheck_FENC()
    if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0
      let &fileencoding=&encoding
    endif
  endfunction
  autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
  set ambiwidth=double
endif

" 括弧入力後に←に移動
imap {} {}<Left>
imap [] []<Left>
imap () ()<Left>
imap "" ""<Left>
imap '' ''<Left>
imap <> <><Left>

" plugin
" ---------------------
" yanktmp
map sy :call YanktmpYank()<CR>
map sp :call YanktmpPaste_p()<CR>
map sP :call YanktmpPaste_P()<CR>

" vim-autocomplpop
"<TAB>で補完
" {{{ Autocompletion using the TAB key
" This function determines, wether we are on the start of the line text (then tab indents) or
" if we want to try autocompletion
function! InsertTabWrapper()
        let col = col('.') - 1
        if !col || getline('.')[col - 1] !~ '\k'
                return "\<TAB>"
        else
                if pumvisible()
                        return "\<C-N>"
                else
                        return "\<C-N>\<C-P>"
                end
        endif
endfunction
" Remap the tab key to select action with InsertTabWrapper
inoremap <tab> <c-r>=InsertTabWrapper()<cr>
" }}} Autocompletion using the TAB key
</textarea>


<h2>.gvimrc</h2>

<textarea name="code" class="js">
colorscheme molokai

set textwidth=78
set columns=100
set lines=150

"特殊文字(SpecialKey)の見える化。listcharsはlcsでも設定可能。
"trailは行末スペース。
set list
set listchars=tab:>-,trail:-,nbsp:%,extends:>,precedes:<

" 全角スペースを視覚化
highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=#666666
au BufNewFile,BufRead * match ZenkakuSpace /　/
</textarea>

<a href="https://github.com/hisasann/vimrc" target="_blank">hisasann/vimrc - GitHub</a>

さぁて、Vimライフをおくりはじめますか！

追伸：Windowsでは<strong>Peggy</strong>というエディターをよく使っております！

■関連リンク
・<a href="http://tech.kayac.com/archive/vim-3-plugin.html" target="_blank">vimに欠かせない３つのプラグイン | tech.kayac.com - KAYAC engineers' blog</a>
・<a href="http://blog.blueblack.net/item_110" target="_blank">Vim初心者的導入メモ 2/3 「vimrc設定」編 - ナレッジエース</a>
・<a href="http://archiva.jp/web/tool/vimrc.html" target="_blank">vimrcを晒してみる - Archiva</a>
・<a href="http://relaxedcolumn.blog8.fc2.com/blog-entry-101.html" target="_blank">ぼちぼち散歩 おれの.vimrc</a>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774147958/hous-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/516K5O-bN8L._SL160_.jpg" alt="Vimテクニックバイブル　～作業効率をカイゼンする150の技" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774147958/hous-22/ref=nosim/" name="amazletlink" target="_blank">Vimテクニックバイブル　～作業効率をカイゼンする150の技</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4774147958/hous-22/ref=nosim/" title="Vimテクニックバイブル　～作業効率をカイゼンする150の技" target="_blank">amazlet</a> at 12.01.29</div></div><div class="amazlet-detail">Vimサポーターズ <br />技術評論社 <br />売り上げランキング: 43182<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774147958/hous-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>]]></description>
         <link>http://hisasann.com/housetect/2012/01/vim.html</link>
         <guid>http://hisasann.com/housetect/2012/01/vim.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">技術</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Editor</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Vim</category>
        
         <pubDate>Sun, 29 Jan 2012 15:23:14 +0900</pubDate>
      </item>
      
      <item>
         <title>さくらVPSでnginxをインストールしたときのメモ</title>
         <description><![CDATA[極々メモ的な感じで、エントリーにしとく。


<h2>apacheのリバースプロキシ用にmod_rpafのインストール</h2>

のちのち必要になるのでまずは<strong>mod_rpaf</strong>のインストールから。

<blockquote>
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xvzf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
</blockquote>

Makefileをちょっと書き換える。

<blockquote>
vi Makefile

-APXS2=$(shell which apxs)
+APXS2=/usr/sbin/apxs
</blockquote>

makeしてみる。

<blockquote>
make rpaf-2.0
sudo make install-2.0
</blockquote>

apxsがないとエラーが出たので、<strong>httpd-devel</strong>をインストール


<h2>httpd-develのインストール</h2>

<blockquote>
sudo yum install httpd-devel
</blockquote>

今度はhttpd-develを探しにいけなかったようなので、<strong>rpm</strong>を追加。

<blockquote>
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
Setting up Install Process
No package http-devel available.
Nothing to do
となったのでリポジトリを追加する
</blockquote>

適当なディレクトリでwgetしてrpmファイルをダウンロードしとく。
そしてrpmコマンドで登録します。

<blockquote>
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
wget http://rpms.famillecollet.com/el5.x86_64/remi-release-5-8.el5.remi.noarch.rpm
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

rpm -Uvh epel-release-5-4.noarch.rpm remi-release-5-8.el5.remi.noarch.rpm rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
</blockquote>

これで再度、

<blockquote>
sudo yum install httpd-devel
</blockquote>

実行したらうまく入った！


<h2>nginxのインストール</h2>

<blockquote>
sudo yum install nginx
</blockquote>

一応入ったことを確認しとく。

<blockquote>
yum list installed | grep nginx
</blockquote>


<h2>設定ファイルnginx.confの編集</h2>

<a href="http://havelog.ayumusato.com/develop/server/e198-nginx-with-apache.html" target="_blank">nginx+apacheでちょっぴり快適なWebサーバーを目指してみる(CentOS さくらのVPS) ::ハブろぐ</a>からごっそり参考にさせていただいた！

<textarea class="js" name="code">
sudo vi /etc/nginx/nginx.conf

server {
    listen       80;
    server_name  http://www28039u.sakura.ne.jp/;

	# いろいろ書いてある

	proxy_set_header    X-Real-IP       $remote_addr;
	proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header    Host            $http_host;
	proxy_redirect      off;
	proxy_max_temp_file_size    0;

	location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) {
		root    /var/www/;
		index   index.html;
		ssi     on;
		break;
	}

	location / {
		proxy_pass  http://127.0.0.1:8082;
		break;
	}

	# いろいろ書いてある
}
</textarea>


<h2>バーチャルホストvirtual.confの編集</h2>

<textarea class="js" name="code">
sudo vi /etc/nginx/conf.d/virtual.conf

server {
    listen       80;
    server_name  http://www28039u.sakura.ne.jp/;

    location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) {
        root    /home/hisasann/www/test;
        index   index.html;
        ssi     on;
        break;
    }

    location / {
        proxy_pass  http://127.0.0.1:8082;
        break;
    }
}
</textarea>


<h2>apacheのhttpd.confの編集</h2>

<textarea class="js" name="code">
sudo vi /etc/httpd/conf/httpd.conf

# 先ほど入れたmod_rpafちゃん
LoadModule rpaf_module modules/mod_rpaf-2.0.so

Listen 8082

&lt;VirtualHost 127.0.0.1:8082&gt;
	DocumentRoot /home/hisasann/www/test2
	ServerName test.example.com

	RPAFenable On
	RPAFsethostname On
	RPAFproxy_ips 127.0.0.1 10.0.0.1
	RPAFheader X-Forwarded-For
&lt;/VirtualHost&gt;
</textarea>

<a href="http://www.drk7.jp/MT/archives/000573.html" target="_blank">リバースプロキシを導入する際はmod_rpaf :: drk7jp</a>
<a href="http://doruby.kbmj.com/yablog/20100329/mod_rpaf_IP_" target="_blank">mod_rpafを使ったIPアドレスのアクセス制限</a>


<h2>apacheとnginxの再起動</h2>

<blockquote>
sudo /etc/init.d/httpd restart
sudo /etc/init.d/nginx restart
</blockquote>

こんなこともあるみたい。

<blockquote>
<p><div>nginxを再起動させます。
<br>
注意:このとき、sudo /etc/init.d/nginx restartを使わないこと。再起動しないことがよくありました。

</div>
<pre>sudo /etc/init.d/nginx stop
sudo /etc/init.d/nginx start</pre></p>
<cite>via: <a href="http://www26.atwiki.jp/nginx/pages/13.html" target="_blank">nginx @ ウィキ - nginx　バーチャルホスト</a></cite>
</blockquote>


<h2>実際にアクセスしてみる</h2>

アクセスしてみると、

/var/www/htmlに置いたhtmlはちゃんと表示されるのに、
自分で作成した/home/hisasann/www/test2に置いたファイルを開こうとしても、

(13)Permission denied: access to /index.html 

となってしまった。

原因は、途中のディレクトリのhisasannが<strong>700</strong>だったから！
<a href="http://d.hatena.ne.jp/ir9Ex/20061109/1163066167" target="_blank">apache を利用しての public_html が公開できない - 解 - いろきゅう.jp ～Programmable maiden～ Tech side</a>
<a href="http://labs.uechoco.com/blog/2008/01/linuxapachepermission_denied.html" target="_blank">[Linux]ApacheがPermission deniedを吐いてくる : うえちょこ＠ぼろぐ</a>
（結構これにハマッテいる人がいて、SELinuxというものが悪さしている場合もあるよう）

これで
静的ファイル
「http://www28039u.sakura.ne.jp/sample.jpg」
は<strong>/home/hisasann/www/test/</strong>にアクセスされ、
動的ファイル
「http://www28039u.sakura.ne.jp/test2.html」
は<strong>/home/hisasann/www/test2/</strong>にアクセスされるようになった。

まだ分からないことだらけですが、なかなか面白い！

■参考リンク
<a href="http://weble.org/2011/08/14/centos-config" target="_blank">さくら VPS + CentOS のチューニングや高速化もっとこうすれば良かった作業まとめ | ウェブル</a>
<a href="http://weble.org/2011/08/15/sakura-vps-nginx-apache" target="_blank">さくら VPS で 静的ファイルは nginx で動的ファイルは Apache で処理するための詳細設定 | ウェブル</a>
<a href="http://havelog.ayumusato.com/develop/server/e198-nginx-with-apache.html" target="_blank">nginx+apacheでちょっぴり快適なWebサーバーを目指してみる(CentOS さくらのVPS) ::ハブろぐ</a>
<a href="http://kray.jp/blog/nginx/" target="_blank">軽量高速Webサーバのnginxで静的コンテンツ配信とキャッシュコントロール | KRAY Inc</a>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048702270/hous-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51xpswg%2BkkL._SL160_.jpg" alt="ハイパフォーマンスHTTPサーバ Nginx入門" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048702270/hous-22/ref=nosim/" name="amazletlink" target="_blank">ハイパフォーマンスHTTPサーバ Nginx入門</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4048702270/hous-22/ref=nosim/" title="ハイパフォーマンスHTTPサーバ Nginx入門" target="_blank">amazlet</a> at 12.01.27</div></div><div class="amazlet-detail">Clement Nedelcu <br />アスキー・メディアワークス <br />売り上げランキング: 14072<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048702270/hous-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>]]></description>
         <link>http://hisasann.com/housetect/2012/01/vpsnginx.html</link>
         <guid>http://hisasann.com/housetect/2012/01/vpsnginx.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">技術</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Apache</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Sakura</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">nginx</category>
        
         <pubDate>Fri, 27 Jan 2012 02:09:48 +0900</pubDate>
      </item>
      
      <item>
         <title>書評 - jQuery Mobileポケットリファレンス</title>
         <description><![CDATA[<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774149829/hous-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51oH9apOTAL._SL160_.jpg" alt="jQuery Mobile ポケットリファレンス" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774149829/hous-22/ref=nosim/" name="amazletlink" target="_blank">jQuery Mobile ポケットリファレンス</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4774149829/hous-22/ref=nosim/" title="jQuery Mobile ポケットリファレンス" target="_blank">amazlet</a> at 12.01.27</div></div><div class="amazlet-detail">森 直彦 <br />技術評論社 <br />売り上げランキング: 6309<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774149829/hous-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>

技術評論社より献本いただきました。
ありがとうございます！

そして2012年一発目のエントリー！

<blockquote>
<p><h3>この本の概要</h3>
<p>スマートフォンやタブレットなどのモバイルデバイス向けWebフレームワークとして人気のjQuery Mobileの使い方を解説するリファレンスです。jQuery Mobileを利用すると，HTML5ベースのタグでページを記述するだけで，iPhone，iPadやAndroid，Windows Phoneなどの各種スマートフォン・タブレットに対応したサイトが構築できます。本書では，jQuery Mobileを使ったサイト制作の基本的な考え方と，jQuery Mobileが持つ，モバイルデバイスに最適化されたリッチな，各種部品の使い方をわかりやすく解説します。</p></p>
<cite>via: <a href="http://gihyo.jp/book/2012/978-4-7741-4982-0" target="_blank">書籍案内：jQuery Mobileポケットリファレンス｜gihyo.jp ... 技術評論社</a></cite>
</blockquote>

jQueryMobileのバージョン1がリリースされてまだ間もないですが、やっとこさ日本語の本が出始めて理解しやすくなってきたのかなと思います。
jQueryだけの知識だけでは、やはりjQueryMobileを使うこなすことは難しいので、こういったリファレンス的な書籍はありがたい。

では、目次を。

<h2>目次</h2>

<dl class="data">
	<dt>Chapter 1</dt>
	<dd>jQuery Mobile の基本</dd>
	<dt>Chapter 2</dt>
	<dd>
		サイトの基本設計
	</dd>
	<dt>Chapter 3</dt>
	<dd>
		リンク
	</dd>
	<dt>Chapter 4</dt>
	<dd>
		ダイアログボックス
	</dd>
	<dt>Chapter 5</dt>
	<dd>
		レイアウト
	</dd>
	<dt>Chapter 6</dt>
	<dd>
		ヘッダ
	</dd>
	<dt>Chapter 7</dt>
	<dd>
		フッタ
	</dd>
	<dt>Chapter 8</dt>
	<dd>
		ナビゲーションバー
	</dd>
	<dt>Chapter 9</dt>
	<dd>
		ボタン
	</dd>
	<dt>Chapter 10</dt>
	<dd>
		フォーム
	</dd>
	<dt>Chapter 11</dt>
	<dd>
		テキスト入力ボックス
	</dd>
	<dt>Chapter 12</dt>
	<dd>
		スライダー
	</dd>
	<dt>Chapter 13</dt>
	<dd>
		トグルスイッチ
	</dd>
	<dt>Chapter 14</dt>
	<dd>
		ラジオボタン
	</dd>
	<dt>Chapter 15</dt>
	<dd>
		チェックボックス
	</dd>
	<dt>Chapter 16</dt>
	<dd>
		セレクトメニュー
	</dd>
	<dt>Chapter 17</dt>
	<dd>
		カスタムメニュー
	</dd>
	<dt>Chapter 18</dt>
	<dd>
		リスト
	</dd>
	<dt>Chapter 19</dt>
	<dd>
		グローバル設定
	</dd>
	<dt>Chapter 20</dt>
	<dd>
		ページイベント
	</dd>
	<dt>Chapter 21</dt>
	<dd>
		タッチイベント
	</dd>
	<dt>Chapter 22</dt>
	<dd>
		仮想マウスイベント
	</dd>
	<dt>Chapter 23</dt>
	<dd>
		端末回転イベント
	</dd>
	<dt>Chapter 24</dt>
	<dd>
		スクロールイベント
	</dd>
	<dt>Chapter 25</dt>
	<dd>
		レイアウトイベント
	</dd>
	<dt>付録 A</dt>
	<dd>
		システム関数
	</dd>
	<dt>付録 B</dt>
	<dd>
		ボタンアイコン一覧
	</dd>
	<dt>付録 C</dt>
	<dd>
		テーマシステム
	</dd>
</dl>

ここまで網羅してくれているとjQueryMobile全体の把握にそう時間は掛からない。


<h2>ありがたい点 - その1</h2>

<blockquote>
	$.mobile.changePage
	$.mobile.loadPage
</blockquote>

といったシステム関数の引数を細かく解説してくれていること。
<strong>$.mobile.changePage</strong>の引数はアルファ時代から結構変わっているので、最新のバージョン1での解説は本当にありがたい。

これ意外にも<strong>$.mobile</strong>にはたくさんの便利関数があるが、それらについても書かれている。
というか知らないものも結構あったので、

別ページを独自に取得したいという需要は実際かなりあるので、このリファレンスがあれば開発がしやすいだろう。


<h2>ありがたい点 - その2</h2>

拡張セレクタ<strong>jqmData</strong>についても書かれていること。
これは、<strong>$.mobile.ns</strong>（ネームスペース）を加味したdata属性の取得に使うメソッドだが、これもちゃんと説明を受けないと理解できない。


<h2>ありがたい点 - その3</h2>

「自動的初期化を拒否する」という<strong>data-role="none"</strong>や<strong>$.mobile.page.prototype.options.keepNative</strong>についても細かく書かれています。
これは、コントロール要素をjQueryMobileに装飾させないための設定です。
独自デザインでサイトを設計する場合には、結構使います。


<h2>ありがたい点 - その4</h2>

仮想系のイベントについて書かれている。
<strong>vmousedown</strong>や<strong>vclick</strong>など、一見するとなんのイベントなんのか分からないですが、こういったイベントについても細かく書かれている。
また、vclickはclickイベントよりも反応が速いが、これについてのデメリットも記載されている。
（これは知らなかった！）


jQueryMobileを使ったことある方、まったく触ったことない方。
このどちらにも本書は役にたつと思います。


また著者である森直彦さんの以下のページには大変お世話になっている。
<a href="http://dev.screw-axis.com/doc/jquery_mobile/" target="_blank">jQuery Mobile 1.0 日本語リファレンス</a>

■関連記事
<a href="http://hisasann.com/housetect/2011/06/jquerymobilexss.html">jQueryMobileのXSSに関する調査メモ</a>
<a href="http://hisasann.com/housetect/2011/06/jquerymobile_1.html">jQueryMobileのかゆいところに手が届くお作法メモ</a>
<a href="http://hisasann.com/housetect/2011/02/jquerymobile.html">jQueryMobileを使ってのスマートフォンサイトの構築メモ</a>]]></description>
         <link>http://hisasann.com/housetect/2012/01/_-_jquery_mobile.html</link>
         <guid>http://hisasann.com/housetect/2012/01/_-_jquery_mobile.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">本</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Book</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Book Review</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">jQuery</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">jQueryMobile</category>
        
         <pubDate>Fri, 27 Jan 2012 00:04:18 +0900</pubDate>
      </item>
      
      <item>
         <title>iDance - Thank you Steve.</title>
         <description><![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="gamen.png" src="http://hisasann.com/housetect/2011/10/07/gamen.png" width="500" height="342" class="mt-image-none" style="" /></span>

<strong>webkitAudioContext</strong>を使って音とcanvasへの<strong>描画をシンクロ</strong>させてみました。
あまり情報が多くなく、試行錯誤でしたがなんとかそれっぽくなったと思います。

canvasへの描画は、<a href="http://paperjs.org/" target="_blank">Paper.js</a>を使いました。
これぐらいならライブラリを使う必要なかったのですが、Paper.jsが気になっていたのでとりあえず慣れるということで。

また、今回のこのアプローチは<a href="http://twitter.com/#!/ken_c_lo" target="_blank">ken_c_lo</a>さんからアイデアをいただきました。
画像の提供から配置までのデザインを担当してもらい、ありがとうございます！

この作品を<strong>スティーブ・ジョブズ</strong>氏に捧げます。


<h2>iDance - Thank you Steve.</h2>

Chromeでご覧ください。（音が出ます）
<a href="http://lab.hisasann.com/iDance/" target="_blank">iDance - Thank you Steve.</a>

■github
<a href="https://github.com/hisasann/iDance" target="_blank">hisasann/iDance - GitHub</a>

<h2>AudioDance</h2>

こちらはiDanceの元となった作品です。
スピーカー画像を使って表現してみました。是非こちらもご覧ください。
<a href="http://lab.hisasann.com/audioDance/" target="_blank">AudioDance</a>

■github
<a href="https://github.com/hisasann/AudioDance" target="_blank">hisasann/AudioDance - GitHub</a>


<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/1451648537/hous-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41TNSBq4F5L._SL160_.jpg" alt="Steve Jobs" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/1451648537/hous-22/ref=nosim/" name="amazletlink" target="_blank">Steve Jobs</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/1451648537/hous-22/ref=nosim/" title="Steve Jobs" target="_blank">amazlet</a> at 12.01.27</div></div><div class="amazlet-detail">Walter Isaacson <br />Simon & Schuster (2011-10-24)<br />売り上げランキング: 3<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/1451648537/hous-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>]]></description>
         <link>http://hisasann.com/housetect/2011/10/idance_-_thank_you_steve.html</link>
         <guid>http://hisasann.com/housetect/2011/10/idance_-_thank_you_steve.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Mac</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">技術</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">JavaScript</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Mac</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Webkit</category>
        
         <pubDate>Fri, 07 Oct 2011 10:53:51 +0900</pubDate>
      </item>
      
      <item>
         <title>さくらVPSにApacheをインストールする方法</title>
         <description><![CDATA[<h2>パッケージからインストールする</h2>

楽チン！

<blockquote>
[root]$ yum -y install httpd
[root]$ /etc/rc.d/init.d/httpd start
Starting httpd:                                            [  OK  ]
</blockquote>


<h2>自動起動にする</h2>

<blockquote>
[root]$ chkconfig httpd on
[root]$ chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
</blockquote>

3がonになっていればよい。

<blockquote>
[root]$ chkconfig --list
</blockquote>

これで自動起動の設定を確認できる


<h2>
	Apacheのバージョンを確認する
</h2>

<blockquote>
[root]$ rpm -qa httpd
</blockquote>

あとはhttpでアクセスしてApacheの画面が表示されてばOK！

[via]
<a href="http://www.vinelinux.org/manuals/chkconfig.html" target="_blank">26.3. chkconfigコマンドによる自動起動の設定</a>
]]></description>
         <link>http://hisasann.com/housetect/2011/07/vpsapache.html</link>
         <guid>http://hisasann.com/housetect/2011/07/vpsapache.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">技術</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Apache</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Sakura</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">VPS</category>
        
         <pubDate>Fri, 29 Jul 2011 02:34:59 +0900</pubDate>
      </item>
      
      <item>
         <title>さくらVPSを使うときの初期設定メモ</title>
         <description><![CDATA[むちゃくちゃザックリとして内容ですが、自分のために一応メモしとく。


<h2>何はともあれ接続する</h2>

パスワードはさくらインターネットから送られてくるメールに記載されている<strong>初期パスワード</strong>を入力する。

<blockquote>
[makbook]$ ssh root@IPアドレス
</blockquote>


<h2>真っ先にrootのパスワード変更する</h2>

<blockquote>
[root]$ passwd
Changing password for user root.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
</blockquote>


<h2>続いて今後メインに使っていくことになるユーザーを作成する</h2>

<blockquote>
[root]$ useradd username[Enter]
[root]$ passwd username[Enter]
Changing password for user username.
New UNIX password:[新しいパスワードを入力]
Retype new UNIX password:[新しいパスワードを再入力]
passwd: all authentication tokens updated successfully.

[root]$ usermod -G wheel username
</blockquote>


<h2>MacBookでSSH接続用のRSA鍵を作成する</h2>

<blockquote>
[makbook]$ ssh-keygen [Enter]
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa): [Enter]
Enter passphrase (empty for no passphrase): [好きなパスワードを入力]
Enter same passphrase again: [好きなパスワードを再入力]
Your identification has been saved in /Users/username/.ssh/id_rsa.
Your public key has been saved in /Users/username/.ssh/id_rsa.pub.
</blockquote>


<h2>作成したRSA鍵をサーバーにSCPでコピーする</h2>

<blockquote>
[macbook]$ cd .ssh
[macbook .ssh]$ scp id_rsa.pub [username]@[IPアドレス]:~/

[username]$ mkdir .ssh
[username]$ chmod 700 .ssh
[username]$ cat id_rsa.pub >> authorized_keys
[username]$ mv authorized_keys .ssh/
[username]$ cd .ssh
[username .ssh]$ chmod 600 authorized_keys
</blockquote>


<h2>MacBookからSSH接続の確認をする</h2>

ターミナルから、以下を入力する。

<blockquote>
ssh username@IPアドレス
</blockquote>

初回はRSA鍵を作成した時のパスワード入力を促されるけど、2回目からは聞かれない。


<h2>sudo設定の変更</h2>

作業用ユーザで sudo ができるよう設定を変更します。

<blockquote>
[root]$ visudo
%wheel  ALL=(ALL) ALL //コメントアウトを外す
</blockquote>


<h2>サーバーのSSH設定の変更</h2>

<blockquote>
[root]$ vi /etc/ssh/sshd_config

PermitRootLogin no # rootログイン禁止（一応明示的に） 
PasswordAuthentication no # パスワードでログイン禁止（公開鍵暗号オンリー）

[root]$ /etc/init.d/sshd restart
</blockquote>


<h2>sudoのログを取る</h2>

<blockquote>
[root]$ touch /var/log/sudo  
[root]$ chmod 600 /var/log/sudo

[root]$ visudo
### 末尾に以下を追記
Defaults syslog=local1

[root]$ vi /etc/syslog.conf
local1.*                                                /var/log/sudo		# 追加
local7.*                                                /var/log/boot.log

#*.info;mail.none;authpriv.none;cron.none               /var/log/messages	# コメントアウト
*.info;mail.none;authpriv.none;cron.none;local1.none    /var/log/messages	# 追加

[root]$ /etc/init.d/syslog restart

[root]$ tail /var/log/sudo
Apr 17 04:55:55 www28039u sudo: username : TTY=pts/0 ; PWD=/home/username ; USER=root ; COMMAND=/bin/su -
</blockquote>


<h2>SSHポート番号を変更する</h2>

<blockquote>
[username]$ sudo vi /etc/ssh/sshd_config
#Port 22
Port 10022

[username]$ sudo /etc/init.d/sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

[makbook]$ ssh username@IPアドレス -p 10022
</blockquote>


<h2>文字コードを日本語にする</h2>

<blockquote>
[root]$ vi /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"
</blockquote>

に変更して、ログアウトしてログインする

[via]
<a href="http://www.ideaxidea.com/archives/2010/10/centos_ja_jp.html" target="_blank">さくらのVPS（CentOS）で文字コードを日本語にする方法（もしくはlessで文字化けさせない方法） | IDEA*IDEA</a>


<h2>パッケージのアップデートをしとく</h2>

<a href="http://d.hatena.ne.jp/gamella/20090405/1238920311" target="_blank">Cent OSをインストールした後、「yum update」を行う前に必ず「yum install yum-fastestmirror」すること - Future Insight</a>に書かれているように、

<blockquote>
yum install yum-fastestmirror
</blockquote>

をやったらすでにインストールされてるって言われた。

<blockquote>
[root]$ yum -y update
</blockquote>

■参考リンク
<a href="http://akabeko.sakura.ne.jp/blog/2010/09/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEvps-%E3%82%92%E4%BD%BF%E3%81%84%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B/#vps01_root_user" target="_blank">さくらのVPS を使いはじめる | アカベコマイリ</a>
<a href="http://azurite.espel.jp/index.php/2011/04/03/sakuravps-mac-ssh/" target="_blank">さくらVPSにMacでSSH接続する初期設定 @ Eyes of Bastet</a>
<a href="http://d.hatena.ne.jp/rubellum/20100901/1283321253" target="_blank">「さくらのVPS」借りてみた（作業ユーザー作成，SSH設定） - Rubellum fly light</a>
<a href="http://blog.myfinder.jp/2010/09/vpsssh.html" target="_blank">myfinder's blog: さくらのVPSを借りたら真っ先にやるべきssh設定</a>
<a href="http://nullpopopo.blogcube.info/2008/01/syslogsudo.html" target="_blank">【syslog】sudoのログを分ける - nullpopopo</a>
<a href="http://akibe.com/2010/09/centos-setup-2-user/" target="_blank">AKIBE - さくらのVPS CentOSでサーバ構築 2 - User</a>]]></description>
         <link>http://hisasann.com/housetect/2011/07/vps.html</link>
         <guid>http://hisasann.com/housetect/2011/07/vps.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">技術</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Mac</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Sakura</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">VPS</category>
        
         <pubDate>Fri, 29 Jul 2011 02:29:54 +0900</pubDate>
      </item>
      
      <item>
         <title>jQueryMobileのXSSに関する調査メモ</title>
         <description><![CDATA[<h2>今回の原因</h2>

<a href="https://github.com/jquery/jquery-mobile/pull/1789" target="_blank">#1789: jQuery Mobile XSS Problem by jnlin for jquery/jquery-mobile - Pull Request - GitHub</a>に書かれているXSSが今回の内容。

これは以下のようなhash値をjQueryMobile側のhashchangeイベントがキャッチし、

<textarea class="html" name="code">
#&lt;img src=/ss onerror={alert('xss');}&gt;
</textarea>

<strong>$()関数</strong>にhash値を渡すところで発生するよう。

jQueryMobileの2488行目あたりの以下のコードがそれ。このコードは2360行あたりにも存在する。

<textarea class="js" name="code">
to = $( ":jqmData(url='" + url + "')" );
</textarea>

そして今回のjQueryのXSSに関する詳しい内容はmalaさんの記事を参考。
<a href="http://subtech.g.hatena.ne.jp/mala/20110624/1308881526" target="_blank">jQueryにおけるXSSを引き起こしやすい問題について - 金利0無利息キャッシング - キャッシングできます - subtech</a>
<a href="http://ma.la/jquery_xss/" target="_blank">new XSS pattern with jQuery</a>


<h2>jQueryMobileのXSSデモUrl</h2>

以下のURLを表示するとalertが表示されるのが分かる。

<strong>■1.0a4.1</strong>
<a href="http://jquerymobile.com/demos/1.0a4.1/#<img src=/ss onerror={alert('yy');}>" target="_blank">jQuery Mobile: Demos and Documentation</a>

またbeta1のほうでは、

<textarea class="js" name="code">
to = $( ":jqmData(url='" + url + "')" );
</textarea>

がなくなっており、hash値にimgタグを渡しても発生しない。

<strong>■1.0b1</strong>
<a href="http://jquerymobile.com/demos/1.0b1/#<img src=/ss onerror={alert('xss');}>" target="_blank">jQuery Mobile: Demos and Documentation</a>


<h2>jQueryのバグチケットを見てみる</h2>

<a href="http://bugs.jquery.com/ticket/9521" target="_blank">#9521 (XSS with $(location.hash) and $(#<tag>) is needed?) - jQuery Core - Bug Tracker</a>
ここに書いてある解決策である、

<textarea class="js" name="code">
-		quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+		quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
</textarea>

はうまくいかなかった。
これはコメント欄を読むと分かるが、「$("anychar&lt;img&gt;")」こうゆうパターンのときにダメのよう。
（何か他にも修正箇所が必要なのだろうか...）


<h2>malaさんのパッチを当てる！</h2>

ほんとありがたいことですが、こちらのパッチを使ってみたところうまくいきました！
<a href="https://gist.github.com/1038024" target="_blank">quick patch script for jQuery http://bugs.jquery.com/ticket/9521 -- Gist</a>

<script src="https://gist.github.com/1038024.js?file=jquery_patch.pl"></script>

こちらのPerlコードは、今回の問題になっているjQuery変数の<strong>quickExpr</strong>の内容を書き換えるものになります。
このパッチには過去古い時代のjQueryのquickExprも含まれているが、とりあえず以下に該当のバージョンのパッチを列挙してみました。

beta1のほうにバージョンアップできる場合は良いのですが、アルファ版とbeta版ではかなり動きや設定も違ってくるので、すぐに対応は難しいと思います。
<a href="http://blog.webcreativepark.net/2011/06/23-165144.html" target="_blank">jQuery MobileにXSSの脆弱性が見つかったのでアルファ版からベータ版に変更する際の注意点[to-R]</a>

とりあえずまだ他のXSSがあるかどうかや今回の件に関する不具合がすべて取り除かれたかの動作確認は出来ておりませんが、
まずはjQuery側を修正し、動作検証をして様子を見てみようと思います。


<h2>jquery1.2.6時代のquickExpr用</h2>

<textarea class="js" name="code">
-		quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,
+		quickExpr = /^(?:\s*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
</textarea>


<h2>jquery1.4.2時代のquickExpr用</h2>

<textarea class="js" name="code">
-		quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,
+		quickExpr = /^(?:\s*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
</textarea>


<h2>jquery1.5時代のquickExpr用</h2>

<textarea class="js" name="code">
-		quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,
+		quickExpr = /^(?:\s*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
</textarea>

いやはや、なかなか難しいもんですなー！

■参考リンク
・<a href="http://twitter.com/#!/bulkneets/status/83376734908596225" target="_blank">Twitter / @bulkneets: 冗談みたいな話ですけど旧バージョンのjQuery m ...</a>
・<a href="http://twitter.com/#!/bulkneets/status/83174006110437377" target="_blank">Twitter / @bulkneets: jQuery mobileのbeta 1がリリースさ ...</a>
・<a href="http://twitter.com/#!/bulkneets/status/83187603041562625" target="_blank">Twitter / @bulkneets: 旧バージョンのjQuery Mobileはじめ多くの ...</a>]]></description>
         <link>http://hisasann.com/housetect/2011/06/jquerymobilexss.html</link>
         <guid>http://hisasann.com/housetect/2011/06/jquerymobilexss.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">技術</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">HTML</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">JavaScript</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">XSS</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">jQuery</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">jQueryMobile</category>
        
         <pubDate>Mon, 27 Jun 2011 15:33:44 +0900</pubDate>
      </item>
      
      <item>
         <title>jQueryMobileのかゆいところに手が届くお作法メモ</title>
         <description><![CDATA[<a href="http://hisasann.com/housetect/2011/02/jquerymobile.html">jQueryMobileを使ってのスマートフォンサイトの構築メモ</a>の記事ではスマートフォン開発環境の構築に関するTipsとjQueryMobile（以降jqm）のちょっとした書き方に関する内容だったので、今回は「<strong>こうゆうときjqmではどうするの？</strong>」といったものをサンプルコードを交えてまとめてみようと思います。

サクッとデモだけ見たいーという方は<a href="http://lab.hisasann.com/jqm/" target="_blank">jQueryMobileのかゆいところに手が届くお作法メモ</a>からどうぞ。


<h2>jqmのページロード時イベントの呼ばれる順番</h2>

各イベントに関してはこちらのドキュメントを見ていただくとして、<a href="http://jquerymobile.com/demos/1.0a4.1/#docs/api/events.html" target="_blank">jQuery Mobile Docs - Events</a>。


<h2>初期ページのロード時の順番</h2>

<ol>
	<li>pagebeforecreate</li>
	<li>pagecreate</li>
	<li>pagebeforeshow</li>
	<li>pageshow</li>
</ol>


<h2>Ajaxページ遷移時の順番</h2>

遷移元のページを<strong>hide</strong>系のイベントで見えなくして、遷移先のページを<strong>show</strong>系のイベントで見えるようにしています。
その順番は以下のようになりました。

<ol>
	<li>pagebeforecreate</li>
	<li>pagecreate</li>
	<li>pagebeforehide</li>
	<li>pagebeforeshow</li>
	<li>pagehide</li>
	<li>pageshow</li>
</ol>

表示される前に何か事前に処理しときたい場合は、pagebeforeshowイベントで処理し、画面が表示された後に何かしたい場合は、pageshowイベントを使うとよいかもしれません。

<strong>■デモ</strong>
<a href="http://lab.hisasann.com/jqm/page/event-order.html" target="_blank">jqmイベントの呼ばれる順番</a>


<h2>$.mobile.changePageを独自に呼ぶ（get）</h2>

mobileinitイベント内で、<strong>$.mobile.ajaxEnabled</strong>に<strong>false</strong>をセットしています。
これが重要で、この設定をしておけばリンククリック時に勝手にAjaxページ遷移が<strong>されない</strong>ようになります。

<textarea class="js" name="code">
$(document).bind("mobileinit", function(){
	$.mobile.page.prototype.options.addBackBtn = false;
	$.mobile.ajaxEnabled = false;
});
</textarea>

あとはクリック時に<strong>$.mobile.changePage</strong>を呼んであげるだけですが、第4引数をtrueにしときます。
これでhash値が書き換えられるので履歴に残るようになります。

<textarea class="js" name="code">
$(function() {
	var count = 1;
	$(document).delegate(".changePage", "click", function(event) {
		$.mobile.changePage({
			url: "change-page-get2.html", 
			type: "get",
			data: "count=" + (count++)
		}, "slide", false, true, false);
	});
	$(document).delegate(".changePage", "click", function(event) {
		$.mobile.changePage({
			url: "test.html", 
			type: "get",
			data: "hoge=foo"
		}, "slide", false, true, false);
	});
});
</textarea>

「ajaxEnabledをtrueにした状態でリンクをクリックした場合」と、「changePageを独自に呼ぶ（get）でリンクをクリックした場合」とでは最終的に同じchangePageを呼ぶという意味では違いはほとんどありません。

そしてこのパターンのデメリットとしては、いろんなリンクをクリックしてAjaxページ遷移をしまくるとその分親となるbodyにどんどんHTMLがappendされて<strong>肥大</strong>していきます。
Ajaxページ遷移するボリュームがそこまででないなら問題はないと思いますが、いろんな条件を見ながら検索条件を絞り込むような画面だとこの遷移が頻繁に起こってしまうのでもしかすると重くなってしまうかもしれません。
（ページが肥大しないようにpostを使った方法を次でご紹介します。）

こちらのデモでは、毎回changePageするたびにカウントアップして別のページを読み込んでいると思わせています。
これで次の画面へ行って戻ってくると画面にはどんどんページが追加されていきます。

<strong>■デモ</strong>
<a href="http://lab.hisasann.com/jqm/page/change-page-get.html" target="_blank">$.mobile.changePageを独自に呼ぶ（get）</a>


<h2>$.mobile.changePageを独自に呼ぶ（post）</h2>

こちらのサンプルは$.mobile.changePageを独自に呼ぶ（get）とほとんど同じですが、changePageに渡すtypeが<strong>post</strong>になっています。
こうするとhash値はtest.htmlのままで、後ろにhoge=fooが付かないので、<strong>パラメータが可変</strong>でも常に<strong>1つのページ</strong>を読み込むだけという状態になります。

<textarea class="js" name="code">
$(function() {
	var count = 1;
	$(document).delegate(".changePage", "click", function(event) {
		$.mobile.changePage({
			url: "change-page-post2.html", 
			type: "post",
			data: "count=" + (count++)
		}, "slide", false, true, false);
	});
});
</textarea>

デモを触っていただくと分かりますが、getのときは画面遷移をするとページ数がどんどん増えていきましたが、postのパターンだと常に2個です。
2個というのは、初期に表示したページと次に読み込んだページの2つという意味です。

パーマリンクとしてhash値にパラメータをちゃんと持たせたいという場合には向きませんが、とくにそういった重要性がない場合はpostを考慮してみるのも一つの方法かもしれません。

<strong>■デモ</strong>
<a href="http://lab.hisasann.com/jqm/page/change-page-post.html" target="_blank">$.mobile.changePageを独自に呼ぶ（post）</a>


<h2>HTML装飾をjqmにさせない</h2>

まずはdata-role="page"のタグのdata-themeに適当な文字を入れておきます。
つまりthemeとしては存在しない文字列になります。

<textarea class="html" name="code">
&lt;section data-role="page" data-theme="sp" class="page"&gt;
</textarea>

これだけだと、コントロール系の要素は勝手に装飾されてしまうので、以下のように<strong>keepNative</strong>にCSSセレクターを指定しておきます。
以後はこのセレクターをclassに指定した要素は装飾されないようになります。

<textarea class="js" name="code">
$(document).bind("mobileinit", function(){
	$.mobile.page.prototype.options.keepNative = ".data-role-none";
});
</textarea>

<textarea class="html" name="code">
&lt;input type="text" name="name" id="name" value="" class="data-role-none"&gt;
</textarea>

<strong>■デモ</strong>
<a href="http://lab.hisasann.com/jqm/page/keep-native.html" target="_blank">HTML装飾をjqmにさせない</a>


<h2>page()でHTMLの装飾</h2>

「Ajaxでデータを取得して画面にappendするときにHTMLを装飾したい！」という場合にすごく有力なメソッドがこの<strong>page()</strong>です。
以下のサンプルのようにjqmのdata-roleを含んだHTMl文字列をappendして、page()を実行するとまるっと装飾されます。

便利！

<textarea class="js" name="code">
$(function() {
	$(document).delegate(".addPage", "click", function(event) {
		$(["<article data-theme='e'>",
				"<section data-role='content'>",
					"<h2>foo</h2>",
					"<ul data-role='listview' role='listbox' data-inset='true'>",
						"<li>hoge</li>",
						"<li>bar</li>",
					"</ul>",
					"<a href='#' data-role='button' data-icon='arrow-r' data-theme='a'>ぼたん</a>",
				"</section>",
			"</article>"].join(""))
			.appendTo($(".wrapper"))
			.page();
		});
});
</textarea>

<strong>■デモ</strong>
<a href="http://lab.hisasann.com/jqm/page/page.html" target="_blank">page()でHTMLの装飾</a>


<h2>buttonMarkup()でボタンの装飾</h2>

<strong>data-role</strong>に<strong>button</strong>を持つ要素を装飾したい場合は、この<strong>buttonMarkup()</strong>を使います。
でもぶっちゃけpage()すればいいんだと思います。

<textarea class="js" name="code">
$(function() {
	$(document).delegate(".addButton", "click", function(event) {
		$("<a>", {
			href: "#",
			"data-role": "button"
		})
		.html("追加されたよ")
		.appendTo($(".wrapper"))
		.buttonMarkup();
	});
});
</textarea>

<strong>■デモ</strong>
<a href="http://lab.hisasann.com/jqm/page/button-markup.html" target="_blank">buttonMarkup()でボタンの装飾</a>


<h2>listview()でリストの装飾</h2>

<strong>ul</strong>要素を含むHTMLを装飾したい場合は<strong>listview()</strong>を使い、<strong>li</strong>要素しかない場合は<strong>listview('refresh')</strong>を使います。
でもぶっちゃけpage()すればいいんだと思います。

<textarea class="js" name="code">
$(function() {
	$(document).delegate(".addUl", "click", function(event) {
		$( "<ul>", {
			"data-role": "listview",
			"data-inset": "true"
		})
		.append("<li>hoge</li>")
		.appendTo($(".ul-wrapper"))
		.listview();
	});

	$(document).delegate(".addLi", "click", function(event) {
		$(".ul-wrapper2")
			.append("<li>foo</li>")
			.listview('refresh');
	});
});
</textarea>

<strong>■デモ</strong>
<a href="http://lab.hisasann.com/jqm/page/listview.html" target="_blank">listview()でリストの装飾</a>


<h2>URLを変えずにAjaxページ遷移＋戻る</h2>

この需要は意外とあるんじゃないカナーと思うのですが、
たとえば詳細ページから写真の一覧を表示したいけど、hash値を変えるとブラウザバック時に写真一覧に戻っちゃうからヤダッ！
というケース。

Ajaxページ遷移で読み込んだページの戻るボタンは、jqmのものではなく独自の挙動にしたいので<strong>$.mobile.page.prototype.options.addBackBtn</strong>をfalseにしときます。

<textarea class="js" name="code">
$(document).bind("mobileinit", function(){
	$.mobile.page.prototype.options.addBackBtn = false;
	$.mobile.ajaxEnabled = false;
});
</textarea>

遷移元ページの進むと遷移先ページの戻るは同じchangePageを呼び出しますが、
戻るのほうは新たにAjaxページ遷移するのではなくすでに画面にロードされているPageに戻ればよいので第1引数には<strong>id（data-url）</strong>を指定します。
さらにトランジションとしては戻るアニメーションをしてほしいので、第3引数はtrueをセットしています。

そして第5引数にtrueをセットして、hash値が変わって呼ばれたということにします。
この引数は確かjQueryMobileのアルファ4からいつの間にか追加されてて<a href="http://jquerymobile.com/demos/1.0a4.1/#docs/api/methods.html" target="_blank">jQuery Mobile Docs - Methods</a>にも書かれていません。

<textarea class="js" name="code">
$(function() {
	$(document).delegate(".changePage", "click", function(event) {
		$.mobile.changePage({
			url: "test.html", 
			type: "post",
			data: "hoge=foo"
		}, "slide", false, false, false);
	});

	$(document).delegate(".reverse", "click", function(event) {
		$.mobile.changePage("detail", "pop", true, false, true);
	});
});
</textarea>

遷移元となるページのdata-role="page"のタグにはidを指定しておきます。
このidが戻るときのchangePageのtoになります。

<textarea class="html" name="code">
&lt;section data-role="page" data-theme="b" class="page" id="detail"&gt;
</textarea>

<strong>■デモ</strong>
<a href="http://lab.hisasann.com/jqm/page/no-change-url-ajax.html" target="_blank">URLを変えずにAjaxページ遷移＋戻る</a>


<h2>hashChangeイベントを自分で監視したい</h2>

以下のようにするだけです。

<textarea class="js" name="code">
$(document).bind("mobileinit", function(){
	$.mobile.hashListeningEnabled = false;
});
</textarea>

<strong>■デモ</strong>
<a href="http://lab.hisasann.com/jqm/page/hash-change.html" target="_blank">hashChangeイベントを自分で監視したい</a>


<h2>$.mobile.widgetでカスタムな要素を作る</h2>

jqmはチェックボックスやラジオボタンを自動的に装飾してくれますが、そういった処理を自分オリジナルに作ることができます。
以下の例ではHTML要素に対して<strong>marquee()</strong>というメソッドを呼ぶとその中にmarqueeタグが挿入されるだけのサンプルになります。

<textarea class="js" name="code">
(function($, undefined) {
	$.widget( "mobile.marquee", $.mobile.widget, {
		options: {
			behavior: "scroll"
		},

		_create: function(){
			this.refresh();
		},

		refresh: function() {
			var elem = this.element,
				o = this.options,
				html = elem.html();

			elem.empty();

			$("<marquee behavior='" + o.behavior + "'>" + html + "</marquee>").appendTo(elem);
		}
	});
})(jQuery);
</textarea>

jqmの装飾する処理はDom構築が終わったタイミングで$.mobile.page内から呼ばれる<strong>_enhanceControls</strong>メソッドにより行われますが、独自に作ったwidgetは呼ばれないので、readyになったタイミングで呼んであげる必要があります。（当たり前ですね）

そしてmarqueeの値を変更したあとに<strong>marquee("refresh")</strong>を呼んでいますが、↑のほうで見たことがある記述ですね。
そう！<strong>listview('refresh')</strong>と同じですね。

こうゆう感じでwidget化しとくとrefreshするだけで再装飾されるので便利かもしれません。

<textarea class="js" name="code">
$(function() {
	$(".custom-marquee").marquee({
		behavior: "scroll"
	});

	$(document).delegate(".changeValue", "click", function(event) {
		$(".custom-marquee")
			.html($("#value").val())
			.marquee("refresh");
	});
});
</textarea>

<strong>■デモ</strong>
<a href="http://lab.hisasann.com/jqm/page/custom-widget.html" target="_blank">$.mobile.widgetでカスタムな要素を作る</a>


<h2>$.mobileの拡張</h2>

jqmに特化したコードはjQueryのPluginとして作るとあとあと面倒かもしれないので、$.mobile配下に入れておくとよいかもしれません。

<textarea class="js" name="code">
$(document).bind("mobileinit", function(){
	$.extend($.mobile , {
		foo: "ふー",
		bar: "ばー",
		hoge: "ほげ"
	});
});
</textarea>

<strong>■デモ</strong>
<a href="http://lab.hisasann.com/jqm/page/extention.html" target="_blank">$.mobileの拡張</a>


<h2>僕のmobileinitイベント</h2>

最後に今僕が使っているmobileinitイベントの内容をご紹介。
といってもベタな感じではありますが。

<textarea class="js" name="code">
$(document).bind("mobileinit", function(){
	// 戻るボタンのラベル
	$.mobile.page.prototype.options.backBtnText = "戻る";

	// 戻るボタンを消す方法
	$.mobile.page.prototype.options.addBackBtn = true;

	// 読み込み中のメッセージ
	$.mobile.loadingMessage = "読み込み中...";

	// Ajaxでのページ取得に失敗した場合のメッセージ
	$.mobile.pageLoadErrorMessage = "ページの取得に失敗しました";

	// リンククリック時にAjaxする
	$.mobile.ajaxEnabled = true;

	// コントロールの装飾をしないためのセレクター
	$.mobile.page.prototype.options.keepNative = ".data-role-none";

	// デフォルトのAjaxページ遷移のトランジション
	$.mobile.defaultTransition = "slide";

	// data-position="fixed"で画面内のどこかをclickするとfixedが解かれちゃうので、それを阻止
	$.fixedToolbars.setTouchToggleEnabled(false);
});
</textarea>

個人的にひとつ重要なのが、<strong>$.fixedToolbars.setTouchToggleEnabled(false)</strong>です。

これは、headerやらfooterをfixedにした場合に画面内のどこかをタップするとfixedな要素が<strong>消えてしまう</strong>のを防ぎます。
多分ですが、スマホサイトでよく見るfixedな要素は広告が多く、これが常に追従してくるのはさすがにちょっとという人のためにfixedな要素を消すためにあるのかなーなんて思ってたりします。（違うか！）

広告でしたらサイト訪問者がどこかをタップしてfixedな要素を消すのはよいとは思うのですが、サイトとして重要な要素の場合はタップしようが何しようがfixedでいて欲しいと思うので、このプロパティは<strong>false</strong>にしとくのがよいかと思っています。


<h2>まとめ</h2>

これらのデモは<a href="http://lab.hisasann.com/jqm/" target="_blank">jQueryMobileのかゆいところに手が届くお作法メモ</a>から参照いただけます。

まだまだアルファ版なので仕様がどう変わるか分かりませんが、現時点でのjQueryMobileの完成度としては結構よいのではないかと思っています。
またそもそもデザインも何から何までjQueryMobileに依存するサイト製作は今後あまり浸透せず、イベント回りはjQueryMobile使うけどデザインは独自とかある程度関係性は疎結合として使われていくんじゃないかなーと。

いずれテーマをjQueryMobileのサイト上で作れるようになるとデザインの幅がグッと広がるので楽しみです！

これらのTipsがjQueryMobileを使うの人たち助けになれば幸いです。

<strong>■追伸：</strong>
vclickイベントって何もんなんだろう・・・

■関連記事
・<a href="http://hisasann.com/housetect/2011/02/jquerymobile.html">jQueryMobileを使ってのスマートフォンサイトの構築メモ</a>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048702181/hous-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51KBi%2B5mWoL._SL160_.jpg" alt="iPhone+Android スマートフォンサイト制作入門 (WEB PROFESSIONAL)" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048702181/hous-22/ref=nosim/" name="amazletlink" target="_blank">iPhone+Android スマートフォンサイト制作入門 (WEB PROFESSIONAL)</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4048702181/hous-22/ref=nosim/" title="iPhone+Android スマートフォンサイト制作入門 (WEB PROFESSIONAL)" target="_blank">amazlet</a> at 11.06.20</div></div><div class="amazlet-detail">たにぐちまこと <br />アスキー・メディアワークス <br />売り上げランキング: 784<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048702181/hous-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>]]></description>
         <link>http://hisasann.com/housetect/2011/06/jquerymobile_1.html</link>
         <guid>http://hisasann.com/housetect/2011/06/jquerymobile_1.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">技術</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Android</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">JavaScript</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">iPhone</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">jQuery</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">jQueryMobile</category>
        
         <pubDate>Mon, 20 Jun 2011 17:18:34 +0900</pubDate>
      </item>
      
      <item>
         <title>jQueryMobileを使ってのスマートフォンサイトの構築メモ</title>
         <description><![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="jQueryMobile2.jpg" src="http://hisasann.com/housetect/2011/02/28/jQueryMobile2.jpg" width="498" height="103" class="mt-image-none" style="" /></span>

徐々に<a href="http://jquerymobile.com/" target="_blank">jQuery Mobile</a>のバージョンが上がってきて、だいぶ動きもスピード感もいい感じになってきたので、
そろそろスマートフォンサイトの構築で採用されはじめているのではないでしょうか。
この記事では個人的に、<strong>どうやるのか分からなくて調べたこと</strong>をまとめてみました。

また最新の情報は、<a href="http://twitter.com/jquerymobile" target="_blank">jquerymobile (jquerymobile) on Twitter</a>をフォローしとくとよいかもしれません。

では、まずはスマートフォンサイトを構築するときにきっと役に立つTipsからご覧ください。


<h2>iPhoneシミュレータ</h2>

<h2>iPhoney</h2>

<strong>Mac</strong>を使っているならiPhoneyがピッタリでしょう。
かなり安定しているし、デザインや<strong>JavaScriptの動き</strong>もとくに問題ない。

要素の位置やCSSのデザインなどを確認するなら、これがあればよいかも。
最終的には実機で見る必要があるけど、とりあえずこれがあれば困らない。

<a href="http://www.marketcircle.com/iphoney/" target="_blank">iPhoney</a>


<h2>iBBDemo2</h2>

<strong>Windows</strong>版ならこれが主流なんですかね。
Safariが入っていないと動かないので、まずはSafariのインストールから。

でもSafariで見たときと、iBBDemo2で見たときでデザインの崩れ具合が結構違う。
iBBDemo2はJavaScriptの動きもちょっとおかしいので、実機でも見る前にチョロっと見る用なのかもしれません。

<a href="http://www.puresimstudios.com/ibbdemo/" target="_blank">iBBDemo2 - Cross Platform iPad and iPhone Simulator</a>


<h2>SafariでUAを変える</h2>

Safariの「<strong>開発メニュー</strong>」 → 「<strong>ユーザーエージェント</strong>」からiPhone、iPad、iPod Touchなどを選べるのでいずれかを選択。
これだけでスマホなUAになってくれるので、いろんなスマホサイトを見たい場合はこれが一番便利かもしれませんね。
Webインスペクタで要素のチェックなどもできるので便利！。


<h2>iPhone SDKに付いてくるiPhone Simulator.appを使う</h2>

<a href="https://developer.apple.com/devcenter/ios/index.action" target="_blank">iOS Dev Center - Apple Developer</a>
より「<strong>Xcode and iOS SDK</strong>」をインストールするとiPhoneシミュレーターが付いてくるので、これを起動します。

iPhoneプロジェクトを作ってビルドをすると自動で立ち上がるので、それを使ってもいいんですが毎回ビルドするのも面倒なので、
以下の場所にあるアプリを直接起動します。

<blockquote>
	/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app
</blockquote>

ちなみに僕のMacはまだ10.5を使っているので、最新のSDKを入れられません。
ゆえに、iPhoneシミュレーターもちょっと古い？ためか実機とCSSの当たり方が少し違いました。

[via]
<a href="http://mtl.recruit.co.jp/blog/2008/11/iphonesafari.html" target="_blank">iPhoneシミュレーターを試す。Safariがサクサク、日本語入力も可 : Media Technology Labs (MTL) : メディアテクノロジーラボ　ブログ</a>


<h2>Androidシミュレータ</h2>

<h2>Androidエミュレータのインストール方法</h2>

かなり重いが一応Androidのエミュレータ入れたい人向け。
以下の記事を参考にすればできると思います（Mac版）

<a href="http://mtl.recruit.co.jp/blog/2010/01/android_webkit.html" target="_blank">Android エミューレータで WebKit ウェブブラウザを起動する手順 : Media Technology Labs (MTL) : メディアテクノロジーラボ　ブログ</a>
<a href="http://mtl.recruit.co.jp/blog/2010/05/android_21_nexus_onehtc_desire.html" target="_blank">Android 2.1 エミュレータのインストール手順 (Nexus One/HTC Desire) : Media Technology Labs (MTL) : メディアテクノロジーラボ　ブログ</a>

ちなみにこのエミュレータのブラウザから<strong>127.0.0.1</strong>や<strong>localhost</strong>ではローカルのWebサーバーに接続することができない。

<blockquote>
<p>実はエミュレータ環境からではエミュレータが「localhost」なので、<br>自マシンには仮想的なネットワークアドレスが振り分けられているそうな</p>
<cite>via: <a href="http://choooose.blog118.fc2.com/blog-entry-38.html" target="_blank">愛は祈りだ [android]エミュレータからホストPCのサーバーに接続する</a></cite>
</blockquote>

なので、「http://<strong>10.0.2.2</strong>/」や「http://IPアドレス」でアクセスする必要がある。

<blockquote>
10.0.2.2 Special alias to your host loopback interface (i.e., 127.0.0.1 on your
development machine)
<cite>via: <a href="http://developer.android.com/guide/developing/tools/emulator.html" target="_blank">Android Emulator | Android Developers</a></cite>
</blockquote>

割と楽に確認できるAndroidシミュレータないですかね？


<h2>スマートフォン対応サイトのまとめ</h2>

こうゆうふうにまとめてくれてるのは本当にありがたいことですわよ！
何か構想を練りたいときは、以下をダラダラ見てると何か閃くかも。

<ul>
	<li><a href="http://sp-web.jp/" target="_blank">スマートフォンサイト集めました。</a></li>
	<li><a href="http://www.ishowcase.jp/" target="_blank">iShowcase - 国内のiPhone / iPad最適化対応をしたサイトを集めています</a></li>
	<li><a href="http://design.web-hon.com/" target="_blank">参考にしたい優れたiPhone(スマフォ)Webデザイン集 - iPhoneデザインボックス</a></li>
	<li><a href="http://iphonedesignarchive.jp/" target="_blank">iPhoneサイトデザイン集のiPhoneデザインアーカイブ　公式サイト</a></li>
	<li><a href="http://ascii.jp/elem/000/000/590/590502/" target="_blank">ASCII.jp：絶対見ておきたい有名企業のスマホサイトまとめ</a></li>
</ul>


<h2>スマートフォン向けなJavaScriptライブラリ</h2>

<ul>
	<li><a href="http://jquerymobile.com/" target="_blank">jQuery Mobile | jQuery Mobile</a></li>
	<li><a href="http://code.google.com/p/iui/" target="_blank">iui - Project Hosting on Google Code</a></li>
	<li><a href="http://www.sencha.com/" target="_blank">Sencha - Mobile JavaScript - Ext JS, Ext GWT and Sencha Touch</a></li>
	<li><a href="http://joapp.com/" target="_blank">Jo HTML5 Mobile App Framework</a></li>
	<li><a href="http://the-m-project.net/" target="_blank">The-M-Project</a></li>
	<li><a href="http://coliss.com/articles/build-websites/operation/javascript/js-framework-dhtmlx-touch.html" target="_blank">[JS]モバイル・タッチデバイス用のアプリケーションを構築するためのJavaScriptのフレームワーク -DHTMLX Touch | コリス</a></li>
	<li><a href="http://www.winktoolkit.org/" target="_blank">Wink toolkit - A mobile JavaScript framework to build great webapps</a></li>
</ul>

こんだけいろいろとあるとどれが一番いいとかはないとは思いますが、すでにjQueryの知識がある方ならjQuery Mobileが使いやすいと思います。


<h2>ホームアイコンをオリジナルなものにする</h2>

<strong>apple-touch-icon.png</strong>というファイルをサイトのルートに置くか、metaタグへの指定で実現できます。

<textarea class="html" name="code">
&lt;link rel="apple-touch-icon" href="/images/apple-touch-icon.png"&gt;
</textarea>

<blockquote>
<p>大きさは57pixel*57pixelがピッタリサイズなのですが、Yahooやアップルなどは129pixel*129pixel程度に作っておき、高精度のアイコン表示を行っています。なお、角丸やテカリ処理はiPhone側で自動で行ってくれます。</p>
<cite>via: <a href="http://ameblo.jp/linking/entry-10766619832.html" target="_blank">WebのスキルでiPad/iPhoneアプリ風のWebアプリ作成のまとめ｜本を買わずに解決するWeb制作の小技</a></cite>
</blockquote>


<h2>フルスクリーンモードにする</h2>

<textarea class="html" name="code">
&lt;meta name="apple-mobile-web-app-capable" content="yes"&gt;
</textarea>

<strong>Webクリップ</strong>から起動すると「ブックマーク追加」などがあるツールバーを非表示にできます。

またこのタグを指定した場合に、window.onorientationchangeがうまく発生しないという記述が以下のリンクに書いてあるが、iPhone3G（iOS4.2.1）ではうまくfireされた！
<a href="http://wiki.sohaya.com/index.php/%E7%94%BB%E9%9D%A2%E8%A1%A8%E7%A4%BA%E9%96%A2%E4%BF%82#v02287b6" target="_blank">画面表示関係 - iPhone 3G DevWiki</a>

さらに以下の記事がちょっと目からウロコだったんですが、Webクリップから起動した際に、aタグで画面遷移しようとすると<strong>Safariが起動しちゃう問題</strong>に書かれているんですが、これまったくもって知らなかったです。
あと、戻るボタンとかが非表示になっているので、戻るボタン必須だよね！という話もされています。

<strong>戻るボタン問題</strong>のほうはなんとかするとして、<strong>aタグの問題</strong>はjQuery Mobileを使っていれば大丈夫だと思います。
jQuery Mobileはaタグのclickイベントにフックして、外部リンクやrel="external"なリンクの場合には、location.href = urlとしてくれているので、Safariが起動しちゃうことはなさそうです。
この<strong>location.href = url</strong>というところがポイントみたいです。

<a href="http://d.hatena.ne.jp/izit_kosuke/20110219/1298073430" target="_blank">スマホサイト：Webアプリモードで意外と書かれていない落とし穴 - Kaleidoscope</a>


<h2>ステータスバーを黒または半透明にする</h2>

<textarea class="html" name="code">
&lt;meta name="apple-mobile-web-app-status-bar-style" content="black/black-translucent/default"&gt;
</textarea>

<strong>Webクリップ</strong>から起動すると「キャリア表示」などがあるステータスバーを黒または半透明にできます。
指定できるのは以下のいずれか。

<ul>
	<li>black</li>
	<li>black-translucent</li>
	<li>default</li>
</ul>

このタグは<strong>フルスクリーンモードにする</strong>で解説したタグと合わせて使うみたいです。

[via]
<a href="http://wiki.sohaya.com/index.php/%E7%94%BB%E9%9D%A2%E8%A1%A8%E7%A4%BA%E9%96%A2%E4%BF%82#v02287b6" target="_blank">画面表示関係 - iPhone 3G DevWiki</a>


<h2>URL - 検索バーを消す方法</h2>

アドレスバーを消す方法が、window.scrollToでY軸方向に1pxずらすのが主流っぽい。

<textarea class="js" name="code">
window.addEventListener('load', function () {
	setTimeout(doScroll, 100);
}, false);

// iPhoneを回転させた場合にもステータスバーを消す
window.onorientationchange = function() {
	setTimeout(doScroll, 100);
};

function doScroll() {
	if (window.pageYOffset === 0) {
		window.scrollTo(0, 1);
	}
}
</textarea>

こんな感じでonload時とonorientationchange時に毎回scrollToしてあげればうまいことアドレスバーが隠れてくれた。
また、jQueryMobileを使うとonload時にscrollToしてくれるが、onorientationchange時にはしてくれてないみたいなので、自分でイベントをセットする必要があるかなー。（jQuery Mobile v1.0a3）

[via]
<a href="http://design.kayac.com/topics/2009/11/iphone-tmpl.php" target="_blank">iPhone Webアプリテンプレート（CSS Nite Vol.40 reprise） | KAYAC DESIGNER'S BLOG - カヤックの意匠部によるデザインやマークアップの話</a>


<h2>数字を電話番号のリンクにしない</h2>

<dl class="data">
	<dt>iOS 4.2.1</dt>
	<dd>OK</dd>
	<dt>Android 2.1</dt>
	<dd>NG</dd>
</dl>

iPhoneのSafariの挙動で、数字を自動的に判別し電話番号とみなす場合があります。
ただし、これは電話番号だけではなく<strong>小数点</strong>（3.141592）や<strong>IPアドレス</strong>（192.168.1.1）なども電話番号とみなして、リンクにしてしまうようなので、これを防ぐために以下のようにmetaタグで無効にしておいて、

<textarea class="html" name="code">
&lt;meta name="format-detection" content="telephone=no"&gt;
</textarea>

telto:で明示する方法がよさそうです。

<textarea class="html" name="code">
&lt;a href="telto:090-1234-1234"&gt;090-1234-1234&lt;/a&gt;
</textarea>

[via]
<a href="http://labs.unoh.net/2011/01/small-tips-for-iphone-web-pages.html" target="_blank">ウノウラボ by Zynga Japan: iPhone向けのサイトを作るときのちょっとした気配り</a>


<h2>タップされた場所をハイライトする</h2>

<dl class="data">
	<dt>iOS 4.2.1</dt>
	<dd>OK</dd>
	<dt>Android 2.1</dt>
	<dd>OK</dd>
</dl>

これを使うか使わないかでかなりユーザビリティが変わってくると思います。
タッチしたときに該当リンクをハイライトしてくれるので、誤って他のリンクをタッチしてしまうミスを防ぐ手助けをしてくれます。

<textarea class="css" name="code">
-webkit-tap-highlight-color:rgba(255,0,0,0.40);
</textarea>

[via]
<a href="http://labs.unoh.net/2011/01/small-tips-for-iphone-web-pages.html" target="_blank">ウノウラボ by Zynga Japan: iPhone向けのサイトを作るときのちょっとした気配り</a>


<h2>iPhone4の解像度に画像を対応させる</h2>

iPhone4はiPhone3GSよりも解像度が2倍のため、等倍の画像がぼやけて表示されていまうことがあります。
これを解決するために、

<ul>
	<li>画像を2倍のサイズで作っておいて、半分のwidthとheightで表示する（3GSに重いサイズの画像をダウンロード意味がない）</li>
	<li>3GSの場合は等倍サイズ、4の場合は2倍のサイズを半分で表示する（CSS3のメディアクエリを使う。ちょっとだめ面倒かな）</li>
	<li>我慢する</li>
</ul>

以下のリンクでかなり詳しく書かれているので、どういった方法を採用するかと考える必要がありますね。
小さい画像でしたら等倍でもあんまり気にならないかもしれませんが、少し大きめなバナーの場合はこういった手法を考慮する必要があるかもです。

<a href="http://design.kayac.com/topics/2010/08/iphone4-retina-web.php" target="_blank">【Webアプリ】iPhone4 で画像をきれいに表示する色々な方法【試行錯誤編】 | KAYAC DESIGNER'S BLOG - カヤックの意匠部によるデザインやマークアップの話</a>


<h2>MobileSafariでposition:fixedがうまく機能しない</h2>

どうもiPhoneのSafariで<strong>position:fixed</strong>が効かないみたいです。
たしかに、いろんなサイトをiPhoneで見ているとfixedではなく<strong>追従</strong>や<strong>ふんわり消してからふんわり表示する</strong>方法を採用しているところが多いです。

以下にこの現象のことが書かれていて、
<a href="http://capeknote.jp/blog/?p=431" target="_blank">MobileSafariのposition:fixedが厄介すぎる件 - capeknote</a>

<ul>
	<li>iscroll.js をつかう</li>
	<li>Sencha Touch (Ext.js 有料) をつかう</li>
</ul>

という案があるそうです。

<a href="http://cubiq.org/iscroll" target="_blank">iScroll</a>はデモを見ればそのすごさが分かりますが、Senchaのほうは試していないのでよくわかっていないです。

個人的には、jQueryMobileの機能で代用するのがいいんじゃないかな〜と思っています。
<a href="http://jquerymobile.com/demos/1.0a3/#docs/toolbars/bars-fixed.html" target="_blank">jQuery Mobile: Demos and Documentation</a>

作りこんでいくと常に検索ボタンを画面に表示したいなどの要望が出てきそうなので、この問題にいずれぶち当たりそうですね。

<strong>追記：2011-03-02</strong>

YUIを使ったパターンが書かれていました！
またこの記事の紹介もしていただきました。ありがとうございます！
<a href="http://kachibito.net/web-design/iphone-position-fixed-with-yui.html" target="_blank">YUIライブラリのScrollViewウィジェットを使ってiPhoneでもposition:fixed;が効いてるっぽく見せる - かちびと.net</a>


<h2>スマホサイトはリキッドレイアウトがオススメ！</h2>

ラッピング要素をoverflow: hiddenにするとiPhoneはハミ出た部分が無視されますが、Androidだと押し広げてしまうケースがあるようです。
基本的な対応は以下のような感じになるのかな〜と思っています。

<ul>
	<li>リキッドレイアウトにする</li>
	<li>viewportの指定を<strong>width=device-width</strong>にする（Androidブラウザでviewportのwidthの数値指定は効かないので）</li>
</ul>

■参考リンク
<a href="http://d.hatena.ne.jp/izit_kosuke/20110126/1296067112" target="_blank">スマホサイトの作り方で、あんまり書かれてないことを書いてみた - iPhone・Android・WEB・音楽制作｜Kaleidoscope</a>
<a href="http://blog.webcreativepark.net/2011/01/28-000238.html" target="_blank">Androidにおけるコンテンツフィットと「overflow:hidden」[to-R]</a>


<h2>Android2.1でアニメーションgifが再生されない</h2>

<blockquote>
<p>Android2.1までは内蔵ブラウザでアニメーションGIFが再生できません</p>
<cite>via: <a href="http://labs.gree.jp/blog/2011/02/2800/" target="_blank">ブラウザでアニメーションファイル(GIF)をJavaScriptを用いて再生する方法 | GREE Engineers' Blog</a></cite>
</blockquote>

とのことで、これをすんごくがんばったのが以下の記事。
アニメーションGifのひとつひとつの画像をバラして、順番に自力でアニメーションさせるというシロモノです。かなりすごい！

<a href="http://labs.gree.jp/blog/2011/02/2800/" target="_blank">ブラウザでアニメーションファイル(GIF)をJavaScriptを用いて再生する方法 | GREE Engineers' Blog</a>

<hr>

<h2>jQuery Mobileについて</h2>

ではここから<strong>jQuery Mobile</strong>のお話。

すでにjQuery Mobileの解説はいろんなブログでされているので、基本的なことよりちょっと気になる感じのことを書いてみようかと思います。
何か間違いがあれば、<a href="http://twitter.com/hisasann" target="_blank">hisasann on twitter</a>で教えていただければ助かります！


<h2>format-detectionをtelephone=yes、またはそもそも指定していないのに自動で電話番号にならないケース</h2>

<textarea class="html" name="code">
&lt;meta name="format-detection" content="telephone=yes"&gt;
</textarea>

や、そもそもformat-detectionの指定をしていないのに自動で電話番号にならない場合があります。

jQueryMobileを使っていると画面遷移がAjaxを使ってHTMLを読み込むこと多いと思いますが、
この遷移先のHTMLの中に電話番号っぽい表記があって、それをDomに追加した場合にうまく自動で電話番号リンクにならないようです。
どうやら<strong>一番初めの画面描画時</strong>だけにこの電話番号自動リンク機能が実行されるようです。

なので、これはちょっとハマるポイントですね。


<h2>mobileinitイベント</h2>

<a href="http://jquerymobile.com/demos/1.0a3/#docs/api/globalconfig.html" target="_blank">jQuery Mobile: Demos and Documentation</a>

mobileinitイベントはjQuery Mobileが初期化し、画面の装飾をする前のタイミングでfireされるイベントになります。
なので、文言などを変える場合は、このタイミングになります。

<h2>デフォルトBackボタンの文言変更する</h2>

<textarea class="js" name="code">
$(document).bind("mobileinit", function(){
	$.mobile.page.prototype.options.backBtnText = "戻る";
});
</textarea>

か

<textarea class="html" name="code">
&lt;div data-role="page" data-back-btn-text="戻る"&gt;
</textarea>


<h2>デフォルトBackボタンを消す</h2>

<textarea class="js" name="code">
$(document).bind("mobileinit", function(){
	$.mobile.page.prototype.options.addBackBtn = false;
});
</textarea>

か

<textarea class="html" name="code">
&lt;div data-role="header" data-backbtn="false"&gt;
</textarea>


<h2>Ajax時の読込中のメッセージを変更する</h2>

<textarea class="js" name="code">
$(document).bind("mobileinit", function(){
	$.mobile.loadingMessage = "読み込み中...";
});
</textarea>


<h2>Ajaxでダイナミックにページを読み込んだ場合のimgのsrc先は？</h2>

例えば、

<blockquote>
index.html
    page/page.html
    img/1.jpeg
</blockquote>

こうゆうフォルダ構成だった場合に、index.htmlからpage/page.htmlをajaxで読み込んでindex.htmlの中にpage/page.htmlのdata-role="page"の部分を挿入するとします。
そしてpage/page.htmlからimg/1.jpegを読み込んでいたとします。

この場合、カレントディレクトリはindex.htmlが置いてあるディレクトリですが、読み込んだpage.html側からすれば「../img/1.jpeg」の場所に画像ファイルがあるんです。
これはなかなかやっかいな問題ですが、jQuery Mobileはそれとなく対応してくれています。

<strong>$.mobile.changePage</strong>メソッドの中に

<textarea class="js" name="code">
if( !$.support.dynamicBaseTag ){
	var baseUrl = getBaseURL(fileUrl);
	to.find('[src],link[href]').each(function(){
		var thisAttr = $(this).is('[href]') ? 'href' : 'src',
			thisUrl = $(this).attr(thisAttr);
		
		//if full path exists and is same, chop it - helps IE out
		thisUrl.replace( location.protocol + '//' + location.host + location.pathname, '' );
			
		if( !/^(\w+:|#|\/)/.test(thisUrl) ){
			$(this).attr(thisAttr, baseUrl + thisUrl);
		}
	});
}
</textarea>

というコードがあり、baseタグに対応していない場合に各hrefとsrcを書き換えてくれます。
ちなみにFirefox3.6で試してみたらbaseタグに対応していなかったです。

なので、
Webkitの場合は、

<textarea class="html" name="code">
&lt;base href="http://localhost/hoge/page/"&gt;
&lt;img src="../img/1.jpeg"&gt;
</textarea>


Firefoxなどbaseタグに対応していないブラウザの場合は、

<textarea class="html" name="code">
&lt;img src="page/../img/1.jpeg"&gt;
</textarea>

と書き換えられるようです。

一点問題があるとすれば、htmlコード上にbackgroundで画像を指定した場合にうまいことURIのreplaceが効かないことですかね。
（だから<strong>画像の角丸</strong>とかを作りたいときに困るかもしれません）

これは今後改善されていくのかな。。。


<h2>Android2.1でアニメーションgifが再生されないがAjax時のローディングgifは再生しているじゃないか！について</h2>

これは「<strong>ajax-loader.png</strong>」をCSS3のアニメーションでクルクル回しているだけ。
さすが、jQueryMobile！カシコイ！

該当箇所のCSSはこちらです。

<textarea class="css" name="code">
.spin  {
	-webkit-transform: rotate(360deg);
	-webkit-animation-name: spin;
	-webkit-animation-duration: 1s;
	-webkit-animation-iteration-count:  infinite;
}
@-webkit-keyframes spin {
	from {-webkit-transform: rotate(0deg);}
  	to {-webkit-transform: rotate(360deg);}
}
</textarea>

まぁ、そうですよね。

■関連リンク
<a href="http://5509.me/log/css3-animation" target="_blank">CSS3アニメーションのおさらいとローディングアイコン :: 5509</a>


<h2>デザインは独自のを使いたいんだけど、リンクなどは自動的にAjaxで遷移してほしい場合</h2>

今後やり方が変わるかもしれませんが、今のところはこれでイケるっぽい。

jQuery MobileのUIはとてもすばらしいですが、これをいろんなサイトで使うとしたらどれもこれも似たようなサイトが出来上がってしまうので、
サイトのデザインは独自にしたい場合にこうゆう方法が必要になってきます。

<ul>
	<li><strong>data-role="page"</strong>を付けておけば、aタグなどは自動的にAjaxによる遷移になります。</li>
	<li>jQuery Mobileに装飾されないようにするために、<strong>data-theme="hoge"</strong>のようにdata-themeを存在しないものにします。</li>
	<li>input type="text"にdata-role="none"を付けておく。これしないと勝手にかっこよくなっちゃいます。</li>
</ul>

或いは、必要なCSS意外をjQuery MobileのCSSファイルから削除しちゃうとか。
でもこれだとあとあとデザインもjQuery Mobileのを使いたいという場合にちょっと不便ですね。


<h2>$.mobile.changePage()を使ってページ遷移を独自にしたい！</h2>

これは意外とこの需要はあるんじゃないかなーと思っています。
jQuery Mobileに出来る限り依存したくないけど、<strong>$.mobile.changePage()</strong>を使ったページ遷移は非常に使いやすいので
この部分だけを使いたい場合など。
（そもそもjQuery Mobileの主要機能って$.mobile.changePage()ですよね！）

まずは自動でaタグにAjax処理をbindしちゃうので、それをしないようにします。

<textarea class="js" name="code">
$(document).bind("mobileinit", function(){
	$.mobile.ajaxEnabled = false;
});
</textarea>

そして1ページ目の進むボタンと2ページ目の戻るボタンにイベントを貼ります。

<textarea class="js" name="code">
$(function() {
	// 1Page目のイベント
	$(".changePage").live("click", function() {
		$.mobile.changePage({
			url: "page2.html", 
			type: "post",
			data: $(this).serialize()
		}, "slide", false, true, false);
	});

	// 2Page目のイベント
	$(".reverse").live("click", function() {
		window.history.back();
	});
});
</textarea>

これで進むのほうは、<strong>進むトランジション</strong>で。
戻るのほうは、ちゃんと<strong>戻るトランジション</strong>になります。

ハマりやすいのは、2ページ目の戻るイベントを2ページ目のhtml（headとか）に記述しちゃうことです。
2ページ目のdata-role="page"の中に戻るボタンのイベント用のscriptタグを用意すればいいのかもしれませんが（もちろんliveで）、
基本的には1ページ目に2ページ目のボタンのイベントも用意しちゃう感じだと思います。
これみなさんどっちでやってるのかな？


<h2>JavaScripから要素を追加した場合に再装飾するにはどうするの？</h2>

たとえば独自なAjaxで取得してきたHTMLを画面に追加して、その要素にjQuery Mobileのテーマで装飾して欲しいなんてことがあるとは思うんですが、
こうゆうのは公式デモサイトではサンプルがなくてちょっと困ります。

こちらの内容を参考にしようと思ったんですが、page()というのがどこのpage()なのか分からなかったです。
<a href="http://sites.google.com/site/ichi3tech/201102/201102091" target="_blank">JQuery Mobile　Alpha2（とちょびっとAlpha3）でサンプルサイト制作練習をした。(1) - いちてく</a>

<strong>ボタンの装飾</strong>

<textarea class="js" name="code">
$("<a>", {
	href: "#",
	"data-role": "button"
})
.html("追加されたよ")
.appendTo($("#append-wrap"))
.buttonMarkup();
</textarea>

<strong>リストの装飾</strong>

<textarea class="js" name="code">
$( "<ul>", {
	"role": "listview",
	"data-inset": "true"
})
.append("<li>foo</li>")
.appendTo($("#list-wrapper"))
.listview();
</textarea>

これはliだけをDomに追加して、ulの<strong>listview()</strong>を実行してもダメでした。
ul本体から作り直せばうまいこといきました。

なんとなくこのへんのメソッドの感じから言うと、画面ロード後にHTML要素を追加することをあんまり想定していない？んですかね。。。
結構分かりづらいです。

<strong>追記：2011-03-01</strong>

HTML5に詳しい吉川さんにTwitterで教えていただきました。
<a href="http://twitter.com/#!/yoshikawa_t/status/42184808314568704" target="_blank">Twitter / @Toru Yoshikawa: @hisasann ブログのほう面白く拝見させて頂き ...</a>

page()というのは、<strong>$('#page-id').page()</strong>のように呼ぶみたいで、
jQuery Mobileのセレクトボックスを作る$.mobile.selectmenuの中でダイアログを装飾するところで使用されていました。

使い方は、以下のようにまずはHTML文字列を作成して、どこか画面にappendし、page()を実行すれば装飾されるようになります。

<textarea class="js" name="code">
$(["<section data-theme='e'>",
		"<article data-role='content'>",
			"<h2>foo</h2>",
			"<ul data-role='listview' role='listbox' data-inset='true'>",
				"<li>hoge</li>",
				"<li>bar</li>",
			"</ul>",
		"</article>",
	"</section>"].join(""))
	.appendTo($("#html-wrapper"))
	.page();
</textarea>

また、↑のほうで、Listはulから作らないとうまく再構築できないと記載していましたが、

<textarea class="js" name="code">
$("#listbox")
	.append("<li>foo</li>")
	.listview('refresh');
</textarea>

のようにliを追加した後に<strong>listview('refresh')</strong>を実行したらうまく再構築されました。
ただ、Listに1つしか要素がない状態で上記コードを実行すると、角丸のところがまだちょっと変な感じになりました。
このあたりは今後のバージョンアップで改善されていくんでしょうね。

なので、

<ul>
	<li>Listだけの装飾であれば、listview('refresh')</li>
	<li>HTML文字列を装飾するのであれば、$("&lt;div&gt;なにかしら&lt;/div&gt;").page()</li>
	<li>Buttonだけの装飾であれば、buttonMarkup()</li>
</ul>

という感じですかね。
まぁ、面倒だからどのパターンでもpage()を使いそうですがｗ


<strong>追記：2011-03-11</strong>

<h2>コントロール要素の強化（enhanceControls）をしたくない場合</h2>

jQuery Mobileは使うんだけど、

<ul>
	<li>勝手にテキストボックスやセレクトボックスなどのコントロール要素の装飾をしたくない。やめてっ！</li>
</ul>

という場合があったりします。

これは、たとえ

<textarea class="html" name="code">
&lt;section data-role="page" data-theme="hogefoobar"&gt;
</textarea>

のように存在しない<strong>data-theme</strong>を指定してもコントロール要素は装飾されてしまいます。

こうゆうときにv1.0a2バージョンまでは$.page._createで行われる<strong>_enhanceControlsメソッド</strong>の呼び出しをコメントアウトするしかなかったんですが（多分！）、v1.0a3からは<strong>$.mobile.page.prototype.options.keepNative</strong>という「なんにも装飾しないでねセレクター」プロパティが追加されています。

使い方は

<textarea class="js" name="code">
$(document).bind("mobileinit", function(){
	$.mobile.page.prototype.options.keepNative = ".data-role-none";
});
</textarea>

か

<textarea class="html" name="code">
&lt;section data-role="page" data-theme="e" data-keep-native=".data-role-none" &gt;
</textarea>

でkeepNativeとしてのセレクターを指定しておきます。

あとは、各コントロール要素にclassで<strong>data-role-none</strong>を追加すればOK！

<textarea class="html" name="code">
&lt;input type="text" placeholder="例） やまだ たろう" class="data-role-none"&gt;
&lt;input type="radio" value="choice-1" checked="checked" class="data-role-none"&gt;
&lt;input type="checkbox" value="checkbox-1" class="data-role-none"&gt;
&lt;select name="birthdayData.year" class="data-role-none"&gt;
</textarea>

これ地味に便利！じゃあの。


<h2>スマートフォン参考書籍</h2>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4899772750/notechno-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51jbh5am4zL._SL160_.jpg" alt="HTML5＋CSS3で作る  魅せるiPhoneサイト  iPhone/iPad/iPod touch対応" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4899772750/notechno-22/ref=nosim/" name="amazletlink" target="_blank">HTML5＋CSS3で作る  魅せるiPhoneサイト  iPhone/iPad/iPod touch対応</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4899772750/notechno-22/ref=nosim/" title="HTML5＋CSS3で作る  魅せるiPhoneサイト  iPhone/iPad/iPod touch対応" target="_blank">amazlet</a> at 11.02.26</div></div><div class="amazlet-detail">谷拓樹 <br />ラトルズ <br />売り上げランキング: 945<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4899772750/notechno-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>

僕はこちらの本を読まさせていただきました！

ひと通りのスマートフォンサイト構築のお作法や、CSS3を使ったデザインの仕方など、かなり詳しく書かれています。
これで<strong>2,310円</strong>はけっこう安いですね。


<h2>まとめ</h2>

今後に期待しまくりなjQuery MobileのちょっとしたTipsを書いてみましたが、まだ分からないことがいっぱいあるので、
今後この記事に追記していこうと思っております。

また、以下にとりあえず目を通しておいたほうがよいと思った記事をリストアップしました。

<ul>
	<li><a href="http://blog.wonder-boys.net/?p=732" target="_blank">jQuery Mobileを使ってみた | blog.wonder-boys.net</a></li>
	<li><a href="http://www.ark-web.jp/sandbox/wiki/6412.html" target="_blank">jQuery Mobileの使い方と挙動のまとめ その１ - アークウェブシステム開発SandBox</a></li>
	<li><a href="http://www.publickey1.jp/blog/11/jquery_mobile.html" target="_blank">「jQuery Mobile」の登場で、モバイルアプリケーション開発は大きく変わる － Publickey</a></li>
	<li><a href="http://yst.web.infoseek.co.jp/jquerymobile/#1" target="_blank">jQuery Mobile [基礎編]</a></li>
	<li><a href="http://yusukebe.com/archives/002679.html" target="_blank">jQuery Mobileで「iPhoneで出会い系」紹介サイトを作ってみた - ゆーすけべー日記</a></li>
	<li><a href="http://jqm.namikawa.asia/" target="_blank">jQuery Mobile: Demos and Documentation（日本語版）</a></li>
	<li><a href="http://www.ibm.com/developerworks/web/library/wa-jqmobile/index.html?ca=drs-" target="_blank">Introduction to jQuery Mobile</a></li>
	<li><a href="http://kachibito.net/web-design/jquery-mobile-mark-up-list.html" target="_blank">jQuery Mobile使用時によく使いそうなマークアップのリストと動作サンプル - かちびと.net</a></li>
	<li><a href="http://d.hatena.ne.jp/moto_maka/20110228/1298834219" target="_blank">最近気になってきたjQueryについて色々調べてみました - もとまか日記</a></li>
</ul>

Beta版まだかなー！！]]></description>
         <link>http://hisasann.com/housetect/2011/02/jquerymobile.html</link>
         <guid>http://hisasann.com/housetect/2011/02/jquerymobile.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">技術</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">CSS3</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">HTML5</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">JavaScript</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Smartphone</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">jQuery</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">jQueryMobile</category>
        
         <pubDate>Mon, 28 Feb 2011 13:10:14 +0900</pubDate>
      </item>
      
      <item>
         <title>新しいMacbook Proにインストールしたものメモ Part2</title>
         <description><![CDATA[去年の年末に自宅のMacbookProを新しくしたので、そのときに行った作業やらインストールしたアプリやらをメモがてらに記事にしておきます。


<h2>キーバインド</h2>

システム環境設定のキーボードの修飾キーから「CapsLockキー」を「Controlキー」に変更。
（Shiftキーの上にCtrlキーがあるのが慣れていないため。。。）


<h2>Firefox</h2>

<a href="http://mozilla.jp/firefox/" target="_blank">次世代ブラウザ Firefox - 高速・安全・カスタマイズ自在な無料ブラウザ</a>

Mac版のFirefoxは、デフォルトでブックマークツールバーにfaviconが表示されないので、これを表示するようにCSSを修正する。

「~/Library/Application Support/Firefox/Profiles/********.default/chrome/」
の下にある<strong>userChrome-example.css</strong>をuserChrome.cssにリネームして以下を記述する

<blockquote>
	toolbarbutton.bookmark-item:not([container="true"]) > .toolbarbutton-icon {
	  padding: 0px !important;
	  margin: 0px !important;
	  width: 16px;
	  height: 16px;
	  display: inline !important;
	}
</blockquote>

検索時にタブを新規に開くように以下の設定をする
about:configで<strong>browser.search.openintab</strong>の設定をtrueにする

[via]
<a href="http://mozilla-remix.seesaa.net/article/40629859.html" target="_blank">Mozilla Re-Mix: Googleの検索結果ページを新しいタブで開く小技。</a>

毎回必ず入れるアドオンたち。
<a href="https://addons.mozilla.org/ja/firefox/addon/748/" target="_blank">Greasemonkey :: Add-ons for Firefox</a>
<a href="http://userscripts.org/scripts/show/8551" target="_blank">AutoPagerize for Greasemonkey</a>
<a href="https://addons.mozilla.org/ja/firefox/addon/1843/" target="_blank">Firebug :: Add-ons for Firefox</a>
<a href="https://addons.mozilla.org/ja/firefox/addon/11285/" target="_blank">Hatena Bookmark :: Add-ons for Firefox</a>

上記意外は少しづつ追加してく。


<h2>Opera</h2>

<a href="http://jp.opera.com/" target="_blank">Opera ブラウザ | 高速で安全なインターネット | 無料ダウンロード</a>

デザインのチェック用。


<h2>Google Chrome</h2>

<a href="http://www.google.com/chrome?hl=ja" target="_blank">Google Chrome - 新しい高速ブラウザを Windows、Mac、Linux でお試しください。</a>

ネット巡回にはやっぱりChromeが最適。
でも職場のMac10.5だと起動がすごく重いんだよな〜。10.6のほうはとくに重さを感じないんですが。


<h2>夜フクロウ</h2>

<a href="http://sites.google.com/site/yorufukurou/" target="_blank">YoruFukurou</a>

個人的に一番使いやすいMac用Twitterクライアント。


<h2>TextMate</h2>

<a href="http://macromates.com/" target="_blank">TextMate -- The Missing Editor for Mac OS X</a>

日本語に対応させるには以下を参照
<a href="http://hisasann.com/housetect/2008/05/railstextmate.html" target="_blank">Railsに最適なテキストエディター「TextMate」を入れて日本語化してみた</a>

ThemeColorは<a href="http://www.monokai.nl/blog/2006/07/15/textmate-color-theme/" target="_blank">Monokai » Blog Archive » Textmate color theme</a>が好きなのでダウンロード。
ダウンロードしたtmThemeファイルを「/Applications/TextMate.app/Contents/SharedSupport/Themes/」にコピーする。


<h2>Quicksilver</h2>

<a href="http://quicksilver.en.softonic.com/mac" target="_blank">Quicksilver (Mac) - Download</a>
もう言わずと知れたMacのランチャー。

ログイン時に起動するようにしとく。

あと念のため暴走しないように、Quicksilverが表示されるときのエフェクトを無効にしておく。
10.5のときに、Quicksilverがちょいちょい暴走しちゃって痛い目にあったもので。
<a href="http://d.hatena.ne.jp/Lejay/20081105/1225850170" target="_blank">QuickSilverの暴走を止める方法 - Lejayの日記</a>

過去にこんなこともしてました。
<a href="http://hisasann.com/housetect/2009/07/commandemacfinder.html">Command+EでMacのFinderを開くようにしてみた</a>


<h2>SIMBL</h2>

<a href="http://www.culater.net/software/SIMBL/SIMBL.php" target="_blank">SIMBL</a>

Visorのため。


<h2>Visor</h2>

<a href="http://visor.binaryage.com/" target="_blank">Visor is a system-wide terminal accessible via a hot-key</a>

「~/Library/Application Support/SIMBL/Plugins」に入れるんですが、たぶん<strong>SIMBL</strong>以下のディレクトリがないので、自分で作成する。
このツールは、Terminalを起動するとVisorがフックしてかっこよく起動してくれるので便利です。

<blockquote>
今回2.2を入れてみたんですが、ホットキーの設定ができない？
1.2の時代はホットキーが使えたので、適当なショートカットを割り当てたんですが、今回はなんかそのへんがうまくいかなかったので、Ctrlキーを2回押したら起動するにチェックを入れてみた。
</blockquote>


<h2>VLC</h2>

<a href="http://www.videolan.org/vlc/" target="_blank">VideoLAN - VLC media player - Open Source Multimedia Framework and Player</a>

flvでもaviでもなんでもござれなプレイヤー。
これなしでは生きていけないよ。


<h2>MacVim</h2>

<a href="http://code.google.com/p/macvim-kaoriya/" target="_blank">macvim-kaoriya - Project Hosting on Google Code</a>

僕はまったくもってVimを使いこなせないんですが、かっこつけて入れてます。


<h2>Skype</h2>

<a href="http://www.skype.com/intl/ja/get-skype/on-your-computer/macosx/" target="_blank">Skype 2.8 for Mac OS X - 最新バージョンのSkypeをダウンロードして、コンピュータ同士の無料通話を利用しよう</a>

MacbookProは初めからマイクが内蔵されているので、Skypeを起動すればすぐに誰かと通話することができます。
しかも音質もすばらしい！


<h2>Skitch</h2>

<a href="http://skitch.com/" target="_blank">welcome | skitch.com</a>

画像に文章入れたり矢印引っ張ったりするのがすごく使いやすい。
前は記事用の画像の加工もこのアプリでやってました。


<h2>Google 日本語入力</h2>

<a href="http://www.google.com/intl/ja/ime/index-mac.html" target="_blank">Google 日本語入力 - ダウンロード</a>

このツールのお陰で記事作成がほんと楽になりました。
しかも無料！


<h2>Dropbox</h2>

<a href="http://www.dropbox.com/" target="_blank">Dropbox - Home - Online backup, file sync and sharing made easy.</a>

実質、僕はそんなに使いこなせていないんですが、自分の「ちょいプログラム」はすべてここに保存しておいて、職場と自宅のMacで同期させています。


<h2>iTunes</h2>

旧Macの「/Users/XXXX/Music/」の下にあるiTunesのファイルを外付けHDDに対比して、
新Macの同ディレクトリにコピー。
これでiTunesの移行は終わり。


<h2>iPhoto</h2>

旧Macの「/Users/XXXX/Pictures/」の下にあるiPhoto LibraryとPhoto Boothを外付けHDDに対比して、
新Macの同ディレクトリにコピー。
これでiPhotoの移行は終わり。


<h2>Growl</h2>

<a href="http://growl.info/" target="_blank">Growl</a>

通知よろしくお願いいたします。


<h2>Cyberduck</h2>

<a href="http://cyberduck.ch/" target="_blank">Cyberduck | FTP、SFTP、WebDAV、Cloud Files、Google Docs、S3用ブラウザ、MacとWindowsに対応 | Cyberduckについて</a>

Mac版のFTPアプリとしては最もメジャーですかね。
でもロリポップへのアクセスの調子が悪いので、<a href="http://fetch.jp/" target="_blank">Fetch</a>というのも使い始めてみたんですが、こちら有料なんですよね。。。


<h2>Adium</h2>

<a href="http://adium.im/" target="_blank">Adium - Download</a>

MSNメッセンジャーとかJabberとか。


<h2>iAntiVirus</h2>

<a href="http://veadardiary.blog29.fc2.com/blog-entry-1807.html" target="_blank">パワフルなウィルス除去ソフト『iAntiVirus』 | Macの手書き説明書</a>

常に監視してくれてるのはいいんですが、ちょっと重いです。

もし常に監視する必要がなくて、定期的にウィルスがあるかどうかをチェックするぐらいでOKでしたら

<strong>ClamXav</strong>がよいかもしれません。

<a href="http://www.sky-s.net/sky-blog/archives/2010/02/05-114118.php" target="_blank">必ず入れておきたいMac用アンチウイルスソフト「ClamXav」 - sorarium</a>


<h2>Witch</h2>

<a href="http://manytricks.com/witch/" target="_blank">Witch · Many Tricks</a>

一応入れてますが、最近はこのツールが活躍することはあまりありません。
画面の左上か右上にマウスを持って行くと、Exposeするように設定してあるのでそんなに困らないです。


<h2>iStat Menus</h2>

<a href="http://bjango.com/mac/istatmenus/" target="_blank">iStat Menus, a Mac app by Bjango</a>
普通に使っていたら、いつのまにか試用期間が終わって使えなくなってしまった。
前のバージョンは無料だったので、少しショック・・・

そしてTwitterでなんかよさげなのがないか聞いてみたら、<strong>MenuMeters</strong>を教えていただいたのでさっそく使ってます。
これかなりステキです！
<a href="http://www.ragingmenace.com/software/menumeters/" target="_blank">MenuMeters</a>

[via]
<a href="http://twitter.com/#!/ANTON072/status/18700426845097984" target="_blank">Twitter / @アントニオ猪木談: @hisasann ご存知かもしれませんがMenuM ...</a>
<a href="http://twitter.com/#!/amatanoyo/status/18700759394680832" target="_blank">Twitter / @数多世界: @hisasann 代替としてMenuMetersっ ...</a>


<h2>Macports</h2>

付属のDVDからXcodeをインストールしておく。

んで<a href="http://distfiles.macports.org/MacPorts/" target="_blank">Index of /MacPorts</a>から最新版をダウンロードしてインストールする。

以下のコマンドでMacPorts自体をアップデートし、取得できるパッケージ一覧を更新する。 

<blockquote>
sudo port -d selfupdate
sudo port -d sync
</blockquote>


<h2>git</h2>

Macportsを入れた後に以下のコマンドを実行。

<blockquote>
sudo port install git-core +gitweb +svn
</blockquote>

<a href="http://hikariworks.jp/blog/2008/06/18/macports%E3%81%A7git%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/" target="_blank">hikariworks::blog »  MacPortsでgitをインストール</a>
他に必要なモジュールをインストールするのにかなり時間が掛かる。

tigを入れとくとgitのブラウズが楽になるかもしれません。
<a href="http://hisasann.com/housetect/2010/11/gittigmacports.html">gitをブラウズするのに最適な「tig」をMacportsから入れてみた</a>


<h2>Simple Calendar 2</h2>

<a href="http://www.apple.com/jp/downloads/dashboard/information/simplecalender.html" target="_blank">アップル - ダウンロード - Dashboard ウィジェット - Simple Calendar 2</a>

祝日がわかるダッシュボード用カレンダー。
あれ？今週祝日あったっけ？というときにすごく使えます。

■関連記事
・<a href="http://hisasann.com/housetect/2009/06/macbook_pro_1.html">新しいMacbook Proにインストールしたものメモ</a>

■関連リンク
・<a href="http://mac-sheep.com/archives/1371" target="_blank">ターミナルのウィンドウををバイザーっぽくする「Visor」 -- MacSheep</a>]]></description>
         <link>http://hisasann.com/housetect/2011/01/macbook_pro_part2.html</link>
         <guid>http://hisasann.com/housetect/2011/01/macbook_pro_part2.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Mac</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Mac</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">MacBookPro</category>
        
         <pubDate>Fri, 21 Jan 2011 20:16:55 +0900</pubDate>
      </item>
      
      <item>
         <title>HTML5とCSS3だけでLightbox - Pure CSS3, no javascript!!</title>
         <description><![CDATA[<a href="http://www.htmlstack.com/lighterbox/" target="_blank">HTML5 Pure CSS Lightbox</a>を見てて、そういえばどうやってやってるか知らないな〜と思い自分なりに簡略化した<strong>デモページ</strong>を作ってみました。
なるべく必要なスタイルだけを使うするようにしています。


<h2>CSS3の部</h2>

アニメーションは<strong>-webkit-animation</strong>を使っています。

<textarea class="css" name="code">
/* Lightboxの枠 */
.lightbox {
	height: 100%;
	width: 100%;
	background: none repeat scroll 0 0 rgba(0, 0, 0, 0.5);
	position: absolute;
	top: 0;
	left: 0;
	z-index: 1000;
	display: none;

	-webkit-animation-name: fade;
	-webkit-animation-duration: 0.50s;
	-webkit-animation-iteration-count: 1;
	-webkit-animation-direction: normal;
	-webkit-animation-timing-function: ease-in;
}

/* Lightbox全体を覆うアンカー */
.lightbox a {
	display: table-cell;
	vertical-align: middle;
	text-align: center;
}

/* アンカーの中にいるimg要素 */
.lightbox img {
	-moz-box-shadow: 0 0 15px #444444;
	background-color: #FFFFFF;
	padding: 5px 5px 45px;

	-webkit-animation-name: grow;
	-webkit-animation-duration: 0.50s;
	-webkit-animation-iteration-count: 1;
	-webkit-animation-direction: normal;
	-webkit-animation-timing-function: ease-out;
}

/* アンカーの中にいる文字を表示する要素 */
.lightbox p {
	-moz-box-shadow: 0 0 15px #444444;
	background-color: #FFFFFF;
	color: #000000;
	font: bold 15px Helvetica,Arial,Sans-serif;
	text-shadow: 0 2px 6px #333333;
	padding: 5px 5px 45px;
	position: absolute;
	left: 50%;
	top: 50%;
	margin-left: -30%;
	margin-top: -200px;
	width: 60%;
	height: 400px;

	-webkit-animation-name: grow2;
	-webkit-animation-duration: 0.50s;
	-webkit-animation-iteration-count: 1;
	-webkit-animation-direction: normal;
	-webkit-animation-timing-function: ease-in;
}

/* lightboxがフラグメントID経由でアクティブになった場合に、ここのスタイルが適用される */
.lightbox:target {
	display: table;
}

/* keyframes */
@-webkit-keyframes fade {
	from {opacity: 0;}
	to 	{opacity: 1;}
}

@-webkit-keyframes grow {
	from {height: 0px;}
	to 	{height: 300px;}
}

@-webkit-keyframes grow2 {
	from {height: 0px;}
	to 	{height: 400px;}
}
</textarea>


<h2>HTML5の部</h2>

Sample1〜Sample4までが画像で、Sample5がテキストになっています。

<textarea class="html" name="code">
&lt;!-- header --&gt;
&lt;header&gt;
	&lt;h1&gt;CSS3 Lightbox Sample&lt;/h1&gt;
	&lt;p&gt;
		詳細はソースを見てくださいね。&lt;br&gt;
		Webkit(Safari, Chrome)でクリックするとアニメーションがもれなく付いてきます。
	&lt;/p&gt;
&lt;/header&gt;

&lt;!-- anchor --&gt;
&lt;section id="content"&gt;
	&lt;p&gt;&lt;a href="#sample1"&gt;Sample1&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;&lt;a href="#sample2"&gt;Sample2&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;&lt;a href="#sample3"&gt;Sample3&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;&lt;a href="#sample4"&gt;Sample4&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;&lt;a href="#sample5"&gt;Sample5&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;

&lt;!-- lightbox --&gt;
&lt;section&gt;
	&lt;article id="sample1" class="lightbox"&gt;
		&lt;a href="#close"&gt;
			&lt;img src="1.jpg"&gt;
		&lt;/a&gt;
	&lt;/article&gt;
	&lt;article id="sample2" class="lightbox"&gt;
		&lt;a href="#close"&gt;
			&lt;img src="2.jpg"&gt;
		&lt;/a&gt;
	&lt;/article&gt;
	&lt;article id="sample3" class="lightbox"&gt;
		&lt;a href="#close"&gt;
			&lt;img src="3.jpg"&gt;
		&lt;/a&gt;
	&lt;/article&gt;
	&lt;article id="sample4" class="lightbox"&gt;
		&lt;a href="#close"&gt;
			&lt;img src="4.jpg"&gt;
		&lt;/a&gt;
	&lt;/article&gt;
	&lt;article id="sample5" class="lightbox"&gt;
		&lt;a href="#close"&gt;
			&lt;p&gt;
				ほげほげ&lt;br&gt;ほげほげ
			&lt;/p&gt;
		&lt;/a&gt;
	&lt;/article&gt;
&lt;/section&gt;

&lt;!-- footer --&gt;
&lt;footer&gt;
	&lt;p&gt;Created by &lt;a href="http://hisasann.com/" target="_blank"&gt;hisasann.com&lt;/a&gt;&lt;/p&gt;
&lt;/footer&gt;
</textarea>


<h2>
	デモサイト
</h2>

<strong>Webkit</strong>や<strong>Google Chrome</strong>で見るともれなくアニメーション機能が付いてきます。
<a href="http://lab.hisasann.com/CSS3Lightbox/" target="_blank">CSS3 Lightbox Sample</a>

また、HTML5のタグは以下のリンクを参考にさせていただきました。（すごく見やすい！）
ありがとうございます！
<a href="http://www.htmq.com/html5/index.shtml" target="_blank">HTML5リファレンス</a>

■関連リンク
<a href="http://www.htmq.com/css3/animation-timing-function.shtml" target="_blank">animation-timing-function－CSS3リファレンス</a>
<a href="http://www.htmq.com/css3/animation-direction.shtml" target="_blank">animation-direction－CSS3リファレンス</a>]]></description>
         <link>http://hisasann.com/housetect/2010/12/html5css3lightbox_-_pure_css3.html</link>
         <guid>http://hisasann.com/housetect/2010/12/html5css3lightbox_-_pure_css3.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">技術</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">CSS3</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">HTML5</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Lightbox</category>
        
         <pubDate>Wed, 15 Dec 2010 13:17:10 +0900</pubDate>
      </item>
      
      <item>
         <title>gitをブラウズするのに最適な「tig」をMacportsから入れてみた</title>
         <description><![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="gitをブラウズするのに最適な「tig」をMacportsから入れてみた" src="http://hisasann.com/housetect/2010/11/22/%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%20%E2%80%94%20tig%20%E2%80%94%20209%C3%9740.jpg" width="500" height="402" class="mt-image-none" style="" /></span>

<a href="http://subtech.g.hatena.ne.jp/secondlife/20101114/1289736508" target="_blank">コンソールから使える git ブラウザ、tig が超便利 - って、なんでですか〜 - subtech</a>を読んで、普段あんまりgitでソースを管理していないんですが、gitのログがかっこよく閲覧できそうなので試しに<strong>tig</strong>をインストールしてみました。

んで、<strong>Macports</strong>にあるかな〜と思って探してみたら、

<blockquote>
$ sudo port search tig

tig @0.16.2 (devel)
    A text interface to git repositories
</blockquote>

あるじゃない！あるじゃない！
ということなので、

<blockquote>
$ sudo port install tig
</blockquote>

ってやってみたら、以下のようにエラーが出ていっこうに進みません。（多分このエラーはそうそう起きるものではないとは思います）

<blockquote>
$ sudo port install tig
--->  Computing dependencies for tig
--->  Dependencies to be installed: git-core curl curl-ca-bundle p5-error python26 gdbm rsync popt
--->  Verifying checksum(s) for curl-ca-bundle
Error: Target org.macports.checksum returned: certdata-1.67.txt does not exist in /opt/local/var/macports/distfiles/curl
Error: Failed to install curl-ca-bundle
Log for curl-ca-bundle is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_net_curl-ca-bundle/main.log
Error: The following dependencies were not installed: git-core curl curl-ca-bundle p5-error python26 gdbm rsync popt
Error: Status 1 encountered during processing.
To report a bug, see <http://guide.macports.org/#project.tickets>
</blockquote>

そもそも<strong>git</strong>はMacportsから入れていないので、そのあたりかなと思いgitのインストールを試みても同じエラーがでる。
んで以下の記事を参考にしていたら<strong>clean</strong>というコマンドを発見！

<a href="http://code.google.com/p/bear-project/source/browse/wiki/setup_osx.wiki?spec=svn1446&r=1446" target="_blank">setup_osx.wiki - bear-project - Project Hosting on Google Code</a>
<a href="http://d.hatena.ne.jp/yinkyweb/20100410/1270880105" target="_blank">MacPortsでインストールするときにChecksumエラーが出る場合の対処方法 - yinkywebの日記</a>

おりゃ！！

<blockquote>
$ sudo port clean curl-ca-bundle
</blockquote>

結果、すんなりtigのインストールに成功しました！

でもまだgitのパスがまだ古いほう（Macportsで入れてないほう）を見に行ってしまうので、
<strong>/etc/paths.d</strong>ディレクトリ内にあるgitファイルの中身を書き換えました。

<blockquote>
vim /etc/paths.d/git
/opt/local/bin/git
</blockquote>

これに関しては、以下の記事がなかったら、分からなかったよ。
<a href="http://d.hatena.ne.jp/koseki2/20081201/macportPath" target="_blank">最近のMac OSXで、PATHをスマート(?)に管理するやり方。 - こせきの技術日記</a>
<a href="http://www.kurano.jp/blog/sadayuki/20100828/mac_os_x_%E3%81%AB%E6%96%BC%E3%81%91%E3%82%8B_path_%E3%81%AE%E8%BF%BD%E5%8A%A0%E6%96%B9%E6%B3%95" target="_blank">Mac OS X に於ける Path の追加方法 : Sadayuki の Blog</a>

これでようやく

<blockquote>
$ git --version
git version 1.7.3.2
</blockquote>

と最新のgitを見に行ってくれるようになりました！

tigを使うにはgitで管理しているディレクトリに移動して、<strong>tig</strong>コマンドを実行するだけ。

<blockquote>
$ cd /hoge/code/
$ tig
</blockquote>


あとは適当にタイプしていけば慣れてくるのかな？
いろいろ試してみたいと思いますっ！

<dl class="data">
	<dt>k</dt>
	<dd>Move cursor one line up</dd>
	<dt>j</dt>
	<dd>Move cursor one line down.</dd>
	<dt>m</dt>
	<dd>Switch to main view.</dd>
	<dt>Tab</dt>
	<dd>Switch to next view.</dd>
</dl>

[via]
<a href="http://jonas.nitro.dk/tig/manual.html" target="_blank">The tig Manual</a>

操作方法についてはこちらの記事がすごい参考になります！
<a href="http://blog.yuyat.jp/archives/557" target="_blank">CUI な Git ブラウザ tig を入れてみた - Born Too Late</a>

■gitの関連記事
・<a href="http://blog.champierre.com/archives/670" target="_blank">せっかちな人のための git 入門 - git をインストールし、共同で開発できる環境を整えるまで : 僕は発展途上技術者</a>
・<a href="http://engineerflies.blogspot.com/2010/03/git.html" target="_blank">Git入門 ゼロから始めるGitドリル-エンジニアは空を飛ぶ</a>


<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/427406767X/hous-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41k7xonwpdL._SL160_.jpg" alt="入門git" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/427406767X/hous-22/ref=nosim/" name="amazletlink" target="_blank">入門git</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/427406767X/hous-22/ref=nosim/" title="入門git" target="_blank">amazlet</a> at 12.01.27</div></div><div class="amazlet-detail">Travis Swicegood <br />オーム社 <br />売り上げランキング: 24084<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/427406767X/hous-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>]]></description>
         <link>http://hisasann.com/housetect/2010/11/gittigmacports.html</link>
         <guid>http://hisasann.com/housetect/2010/11/gittigmacports.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Mac</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">技術</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Mac</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">MacPorts</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">SVN</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">git</category>
        
         <pubDate>Mon, 22 Nov 2010 15:40:27 +0900</pubDate>
      </item>
      
      <item>
         <title>XMLHttpRequest level2に対応しているブラウザまとめ</title>
         <description><![CDATA[<strong>XMLHttpRequest</strong>（Ajax）はもともとは他のドメインへのリクエストは出来なかったのですが、結構前2009年の8月ぐらいにW3Cのドラフトが出てそれ以来各ブラウザが搭載し始めているのが現状。
<a href="http://www.w3.org/TR/2008/WD-XMLHttpRequest2-20080225/" target="_blank">XMLHttpRequest Level 2</a>

とりあえず対応しているブラウザをちょっと調べてみましたので、メモメモー！

今回は僕が使っている2つのドメインをサンプルとして使っています。
もし、ためされる場合は適宜ご自分のドメインに読み替えてください。


<h2>.htaccess</h2>

まず
「http://lab.hisasann.com/XHR2/」
の配下に「<strong>.htaccess</strong>」ファイルを用意して、

<blockquote>
	Header append Access-Control-Allow-Origin: *
</blockquote>

と書いておきます。
これでどこからXMLHttpRequestでアクセスしてきてもOKだよ〜という意味になります。
（ローカルファイルからでもOKです）

それだとちょっと実験としては面白くなかったので、以下の別のドメイン「http://hisasann.sakura.ne.jp」からのアクセスだけを許容するように設定してみました。

<blockquote>
	Header append Access-Control-Allow-Origin: http://hisasann.sakura.ne.jp
</blockquote>

つまり
<strong>http://hisasann.sakura.ne.jp</strong>から<strong>http://lab.hisasann.com/XHR2/</strong>に対してXMLHttpRequestでアクセスするという感じになります。


<h2>json.json（サンプル用json）</h2>

先ほどの.htaccessと同じディレクトリにjson.jsonというサンプル用のjsonを置いておきました。

<blockquote>
	{
		"test": "ほげほげ"
	}
</blockquote>


<h2>XMLHttpRequestのサンプルコード</h2>

どうもIE8だけはXMLHttpRequestではなく、独自の<strong>XDomainRequest</strong>というのを使わないといけないみたい。

<textarea class="js" name="code">
var xhr = window.XDomainRequest ? new XDomainRequest : new XMLHttpRequest;
try {
	xhr.onload = function() {
		alert(xhr.responseText);
	};

	xhr.open("GET", "http://lab.hisasann.com/XHR2/json.json");
	xhr.send(null);
} catch (e) { alert(e.message); }
</textarea>


<h2>
	各ブラウザの対応表（2010-11-16現在）
</h2>

以下のURLに各ブラウザでアクセスしてみました。

<a href="http://hisasann.sakura.ne.jp/XMLHttpRequest2.html" target="_blank">http://hisasann.sakura.ne.jp/XMLHttpRequest2.html</a>

その結果が以下の表です。
結構対応しているんですよね！！


<h3>Mac</h3>

<dl class="data">
	<dt>Firefox3.6.12</dt>
	<dd>OK</dd>
	<dt>Safari5.0</dt>
	<dd>OK</dd>
	<dt>Chrome 7.0</dt>
	<dd>OK</dd>
	<dt>Opera10.10</dt>
	<dd><strong>NG</strong></dd>
</dl>


<h3>Windows</h3>

<dl class="data">
	<dt>Firefox3.5.9</dt>
	<dd>OK</dd>
	<dt>Safari5.0</dt>
	<dd>OK</dd>
	<dt>Chrome 7.0</dt>
	<dd>OK</dd>
	<dt>Opera10.10</dt>
	<dd><strong>NG</strong></dd>
	<dt>IE8</dt>
	<dd>OK</dd>
	<dt>IE7</dt>
	<dd><strong>NG</strong></dd>
	<dt>IE6</dt>
	<dd><strong>NG</strong></dd>
</dl>

ちなみにIE8でブラウザモードをIE7にしても、XMLHttpRequestでアクセスできちゃうのねんっ！
IETesterのIE7でアクセスしたらちゃんとアクセスが拒否されました。

■関連記事
・<a href="http://www.slideshare.net/pastak/xml-http-request-level2" target="_blank">XML Http Request Level2 の噂を聞いたので調べてみた</a>
・<a href="http://d.hatena.ne.jp/os0x/20090610/1244618814" target="_blank">XMLHttpRequest Level 2 と wedata バックアップ - 0xFF</a>]]></description>
         <link>http://hisasann.com/housetect/2010/11/xmlhttprequest_level2.html</link>
         <guid>http://hisasann.com/housetect/2010/11/xmlhttprequest_level2.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">技術</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Ajax</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">JavaScript</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">XMLHttpRequest2</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">browser</category>
        
         <pubDate>Tue, 16 Nov 2010 13:23:56 +0900</pubDate>
      </item>
      
      <item>
         <title>各ブラウザのオートコンプリート機能が働くパターンのまとめ and デモ</title>
         <description><![CDATA[<strong>オートコンプリート機能</strong>は各ブラウザが搭載している機能ですが、ID・パスワードを保存するときに表示される保存ダイアログの挙動がよくわかっていなかったのでいろいろ試してみました。

基本的にはテキストボックスを2つ持つformがあり、このformを以下の4つのパターンでsubmitさせた場合に、保存ダイアログが表示されるのかされないのかの検証になります。


<h2>普通にsubmitボタンでsubmitする場合</h2>

ごくごく一般的なパターンで、IDとパスワードを入力するテキストボックスがあって、submit用のinput type="submit"なボタンが置いてあります。
submitボタンをクリックするとどのブラウザでも、保存ダイアログが表示されました。


<h2>リンク経由でJavaScriptからsubmitボタンでsubmitする場合</h2>

aタグをクリックしたタイミングで、submitボタンをJavaScriptからclickするパターンです。
JavaScriptから実行しているので、一見すると保存ダイアログが出ないかと思われますが、ちゃんと表示されます。


<h2>リンク経由でJavaScriptからform.submit();でsubmitする場合</h2>

今回の検証で唯一この方法だけが、うまく保存ダイアログが表示されない場合がありました。
<strong>IE7、8</strong>で試したら保存ダイアログが表示されずに画面遷移しちゃいました。


<h2>imageボタンでsubmitする場合</h2>

これは1つ目と似ていますが、input type="image"なボタンでsubmitするパターンです。
問題なく保存ダイアログが表示されました。


<h2><strong>おまけ</strong>：autocomplete属性がoffでも保存ダイアログが出てしまう場合（つまりautocompleteに対応していない）</h2>

ブコメで

<blockquote>autocomplete=offとかの検証はないのかなー</blockquote>

とご意見をいただいたので、一応追記しときます。

autocomplete属性をoffにしてもダイアログが出ちゃうブラウザを調査しました。
結果的にはMacとWindowsのOperaが対応していなかったです。

■参考リンク
・<a href="http://dev.w3.org/html5/spec-author-view/common-input-element-attributes.html#the-autocomplete-attribute" target="_blank">4.10.7.2 Common input element attributes -- HTML5 (Edition for Web Authors)</a>


詳しくは以下の<strong>デモ</strong>を参照ください！！
<a href="http://lab.hisasann.com/autocomplete/" target="_blank">オートコンプリート機能が働くパターンのまとめ and デモ</a>


<h2>以下いろいろ備忘録</h2>

<h2>
	formのactionで、index.htmlからindex2.htmlに遷移している理由
</h2>

Chromeだとformのactionが現在開いている画面と同じURLの場合？に保存ダイアログが出なかった。
ゆえに、今回のデモではすべてindex2.htmlという2ページ目に遷移するようにしている。


<h2>Operaはどこにパスワードを保存してるの？</h2>

「環境設定→認証管理タブ→認証管理ボタン」

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="認証管理マネージャ.jpg" src="http://hisasann.com/housetect/2010/11/04/%E8%AA%8D%E8%A8%BC%E7%AE%A1%E7%90%86%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3.jpg" width="500" height="226" class="mt-image-none" style="" /></span>


<h2>Google Chromeはどこにパスワードを保存してるの？</h2>

「環境設定→個人設定タブ→保存したパスワードを表示ボタン」

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="キーチェーンアクセス.jpg" src="http://hisasann.com/housetect/2010/11/04/%E3%82%AD%E3%83%BC%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9.jpg" width="500" height="271" class="mt-image-none" style="" /></span>

つまりキーチェーンアクセスに保存されます。
オシャレですね〜！


<h2>Safariはどこにパスワードを保存してるの？</h2>

「環境設定→自動入力タブ→ユーザ名とパスワードの編集ボタン」

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="Safari.jpg" src="http://hisasann.com/housetect/2010/11/04/Safari.jpg" width="500" height="110" class="mt-image-none" style="" /></span>

僕の環境だと保存したデータの削除を実行する「取り除く」というボタンが効かなかったです・・・ナンデだろう。


<h2>Firefoxはどこにパスワードを保存してるの？</h2>

「環境設定→セキュリティタブ→保存されているパスワードボタン」

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="保存されているパスワード.jpg" src="http://hisasann.com/housetect/2010/11/04/%E4%BF%9D%E5%AD%98%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89.jpg" width="500" height="383" class="mt-image-none" style="" /></span>


こんだけMac版とWindows版のブラウザを行き来するとワケがワカメになっちゃうよ...

■関連記事
・<a href="http://support.microsoft.com/kb/917458/ja" target="_blank">Internet Explorer のオートコンプリートの動作について</a>
・<a href="http://ja.opera-wiki.com/%E3%82%AA%E3%83%BC%E3%83%88%E3%82%B3%E3%83%B3%E3%83%97%E3%83%AA%E3%83%BC%E3%83%88" target="_blank">オートコンプリート - Opera Wiki</a>
・<a href="http://ja.opera-wiki.com/%E9%81%8E%E5%8E%BB%E3%81%AB%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%9F%E7%89%A9%E3%81%A7%E3%82%AA%E3%83%BC%E3%83%88%E3%82%B3%E3%83%B3%E3%83%97%E3%83%AA%E3%83%BC%E3%83%88%E3%81%97%E3%81%9F%E3%81%84" target="_blank">過去に入力した物でオートコンプリートしたい - Opera Wiki</a>
・<a href="http://far.whochan.com/diary.cgi/3073" target="_blank">usoAutoCompleteFromHistory - 工房らくだ舎</a>]]></description>
         <link>http://hisasann.com/housetect/2010/11/_and.html</link>
         <guid>http://hisasann.com/housetect/2010/11/_and.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">技術</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Chrome</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Firefox</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">HTML</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">IE</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">IE7</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">IE8</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">JavaScript</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Opera</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Safari</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">browser</category>
        
         <pubDate>Thu, 04 Nov 2010 18:46:39 +0900</pubDate>
      </item>
      
      <item>
         <title>TextMateでPHPコードを実行するショートカットは「Shift + Command + R」</title>
         <description><![CDATA[もうね。今のいままで知らなかったのよ。

まさか<strong>Shift</strong>押しながらとはっ！

<strong>Ruby</strong>、<strong>Perl</strong>、<strong>Python</strong>などはTextMate上で即座に実行するには、<strong>Command + R</strong>でOKでした。

この流れでPHPもCommand + Rなのかな〜と思ってたんですが、言語をPHPにして実行するとファイルを保存するダイアログが出るんです。
なので、PHPはTextMateでは即座に実行ができないと思って、わざわざ<strong>/Site/ディレクトリ</strong>にファイルを置いて確認してましたよ！


んで、久々にPHP書こうかな〜って思ってバンドルのところを見てみたらなんとありましたよ！

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="TextMateでPHPコード実行するのは「Shift + Command + R」" src="http://hisasann.com/housetect/2010/10/27/%E3%83%94%E3%82%AF%E3%83%81%E3%83%A3%201-1.jpg" width="500" height="282" class="mt-image-none" style="" /></span>

<strong>Run</strong>するコマンドがっ！
何事も知るということがとても大切なんだと思った今日このごろです。

■関連記事
・<a href="http://hisasann.com/housetect/2010/03/textmatezen-coding.html">TextMateにZen-Codingを導入して遊んでみる</a>
・<a href="http://hisasann.com/housetect/2010/02/textmategetbundle.html">TextMateのGetBundleがうまくいかないときの対処方法</a>
・<a href="http://hisasann.com/housetect/2008/05/railstextmate.html">Railsに最適なテキストエディター「TextMate」を入れて日本語化してみた</a>]]></description>
         <link>http://hisasann.com/housetect/2010/10/textmatephpshift_command_r.html</link>
         <guid>http://hisasann.com/housetect/2010/10/textmatephpshift_command_r.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">技術</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">PHP</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Shortcut</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">TextMate</category>
        
         <pubDate>Wed, 27 Oct 2010 20:11:17 +0900</pubDate>
      </item>
      
   </channel>
</rss>

