<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>sakatam blog</title>
	<atom:link href="http://blog.sakatam.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sakatam.net</link>
	<description>日々の備忘録として</description>
	<pubDate>Wed, 28 Jul 2010 10:00:02 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>【git】git-show で特定リビジョンでのファイル内容を表示する</title>
		<link>http://blog.sakatam.net/2010/07/view-file-content-of-specific-revision-with-git-show/</link>
		<comments>http://blog.sakatam.net/2010/07/view-file-content-of-specific-revision-with-git-show/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 07:06:38 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[command]]></category>

		<category><![CDATA[git]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.sakatam.net/?p=222</guid>
		<description><![CDATA[よく忘れちゃうのでメモ。
指定したリビジョン時点でのファイル内容を表示させるには、git show を使います。

$ git show リビジョン:ファイルパス


たとえばこんな感じ。

$ git show d11 [...]]]></description>
			<content:encoded><![CDATA[<p>よく忘れちゃうのでメモ。<br />
指定したリビジョン時点でのファイル内容を表示させるには、git show を使います。<br />
<code><br />
$ git show リビジョン:ファイルパス<br />
</code><br />
<span id="more-222"></span><br />
たとえばこんな感じ。<br />
<code><br />
$ git show d11eb50:app/models/user.rb<br />
</code></p>
<p>オブジェクトIDに加えてファイルパスを指定することで、Diffじゃなくてファイルの中身を表示できます。<br />
ちなみに git-showの代わりに<a href="http://www.kernel.org/pub/software/scm/git/docs/git-cat-file.html">git-cat-file</a>でも同じできるみたいです。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2010/07/view-file-content-of-specific-revision-with-git-show/feed/</wfw:commentRss>
		</item>
		<item>
		<title>【git】git diff で長い行を折り返す設定</title>
		<link>http://blog.sakatam.net/2010/04/setting-for-wrapping-long-lines-in-git-dif/</link>
		<comments>http://blog.sakatam.net/2010/04/setting-for-wrapping-long-lines-in-git-dif/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 02:09:32 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[git]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[shell]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.sakatam.net/?p=218</guid>
		<description><![CDATA[GIT_PAGER 環境変数に less -R を設定してあげると、長い行が折り返して表示されるようになります。

GIT_PAGER='less -r' git diff

面倒なので、自分は .bashrc で設定し [...]]]></description>
			<content:encoded><![CDATA[<p>GIT_PAGER 環境変数に less -R を設定してあげると、長い行が折り返して表示されるようになります。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">GIT_PAGER</span>=<span style="color: #ff0000;">'less -r'</span> git <span style="color: #c20cb9; font-weight: bold;">diff</span></pre></div></div>

<p>面倒なので、自分は .bashrc で設定しちゃってます。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">GIT_PAGER</span>=<span style="color: #ff0000;">'less -r'</span></pre></div></div>

<p>参考：<a href="http://stackoverflow.com/questions/136178/git-diff-handling-long-lines" target="_blank">git diff - handling long lines? - Stack Overflow:</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2010/04/setting-for-wrapping-long-lines-in-git-dif/feed/</wfw:commentRss>
		</item>
		<item>
		<title>【Ruby】複数ファイルの内容を、ワンライナーで一括置換</title>
		<link>http://blog.sakatam.net/2010/04/replacing-strings-over-multiple-files-with-one-line-ruby-script/</link>
		<comments>http://blog.sakatam.net/2010/04/replacing-strings-over-multiple-files-with-one-line-ruby-script/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 15:32:56 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[regexp]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[shell]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.sakatam.net/?p=205</guid>
		<description><![CDATA[いっつも忘れるのでメモ。
以下の簡単な例では、特定ディレクトリ以下の全ての txt ファイルを対象に、&#8221;foo&#8221; または &#8220;bar&#8221; という文字列に &#8220;baz&#038; [...]]]></description>
			<content:encoded><![CDATA[<p>いっつも忘れるのでメモ。</p>
<p>以下の簡単な例では、特定ディレクトリ以下の全ての txt ファイルを対象に、&#8221;foo&#8221; または &#8220;bar&#8221; という文字列に &#8220;baz&#8221; をくっつけます。こういう用途では Perl が王道ですが、Ruby好きとしてはこっちを使いたいですよね。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">find</span> . <span style="color: #660033;">-name</span> <span style="color: #000000; font-weight: bold;">*</span>.txt <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">xargs</span> ruby <span style="color: #660033;">-i</span> <span style="color: #660033;">-p</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'$_.gsub! %r{(foo|bar)}, %q{\1baz}'</span></pre></div></div>

<p><em>-i -p -e</em> などRubyの起動オプションの詳細については、下記の参考サイトをご覧ください。</p>
<h3>Mac OSX 環境での注意点</h3>
<p>ちなみにMac OSX 環境ではファイル名・ディレクトリ名にスペースが入るので、<em>find -print0</em> と <em>xargs -0</em> の組み合わせで find コマンドの出力をNULL文字区切りにするのがセオリーだそうです。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">find</span> . <span style="color: #660033;">-name</span> <span style="color: #000000; font-weight: bold;">*</span>.txt <span style="color: #660033;">-print0</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">xargs</span> <span style="color: #660033;">-0</span> ruby <span style="color: #660033;">-i</span> <span style="color: #660033;">-p</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'$_.gsub! %r{(foo|bar)}, %q{\1baz}'</span></pre></div></div>

<h3>参考にさせていただいたサイト</h3>
<ul>
<li><a href="http://www.ruby-lang.org/ja/man/html/Ruby_A4CEB5AFC6B0.html">Rubyの起動 - Rubyリファレンスマニュアル</a></li>
<li><a href="http://www.otsune.com/diary/2007/03/29/1.html">void GraphicWizardsLair( void ); // いまどきfindとxargsを使う時は-print0と-0を忘れずに</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2010/04/replacing-strings-over-multiple-files-with-one-line-ruby-script/feed/</wfw:commentRss>
		</item>
		<item>
		<title>【Ruby】UDPマルチキャスト送信で Errno::EADDRNOTAVAIL</title>
		<link>http://blog.sakatam.net/2010/01/ruby-udp-multicast-caused-error/</link>
		<comments>http://blog.sakatam.net/2010/01/ruby-udp-multicast-caused-error/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 02:43:52 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[error]]></category>

		<category><![CDATA[mac]]></category>

		<category><![CDATA[osx]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[snowleopard]]></category>

		<category><![CDATA[solution]]></category>

		<guid isPermaLink="false">http://blog.sakatam.net/?p=199</guid>
		<description><![CDATA[Mac を Snow Leopard 化してから、UDPマルチキャスト送信時に以下のエラーが起きるようになってしまいました。

Errno::EADDRNOTAVAIL: Can't assign requested a [...]]]></description>
			<content:encoded><![CDATA[<p>Mac を Snow Leopard 化してから、UDPマルチキャスト送信時に以下のエラーが起きるようになってしまいました。<br />
<code><br />
Errno::EADDRNOTAVAIL: Can't assign requested address - sendto(2)<br />
</code><br />
使用しているRubyのバージョンは 1.8.7 p174。<br />
<span id="more-199"></span><br />
具体的なコードは以下の通りです（簡略化してます）：</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'ipaddr'</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Multi-cast IP</span>
ip = <span style="color:#996600;">&quot;224.0.0.10&quot;</span>
port = <span style="color:#006666;">9876</span>
maddr = IPAddr.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>ip<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">hton</span> <span style="color:#006600; font-weight:bold;">+</span> IPAddr.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'0.0.0.0'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">hton</span>
<span style="color:#008000; font-style:italic;"># UDPソケットオブジェクトを作る</span>
sock = UDPSocket.<span style="color:#9900CC;">new</span>
sock.<span style="color:#9900CC;">setsockopt</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#6666ff; font-weight:bold;">Socket::SOL_SOCKET</span>,<span style="color:#6666ff; font-weight:bold;">Socket::SO_REUSEADDR</span>,<span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>
sock.<span style="color:#9900CC;">bind</span><span style="color:#006600; font-weight:bold;">&#40;</span>ip, port<span style="color:#006600; font-weight:bold;">&#41;</span>
sock.<span style="color:#9900CC;">setsockopt</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#6666ff; font-weight:bold;">Socket::IPPROTO_IP</span>, <span style="color:#6666ff; font-weight:bold;">Socket::IP_ADD_MEMBERSHIP</span>, maddr<span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#008000; font-style:italic;"># メッセージを送信</span>
sock.<span style="color:#9900CC;">send</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'hello'</span>, <span style="color:#006666;">0</span>, ip, port<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">to_s</span></pre></div></div>

<p>Leopard では問題なかったのになぜ？？<br />
小一時間を費やして試行錯誤した結果、マルチキャスト用のネットワークインターフェイスを指定してあげることで問題解決できることが分かりました。</p>
<p>改良版のコードは以下の通り：</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'ipaddr'</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Multi-cast IP</span>
ip = <span style="color:#996600;">&quot;224.0.0.10&quot;</span>
port = <span style="color:#006666;">9876</span>
maddr = IPAddr.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>ip<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">hton</span> <span style="color:#006600; font-weight:bold;">+</span> IPAddr.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'0.0.0.0'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">hton</span>
<span style="color:#008000; font-style:italic;"># UDPソケットオブジェクトを作る</span>
sock = UDPSocket.<span style="color:#9900CC;">new</span>
sock.<span style="color:#9900CC;">setsockopt</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#6666ff; font-weight:bold;">Socket::SOL_SOCKET</span>,<span style="color:#6666ff; font-weight:bold;">Socket::SO_REUSEADDR</span>,<span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>
sock.<span style="color:#9900CC;">bind</span><span style="color:#006600; font-weight:bold;">&#40;</span>ip, port<span style="color:#006600; font-weight:bold;">&#41;</span>
sock.<span style="color:#9900CC;">setsockopt</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#6666ff; font-weight:bold;">Socket::IPPROTO_IP</span>, <span style="color:#6666ff; font-weight:bold;">Socket::IP_ADD_MEMBERSHIP</span>, maddr<span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#008000; font-style:italic;"># IFを指定（この場合はループバック）</span>
sock.<span style="color:#9900CC;">setsockopt</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#6666ff; font-weight:bold;">Socket::IPPROTO_IP</span>, <span style="color:#6666ff; font-weight:bold;">Socket::IP_MULTICAST_IF</span>, IPAddr.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'127.0.0.1'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">hton</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#008000; font-style:italic;"># メッセージを送信</span>
sock.<span style="color:#9900CC;">send</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'hello'</span>, <span style="color:#006666;">0</span>, ip, port<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">to_s</span></pre></div></div>

<p>原因はよく分かりませんが、エラーメッセージから察するにネイティブコールでの問題のようですね。<br />
差し当たりこの方法で解決できたので、Snow Leopard からの UDP Multicast で同様のエラーに遭遇された方は参考にしてみてください。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2010/01/ruby-udp-multicast-caused-error/feed/</wfw:commentRss>
		</item>
		<item>
		<title>【Mac OSX】Quicksilver でファイルの親フォルダを開く方法</title>
		<link>http://blog.sakatam.net/2009/11/how-to-open-parent-directory-of-certain-file-in-quicksilver/</link>
		<comments>http://blog.sakatam.net/2009/11/how-to-open-parent-directory-of-certain-file-in-quicksilver/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 07:25:44 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[mac]]></category>

		<category><![CDATA[osx]]></category>

		<category><![CDATA[quicksilver]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.sakatam.net/?p=192</guid>
		<description><![CDATA[Mac OSX の便利なランチャーソフト Quicksilver（クイックシルバー）で、ファイルの含まれるフォルダを Finder で開く方法が分かったのでメモ。ずーっと知りたかった操作なんですが、最近ようやく分かって非 [...]]]></description>
			<content:encoded><![CDATA[<p>Mac OSX の便利なランチャーソフト Quicksilver（クイックシルバー）で、ファイルの含まれるフォルダを Finder で開く方法が分かったのでメモ。ずーっと知りたかった操作なんですが、最近ようやく分かって非常に重宝してます。<br />
<span id="more-192"></span></p>
<ol>
<li>ファイル名をタイプして対象ファイルを特定する。</li>
<li>Command キーを押しながら Enter を押す。</li>
<li>以上〜。</li>
</ol>
<p>どうも spotlight でも同様のキーで対象のファイルを Finder で表示できるらしいです。全然知らなかった。。</p>
<p>お困りの方がいたら参考にして頂ければ幸いです。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2009/11/how-to-open-parent-directory-of-certain-file-in-quicksilver/feed/</wfw:commentRss>
		</item>
		<item>
		<title>【port / MacPorts】curl で https を使う方法</title>
		<link>http://blog.sakatam.net/2009/09/using-https-connection-on-curl-mac-port/</link>
		<comments>http://blog.sakatam.net/2009/09/using-https-connection-on-curl-mac-port/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 06:50:47 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[mac]]></category>

		<category><![CDATA[osx]]></category>

		<category><![CDATA[port]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.sakatam.net/?p=187</guid>
		<description><![CDATA[テストで curl コマンドを使っていて、SSL 接続に限定している API を呼ぼうとして上手くいかなかった時のメモ。２ステップで解決しました。

 port のコンパイルオプションを&#8211;without-ss [...]]]></description>
			<content:encoded><![CDATA[<p>テストで curl コマンドを使っていて、SSL 接続に限定している API を呼ぼうとして上手くいかなかった時のメモ。２ステップで解決しました。</p>
<ol>
<li> port のコンパイルオプションを&#8211;without-ssl から &#8211;with-ssl に変更して再インストールする</li>
<li> curl 呼び出し時には -k オプションで証明書のチェックを省略する</li>
</ol>
<p>参考にさせていただいたページ： http://hikariworks.jp/blog/2009/01/09/curl%E3%81%AEssl%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2009/09/using-https-connection-on-curl-mac-port/feed/</wfw:commentRss>
		</item>
		<item>
		<title>NASに保存したTimeMachineバックアップからMacを復元インストールする方法</title>
		<link>http://blog.sakatam.net/2009/08/how-to-restore-timemachine-backup-stored-on-nas/</link>
		<comments>http://blog.sakatam.net/2009/08/how-to-restore-timemachine-backup-stored-on-nas/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 13:22:39 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[linkstation]]></category>

		<category><![CDATA[mac]]></category>

		<category><![CDATA[nas]]></category>

		<category><![CDATA[osx]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.sakatam.net/?p=163</guid>
		<description><![CDATA[このページを参考にしつつ、我が家の MacBook Air のバックアップを linkstation / LS-WHGL に設定してみました。
数日後にバックアップからの復元インストールを行ったのですが、一点ハマった箇所 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zqwoo.jp/sak_bfqa/show_c/BUF17437#1" target="_blank">このページ</a>を参考にしつつ、我が家の MacBook Air のバックアップを linkstation / LS-WHGL に設定してみました。</p>
<p>数日後にバックアップからの復元インストールを行ったのですが、一点ハマった箇所があったので忘れないうちにメモしておきます。<br />
NAS上のTimeMachineバックアップからの復元に挑戦する前に、是非ともご一読ください。<br />
<span id="more-163"></span></p>
<h3>インストールの開始</h3>
<p>開始の手順は通常の再インストールと変わりません。<br />
別のMac の DVDドライブ からリモートインストールしたので、option キーを押しながら起動。Wi-Fi 経由で共有された Mac OS インストールディスク に接続。<br />
あとは言語選択まで普通にすすめて大丈夫です。</p>
<h3>★Time Machineディレクトリのマウント</h3>
<p>コレが重要です。復元インストール時にはNASへの自動接続はされないので、これをやっておかないとバックアップの一覧には何も表示されません。<br />
言語選択の後、以下の手順で NAS をマウントしてください。</p>
<ol>
<li>「ユーティリティ＞シェル」を選択してシェルを起動します。</li>
<li>下記のコマンドで TimeMachine バックアップファイルが置かれているディレクトリをマウントします。(NAS のユーザ名、パスワード、IPアドレスやディレクトリ名はご自身の環境に応じて変えてください。)

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">		$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>Volumes<span style="color: #000000; font-weight: bold;">/</span>timemachine
		$ mount_afp afp:<span style="color: #000000; font-weight: bold;">//</span>USER:PASSWORD<span style="color: #000000; font-weight: bold;">@</span>192.168.xx.xx<span style="color: #000000; font-weight: bold;">/</span>timemachine <span style="color: #000000; font-weight: bold;">/</span>Volumes<span style="color: #000000; font-weight: bold;">/</span>timemachine</pre></div></div>

</li>
</ol>
<h3>バックアップからのシステム復元</h3>
<p>「ユーティリティ＞バックアップからシステムを復元」を選択。<br />
先ほどマウントしたバックアップファイルが表示されるはずなので、それを選ぶ。あとは画面の指示通りで OK です。</p>
<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=sakatam-22&#038;o=9&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;md=1X69VDGQCMF7Z30FM082&#038;asins=B001AOZ8W0" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2009/08/how-to-restore-timemachine-backup-stored-on-nas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>【port / MacPorts】古いバージョンのパッケージをインストールする方法</title>
		<link>http://blog.sakatam.net/2009/06/how-to-install-outdated-port-packages/</link>
		<comments>http://blog.sakatam.net/2009/06/how-to-install-outdated-port-packages/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 04:18:09 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[mac]]></category>

		<category><![CDATA[osx]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.sakatam.net/?p=152</guid>
		<description><![CDATA[いつも大変便利に使わせてもらっているMac OS Xのパッケージ管理システム port ですが、旧バージョンのパッケージをインストールしようとして若干ハマったので解決方法をメモしておきます。
やりたかったこと
Ruby1 [...]]]></description>
			<content:encoded><![CDATA[<p>いつも大変便利に使わせてもらっているMac OS Xのパッケージ管理システム port ですが、旧バージョンのパッケージをインストールしようとして若干ハマったので解決方法をメモしておきます。</p>
<h2>やりたかったこと</h2>
<p>Ruby1.8.7-p174 がインストールされているマシンに Ruby1.8.7-p72 を追加して、必要に応じてバージョンを切り替えたい。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ port installed ruby
The following ports are currently installed:
  ruby <span style="color: #000000; font-weight: bold;">@</span>1.8.7-p174_0+thread_hooks <span style="color: #7a0874; font-weight: bold;">&#40;</span>active<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<h2>失敗した方法</h2>
<p>通常の install コマンドにバージョン指定を加えて実行してみましたが、うまくいきません。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> port <span style="color: #c20cb9; font-weight: bold;">install</span> ruby <span style="color: #000000; font-weight: bold;">@</span>1.8.7-p72
→失敗</pre></div></div>

<h2>うまくいった方法</h2>
<p>よくよく調べてみると、<a href="http://trac.macports.org/wiki/howto/InstallingOlderPort" target="_blank">公式サイトにやり方がのってました</a>。</p>
<ol>
<li>欲しいパッケージのリビジョン番号を調べて</li>
<li>そのリビジョンのPortFileを手動でダウンロード</li>
<li>で、インストール</li>
</ol>
<p>なるほど簡単ですね。早速<a href="http://trac.macports.org/browser/trunk/dports">リポジトリブラウザ</a>を開いて lang > ruby と辿り、画面右上の Revision Log からリビジョン番号を突き止めます。（ちなみに今回は 48382 でした。）<br />
リビジョン番号さえ判明すればあとは簡単。subversionでファイルをダウンロードして、インストールするだけです。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>Downloads
$ <span style="color: #666666; font-style: italic;"># リビジョン指定でcheckout</span>
$ <span style="color: #c20cb9; font-weight: bold;">svn</span> <span style="color: #c20cb9; font-weight: bold;">co</span> <span style="color: #660033;">-r</span> <span style="color: #000000;">48382</span> http:<span style="color: #000000; font-weight: bold;">//</span>svn.macports.org<span style="color: #000000; font-weight: bold;">/</span>repository<span style="color: #000000; font-weight: bold;">/</span>macports<span style="color: #000000; font-weight: bold;">/</span>trunk<span style="color: #000000; font-weight: bold;">/</span>dports<span style="color: #000000; font-weight: bold;">/</span>lang<span style="color: #000000; font-weight: bold;">/</span>ruby ruby1.8.7-p72_3
$ <span style="color: #7a0874; font-weight: bold;">cd</span> ruby1.8.7-p72_3
$ <span style="color: #666666; font-style: italic;"># インストール済みの Ruby を無効化しておく</span>
$ port deactivate ruby
$ port <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div>

<p>これでお目当てのバージョンをインストールすることができました。ホッ。<br />
ポートのバージョン指定でお困りの方は参考にしてみてください。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2009/06/how-to-install-outdated-port-packages/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Railsのログ書式を変更する方法</title>
		<link>http://blog.sakatam.net/2009/06/how-to-change-the-log-format-of-ruby-on-rails/</link>
		<comments>http://blog.sakatam.net/2009/06/how-to-change-the-log-format-of-ruby-on-rails/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 09:11:03 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[logs]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[snippet]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.sakatam.net/?p=146</guid>
		<description><![CDATA[Ruby on Railsからログ出力すると、日付やログレベルが表示されなくて困る場合があります。そこで、手っ取り早くログフォーマットを変更するスニペットを書いてみました。
ActiveSupportでLoggerの出力 [...]]]></description>
			<content:encoded><![CDATA[<p>Ruby on Railsからログ出力すると、日付やログレベルが表示されなくて困る場合があります。そこで、手っ取り早くログフォーマットを変更するスニペットを書いてみました。<br />
ActiveSupportでLoggerの出力メソッドを上書きしてるのが原因のようなので、そこをフックしてログを整形してます。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#6666ff; font-weight:bold;">ActiveSupport::BufferedLogger</span>.<span style="color:#9900CC;">class_eval</span> <span style="color:#9966CC; font-weight:bold;">do</span>
 SEVERITIES = <span style="color:#0000FF; font-weight:bold;">self</span>::Severity.<span style="color:#9900CC;">constants</span>.<span style="color:#9900CC;">inject</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>val, con<span style="color:#006600; font-weight:bold;">|</span> val<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC0066; font-weight:bold;">eval</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;self::#{con}&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#93;</span> = con; val <span style="color:#006600; font-weight:bold;">&#125;</span>
 <span style="color:#9966CC; font-weight:bold;">def</span> add_with_format<span style="color:#006600; font-weight:bold;">&#40;</span>severity, message = <span style="color:#0000FF; font-weight:bold;">nil</span>, progname = <span style="color:#0000FF; font-weight:bold;">nil</span>, <span style="color:#006600; font-weight:bold;">&amp;</span>block<span style="color:#006600; font-weight:bold;">&#41;</span>
   add_without_format<span style="color:#006600; font-weight:bold;">&#40;</span>severity, <span style="color:#0000FF; font-weight:bold;">nil</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#996600;">&quot;%s [%s] %s&quot;</span> <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">now</span>, SEVERITIES<span style="color:#006600; font-weight:bold;">&#91;</span>severity<span style="color:#006600; font-weight:bold;">&#93;</span>, message<span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
 <span style="color:#9966CC; font-weight:bold;">end</span>
 alias_method_chain <span style="color:#ff3333; font-weight:bold;">:add</span>, <span style="color:#ff3333; font-weight:bold;">:format</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>このスニペットを実行すると、<br />
Thu Jun 25 16:23:14 +0900 2009 [INFO] XXXXXXX<br />
のようなログが出力されるようになります。<br />
フォーマットは適当なので、好みに応じて適宜修正してご利用ください。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2009/06/how-to-change-the-log-format-of-ruby-on-rails/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ruby / Memcached キーの一覧を取得する</title>
		<link>http://blog.sakatam.net/2009/06/ruby-memcache-client-extension-for-item-listing/</link>
		<comments>http://blog.sakatam.net/2009/06/ruby-memcache-client-extension-for-item-listing/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 11:06:51 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[memcached]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[snippet]]></category>

		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.sakatam.net/?p=132</guid>
		<description><![CDATA[最近memcachedを仕事で使いはじめたので、勉強がてらmemcache-client拡張を書いてみました。保存されているアイテムの一覧を取得するメソッド、dump_all_itemsです。
デバッグの用途はもちろんで [...]]]></description>
			<content:encoded><![CDATA[<p>最近memcachedを仕事で使いはじめたので、勉強がてらmemcache-client拡張を書いてみました。保存されているアイテムの一覧を取得するメソッド、dump_all_itemsです。</p>
<p>デバッグの用途はもちろんですが、初心者にとってはmemcachedのデータ構造を確認することで、仕組み理解する手助けになるかと思います。</p>
<p>irbを起動して、以下のコードをコピペしてください。（要memcache-client）</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'memcache'</span>
<span style="color:#008000; font-style:italic;"># dump all items</span>
MemCache.<span style="color:#9900CC;">class_eval</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> dump_all_items
    <span style="color:#CC0066; font-weight:bold;">raise</span> MemCacheError, <span style="color:#996600;">&quot;No active servers&quot;</span> <span style="color:#9966CC; font-weight:bold;">unless</span> active?
    server_items = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
&nbsp;
    <span style="color:#0066ff; font-weight:bold;">@servers</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>server<span style="color:#006600; font-weight:bold;">|</span>
      sock = server.<span style="color:#9900CC;">socket</span>
      <span style="color:#CC0066; font-weight:bold;">raise</span> MemCacheError, <span style="color:#996600;">&quot;No connection to server&quot;</span> <span style="color:#9966CC; font-weight:bold;">if</span> sock.<span style="color:#0000FF; font-weight:bold;">nil</span>?
&nbsp;
      <span style="color:#9966CC; font-weight:bold;">begin</span>
        sock.<span style="color:#9900CC;">write</span> <span style="color:#996600;">&quot;stats items<span style="color:#000099;">\r</span><span style="color:#000099;">\n</span>&quot;</span>
        items = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
        items_dump = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
        <span style="color:#9966CC; font-weight:bold;">while</span> line = sock.<span style="color:#CC0066; font-weight:bold;">gets</span> <span style="color:#9966CC; font-weight:bold;">do</span>
          <span style="color:#9966CC; font-weight:bold;">break</span> <span style="color:#9966CC; font-weight:bold;">if</span> line == <span style="color:#996600;">&quot;END<span style="color:#000099;">\r</span><span style="color:#000099;">\n</span>&quot;</span>
          <span style="color:#9966CC; font-weight:bold;">if</span> line =~ <span style="color:#006600; font-weight:bold;">/</span>^STAT items:<span style="color:#006600; font-weight:bold;">&#40;</span>\d<span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#41;</span>:number <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span>\w\.\:<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">/</span> <span style="color:#9966CC; font-weight:bold;">then</span>
            items<span style="color:#006600; font-weight:bold;">&#91;</span>$<span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span> = $2.<span style="color:#CC0066; font-weight:bold;">chomp</span>
          <span style="color:#9966CC; font-weight:bold;">end</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
        items.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>k,v<span style="color:#006600; font-weight:bold;">|</span>
          sock.<span style="color:#9900CC;">write</span> <span style="color:#996600;">&quot;stats cachedump #{k} #{v}<span style="color:#000099;">\r</span><span style="color:#000099;">\n</span>&quot;</span>
          <span style="color:#9966CC; font-weight:bold;">while</span> line = sock.<span style="color:#CC0066; font-weight:bold;">gets</span> <span style="color:#9966CC; font-weight:bold;">do</span>
            <span style="color:#9966CC; font-weight:bold;">break</span> <span style="color:#9966CC; font-weight:bold;">if</span> line == <span style="color:#996600;">&quot;END<span style="color:#000099;">\r</span><span style="color:#000099;">\n</span>&quot;</span>
            <span style="color:#9966CC; font-weight:bold;">if</span> line =~ <span style="color:#006600; font-weight:bold;">/</span>^ITEM <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span>\w:<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#40;</span>.<span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">/</span> <span style="color:#9966CC; font-weight:bold;">then</span>
              items_dump<span style="color:#006600; font-weight:bold;">&#91;</span>$<span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span> = $2.<span style="color:#CC0066; font-weight:bold;">chomp</span>
            <span style="color:#9966CC; font-weight:bold;">end</span>
          <span style="color:#9966CC; font-weight:bold;">end</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
        server_items<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;#{server.host}:#{server.port}&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> = items_dump
      <span style="color:#9966CC; font-weight:bold;">rescue</span> SocketError, <span style="color:#CC00FF; font-weight:bold;">SystemCallError</span>, <span style="color:#CC00FF; font-weight:bold;">IOError</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> err
        server.<span style="color:#9900CC;">close</span>
        <span style="color:#CC0066; font-weight:bold;">raise</span> MemCacheError, err.<span style="color:#9900CC;">message</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    server_items
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>で以下のようなコードを実行すると、指定したMemcachedサーバが保持している情報をHashとして取得でき、キャッシュ内容を確認することができます。こりゃ便利だ。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">m = MemCache.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'localhost:11211'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
m.<span style="color:#9900CC;">dump_all_items</span></pre></div></div>

<p>※参考にさせていただいたページ：<a href="http://blog.cles.jp/item/2141">memcachedの内容を確認するには</a></p>
<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=sakatam-22&#038;o=9&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;md=1X69VDGQCMF7Z30FM082&#038;asins=4873113113" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2009/06/ruby-memcache-client-extension-for-item-listing/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
