<?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, 01 Feb 2012 01:43:58 +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>【bash知恵袋】lsループで、半角スペースが入ったファイル名を正しく処理する</title>
		<link>http://blog.sakatam.net/2012/01/bash-tips-how-to-deal-with-filenames-with-spaces/</link>
		<comments>http://blog.sakatam.net/2012/01/bash-tips-how-to-deal-with-filenames-with-spaces/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 16:36:11 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Programming]]></category>

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

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

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

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

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

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

		<guid isPermaLink="false">http://blog.sakatam.net/?p=271</guid>
		<description><![CDATA[問題
bashでファイルを一括処理したい場合、下記のようなforループをよく使います。
例：拡張子を.txtから.csvに一括変更

for file in `ls *.txt`; do
  mv &#34;${fil [...]]]></description>
			<content:encoded><![CDATA[<h3>問題</h3>
<p>bashでファイルを一括処理したい場合、下記のようなforループをよく使います。</p>
<p>例：拡張子を.txtから.csvに一括変更</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">for</span> <span style="color: #c20cb9; font-weight: bold;">file</span> <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">*</span>.txt<span style="color: #000000; font-weight: bold;">`</span>; <span style="color: #000000; font-weight: bold;">do</span>
  <span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${file}</span>&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${file#.txt}</span>.csv&quot;</span>;
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>ところがファイル名に半角スペースが含まれていると、このスクリプトはうまく動きません。スペースも区切り文字として認識されて余計なループが発動してしまうためです。</p>
<h3>解決法</h3>
<p><a href="http://www.macgeekery.com/tips/cli/handling_filenames_with_spaces_in_bash" target="_blank">こちらの掲示板</a>で、この問題について議論されていました。<br />
いくつかの解決策が提示されていますが、個人的に気に入ったのが&#8221;IFS&#8221;という環境変数を変更する方法です。（評価ポイントは1コマンドの追加だけで対応できる点）</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#40;</span>
<span style="color: #007800;">IFS</span>=$<span style="color: #ff0000;">'\n'</span>;
<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #c20cb9; font-weight: bold;">file</span> <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">*</span>.txt<span style="color: #000000; font-weight: bold;">`</span>; <span style="color: #000000; font-weight: bold;">do</span>
  <span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${file}</span>&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${file#.txt}</span>.csv&quot;</span>;
<span style="color: #000000; font-weight: bold;">done</span>
<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p>区切り文字を改行(\n)に限定することで、半角スペースを含んだファイル名も正しくループされます。<br />
ちなみに、IFS環境変数の変更を局所化するために、処理全体をブラケット&#8221;()&#8221;で囲んでいます。これを忘れると以降の処理に影響するのでご注意ください。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2012/01/bash-tips-how-to-deal-with-filenames-with-spaces/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sublime Text 2 の設定まとめ</title>
		<link>http://blog.sakatam.net/2011/12/setting-up-sublime-text-2/</link>
		<comments>http://blog.sakatam.net/2011/12/setting-up-sublime-text-2/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 05:50:23 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Programming]]></category>

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

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

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

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

		<guid isPermaLink="false">http://blog.sakatam.net/?p=268</guid>
		<description><![CDATA[開発用エディタを TextMate から Sublime Text 2 に乗り換えた際、参考にさせて頂いたサイトなど。


    Sublime Text 2 Tips and Tricks
    知っておくと便利な [...]]]></description>
			<content:encoded><![CDATA[<p>開発用エディタを TextMate から Sublime Text 2 に乗り換えた際、参考にさせて頂いたサイトなど。</p>
<ul>
<li>
    <a href="http://net.tutsplus.com/tutorials/tools-and-tips/sublime-text-2-tips-and-tricks/">Sublime Text 2 Tips and Tricks</a><br/><br />
    知っておくと便利なTips集。特に最初のTip「クールなアイコンへの変更」は必須！
  </li>
<li>
    <a href="https://github.com/sakatam/sublimetext2-icon-updater">Sublime Text 2 Icon Updater</a><br/><br />
    上記の「クールなアイコン」をワンクリックで適用するためのツール（拙作です）。Beta版を使っていると毎日のようにアップデートが走り、アイコンも初期化されてしまいます。このツールで毎回のコピペの手間が省けます。シェルスクリプトだとOSXのアイコンキャッシュが更新されないため、あえてAutomatorアプリ（AppleScript）で作りました。（おとなしく初期アイコンを使えばいいのですが、あのデザインが生理的に受け入れられず・・）
  </li>
<li>
    <a href="https://github.com/SublimeText/TrailingSpaces/blob/master/README.md">TrailingSpaces プラグイン</a><br/><br />
    行末のスペースを強調表示してくれるプラグイン。ファイル種別に関係なく適用されるのが便利。
  </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2011/12/setting-up-sublime-text-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>【Mac OSX】ターミナル(Terminal.app)で新しいタブを開くコマンド</title>
		<link>http://blog.sakatam.net/2011/05/command-for-opening-new-tab-in-terminal-app/</link>
		<comments>http://blog.sakatam.net/2011/05/command-for-opening-new-tab-in-terminal-app/#comments</comments>
		<pubDate>Thu, 19 May 2011 02:15:08 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Programming]]></category>

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

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

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

		<guid isPermaLink="false">http://blog.sakatam.net/?p=262</guid>
		<description><![CDATA[ターミナルで新しいタブを開くコマンドです。

#!/bin/bash
# Commend to open new tab in Mac OS X Leopard Terminal.app.
&#160;
WAIT_FOR [...]]]></description>
			<content:encoded><![CDATA[<p>ターミナルで新しいタブを開くコマンドです。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #666666; font-style: italic;"># Commend to open new tab in Mac OS X Leopard Terminal.app.</span>
&nbsp;
<span style="color: #007800;">WAIT_FOR_TAB</span>=<span style="color: #000000;">0.25</span>
osascript <span style="color: #000000; font-weight: bold;">&gt;/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">1</span> <span style="color: #cc0000; font-style: italic;">&lt;&lt;EOS
    tell application &quot;System Events&quot;
        tell process &quot;Terminal&quot; to keystroke &quot;t&quot; using command down
    end tell
EOS</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;$1&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
<span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #800000;">${WAIT_FOR_TAB}</span>
osascript <span style="color: #000000; font-weight: bold;">&gt;/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">1</span> <span style="color: #cc0000; font-style: italic;">&lt;&lt;EOS
    tell application &quot;Terminal&quot;
      activate
      do script with command &quot;${*}&quot; in selected tab of the front window
    end tell
EOS</span>
<span style="color: #000000; font-weight: bold;">fi</span></pre></div></div>

<p>引数を指定すると、新しいタブでコマンドラインとして実行されます。</p>
<p>使用例（&#8221;tab&#8221;というコマンド名にしてます）</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ tab <span style="color: #ff0000;">'cd /foo &amp;&amp; git pull'</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2011/05/command-for-opening-new-tab-in-terminal-app/feed/</wfw:commentRss>
		</item>
		<item>
		<title>特定の文字列を『含まない』行にマッチする正規表現の書き方</title>
		<link>http://blog.sakatam.net/2011/01/regexp-for-excluding-certain-string/</link>
		<comments>http://blog.sakatam.net/2011/01/regexp-for-excluding-certain-string/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 08:24:17 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Programming]]></category>

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

		<guid isPermaLink="false">http://blog.sakatam.net/?p=242</guid>
		<description><![CDATA[備忘メモ。
たとえば、&#8221;abc&#8221;という文字列を含まない行にマッチする正規表現は、文字列の否定 &#8220;?!&#8221; を応用してこんな感じに書きます。

^((?!abc).)*$

同 [...]]]></description>
			<content:encoded><![CDATA[<p>備忘メモ。</p>
<p>たとえば、&#8221;abc&#8221;という文字列を<strong>含まない</strong>行にマッチする正規表現は、文字列の否定 &#8220;?!&#8221; を応用してこんな感じに書きます。</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">^((?!abc).)*$</pre></div></div>

<p>同様に、&#8221;abc&#8221;で始まらない行、終わらない行にマッチさせるにはそれぞれ以下のようになります。</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># abcで始まらない
^(?!abc).*$
&nbsp;
# abcで終わらない
^((?!abc$).)*$</pre></div></div>

<p>&#8220;abc&#8221;で終わらない行については下記のようにも書けますが、こちらの正規表現は空行にマッチしないので要注意。</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># abcで終わらない その２
^.*(?!abc).{3}$</pre></div></div>

<p>こちらのページを参考にさせていただきました。<br />
<a href="http://www.revulo.com/blog/20080415.html" target="blank">れぶろぐ - [regexp] ある文字列を含まないものにマッチする正規表現</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2011/01/regexp-for-excluding-certain-string/feed/</wfw:commentRss>
		</item>
		<item>
		<title>クノールのリゾットの作り方【イタリア語→日本語訳】</title>
		<link>http://blog.sakatam.net/2010/10/translated-recipe-for-knorr-risotteria/</link>
		<comments>http://blog.sakatam.net/2010/10/translated-recipe-for-knorr-risotteria/#comments</comments>
		<pubDate>Sat, 23 Oct 2010 06:45:22 +0000</pubDate>
		<dc:creator>sakatam</dc:creator>
		
		<category><![CDATA[Photolog]]></category>

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

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

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

		<guid isPermaLink="false">http://blog.sakatam.net/?p=227</guid>
		<description><![CDATA[イタリアのお土産に、クノールのインスタント・リゾット（Knorr Risotteriaという商品名）を買ってきました。

いざ作ろうと思ったら、調理手順がすべてイタリア語でさっぱり読めない・・。
仕方ないのでGoogle [...]]]></description>
			<content:encoded><![CDATA[<p>イタリアのお土産に、クノールのインスタント・リゾット（Knorr Risotteriaという商品名）を買ってきました。<br />
<a href="http://www.flickr.com/photos/sakatam/5106911092/"><img alt="" src="http://farm2.static.flickr.com/1134/5106911092_8e8d6bb786_m.jpg" title="Knorr Risotteria" class="alignnone" width="179" height="240" /></a></p>
<p>いざ作ろうと思ったら、調理手順がすべてイタリア語でさっぱり読めない・・。<br />
仕方ないのでGoogle翻訳の力を借りて翻訳しました。</p>
<ol>
<li>鍋に500cc (2.5カップ) の冷水を張り、袋の中身を注ぎ入れる。一通り混ぜてから火にかけ、沸騰させる。</li>
<li>蓋をせず中火で約15分。汁がなくなるまで、かき混ぜながら煮込んだら完成。後半は特によくかき混ぜること。</li>
<li>少量のバター、もしくはエキストラバージンオリーブオイル大さじ1を追加してよく混ぜると、よりクリーミーでおいしいリゾットに仕上がる。</li>
</ol>
<p>以下原文です。</p>
<ol>
<li>Versa il contenuto della busta in mezzo intro d&#8217;acqua fredda (o 2 e 1/2 bicchieri da cucina). Mescola e porta a bollore.</li>
<li>Fai cuocere a fuoco medio, senza coperchio, per 15 minuti circa, finché tutta I&#8217;acqua non sia stata assorbita. Mescola di tanto in tanto, soprattutto a fine cottura.</li>
<li>Per un risotta ancora più gustoso e mantecato,  aggiungi una noce di burro o un cucchiaio d&#8217;olio extra vergine d&#8217;olivia. Mescola bene e servi.</li>
</ol>
<p><a href="http://www.flickr.com/photos/sakatam/5106913932/"><img alt="" src="http://farm5.static.flickr.com/4106/5106913932_eb60ca47ba.jpg" title="Knorr Risotteria - Instructions" class="alignnone" width="374" height="500" /></a><br />
お土産でクノールリゾットをもらったけど作り方が分からない〜！とお困りの方の参考になれば幸いです。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sakatam.net/2010/10/translated-recipe-for-knorr-risotteria/feed/</wfw:commentRss>
		</item>
		<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 -I' 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 -I'</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 -I'</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>
<p>2010-10-29 追記：lessの-Iオプションを追加すると、検索が Ignorecase (ただし検索文字列に大文字が入ってる場合はCase Sense) になって便利です。</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>
	</channel>
</rss>

