<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><!-- generator="wordpress/ME2.2.3" --><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">

<channel>
	<title>Webtech Walker</title>
	<link>http://webtech-walker.com</link>
	<description>CSS、PHP、Ajaxなどを中心にしたWEB技術の散策記録</description>
	<pubDate>Wed, 17 Mar 2010 00:33:57 +0900</pubDate>
	<generator>http://wordpress.org/?v=ME2.2.3</generator>
	<language>ja</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/WebtechWalker" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="webtechwalker" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>vimgrepを使いやすくする</title>
		<link>http://webtech-walker.com/archive/2010/03/17093357.html</link>
		<comments>http://webtech-walker.com/archive/2010/03/17093357.html#comments</comments>
		<pubDate>Wed, 17 Mar 2010 09:33:57 +0900</pubDate>
		<dc:creator>hokaccha</dc:creator>
		
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://webtech-walker.com/archive/2010/03/17093357.html</guid>
		<description><![CDATA[<a href="http://vim-users.jp/2010/03/hack130/" title="Vim-users.jp - Hack #130: :grepをより便利に利用する">Vim-users.jp - Hack #130: :grepをより便利に利用する</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://vim-users.jp/2010/03/hack130/" title="Vim-users.jp - Hack #130: :grepをより便利に利用する">Vim-users.jp - Hack #130: :grepをより便利に利用する</a></p>

<p>これ見て自分もgrep使いやすいようにしたいと思ったのでオレオレgrep設定してみた。</p>

<pre><code>command! -complete=file -nargs=+ Grep call s:grep([&lt;f-args&gt;])
function! s:grep(args)
    let target = len(a:args) &gt; 1 ? join(a:args[1:]) : '**/*'
    execute 'vimgrep' '/' . a:args[0] . '/j ' . target
    if len(getqflist()) != 0 | copen | endif
endfunction</code></pre>

<p>僕は対象のディレクトリに移動して</p>

<pre><code>:vim /word/j **/*</code></pre>

<p>とすることが多いので対象を省略すれば **/* を検索するようにして、//j は全部につけた。それとQuickFixは自動で開くようにしてたのでそれも含めた。これで上のコマンドは</p>

<pre><code>:Grep word</code></pre>

<p>でいけるようになった。パチパチパチ:)</p>]]></content:encoded>
			<wfw:commentRss>http://webtech-walker.com/archive/2010/03/17093357.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>git-svnで削除されたリモートブランチをローカルでも削除する方法</title>
		<link>http://webtech-walker.com/archive/2010/03/16130518.html</link>
		<comments>http://webtech-walker.com/archive/2010/03/16130518.html#comments</comments>
		<pubDate>Tue, 16 Mar 2010 13:05:18 +0900</pubDate>
		<dc:creator>hokaccha</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://webtech-walker.com/archive/2010/03/16130518.html</guid>
		<description><![CDATA[git-svnをつかっていてsvnのリモートブランチを削除しても、ローカルには残ってるのがうざいなあと思ってたのが解決した。]]></description>
			<content:encoded><![CDATA[<p>git-svnをつかっていてsvnのリモートブランチを削除しても、ローカルには残ってるのがうざいなあと思ってたのが解決した。</p>

<p>typester先生に↓を教えてもらいました。++</p>

<p><a href="http://www.furmanek.net/45/removing-git-svn-remote-branch/">Removing git-svn remote branch | furmanek.net</a></p>

<pre><code>$ git branch -r -d my-remote-branch</code></pre>

<p>これでおｋ！</p>
]]></content:encoded>
			<wfw:commentRss>http://webtech-walker.com/archive/2010/03/16130518.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>HTML5のValidatorのGreasemonkey書いた</title>
		<link>http://webtech-walker.com/archive/2010/03/15091949.html</link>
		<comments>http://webtech-walker.com/archive/2010/03/15091949.html#comments</comments>
		<pubDate>Mon, 15 Mar 2010 09:19:49 +0900</pubDate>
		<dc:creator>hokaccha</dc:creator>
		
		<category><![CDATA[XHTML/CSS]]></category>

		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://webtech-walker.com/archive/2010/03/15091949.html</guid>
		<description><![CDATA[<a href="http://html5.validator.nu/">http://html5.validator.nu/</a>というサイトがHTML5のバリデーションのAPIを提供してることを知ったのでGreasemonkeyスクリプト書いてみました。]]></description>
			<content:encoded><![CDATA[<p><a href="http://html5.validator.nu/">http://html5.validator.nu/</a>というサイトがHTML5のバリデーションのAPIを提供してることを知ったのでGreasemonkeyスクリプト書いてみました。</p>

<p><a href="http://github.com/hokaccha/gm-html5validator">http://github.com/hokaccha/gm-html5validator</a></p>

<p><a href="http://github.com/hokaccha/gm-html5validator/raw/master/html5validator.user.js">インストール</a></p>

<p>（なんかgithubで.user.jsのページ開こうとするとうまくいかないっすね）</p>

<p>Greasemonkeyのドメイン許可の設定で有効にしたいページを自分で指定してください。（デフォルトではhttp://localhost/だけ許可してる）</p>

<p>左下にアイコンが表示されて、invalidの場合はアイコンをクリックするとエラーメッセージが表示されます。</p>

<p><img src='http://webtech-walker.com/wp-content/uploads/2010/03/html5validator_1.png' alt='html5validator_1' /></p>
<p><img src='http://webtech-walker.com/wp-content/uploads/2010/03/html5validator_2.png' alt='html5validator_2' /></p>
<p><img src='http://webtech-walker.com/wp-content/uploads/2010/03/html5validator_3.png' alt='html5validator_3' /></p>

<p>自分のURLにGETしてとってきたHTMLをPOSTしてるのでローカルでも動きます。file://では動かないです。（そもそもGreasemonkeyがfile://で動かない？）</p>
]]></content:encoded>
			<wfw:commentRss>http://webtech-walker.com/archive/2010/03/15091949.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>第三回ライブドアテックセミナーにいってきた</title>
		<link>http://webtech-walker.com/archive/2010/03/06165309.html</link>
		<comments>http://webtech-walker.com/archive/2010/03/06165309.html#comments</comments>
		<pubDate>Sat, 06 Mar 2010 16:53:09 +0900</pubDate>
		<dc:creator>hokaccha</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://webtech-walker.com/archive/2010/03/06165309.html</guid>
		<description><![CDATA[メモとれた部分だけ。malaさんの話しがいろんな意味で面白かった。]]></description>
			<content:encoded><![CDATA[<p>メモとれた部分だけ。malaさんの話しがいろんな意味で面白かった。</p>

<h3>クラウド時代のWebストレージ戦略</h3>
<ul>
<li>クラウドとは
<ul>
<li>SaaSとかPaaSとかIaaS</li>
</ul></li>
<li>いいところ
<ul>
<li>物理的なサーバーとかネットワークを意識しない</li>
<li>高可用性、柔軟な課金体制</li>
<li>スケールアウトが用意</li>
<li>リソースを有効活用できる</li>
<li>管理運用が容易</li>
</ul></li>
<li>ライブドア的環境
<ul>
<li>物理サーバーは既にある</li>
<li>提供しているサービスはSaaS的なもの</li>
<li>さらに効率あげたい</li>
<li>(I|P)ssP的な環境をつくりたい</li>
</ul></li>
<li>クラウドっぽい環境を作って自分たちで使う。プライベートクラウド的なものを構築したい</li>
<li>ライブドアが求めるもの
<ul>
<li>ライブドアは画像アップのサービスが多い</li>
<li>webサービスのメディアストレージ（動画とか）</li>
<li>安価に容量を拡張可能</li>
<li>実際の構成は「あまり」意識したくない</li>
</ul></li>
</ul>

<h4>つくってみた</h4>

<ul>
<li>名前 STF(STorage Farm)（後付け）</li>
<li>HTTPを利用した分散ストレージ</li>
<li>シンプルなkey-value（階層構造とかはストレージのレイヤーでは不要）</li>
<li>クライアント側からは巨大なストレージプールとして</li>
<li>レプリケーション</li>
<li>Apacheモジュールベースなので拡張可能</li>
<li>ファイルシステムとしてマウントできない</li>
<li>パーミッション/アクセス制御できない（自分達で使うものなのでまあいいか）</li>
<li>認証は他のApacheモジュール</li>
<li>REST的APIで操作可能
<ul>
<li>リソースに対してリクエストを発行</li>
<li>GET/PUT/DELETEをサポート</li>
<li>パケットの作成/削除</li>
<li>オブジェクトの取得/作成/更新/削除</li>
</ul></li>
<li>Example
<ul>
<li>http://stf.exsample.com/&lt;bucket&gt;/&lt;key&gt;</li>
<li>&lt;key&gt;は/を含むことが可能</li>
</ul></li>
<li>内部の話し
<ul>
<li>極力コード書きたくないのですでにあるものを作る（バグを入れたくないのでコードを書かない）</li>
<li>作りながらサービスに投入</li>
<li>Apache + MySQL + MessageQueue(ActiveMQ|Q4M) + Perl + memcached</li>
<li>オブジェクトIDはMySQLのauto incrementにしたくなるけどdual masterができなくなるのでperlのData::UUIDをCにコピペした</li>
<li>削除はMySQLでdeleteして即座にレスポンスを返してMessage Queueで実際のファイルを消している</li>
<li>mod_stf_storagはmod_dav_fileに非常に似ている</li>
<li>実ファイル名は毎回ユニークになうように生成</li>
<li>Webでの管理用インターフェースはCatalystでつくった</li>
<li>MySQLはオーバースペックなのでやめたい（どうせkey/valueなので）</li>
</ul></li>
</ul>

<h3>ライブドア流クラウド風サービス</h3>

<ul>
<li>ライブドアの強み
<ul>
<li>webサービスに強い</li>
<li>DATAHOTELというデータセンタを運用</li>
<li>回線、インフラを自社で運用</li>
</ul></li>
<li>クラウドの利点
<ul>
<li>短時間でサーバー増設</li>
<li>動的なリソースの増減</li>
</ul></li>
<li>Webのフロントをクラウドにするのがいいんじゃないか</li>
<li>バックエンドは専用サーバーにする</li>
<li>ストレージサーバーは占有</li>
<li>仮想化
<ul>
<li>VMwareはライセンス高い</li>
<li>KVMはそれぞれのサーバーに専用のプログラムを導入する必要がある</li>
<li>Parallelsはライブドアのレンタルサーバーとかでも使ってるのでParallelsにした</li>
</ul></li>
</ul>

<h4>技術編</h4>

<ul>
<li>ぽこぽことサーバーを増やすのでぽこぽこクラウド</li>
<li>ParallelsServer4BareMetal + CentOS 5.4 x86_64</li>
<li>LVSでロードバランシング</li>
<li>ネットワークはtag VLAN</li>
<li>Parallelsのライブマイグレーションは高価なストレージは必ずしも必要ない</li>
<li>リアルサーバーのリソースがたりなくなったらライブマイグレーションでスケールアップ</li>
<li>ライブマイグレーションは容量が多いと時間がかかるのでドキドキ</li>
<li>コントロールパネルを用意してユーザーはそこから色々操作させる</li>
<li>冗長構成管理とかマイグレーションもユーザーが操作できるようにしたい</li>
<li>顧客に管理を任せることで人的リソースを割く必要がなくなる</li>
<li>1インスタンスをとても安い価格でだす予定</li>
<li>今後はDSR構成、オートスケーリング</li>
<li>価格はEC2のスモールよりいいスペックで5000~6000円くらいを狙ってる</li>
<li>トラフィックを課金にするかは検討中</li>
<li>cactiで監視</li>
</ul>

<h3>Livedoor Reader Streaming API</h3>

<ul>
<li>フィードの更新情報をリアルタイムで取得できるAPI</li>
<li>キーワード検索とかできる</li>
<li>外部ドメインでも普通に動く</li>
<li>非公開フィードの記事はでない</li>
<li>ベータテスト中なので仕様とかかわるかも</li>
<li>クローラーが動くタイミングなのでエントリーが投稿されるタイミングじゃない</li>
<li>PubSubHubbub対応サービスは本当にリアルタイム</li>
<li>つかってるもの
<ul>
<li>Q4M</li>
<li>TokyoTyrant</li>
<li>nginx</li>
<li>InnoDBPlugin</li>
<li>PSGI/Plack</li>
<li>Coro</li>
<li>AnyEventy</li>
<li>etc..</li>
</ul></li>
<li>Coroで作られたDosツールとかで負荷試験</li>
<li>データサイズ圧縮中で1TBくらい（テキストのみ）</li>
<li>クローラーは Broker Fetcher Perser Updaterに分割されてる</li>
<li>これらをQ4Mでリレーする</li>
<li>ワーカーはdaemontoolsで動かす</li>
<li>FetcherはCoroで並列にリクエスト</li>
<li>ParserはXML::LibXML + XML::Liberal + 独自</li>
<li>Parserは並列にしてもあんま意味なし</li>
<li>Updater 記事の振り分けしてMySQLに入れる</li>
<li>SKIP、INSERT、UPDATE、SILENT_UPDATEという4つの状態がある</li>
<li>フィード毎に既出のフラグを保持してる</li>
<li>memcached から TokyoTyrantに</li>
<li>複数記事のINSERTはまとめて行う</li>
<li>既出フラグはfeedごとにまとめた</li>
<li>更新されてないののに使されてないフィード</li>
<li>前回のパース結果(Perlのオブジェクト)をTokyoTyrantとかに保存してそれと見比べる</li>
<li>Async::Queue
<ul>
<li>AnyEvent + JSON RPC</li>
<li>Q4Mで色々問題があったので自作のQueueサーバーつくった</li>
<li>リクエストとレスポンスはJSON</li>
<li>キューの先読み</li>
<li>物理的に遠いケースで有用</li>
<li>遅延Publich</li>
<li>先読みバッファがなくなっていない場合は終了しない</li>
<li>落ちないことより落ちても大丈夫なようにするのが重要</li>
<li>優先度のサポート</li>
</ul></li>
<li>MMQ
<ul>
<li>AnyEvent + JSON RPC（みたいなもの）</li>
<li>JSONをフィルタするサーバー</li>
<li>安定してきたら公開する</li>
</ul></li>
<li>Javascript側
<ul>
<li>MXHR(Multipart XHR)</li>
<li>Crossdomain XHR</li>
<li>window.postMessage(HTML5の仕様に含まれてる)</li>
<li>IE対応もiframeの入れ子でがんばってる</li>
<li>window.nameでデータを引き渡す</li>
<li>できるだけ新しいブラウザでやってください</li>
</ul></li>
</ul>

<h3>ニフティクラウド</h3>

<ul>
<li>ニフティによるクラウド提供</li>
<li>クラウドプラットフォームになる条件をニフティは満たしてる</li>
<li>ニフティはクラウド？→条件は満たしてる</li>
<li>約5分で準備可能</li>
<li>コントロールパネルの提供</li>
<li>システム資源のプール化</li>
<li>選べる料金体系</li>
<li>サーバーはCentOS 5.3</li>
<li>RedHat系も準備中</li>
<li>Mini Small Small4 Medium Large</li>
<li>ネットワークはniftyのものと共用→巨大なバックボーン</li>
<li>Miniだけ制限がある</li>
<li>ヘルプデスクサービス、監視サポート、プレミアムサポートを近いうちに用意する</li>
<li>利用までは5日と8分</li>
<li>niftyIDの取得が5日くらいかかる。もってる人は8分で可能</li>
<li>プライベートLANのオプションを使うとネットワークを自分のところだけ分けれる</li>
<li>月額課金の選択には注意→月末に申し込むと一ヶ月分かかる</li>
<li>SSHキーの紛失はやばし</li>
<li>iptablesの閉じすぎに注意（FW提供予定）</li>
<li>32bit版はメモリ2BGまで</li>
<li>VMwareつかってる</li>
<li>とにかく疎結合</li>
<li>いい機能であっても大きくなれないなら使わない</li>
<li>ニフティと一体の基盤</li>
<li>DRSで均等になるように</li>
<li>壊れたときに以下に早く復旧させるかが大事</li>
<li>サーバーはなんでもいい</li>
<li>VLANが多すぎて大変</li>
<li>APIサポートするよ</li>
<li>OSも追加予定(Windows2008, RHEL etx..)</li>
<li>サポート掲示板の開始</li>
<li>カード決済対応予定</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://webtech-walker.com/archive/2010/03/06165309.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Yokoyama.pm #5にいってきた</title>
		<link>http://webtech-walker.com/archive/2010/03/06013431.html</link>
		<comments>http://webtech-walker.com/archive/2010/03/06013431.html#comments</comments>
		<pubDate>Sat, 06 Mar 2010 01:34:31 +0900</pubDate>
		<dc:creator>hokaccha</dc:creator>
		
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://webtech-walker.com/archive/2010/03/06013431.html</guid>
		<description><![CDATA[#5か#6か#5.5か結局わからないけど行ってきた。以下メモ。]]></description>
			<content:encoded><![CDATA[<p>#5か#6か#5.5か結局わからないけど行ってきた。以下メモ。</p>

<h3>cpanminus</h3>

<ul>
<li>cpanコマンドに色々不満があったりしてmiyagawaさんがつくった</li>
<li>最近きてる</li>
<li>環境依存が少ない</li>
<li>高速</li>
<li>省メモリ</li>
<li>プラガブル</li>
</ul>

<p>使おう使おうと思ってまだ使ってないので早く使う！</p>

<h3>Kamui</h3>

<ul>
<li>PlackベースのWAF</li>
<li>configはArkと同じ感じ</li>
<li>モバイルプラグイン豊富</li>
<li>SledgeとArkのいいとこつまみぐい</li>
<li>web/cliを気にせず使える</li>
<li>Object::Container使ってる</li>
</ul>

<p>Arkの面影がところどころに見えるのがおもろい。Sledge使ったことないからその辺はよくわからんかった。</p>

<h3>AnyEvent::IRC::Server</h3>

<ul>
<li>IRCサーバーのAnyEvent実装</li>
<li>ギャル文字変換</li>
</ul>

<p>ラスト2分くらいギャル文字。</p>

<h3>Inside Mbga Open Platform</h3>

<ul>
<li>モバゲにはフレンドの上限がない</li>
<li>物理的に別のところにtableがあるのでjoinできないとかがある</li>
<li>60万人フレンドがいるユーザーとかいる</li>
<li>idをinでひく</li>
<li>何十万件もあるとmysqlの一回のクエリの制限に引っかかるので分割する</li>
<li>MessageとかはActivityはQ4Mでやってる</li>
</ul>

<p>サービスの規模が違いすぎるｗこういうチューニングは本当に大変そうだ。</p>

<h3>Data::Object::Driver</h3>

<ul>
<li>組み込みでキャッシングとパーティションをサポート</li>
<li>マスター/スレーブを考慮されてる</li>
<li>薄くて使いやすい</li>
<li>モデルとしての機能は少ない</li>
<li>pagerとかない</li>
<li>JOINとかしづらい</li>
</ul>

<p>ORMはDBIC以外使ったことないから他のも使ってみたいっすな。</p>

<h3>Polocky</h3>

<ul>
<li>WAFのベースになるフレームワーク</li>
<li>Polockyの上にCatalystライクなWAFのせたりとか</li>
</ul>

<p><a href="http://wikiranking.jp/" title="Wiki専門ランキングサイト Wikiranking.jp">Wikiranking.jp</a>というサイトに実際に使われてるらしいです</p>

<h3>Twib</h3>

<ul>
<li>Appサーバー1台 DBサーバー1台</li>
<li>AnyEvent::FeedでTweetを拾ってhttpから始まる文字列からURLをとってcronでまわす</li>
<li>Q4Mにした</li>
<li>StreamAPIも同時につかってる</li>
<li>とりこぼしの問題</li>
<li>画像サーバー faviconとかプロフィール画像の取得とかにつかってる</li>
<li>NoeというWAFっぽいのを使ってる</li>
<li>チューニング DBICのページャ使わない、like使わない、非正規化</li>
</ul>

<p>Q4M使ってみないな。DBICのチューニングは参考になる。</p>

<h3>OpenSocial Mobile and API Async Proxy</h3>

<ul>
<li>Moxy for OpenSocial</li>
<li>OAuth署名つきのリクエストできたりとかする</li>
<li>リンクを書き直す</li>
<li>API呼び出し用非同期proxyサーバー</li>
<li>ウェブアプリを非同期で書くと書きづらい、PHPとかそもそも非同期できない。</li>
<li>API呼び出しだけ非同期にする。通常の処理はその裏にいるアプリサーバーがやる</li>
</ul>

<p>スライドがこえ部だった件について何も触れず</p>

<h3>Module::Setup</h3>

<ul>
<li>簡単にモジュールとかの雛形がつくれる</li>
<li>flavarを自由につくれる</li>
<li>githubに自動でうｐとかしてくれたりとかも</li>
<li>flavarのテストスクリプトとかある</li>
<li>patchとかあててflavar継承みたいにできる</li>
<li>plugin書ける</li>
<li>依存が多い</li>
<li>Coreをわけて依存を少なくする</li>
</ul>

<p>ちょうど直前にModule::Setup使ってflavar書いてたから内容がわかりやすかった。</p>

<h3>Template::Semantic</h3>

<ul>
<li>普通のHTMLで書ける</li>
<li>idとかタグで変数をセットする感じ</li>
<li>テンプレートを書く作業を省ける</li>
<li>libXML使ってるのでXML的におかしいとエラる</li>
<li>XPathとかCSSセレクタ使える</li>
</ul>

<p>コーディング→組み込みの作業がなくなりそうだから便利げだけど実際使うには勇気がいりそう。面白そうなのでプライベートなプロジェクトで使ってみたい。</p>

<h3>Perl 5.12</h3>

<ul>
<li>5.10の後継</li>
<li>新しい機能はあんまりない</li>
<li>keys/values/eachがArrayにも使える。valuesとか100%使わねーだろ</li>
<li>PL_keyword_plugin</li>
</ul>

<p>gfxさんは就活中。</p>

<p>以上。明日はライブドアテックセミナーいってきます。</p>]]></content:encoded>
			<wfw:commentRss>http://webtech-walker.com/archive/2010/03/06013431.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>git log</title>
		<link>http://webtech-walker.com/archive/2010/03/04034601.html</link>
		<comments>http://webtech-walker.com/archive/2010/03/04034601.html#comments</comments>
		<pubDate>Thu, 04 Mar 2010 03:46:01 +0900</pubDate>
		<dc:creator>hokaccha</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://webtech-walker.com/archive/2010/03/04034601.html</guid>
		<description><![CDATA[についてのメモ。]]></description>
			<content:encoded><![CDATA[<p>についてのメモ。</p>

<h3>出力件数を指定する</h3>

<p>出力件数を表示する。どちらもいっしょ。</p>

<pre><code>$ git log -n 10 # 最新10件のログ
$ git log -10   # 最新10件のログ</code></pre>

<h3>範囲指定</h3>

<p>コミットの範囲を指定する</p>

<pre><code>$ git log HEAD~10..HEAD~5        # 10個前か5個前までのログ
$ git log HEAD~10..              # 10個前から最新までのログ
$ git log 3hg4390fj3..93jj23rn20 # ハッシュ値で範囲指定</code></pre>

<h3>パッチ形式で出力する</h3>

<p>-pでパッチ形式で出力する。</p>

<pre><code>$ git log -p
</code></pre>

<h3>Authorから探す</h3>

<p>コミットした人を指定する。部分一致っぽい。</p>

<pre><code>$ git log --author=hokamura # hokamuraを含むAuthorのログ</code></pre>

<h3>コミット日時から探す</h3>

<p>指定した時間以降のコミットを表示する。どちらもいっしょ。</p>

<pre><code>$ git log --after=2010-01-01 # 2010年1月1日以降のログ
$ git log --since=2010-01-01 # 2010年1月1日以降のログ</code></pre>

<p>指定した時間以前のコミットを表示する。どちらもいっしょ。</p>

<pre><code>$ git log --until=2010-01-01   # 2010年1月1日以前のログ
$ git log --before=2010-01-01  # 2010年1月1日以前のログ</code></pre>

<p>相対的にも書ける。</p>

<pre><code>$ git log --since="2 week ago" # 2週間前までのログ</code></pre>

<h3>コミットログから探す</h3>

<p>&#8211;grepでコミットログのテキストから検索する。</p>

<pre><code>$ git log --grep=added # コミットログにaddedを含むログ</code></pre>

<h3>変更した文字列から探す</h3>

<p>変更下箇所にfoo()を含むコミットだけを検索する</p>

<pre><code>$ git log -S'foo()'</code></pre>

<h3>簡略形で出力する</h3>

<p>&#8211;prettyでコミットログの形式を指定できる。</p>

<p>shortでコミットログを一行目だけ表示にする。</p>

<pre><code>$ git log --pretty=short</code></pre>

<p>onelineだとハッシュ値とコミットログの一行目を合わせて一行で表示する。</p>

<pre><code>$ git log --pretty=oneline</code></pre>

<p>formatで自由にフォーマットを決められる。</p>

<pre><code>$ git log --pretty=format:'%h %s'</code></pre>

<p>formatに指定できるものはhelpなどご参照あれ。</p>

<h3>日付のフォーマットを指定する</h3>

<pre><code>$ git log --date=short
$ git log --date=iso</code></pre>

<h3>グラフを表示する</h3>

<p>コミットのグラフを出力する。</p>

<pre><code>$ git log --graph</code></pre>

<p>これだと一個のコミットの表示が長くてよくわからいので</p>

<pre><code>$ git log --graph --pretty=oneline</code></pre>

<p>とか</p>

<pre><code>$ git log --graph --pretty=format:%s</code></pre>

<p>とかがよさげ。これはちょっと感動した。</p>]]></content:encoded>
			<wfw:commentRss>http://webtech-walker.com/archive/2010/03/04034601.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>はてなダイアリーの検索ワードハイライトを無効にするUserStyle</title>
		<link>http://webtech-walker.com/archive/2010/03/03005043.html</link>
		<comments>http://webtech-walker.com/archive/2010/03/03005043.html#comments</comments>
		<pubDate>Wed, 03 Mar 2010 00:50:43 +0900</pubDate>
		<dc:creator>hokaccha</dc:creator>
		
		<category><![CDATA[XHTML/CSS]]></category>

		<guid isPermaLink="false">http://webtech-walker.com/archive/2010/03/03005043.html</guid>
		<description><![CDATA[はてなダイアリーに検索経由でいくと検索語がハイライトされてるんですけど、たまにハイライトの色と文字色が近すぎてほとんど文字が見えなかったりして結構うざいのでUserStyle書いた。]]></description>
			<content:encoded><![CDATA[<p>はてなダイアリーに検索経由でいくと検索語がハイライトされてるんですけど、たまにハイライトの色と文字色が近すぎてほとんど文字が見えなかったりして結構うざいのでUserStyle書いた。</p>

<p>このくらい探せばありそうな気がしたけどちょっと探したけどなかったから自分で書いた方が早そうなので。</p>

<pre><code>@namespace url(http://www.w3.org/1999/xhtml);

@-moz-document domain("d.hatena.ne.jp") {
    .highlight {
        background: none !important;
        color: inherit !important;
        padding: 0 !important;
    }
}</code></pre>

<p>これをstylishとかで設定すればOK。</p>]]></content:encoded>
			<wfw:commentRss>http://webtech-walker.com/archive/2010/03/03005043.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>画像とかのパスを//で始めるのは何か問題があるのかな</title>
		<link>http://webtech-walker.com/archive/2010/03/01214138.html</link>
		<comments>http://webtech-walker.com/archive/2010/03/01214138.html#comments</comments>
		<pubDate>Mon, 01 Mar 2010 21:41:38 +0900</pubDate>
		<dc:creator>hokaccha</dc:creator>
		
		<category><![CDATA[XHTML/CSS]]></category>

		<guid isPermaLink="false">http://webtech-walker.com/archive/2010/03/01214138.html</guid>
		<description><![CDATA[知らなかったんだけど、画像のパスとかリンクとかhttp:を省略して//から書くことができるんですね。リンクだけじゃなくて画像とかも。そして//から始めると、今見てるページのプロトコルになるんですね（httpだったらhttp、httpsだったらhttpsってこと）。]]></description>
			<content:encoded><![CDATA[<p>知らなかったんだけど、画像のパスとかリンクとかhttp:を省略して//から書くことができるんですね。リンクだけじゃなくて画像とかも。そして//から始めると、今見てるページのプロトコルになるんですね（httpだったらhttp、httpsだったらhttpsってこと）。</p>

<pre><code>&lt;img src="//example.com/banner.gif" alt="banner /&gt;</code></pre>

<p>外部ドメインのバナーとか貼るときとかに全ページ共通でhttp://~と書いてるとhttpsのページでIEがエラー吐くんでhttpとhttpsで切り替えたりしてたんですけど、//から書けばいいんじゃないか疑惑。</p>

<p>これって何か問題あるのかな。ブラウザによって挙動がおかしいとか。問題無ければ使いたいところ。</p>

<p>追記：IEでリクエストが2回走るらしい。yomotsu++</p>]]></content:encoded>
			<wfw:commentRss>http://webtech-walker.com/archive/2010/03/01214138.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>vimのsyntax/perl.vimをちょっと直す</title>
		<link>http://webtech-walker.com/archive/2010/02/17194501.html</link>
		<comments>http://webtech-walker.com/archive/2010/02/17194501.html#comments</comments>
		<pubDate>Wed, 17 Feb 2010 19:45:01 +0900</pubDate>
		<dc:creator>hokaccha</dc:creator>
		
		<category><![CDATA[vim]]></category>

		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://webtech-walker.com/archive/2010/02/17194501.html</guid>
		<description><![CDATA[前々からperlのsyntaxがおかしいところがあるのには気付いてたけど、見て見ぬふりをしていたのを直した。]]></description>
			<content:encoded><![CDATA[<p>追記: mattnさんに教えてもらったsyntax使えばよさげです！ → <a href="http://www.vim.org/scripts/script.php?script_id=2300">perl_mauke.vim</a></p>

<p>前々からperlのsyntaxがおかしいところがあるのには気付いてたけど、見て見ぬふりをしていたのを直した。</p>

<p><code>m!hoge$!</code>とか<code>qq[hoge'fuga]</code>とかがあるとその後のsyntaxがおかしくなってた。</p>

<p><a href="http://www.flickr.com/photos/hokaccha/4364341775/" title="vimのシンタクッス by hokaccha, on Flickr"><img src="http://farm5.static.flickr.com/4005/4364341775_d0590dc491.jpg" width="500" height="409" alt="vimのシンタクッス" /></a></p>

<p>こんな感じでおかしくなってたのを直した。diffはこんな感じ。</p>

<p><a href="http://github.com/hokaccha/dotfiles/commit/2df207ed667cb632aba394e28c9e5f9f2793ceaa">Commit 2df207ed667cb632aba394e28c9e5f9f2793ceaa to hokaccha&#8217;s dotfiles - GitHub</a></p>

<p>$VIMRUNTIME/syntax/perl.vimからうまく差分だけ上書きする方法がわからんかったのでとりあえず~/.vimrc/syntax/perl.vimにまるっとコピって修正した。</p>

<p>m!$!とかでおかしくのなるところの正規表現はこことかを参考にしています。</p>

<p><a href="http://tokyoenvious.xrea.jp/b/software/vim/perl_syntax.html">perl用syntaxをちょっと変更 | 東京嫉妬</a></p>]]></content:encoded>
			<wfw:commentRss>http://webtech-walker.com/archive/2010/02/17194501.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>OAuthのSignature作るときのパラメータのソートは=で連結する前にすべし</title>
		<link>http://webtech-walker.com/archive/2010/02/16195101.html</link>
		<comments>http://webtech-walker.com/archive/2010/02/16195101.html#comments</comments>
		<pubDate>Tue, 16 Feb 2010 19:51:01 +0900</pubDate>
		<dc:creator>hokaccha</dc:creator>
		
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://webtech-walker.com/archive/2010/02/16195101.html</guid>
		<description><![CDATA[OAuth::Liteをつかっててなんかわかんないけど認証がこける現象に出くわしたので調べてみたら、パラメータをソートするときに=で連結した後にソートしてたから特定の場合にソート結果がおかしくなってた。]]></description>
			<content:encoded><![CDATA[<p>少々はまったので。</p>

<p>OAuth::Liteをつかっててなんかわかんないけど認証がこける現象に出くわしたので調べてみたら、パラメータをソートするときに=で連結した後にソートしてたから特定の場合にソート結果がおかしくなってた。</p>

<p>直そうと思ったら一週間くらい前に最新版で修正されてた。なので今は直ってます:)</p>

<p>ちなみに具体的にいうと以下のテストにこけてたです。</p>

<pre><code>use Test::More;
use OAuth::Lite::Util;

my $params = {
    foo =&gt; 'bar',
    foo1 =&gt; 'bar1'
};

is OAuth::Lite::Util::normalize_params($params), 'foo=bar&amp;foo1=bar1';

done_testing;

# Result: 
# 
#   Failed test at /var/folders/rw/rw+QJ8FDEO0V2F8SqobW6k+++TM/-Tmp-/v312769/44 line 9.
#          got: 'foo1=bar1&amp;foo=bar'
#     expected: 'foo=bar&amp;foo1=bar1'</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://webtech-walker.com/archive/2010/02/16195101.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
