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

<channel>
	<title>tune web &#187; プログラミング</title>
	<atom:link href="http://www.tsunematsu.cc/category/technology/programming-technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tsunematsu.cc</link>
	<description>日々の出来事の記録</description>
	<lastBuildDate>Sat, 29 Oct 2011 14:04:20 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Windows/Linux両環境で動作するC言語ソースの一元管理をGitで行う</title>
		<link>http://www.tsunematsu.cc/2010/05/02/2864/</link>
		<comments>http://www.tsunematsu.cc/2010/05/02/2864/#comments</comments>
		<pubDate>Sat, 01 May 2010 15:11:40 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[文字コード]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/?p=2864</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2010/05/02/2864/"><img align="left" hspace="5" width="150" src="http://ecx.images-amazon.com/images/I/41R5gj5VRFL._SL160_.jpg" class="alignleft wp-post-image tfe" alt="入門Git" title="" /></a>gitでリポジトリからのチェックアウト時に文字コードを変換する » tune webの続きです。 【未解決】VisualStudioとgccでコンパイルできるソースのエンコーディング » tune webでも書きましたが [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2010%252F05%252F02%252F2864%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Windows%2FLinux%E4%B8%A1%E7%92%B0%E5%A2%83%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%99%E3%82%8BC%E8%A8%80%E8%AA%9E%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AE%E4%B8%80%E5%85%83%E7%AE%A1%E7%90%86%E3%82%92Git%E3%81%A7%E8%A1%8C%E3%81%86%22%20%7D);"></div>
<p><a href="http://www.tsunematsu.cc/2009/09/30/2603/">gitでリポジトリからのチェックアウト時に文字コードを変換する » tune web</a>の続きです。<br />
<a href="http://www.tsunematsu.cc/2009/11/04/2657/">【未解決】VisualStudioとgccでコンパイルできるソースのエンコーディング » tune web</a>でも書きましたが、問題はVisualStudioはUTF-8 BOM有のみ、gccはUTF-8 BOM無しのみ扱え、両者で問題なく扱える文字コードが存在しない事でした。gitにあるsmudge/cleanを使うとチェックアウト/ステージ時に任意のフィルタを通すことができ、BOMの除去をここでやれば出来そうなのですが、文字コード変換ソフトのnkfではBOMの有り無し以外も書き変わってしまうことがあるため実用に使えなかったのがこれまででした。</p>
<p>git smudge/cleanは<a href="http://progit.org/book/ja/ch7-2.html">Pro Git &#8211; Pro Git 7.2 Git のカスタマイズ Git の属性</a>に詳しく解説されています。<br />
git smudge/cleanの設定は前の日記に書きましたが、ここでも引用しておきます。</p>
<blockquote><p>まず.gitconfigファイルに以下を追加</p>
<pre class="brush: plain; title: ; notranslate">
[filter &quot;fixbom&quot;]
clean = “/usr/bin/bom_util -a”
smudge = “/usr/bin/bom_util -d”
</pre>
<p>これでsmudgeでUTF-8 BOM無し、cleanでUTF-8 BOM有りになります。</p>
<p>これだけではダメで、フィルタ処理をかけるファイルを指定する必要が有ります。<br />
gitの管理フォルダである.gitがあるトップディレクトリに.gitattributesファイルを以下の内容で作成し、git checkout -fします。</p>
<pre class="brush: plain; title: ; notranslate">
*.c filter=fixbom
*.h filter=fixbom
</pre>
<p>/usr/share/git-core/templates/info/attributes を作って上記内容を書いておくとclone時に.git/info以下にコピーされてgit cloneしただけで文字コード変換が動くようになります。
</p></blockquote>
<p>上記で指定している、BOMをつけ外しするプログラムは結局自作しました。単にファイル先頭のBOMを検知して追加・削除をするだけです。ハマったこととしてgit smudge/cleanのデータは標準入力から渡され、標準出力へ書いた内容で差し替えられます。外部コマンドとして起動されるのかと思っていましたが異なるようです。<br />
BOMをつけ外しするプログラムを下に貼っておきます。(gistはこちら→<a href="http://gist.github.com/386410">gist: 386410 &#8211; GitHub</a>)</p>
<pre class="brush: ruby; title: ; notranslate">
#!/usr/bin/ruby

require &quot;optparse&quot;

mode = :help

opt = OptionParser.new
opt.on(&quot;-a&quot;, &quot;Add BOM&quot;){|v| mode = :add}
opt.on(&quot;-d&quot;, &quot;Delete BOM&quot;){|v| mode = :delete}
opt.parse!(ARGV)

case mode
when :add
 STDOUT.binmode
       lines = readlines
       unless lines[0] =~ /^\M-o\M-;\M-?/ then
               print &quot;\xEF\xBB\xBF&quot;
       end
       print lines

when :delete
 STDOUT.binmode
       lines = readlines
 lines[0].sub!(/^\xEF\xBB\xBF/, '')
 print lines

when :help
       STDERR.puts opt.help
end
</pre>
<p>VisualStudioでの開発をメインにしているので、リポジトリ内のソースをUTF-8 BOM有、改行コードをLFCRにして運用しています。<br />
これでLinux環境での開発がひとつやりやすくなりました。</p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798023809/tuneapps-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41R5gj5VRFL._SL160_.jpg" alt="入門Git" style="border: none;" /></a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/427406767X/tuneapps-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> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873114403/tuneapps-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51B2dc%2BsJGL._SL160_.jpg" alt="実用Git" style="border: none;" /></a></p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2010/05/02/2864/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>麻雀問題解いてみた</title>
		<link>http://www.tsunematsu.cc/2010/04/04/2844/</link>
		<comments>http://www.tsunematsu.cc/2010/04/04/2844/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 15:22:01 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/?p=2844</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2010/04/04/2844/"><img align="left" hspace="5" width="150" src="http://farm5.static.flickr.com/4004/4349005424_1c21df83ec_m.jpg" class="alignleft wp-post-image tfe" alt="Mahjong set [04/04]" title="" /></a>photo credit: drdaeman makeplex salon：あなたのスキルで飯は食えるか？　史上最大のコーディングスキル判定 (1/2) &#8211; ITmedia エンタープライズを解いてみました。 [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2010%252F04%252F04%252F2844%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E9%BA%BB%E9%9B%80%E5%95%8F%E9%A1%8C%E8%A7%A3%E3%81%84%E3%81%A6%E3%81%BF%E3%81%9F%22%20%7D);"></div>
<p><a title="Mahjong set [04/04]" href="http://www.flickr.com/photos/47211331@N03/4349005424/" target="_blank"><img src="http://farm5.static.flickr.com/4004/4349005424_1c21df83ec_m.jpg" border="0" alt="Mahjong set [04/04]" /></a><br />
<small><a title="Attribution-ShareAlike License" href="http://creativecommons.org/licenses/by-sa/2.0/" target="_blank"><img src="http://www.tsunematsu.cc/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="drdaeman" href="http://www.flickr.com/photos/47211331@N03/4349005424/" target="_blank">drdaeman</a></small></p>
<p><a href="http://www.itmedia.co.jp/enterprise/articles/1004/03/news002.html">makeplex salon：あなたのスキルで飯は食えるか？　史上最大のコーディングスキル判定 (1/2) &#8211; ITmedia エンタープライズ</a>を解いてみました。ソースは<a href="http://github.com/tune/itmedia_makeplex">tune&#8217;s itmedia_makeplex at master &#8211; GitHub</a>に上げてありますのでリビジョンも見れるようになってます。最初のコミットを上げるまでに、面子の表示順の違いを抑えるところで詰まって<a href="http://d.hatena.ne.jp/staebchen/20100403/1270256158">チンイツの待ちを出力するプログラム &#8211; 107143955443560</a>を参考にしました。参考にしましたというよりもC++のソースをRubyに移植しましたと言う方が近いほど同じ処理です。基本的なアルゴリズムは最後まで踏襲しています。</p>
<p>最初のコミットまでが3時間ぐらい、リファクタリングに1時間ぐらいです。ちょっと時間がかかりすぎですが、日常的に書いてないRubyで、日常的にプログラムしてない家のMacパソコン、プラグインが古いのか5分に1回落ちてしまうMacVimで時間がとられたと言い訳しておきます。ただの実力不足です、ごめんなさい。</p>
<p>成立する可能性がある面子を減らしながら、総当たりで探索しています。面子の順序違いによる重複表示を避けるのが結構面倒ですね。刻子を優先して探さなければならず、色々試行錯誤してみたのですが、参考にさせていただいた<a href="http://d.hatena.ne.jp/staebchen/">id:staebchen</a>さんよりも良さそうな方法に達しませんでした。もっといいやり方があると思いますが、参考まで。</p>
<pre class="brush: ruby; title: ; notranslate">
#!/usr/bin/ruby

class Array
  def sum
    s = 0
    self.each do |v|
      s += v
    end
    return s
  end
end

class Fixnum
  # 刻子
  def anko
    num = self+1
    &quot;(#{num},#{num},#{num})&quot;
  end

  # 順子
  def shuntsu
    num = self+1
    &quot;(#{num},#{num+1},#{num+2})&quot;
  end

  # アタマ
  def atama
    num = self+1
    &quot;(#{num},#{num})&quot;
  end

  # 単騎
  def tanki
    num = self+1
    &quot;[#{num}]&quot;
  end

  # リャンメン(ペンチャンも兼ねる)
  def ryanmen
    num = self+1
    &quot;[#{num},#{num+1}]&quot;
  end

  # カンチャン
  def kanchan
    num = self+1
    &quot;[#{num},#{num+2}]&quot;
  end

  # シャボ
  def shabo
    num = self+1
    &quot;[#{num},#{num}]&quot;
  end
end

#
# 雀牌を表す数字列を解析し、0〜8の配列に与えられた個数を入れて返す
#
def parsePai(str)
  pai = Array.new(9, 0)
  str.split(//).each do |p|
    pai[p.to_i-1] += 1
  end

  # 入力の妥当性チェック
  if pai.sum != 13 then
    # 与えられる牌は13枚
    raise RuntimeError
  else
    pai.each do |val|
      if val &gt; 4 then
        # 1種類の牌が4枚より多いことはない
        raise RuntimeError
      end
    end
  end

  return pai
end

#
# 手牌を再帰的に解析し待ちを表示する
#
# 順子を刻子に優先して探索する。
# 順子はfromが9〜18の時に探索される
#
def analyzeTehai(pai, from=0, mentsu=[])
  shuntsu_phase = 9
  skip_anko_check = false

  if from &gt;= 9 then
    skip_anko_check = true
    from -= shuntsu_phase
  end

  if pai.sum &gt; 4 then
    # 面子を揃える

    # 刻子
    unless skip_anko_check then
      from.upto(8).each do |i|
        if pai[i] &gt;= 3 then
          tmp = pai.dup
          tmp[i] -= 3
          analyzeTehai(tmp, i+1, mentsu+[i.anko])
        end
      end
    end

    # 順子
    from.upto(6).each do |i|
      if pai[i]&gt;=1 &amp;&amp; pai[i+1]&gt;=1 &amp;&amp; pai[i+2]&gt;=1 then
        tmp = pai.dup
        tmp[i] -= 1
        tmp[i+1] -= 1
        tmp[i+2] -= 1
        analyzeTehai(tmp, i+shuntsu_phase, mentsu+[i.shuntsu])
      end
    end

  else
    # 残った4枚から待ちを絞る

    # アタマを探す
    0.upto(8).each do |i|
      if pai[i] &gt;= 2 then
        tmp = pai.dup
        tmp[i] -= 2
        analyzeMachi(tmp, mentsu+[i.atama])
      end
    end

    # 面子(刻子 or 順子)があれば単騎待ち
    # 刻子
    unless skip_anko_check then
      from.upto(8).each do |i|
        if pai[i] &gt;= 3 then
          tmp = pai.dup
          tmp[i] -= 3
          analyzeTanki(tmp, mentsu+[i.anko])
        end
      end
    end

    # 順子
    from.upto(6).each do |i|
      if pai[i]&gt;=1 &amp;&amp; pai[i+1]&gt;=1 &amp;&amp; pai[i+2]&gt;=1 then
        tmp = pai.dup
        tmp[i] -= 1
        tmp[i+1] -= 1
        tmp[i+2] -= 1
        analyzeTanki(tmp, mentsu + [i.shuntsu])
      end
    end
  end
end

#
# 4枚から待ちを絞る
#
def analyzeMachi(pai, mentsu)
  0.upto(8).each do |i|
    # リャンメン(ペンチャン)
    if pai[i]==1 &amp;&amp; pai[i+1]==1 then
      puts mentsu.sort.to_s + i.ryanmen
    end

    # カンチャン
    if pai[i]==1 &amp;&amp; pai[i+2]==1 then
      puts mentsu.sort.to_s + i.kanchan
    end

    # シャボ
    if pai[i]==2 then
      puts mentsu.sort.to_s + i.shabo
    end
  end
end

#
# 単騎待ちの数字を調べて待ちを表示する
#
def analyzeTanki(pai, mentsu)
  # 単騎待ち
  0.upto(8).each do |i|
    if pai[i] == 1 then
      puts mentsu.sort.to_s + i.tanki
    end
  end
end

# 以下実際の処理
pai = parsePai ARGV[0] unless ARGV[0] == nil
analyzeTehai(pai)
</pre>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2010/04/04/2844/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WindowsのVisualStudioでpriority_queueに大量データを突っ込むと遅くなった</title>
		<link>http://www.tsunematsu.cc/2010/02/11/2761/</link>
		<comments>http://www.tsunematsu.cc/2010/02/11/2761/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 15:25:51 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[VisualStudio]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/?p=2761</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2010/02/11/2761/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>という問題が職場であったのでそのメモ。Releaseモードだとすぐ処理出来るのにDebugモードだと無限ループに陥ったかのような挙動を示す質問をもらったので調べてみました。priority_queueというのはある値に戻 [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2010%252F02%252F11%252F2761%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Windows%E3%81%AEVisualStudio%E3%81%A7priority_queue%E3%81%AB%E5%A4%A7%E9%87%8F%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E7%AA%81%E3%81%A3%E8%BE%BC%E3%82%80%E3%81%A8%E9%81%85%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%22%20%7D);"></div>
<p>という問題が職場であったのでそのメモ。Releaseモードだとすぐ処理出来るのにDebugモードだと無限ループに陥ったかのような挙動を示す質問をもらったので調べてみました。priority_queueというのはある値に戻づいて順序が保たれるqueueです。便利ですね。</p>
<p>再現コードはこれでOK、<a href="http://www.geocities.jp/ky_webid/cpp/library/007.html">C++編（標準ライブラリ）　第７章　priority_queue</a>を参考にさせて頂きました。</p>
<pre class="brush: cpp; title: ; notranslate">
<a href="http://twitter.com/search?q=%23include" rel="nofollow">#include</a>
<a href="http://twitter.com/search?q=%23include" rel="nofollow">#include</a>
using namespace std;

int main()
{
    priority_queue qu;

    // 要素を追加
    for(int i=0; i&lt;100000; i++){
        qu.push( i );
    }

    // 先頭要素を取り出して出力
    cout &lt;&lt; qu.top() &lt;&lt; endl;

    return 0;
}
</pre>
<p>VisualStudio2005で試したところDebugモードだと動いてはいるのですが、とにかく時間がかかります。途中で処理を止めたところpushに時間がかかっているようです。そこでpushの先を追って行くと下記のようなコードが見つかります。</p>
<pre class="brush: cpp; title: ; notranslate">
_Vector_iterator()
       {       // construct with null vector pointer
       }

<a href="http://twitter.com/search?q=%23if" rel="nofollow">#if</a> _HAS_ITERATOR_DEBUGGING
_Vector_iterator(pointer _Ptr, const _Container_base *_Pvector)
       : _Mybase(_Ptr, _Pvector)
       {       // construct with pointer _Ptr
       }

<a href="http://twitter.com/search?q=%23elif" rel="nofollow">#elif</a> _SECURE_SCL
_Vector_iterator(pointer _Ptr, const _Container_base *_Pvector)
       : _Mybase(_Ptr, _Pvector)
       {       // construct with pointer _Ptr
       }

<a href="http://twitter.com/search?q=%23else" rel="nofollow">#else</a>
_Vector_iterator(pointer _Ptr)
       : _Mybase(_Ptr)
       {       // construct with pointer _Ptr
       }
<a href="http://twitter.com/search?q=%23endif" rel="nofollow">#endif</a> /* _HAS_ITERATOR_DEBUGGING */
</pre>
<p>これを見るとdefineの定義状況によって、毎回値の妥当性チェックが呼ばれているようです。<br />
これが過度にパフォーマンスが落ちていた原因でしょう。</p>
<p>_HAS_ITERATOR_DEBUGGINGはデバッグビルドでのみ有効になるようですが、_SECURE_SCLはリリースビルドでも残るようです。何用の定義なのかは軽くググッた限りではわかりませんでした。<a href="http://d.hatena.ne.jp/xtalco/20070704">2007-07-04 &#8211; 新言語 Xtalを作る日記</a>が見つかったぐらいです。</p>
<p>回避策としては両defineを0に設定すれば動かなくなり、通常のRelease/Debugの時間差で収まるようになります。</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2010/02/11/2761/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>公知のラベリング処理アルゴリズム</title>
		<link>http://www.tsunematsu.cc/2010/02/06/2767/</link>
		<comments>http://www.tsunematsu.cc/2010/02/06/2767/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 16:16:38 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[画像処理]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/?p=2767</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2010/02/06/2767/"><img align="left" hspace="5" width="150" src="http://i.msdn.microsoft.com/cc998604.Algorithm3-3(ja-jp,MSDN.10).gif" class="alignleft wp-post-image tfe" alt="ラベリング処理のイメージ図" title="ラベリング処理のイメージ図" /></a>ラベリング処理というのは入力画像に対して、連結する画素(同じ色とか、同じ領域とか)ごとに同じ番号を割り振る処理のことです。領域別に処理する際の前処理に使ったり、画像中の微小領域のサイズを測定してノイズ除去に使ったりと色々 [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2010%252F02%252F06%252F2767%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E5%85%AC%E7%9F%A5%E3%81%AE%E3%83%A9%E3%83%99%E3%83%AA%E3%83%B3%E3%82%B0%E5%87%A6%E7%90%86%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%22%20%7D);"></div>
<p>ラベリング処理というのは入力画像に対して、連結する画素(同じ色とか、同じ領域とか)ごとに同じ番号を割り振る処理のことです。領域別に処理する際の前処理に使ったり、画像中の微小領域のサイズを測定してノイズ除去に使ったりと色々と有用です。<a href="http://msdn.microsoft.com/ja-jp/academic/cc998604.aspx">アルゴリズム入門 : 第 3 章 画像処理入門 1</a>を読むとイメージが湧くかと思います。<br />
<img class="alignnone" title="ラベリング処理のイメージ図" src="http://i.msdn.microsoft.com/cc998604.Algorithm3-3(ja-jp,MSDN.10).gif" alt="ラベリング処理のイメージ図" width="460" height="230" /></p>
<p>ラベリング処理は1970年代から知られている処理ですが、高速なアルゴリズムが意外と知られていません。ネットで検索すると大学の授業での説明資料が見つかる程度で、文献をあたっても解説があまりにも少なく多くは役に立ちません。</p>
<p>古い本でラベリング処理のアルゴリズムが詳しく説明されたものを見つけたので多くの人に有用と思い、ここに書いておきます。参考にした本は近代科学社発行の長尾真さんによる「デジタル画像処理」で、1978年に発行されています。ラベリング処理の紹介は360ページ〜361ページに有ります。</p>
<p>１：値を隣接する画素に伝搬させる</p>
<blockquote><p>Sの成分をラベル付けする簡単な手続きは、探索と”伝搬”からなるものである。1が見つかるまでSを走査し、その値をまだ使われてない最初のラベルの値、たとえばvに変える。そしてvを1に向けて繰り返し(必要なら並列に)伝搬させる。すなわち、vを近傍として持つ1をvに変える。もはや変化の可能性がなくなったとき、明らかに最初のvに連結した1は全てvになっている。ここでさらに走査を続ける。別の1が見つかれば、これはv成分には属してないので、新しいラベルを付けて同じ手続を繰り返す。</p></blockquote>
<p>Sが処理対象の画像、ラベル付けする対象が1、割り振るラベル値がvです。<br />
この手法は「この手続は簡単ではあるが、非常に時間がかかる。各々の伝搬の過程は、たとえ並列に処理しても、図形の面積の次数だけの反復を要するからである。」と紹介されています。最初に紹介したMSのサイトで使われているのがまさにこれです。おすすめできません。</p>
<p>２：境界線を抽出し、輪郭内部に同一の値を割り振る</p>
<blockquote><p>成分のラベル付けの別な方法としては、9.1.2節で述べた境界を見つける手法を、いくつかの外側境界(すなわち、Sの成分でこれを囲むS^の成分に隣接している境界。演習9参照)を別々にマークを付けるよう修正し、各成分の外側境界に異なったラベルを用いる。これが済むと、必要に応じて外側境界のラベルを成分の内側へ&#8221;伝搬&#8221;させることができる。これを並列に行うなら、たかだか図形の半径に等しい反復数を要する。</p></blockquote>
<p>手当たりしだいに伝搬させるのではなく、まずは領域の輪郭にユニークなラベル番号を付与し、必要であれば内側に値をコピーする。1番よりは効率的ですが、「外側境界のラベル付けの手続きは時間がかかる<br />
」処理であり、図形の面積につれて増加する多数のステップを有します。</p>
<p>３：行毎に横のつながり(ラン)を求め、上下の対照表をもとにつなげて行く</p>
<blockquote><p>たいていの目的には、境界よりむしろ1のランを追跡してラベル付けをする次の手法が最良策である。図形の第１行目において、各ランに異なったラベルを与える。第２(とそれ以下の)行では、１のランを調べて前行のランと位置を比べる。ランρが前行のどのランとも隣接していなければρに新しいラベルを付ける。ρが前行のちょうど１つのランに隣接しているなら、そのランのラベルを付ける。ρが前行の２つ以上のランに隣接しているなら、ρにはこれらのらべるの(たとえば)最小値を付けるが、これらのラベルはすべて同一成分に属することも控えておく。図形がこのようにしてすべて走査されたとき、控えを分類して等しいラベルの集まりを決定できる。必要なら、図形を再走査し各ラベルを、たとえば等価な最小の値のラベルに置き換えることが出来る。</p></blockquote>
<p>ということで、3番目がおすすめです。処理時間が画像サイズに依存して決まるし、ラスタ走査のみなのでメモリ上のキャッシュも有効に動いてくれるでしょう。</p>
<p>上の説明文を素直に実装すれば効率のよいラベリング処理を実現出来るでしょう。</p>
<ul>
<li><a href="http://www.amazon.co.jp/gp/product/B000J8KI46?ie=UTF8&amp;tag=tuneapps-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=B000J8KI46">ディジタル画像処理 (1978年)</a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.jp/e/ir?t=tuneapps-22&amp;l=as2&amp;o=9&amp;a=B000J8KI46" border="0" alt="" width="1" height="1" /></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2010/02/06/2767/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TDD Boot Camp行ってきた</title>
		<link>http://www.tsunematsu.cc/2009/12/20/2709/</link>
		<comments>http://www.tsunematsu.cc/2009/12/20/2709/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 05:41:14 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/?p=2709</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2009/12/20/2709/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>TDD Boot Campに行ってきました。 ◯t-wadaさんのTDD話 いつものように資料があとでアップされるのではないかと思います。 個人的にとってたメモを以下に載せておきます。 会場ではt-wadaさんのテスト駆 [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2009%252F12%252F20%252F2709%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22TDD%20Boot%20Camp%E8%A1%8C%E3%81%A3%E3%81%A6%E3%81%8D%E3%81%9F%22%20%7D);"></div>
<p>TDD Boot Campに行ってきました。</p>
<p>◯t-wadaさんのTDD話<br />
いつものように資料があとでアップされるのではないかと思います。<br />
個人的にとってたメモを以下に載せておきます。<br />
<iframe id='xmindshare_embedviewer' src='http://xmind.net/share/_embed/tunepolo/xmind-308942/' width='600px' height='200px' frameborder='0' scrolling='no'></iframe><br />
会場ではt-wadaさんのテスト駆動開発本が見れるようになっていました。かなり読み込まれた形跡があって、TDD愛が伝わります。訳がいまいちというAmazonレビューで躊躇していましたが購入して読んでみようと思います。</p>
<p>◯<a href="http://www.amazon.co.jp/dp/1932394850">Test Driven</a>の作者 Lasseさんの講演<br />
レシーバーが足りなそうだったので英語を聞きとるのに必死になってしまい、話の所々がフォローできず。<br />
<a href="http://twitter.com/#search?q=%23tddbc">twitterの<a href="http://twitter.com/search?q=%23tddbc" rel="nofollow">#tddbc</a>タグ</a>を見る方が参考になるかも。<br />
内容はレガシーコード改善ガイドの紹介と、Coberturaのライブハッキング。Eclipseのコードさばきが見事すぎて見とれてしまいます。</p>
<p>◯TDD実践編<br />
ペアを組んでサイズ制限付きのハッシュを作成しました。<br />
いつもだとつい実装を先に書いてしまい、テストが後回しになったり、テストに抜けや不足ができてしまうのですが、ペアプロだったこともあって、TDDの基本的な流れが改めて抑えられたと思います。</p>
<p>ソースはgithubに上げてあります。</p>
<blockquote><p>http://github.com/tune/lrucache</p></blockquote>
<p>TDDを知るには完成形のソースではなくて、その過程を学ぶことが大事ですね。gitを途中から使っておきながらあまりコミットできてません。次はもうちょっと気を配らないと。</p>
<p>周りにすごい人もたくさんいました。</p>
<ul>
<li> ペアプロでのソースの受け渡しをgithub/gistでやっちゃう</li>
<li> gistにソースあげたし、CIもやるか→ローカルHudsonでCIまで</li>
<li> 一人で時間あったしやってみたよとLasseさん、しかもJavaとRubyの2言語。Rubyのテストをみんなで見たけどテストが完結で読みやすい、ここまでできるのかと目から鱗でした。</li>
</ul>
<p>会社ではC言語なのでCUnitを使ってテストは書いていますが、我流になっているところがあって、今日は行けてよかったです。</p>
<ul>
<li> テストも製品ソースと同じく綺麗に書く → 主張はよく耳にするけど実際にLasseさんやその他の人のソースをみると上には上がいて、きちんと実践できてます。</li>
<li> 言語でテストの読みやすさ、書きやすさに差ができるわけではない。Javaでも簡潔にかけるし、Rubyでもどうしようもないコードはかけてしまう。</li>
</ul>
<p>楽しいイベントを開催していただきありがとうございました。</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2009/12/20/2709/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>インクリメンタルとイテレーティブの違い</title>
		<link>http://www.tsunematsu.cc/2009/12/13/2700/</link>
		<comments>http://www.tsunematsu.cc/2009/12/13/2700/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 13:45:29 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[ソフトウェア開発]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/?p=2700</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2009/12/13/2700/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>[Agile]イテレーティヴとインクリメンタルの違い &#124; Ryuzee.comを読んで思うところがあったので少し出遅れたけどメモ変わりに。 インクリメンタルだと最初から完成した姿を見越してI/Fを完全に作り込むのはあまり [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2009%252F12%252F13%252F2700%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%A1%E3%83%B3%E3%82%BF%E3%83%AB%E3%81%A8%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%96%E3%81%AE%E9%81%95%E3%81%84%22%20%7D);"></div>
<p><a title="[Agile]イテレーティヴとインクリメンタルの違い | Ryuzee.com" href="http://www.ryuzee.com/contents/blog/2985">[Agile]イテレーティヴとインクリメンタルの違い | Ryuzee.com</a>を読んで思うところがあったので少し出遅れたけどメモ変わりに。</p>
<p>インクリメンタルだと最初から完成した姿を見越してI/Fを完全に作り込むのはあまりに難しく、かといって完成した部分に都度手を入れていては差分開発による工数の削減にならず、スケジュールが問題化してしまう。だったら前に完成したところは触らず、追加分で黒魔術を駆使しようという勢力が優勢になり、バージョンを重ねるにつれて継ぎ接ぎ部分が問題化する。機能もソース規模も雪だるま式に増えていく一方で、全体最適なソフトを作ることはきっとできない気がする。</p>
<p>差分開発というキーワードは一般的だけど、自分たちが取り組んでいるのは「イテレーティブ型」で、将来にわたってソフトウェアが最大の価値を生めるようにしているからだと主張しないと、ソフトウェアアーキテクチャの設計が悪いから差分開発が徹底できてないと評価を下されてしまう。</p>
<p>マネージャー層の階層を上がるほど「インクリメンタル」を念頭に置いている人が多いような気がします。機能が一通り揃ったら開発を収束させて、別なソフトに触手を伸ばすのもインクリメンタルな発想ありきなマネージメントかな?</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2009/12/13/2700/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【解決済】VisualStudioとgccでコンパイルできるソースのエンコーディング</title>
		<link>http://www.tsunematsu.cc/2009/11/04/2657/</link>
		<comments>http://www.tsunematsu.cc/2009/11/04/2657/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 11:45:20 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[VisualStudio]]></category>
		<category><![CDATA[文字コード]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/?p=2657</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2009/11/04/2657/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>UTF-8だと一見どっちも対応しているように見えるんだけど、VisualStudioはBOM有のみ、gccはBOM無しのみ対応しています。 んで、対策として取ったのが gitでリポジトリからのチェックアウト時に文字コード [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2009%252F11%252F04%252F2657%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E3%80%90%E8%A7%A3%E6%B1%BA%E6%B8%88%E3%80%91VisualStudio%E3%81%A8gcc%E3%81%A7%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AE%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%22%20%7D);"></div>
<p>UTF-8だと一見どっちも対応しているように見えるんだけど、VisualStudioはBOM有のみ、gccはBOM無しのみ対応しています。</p>
<p>んで、対策として取ったのが <a href='http://www.tsunematsu.cc/2009/09/30/2603/' title='gitでリポジトリからのチェックアウト時に文字コードを変換する » tune web'>gitでリポジトリからのチェックアウト時に文字コードを変換する » tune web</a>だったんですが、今日仕事中にこんなページを見つけました。<br />
 <a href='http://nakamura.goga.co.jp/article/124270631.html' title='GOGA - 数式の夢とコンピュータの現実: UTF8のソースコードをgccとVCで共有すること'>GOGA &#8211; 数式の夢とコンピュータの現実: UTF8のソースコードをgccとVCで共有すること</a></p>
<p>なんだ、VisualStudioの方は警告さえ抑えれば普通にコンパイルできるのかとさっそくやってみたのですが、見事に失敗しました。VisualStudioでコンパイルするとエラーが山ほどでてダメでした。<br />
調べてみるとVisualStudio2003まではいけたらしいんですが、自分が使っているVisualStudio2005ではNGでした。今の最新版は2008ですし、来年には2010もでます。VisualStudioのバージョンによらず簡単な解決法を模索したいところなのですが、困りました。</p>
<p>「VisualStudio2008/2010ならBOM無しのUTF-8も扱えるよ」という情報をお持ちの方がいらっしゃいましたらぜひ教えてください。</p>
<p>→2010年5月2日 解決しました <a href="http://www.tsunematsu.cc/2010/05/02/2864/">Windows/Linux両環境で動作するC言語ソースの一元管理をGitで行う » tune web</a></p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2009/11/04/2657/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gitでリポジトリからのチェックアウト時に文字コードを変換する</title>
		<link>http://www.tsunematsu.cc/2009/09/30/2603/</link>
		<comments>http://www.tsunematsu.cc/2009/09/30/2603/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 13:08:10 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/?p=2603</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2009/09/30/2603/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>ようやく実現できたのでやり方をメモ。 設定ファイルで拡張子に基づくフィルタリングをすればOK。 ProGitの情報によるとリポジトリから取ってくるときをsmudge、リポジトリに突っ込むときをcleanと呼ぶらしい。 以 [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2009%252F09%252F30%252F2603%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22git%E3%81%A7%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%8B%E3%82%89%E3%81%AE%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%82%A2%E3%82%A6%E3%83%88%E6%99%82%E3%81%AB%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%22%20%7D);"></div>
<p>ようやく実現できたのでやり方をメモ。<br />
設定ファイルで拡張子に基づくフィルタリングをすればOK。</p>
<p>ProGitの情報によるとリポジトリから取ってくるときをsmudge、リポジトリに突っ込むときをcleanと呼ぶらしい。</p>
<p>以下はリポジトリ内のソースファイルがUTF-8 BOM有、改行コードがLFCRの場合の設定例。文字コード変換はnkfを使っています。<br />
WindowsのVisualStudioに合わせると上記設定が望ましいが、Linux環境でgccを使うにはBOM無しにして、改行コードをLFにする必要がある。<br />
まず.gitconfigファイルに以下を追加する</p>
<blockquote><p>
[filter "fixencoding"]<br />
clean  = &#8220;/usr/local/bin/nkf -w8 -Lw&#8221;<br />
smudge = &#8220;/usr/local/bin/nkf -w -Lu&#8221;
</p></blockquote>
<p>これでsmudgeでUTF-8 BOM無し/LF、cleanでUTF-8 BOM有り/LFCRとなる。</p>
<p>これだけではダメで、フィルタ処理をかけるファイルを指定する必要が有る。<br />
gitの管理フォルダである.gitがあるトップディレクトリに.gitattributesファイルを以下の内容で作成し、git checkout -fする必要が有る。</p>
<blockquote><p>
*.c filter=fixencoding<br />
*.cpp filter=fixencoding<br />
*.cxx filter=fixencoding<br />
*.h filter=fixencoding<br />
*.hxx filter=fixencoding<br />
*.txt filter=fixencoding<br />
Makefile filter=fixencoding
</p></blockquote>
<p>/usr/share/git-core/templates/info/attributes<br />
を作って上記内容を書いておくとclone時に.git/info以下にコピーされてgit cloneしただけで文字コード変換が動くようになる。</p>
<p>動かすにあたって問題となったのはgitでチェックアウトしただけで編集されたことになってしまうファイルが多々発生したことです。原因はいろいろあったのですが<br />
リポジトリインデックス内のファイル文字コードがバラバラだった(BOM無しファイルが紛れ込んでいた とか)<br />
ファイル内の文字に半角カナがあるとダメらしい。<br />
ファイル内の文字に機種依存文字(実際にあったのは丸数字)があるとダメらしい。</p>
<p>git statusなどで編集が有ったかどうかはインデックス内の状態と比較するからcleanして元々の状態と変わってしまうと当然チェックアウトしただけで編集されたと勘違いされてしまうファイルができてしまう ということですね。<br />
WEB DB Press Vol.50で解説されていたgitの内部データ構造を知ってようやく理解できました。</p>
<p>Subverisonだと文字コードをうまく変換する機構も無いのでgitをかましてやるのが便利ですね。</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2009/09/30/2603/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>x86_64だと浮動小数点演算の精度が低下する</title>
		<link>http://www.tsunematsu.cc/2008/12/09/2377/</link>
		<comments>http://www.tsunematsu.cc/2008/12/09/2377/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 12:47:56 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[浮動小数点]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/?p=2377</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2008/12/09/2377/"><img align="left" hspace="5" width="150" src="http://ecx.images-amazon.com/images/I/41TNSPT9VVL._SL160_.jpg" class="alignleft wp-post-image tfe" alt="Binary Hacks ―ハッカー秘伝のテクニック100選" title="" /></a>64bit OSで動かすと32bitの時と処理結果が異なるプログラムで悩んだメモです。 調べていくとfloatを使った浮動小数点演算で誤差が出ることがわかりました。分からなかったのが、IEEE754でfloatの演算精度 [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2008%252F12%252F09%252F2377%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22x86_64%E3%81%A0%E3%81%A8%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%BC%94%E7%AE%97%E3%81%AE%E7%B2%BE%E5%BA%A6%E3%81%8C%E4%BD%8E%E4%B8%8B%E3%81%99%E3%82%8B%22%20%7D);"></div>
<p>64bit OSで動かすと32bitの時と処理結果が異なるプログラムで悩んだメモです。</p>
<p>調べていくとfloatを使った浮動小数点演算で誤差が出ることがわかりました。分からなかったのが、IEEE754でfloatの演算精度は32bitと規定されているのになぜ同じソースから作ったプログラムで結果が違うのかということです。</p>
<p>x86では浮動小数点演算にx87を使うのですが、この演算精度は32bitや64bitではなく、80bitで行われるそうです。この辺の話は <a href='http://0xcc.net/blog/archives/000164.html' title='浮動小数点演算ではまった話 - bkブログ'>浮動小数点演算ではまった話 &#8211; bkブログ</a>とか<a href="http://gihyo.jp/dev/serial/01/bk/0002">BK通信</a>に詳しく載ってます。要約すると32bitの精度で誤差が生じる計算が含まれていても&#8221;たまたま&#8221;うまく計算できることがある ということです。</p>
<p>たまたま精度よく計算できるプログラムをx86_64に持っていってコンパイルしようとします。このとき、x86_64では必ずSSEが使えるため、コンパイラはデフォルトでSSEを使うようにコンパイルします。SSEで浮動小数点演算を行うと演算精度がx87の80bitよりも悪くなるため、本来生じるはずだった演算誤差が表面化することになります。</p>
<p>高林さんがBK通信で書いているMac OSで演算結果が違うというのも、Mac OSが64bitOSであることが関係している気がします。</p>
<p>バイナリーハックス買おうかな。</p>
<div class="amazlet-box" style="margin-bottom:0px;">
<div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873112885/tuneapps-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41TNSPT9VVL._SL160_.jpg" alt="Binary Hacks ―ハッカー秘伝のテクニック100選" style="border: none;" /></a></div>
<div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%">
<div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873112885/tuneapps-22/ref=nosim/" name="amazletlink" target="_blank">Binary Hacks ―ハッカー秘伝のテクニック100選</a>
<div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4873112885/tuneapps-22/ref=nosim/" title="Binary Hacks ―ハッカー秘伝のテクニック100選" target="_blank">amazlet</a> at 08.12.09</div>
</div>
<div class="amazlet-detail">高林 哲 鵜飼 文敏 佐藤 祐介 浜地 慎一郎 首藤 一幸 <br />オライリー・ジャパン <br />売り上げランキング: 23306</div>
<div class="amazlet-review" style="margin-top:10px; margin-bottom:10px">
<div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5.0" /></div>
<p><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> ハードコア？なソフトウエア<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 大工さんにおける電動工具の紹介本<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 当然教科書ではない。でも、とても参考になります。<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> バイナリアンの基本</div>
<div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873112885/tuneapps-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
<div class="amazlet-footer" style="clear: left"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2008/12/09/2377/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>gruff</title>
		<link>http://www.tsunematsu.cc/2008/11/30/2361/</link>
		<comments>http://www.tsunematsu.cc/2008/11/30/2361/#comments</comments>
		<pubDate>Sun, 30 Nov 2008 02:21:05 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[グラフ]]></category>
		<category><![CDATA[ライブラリ]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/?p=2361</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2008/11/30/2361/"><img align="left" hspace="5" width="150" src="http://kwout.com/cutout/y/xd/ij/bqs_bor_rou_sha.jpg" class="alignleft wp-post-image tfe" alt="http://geoffreygrosenbach.com/projects/show/5" title="gullery photo gallery" /></a>gullery photo gallery via kwout Rubyできれいなグラフが書けるライブラリ、仕事で数値を扱うのに使いました。使うにはImageMagickとRMagickが必要です。 リンク先のグラフはど [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2008%252F11%252F30%252F2361%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22gruff%22%20%7D);"></div>
<div class="kwout" style="text-align: center;"><img src="http://kwout.com/cutout/y/xd/ij/bqs_bor_rou_sha.jpg" alt="http://geoffreygrosenbach.com/projects/show/5" title="gullery photo gallery" width="390" height="409" style="border: none;" usemap="<a href="http://twitter.com/search?q=%23map_yxdijbqs" rel="nofollow">#map_yxdijbqs</a>" /><br />
<map id="map_yxdijbqs" name="map_yxdijbqs">
<area coords="250,71,349,133" href="http://geoffreygrosenbach.com/system/assets/1144521751_normal.png" alt="" shape="rect" />
<area coords="142,153,241,215" href="http://geoffreygrosenbach.com/system/assets/1144521685_normal.png" alt="" shape="rect" />
<area coords="34,71,133,133" href="http://geoffreygrosenbach.com/system/assets/1144521553_normal.png" alt="" shape="rect" />
<area coords="250,153,349,215" href="http://geoffreygrosenbach.com/system/assets/1144521860_normal.png" alt="" shape="rect" />
<area coords="34,317,133,379" href="http://geoffreygrosenbach.com/system/assets/1144521392_normal.png" alt="" shape="rect" />
<area coords="250,235,349,297" href="http://geoffreygrosenbach.com/system/assets/1144521488_normal.png" alt="" shape="rect" />
<area coords="89,0,264,18" href="http://geoffreygrosenbach.com/" alt="" shape="rect" />
<area coords="142,71,241,133" href="http://geoffreygrosenbach.com/system/assets/1144521578_normal.png" alt="" shape="rect" />
<area coords="34,235,133,297" href="http://geoffreygrosenbach.com/system/assets/1144521782_normal.png" alt="" shape="rect" />
<area coords="34,153,133,215" href="http://geoffreygrosenbach.com/system/assets/1144521610_normal.png" alt="" shape="rect" />
<area coords="272,4,305,17" href="http://geoffreygrosenbach.com/projects/show/5" alt="" shape="rect" />
<area coords="30,50,92,59" href="http://nubyonrails.com/pages/gruff" alt="" shape="rect" />
<area coords="142,235,241,297" href="http://geoffreygrosenbach.com/system/assets/1144521884_normal.png" alt="" shape="rect" /></map>
<p style="margin-top: 10px; text-align: center;"><a href="http://geoffreygrosenbach.com/projects/show/5">gullery photo gallery</a> via <a href="http://kwout.com/quote/yxdijbqs">kwout</a></p>
</div>
<p>Rubyできれいなグラフが書けるライブラリ、仕事で数値を扱うのに使いました。使うにはImageMagickとRMagickが必要です。</p>
<p>リンク先のグラフはどれも洗練されていて美しいのですが、データがちょっと多かったりすると見た目が悪くなって困り者です。なんだかんだ言って細かな調整ができるExcelの方がまだ使い勝手がいいです。<br />
細かい所に手が届かないのも問題ですが、使い方のサンプルが少なくてちょっと分かりにくいかな。</p>
<p>Railsでも使えるみたいなんで、もうちょっと情報が出てくるといいですね。</p>
<p> <a href='http://nubyonrails.com/pages/gruff' title='Gruff Graphs for Ruby | Ruby on Rails for Newbies'>Gruff Graphs for Ruby | Ruby on Rails for Newbies</a></p>
<p>‥</p>
<p>追記、Railsならhtml5jp_graphsなんてのもあるらしい。こっちの方が細かい所まで手が届く感じ。</p>
<div style="width:425px;text-align:left" id="__ss_799485"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/ysakaki/html5jpgraphs-presentation?type=powerpoint" title="仕事に使えるグラフプラグイン「html5jp_graphs」">仕事に使えるグラフプラグイン「html5jp_graphs」</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=plugin-1227974636320623-9&#038;stripped_title=html5jpgraphs-presentation" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=plugin-1227974636320623-9&#038;stripped_title=html5jpgraphs-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View SlideShare <a style="text-decoration:underline;" href="http://www.slideshare.net/ysakaki/html5jpgraphs-presentation?type=powerpoint" title="View 仕事に使えるグラフプラグイン「html5jp_graphs」 on SlideShare">presentation</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/html5jp_graphs">html5jp_graphs</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/plugin">plugin</a>)</div>
</div>
<p><img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyMjgwNDg3MDUxNzMmcHQ9MTIyODA*ODcxMjgyOSZwPTEwMTkxJmQ9Jmc9MiZ*PSZvPThiOGUxNjFiYTYzOTQ3ZDdiMGU3NmY4YThmNWMyMmE2.gif" /></p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2008/11/30/2361/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Buildbotはディレクトリの移動ができない</title>
		<link>http://www.tsunematsu.cc/2008/07/30/2274/</link>
		<comments>http://www.tsunematsu.cc/2008/07/30/2274/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 13:54:34 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Buildbot]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/?p=2274</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2008/07/30/2274/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>会社で Buildbotを設定していた困ってしまったのですが、この手のCIツールはディレクトリの移動ができないのでしょうか? CatalystアプリをbuildbotでContinuous Integration &#8 [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2008%252F07%252F30%252F2274%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Buildbot%E3%81%AF%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AE%E7%A7%BB%E5%8B%95%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%22%20%7D);"></div>
<p>会社で <a href='http://buildbot.net/trac' title='Buildbot - Trac'>Buildbot</a>を設定していた困ってしまったのですが、この手のCIツールはディレクトリの移動ができないのでしょうか?</p>
<p> <a href='http://catalyst.g.hatena.ne.jp/dann/20080308/1204975774' title='CatalystアプリをbuildbotでContinuous Integration - dann@catalyst - Catalystグループ'>CatalystアプリをbuildbotでContinuous Integration &#8211; dann@catalyst &#8211; Catalystグループ</a>を参考にBuildbotの設定ファイルを書いていたのですが、Subversionリポジトリからtrunkを引っ張ってきてトップディレクトリにあるmakeファイルを使ってプロジェクトをビルドする設定は</p>
<blockquote><p>
from buildbot.process import factory<br />
from buildbot.steps import source,shell<br />
f1 = factory.BuildFactory()<br />
f1.addStep(source.SVN,<br />
    svnurl=source_code_svn_url,<br />
    mode=&#8221;clobber&#8221;)<br />
f1.addStep(shell.ShellCommand, command=['make'])<br />
f1.addStep(shell.ShellCommand, command=['make', 'test'])
</p></blockquote>
<p>と書けますが、自分が設定していたプログラムのMakefileは&#8221;project/Makefile&#8221;にあったのでcdコマンドを加えれば行けるのかと</p>
<blockquote><p>
f1.addStep(shell.ShellCommand, command=['cd', 'project'])<br />
f1.addStep(shell.ShellCommand, command=['make'])<br />
f1.addStep(shell.ShellCommand, command=['make', 'test'])
</p></blockquote>
<p>と書いたところBuildbotがエラーを吐いて止まってしまいました。作業ディレクトリ変更用の機能があるのかとマニュアルを一通り見てみたのですがどこにも見当たりません。</p>
<p>確かにConfigureスクリプトやMakefile、インストールプログラムはプロジェクトのトップに置くのが一般的なので問題になった自分のプロジェクトが変なだけかもしれません。</p>
<p>ビルドテスト用スクリプトを自作するか、プロジェクトの構成を変更してしまうか悩んでいるところです。<br />
自作はさけたいんだけどなぁ。</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2008/07/30/2274/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>log4XX まとめ</title>
		<link>http://www.tsunematsu.cc/2008/02/18/2183/</link>
		<comments>http://www.tsunematsu.cc/2008/02/18/2183/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 12:39:20 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[まとめ]]></category>
		<category><![CDATA[ライブラリ]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/2008/02/18/2375/</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2008/02/18/2183/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>オレンジニュースでlog5j &#8211; Google Codeが紹介されていたので、log4XXって各言語にあるのかなと気になったので調べてみました。 log4c: Log4c : Logging for C Li [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2008%252F02%252F18%252F2183%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22log4XX%20%E3%81%BE%E3%81%A8%E3%82%81%22%20%7D);"></div>
<p><a href="http://secure.ddo.jp/%7Ekaku/tdiary/" title="オレンジニュース">オレンジニュース</a>で<a href="http://code.google.com/p/log5j/" title="log5j - Google Code">log5j &#8211; Google Code</a>が紹介されていたので、log4XXって各言語にあるのかなと気になったので調べてみました。</p>
<ul>
<li><a href="http://log4c.sourceforge.net/" title="log4c: Log4c : Logging for C Library">log4c: Log4c : Logging for C Library</a>(C)</li>
<li>  <a href="http://log4cpp.sourceforge.net/" title="Log for C++">Log for C++</a>(C++)</li>
<li>  <a href="http://log4cplus.sourceforge.net/" title="Log4cplus Project Page">Log4cplus Project Page</a>(C++)</li>
<li>  <a href="http://logging.apache.org/log4cxx/index.html" title="log4cxx - About">log4cxx &#8211; About</a>(C++)</li>
<li><a href="http://logging.apache.org/log4j/1.2/index.html" title="Apache log4j 1.2 - log4j 1.2">Apache log4j 1.2 &#8211; log4j 1.2</a>(Java)</li>
<li><a href="http://code.google.com/p/log5j/" title="log5j - Google Code">log5j &#8211; Google Code</a>(Java)</li>
<li>  <a href="http://logging.apache.org/log4net/index.html" title="Apache log4net - Apache log4net: Home">Apache log4net &#8211; Apache log4net: Home</a>(.NET)</li>
<li>  <a href="http://incubator.apache.org/log4php/index.html" title="log4php - Apache log4php">log4php &#8211; Apache log4php</a>(PHP)</li>
<li>  <a href="http://log4r.sourceforge.net/" title="Log4r - Manual">Log4r &#8211; Manual</a>(Ruby)</li>
<li>  <a href="http://sourceforge.net/projects/log4py/" title="SourceForge.net: Log4Py">SourceForge.net: Log4Py</a>(Python)</li>
<li>  <a href="http://www.perl.com/pub/a/2002/09/11/log4perl.html" title="perl.com: Retire your debugger, log smartly with Log::Log4perl!">perl.com: Retire your debugger, log smartly with Log::Log4perl!</a>(Perl)</li>
<li>  <a href="http://log4js.berlios.de/index.html" title="Log4js - The Logging Framework for JavaScript">Log4js &#8211; The Logging Framework for JavaScript</a>(JavaScript)</li>
<li>  <a href="http://log4e.jayefem.de/index.php/Download" title="Log4E - Home">Log4E &#8211; Home</a>(Eiffel)</li>
</ul>
<p>思いつく言語で見つかったのだとこんな感じかな? 他にもご存知の方がいましたら教えて下さい。</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2008/02/18/2183/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>最もタメになったプログラム言語</title>
		<link>http://www.tsunematsu.cc/2008/02/06/2168/</link>
		<comments>http://www.tsunematsu.cc/2008/02/06/2168/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 11:05:16 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/2008/02/06/2357/</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2008/02/06/2168/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>最もタメになる「初心者用言語」まとめ &#8211; UK is not Britonish &#8211; ハチロク世代 本気の人もネタの人もいるようですが、みんなプログラミング言語に一家言あるんですね。個人的にはak [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2008%252F02%252F06%252F2168%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E6%9C%80%E3%82%82%E3%82%BF%E3%83%A1%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E8%A8%80%E8%AA%9E%22%20%7D);"></div>
<ul>
<li> <a href="http://generation1986.g.hatena.ne.jp/ukstudio/20080204/1202113687" title="最もタメになる「初心者用言語」まとめ - UK is not Britonish - ハチロク世代">最もタメになる「初心者用言語」まとめ &#8211; UK is not Britonish &#8211; ハチロク世代</a></li>
</ul>
<p>本気の人もネタの人もいるようですが、みんなプログラミング言語に一家言あるんですね。個人的にはakiyanさんの<a href="http://www.akiyan.com/blog/archives/2008/02/post_106.html" title="あなたがプログラミングの初心者なら、友人知人が使っている言語にするといい : akiyan.com">あなたがプログラミングの初心者なら、友人知人が使っている言語にするといい : akiyan.com</a>に賛成です。何を最初にやってもそんなに大差ないと思うし、聞く人が近くにいたほうがいいと思うし、職場や仕事によって言語はある程度限定されてしまうのでその中で使える言語を選択していくことになるかと思います。</p>
<p>最初に学ぶ言語としては上に述べたとおりですが、学んでよかった&#8221;最もタメになった言語&#8221;となると話は変わってきます。自分は大学でプログラミングを始めて</p>
<blockquote><p>C言語(授業)→Perl(アルバイト)→Java(アルバイト)→PHP(アルバイト)→(Ruby)→C#(アルバイト)→C++(社内研修)→C言語とRuby(今)</p></blockquote>
<p>と流れてきています。この中で選ぶとすると学んでよかった言語はRubyが1番でした。Javaが完全なオブジェクト指向でないと知ったのもRubyだし、&#8221;イテレータ便利!!!&#8221;って知ったのもRubyだし、プログラムは工夫次第で読みやすくなると知ったのもRubyでした。&#8221;初心者用言語&#8221;を書いてる皆さんが本当に学んでよかった言語って何なんでしょう? 聞いてみたいですね。</p>
<p>ちなみに今は<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797336021/tuneapps-22/ref=nosim/" name="amazletlink" target="_blank">ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門</a>を読んでいて、関数型言語に興味を持っています。まだ半分ぐらいですがRubyを学んだときと同じくらいの学びが関数型言語にはありそうです。</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2008/02/06/2168/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>scpp</title>
		<link>http://www.tsunematsu.cc/2007/12/10/2099/</link>
		<comments>http://www.tsunematsu.cc/2007/12/10/2099/#comments</comments>
		<pubDate>Mon, 10 Dec 2007 13:46:30 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[C]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/2007/12/10/2273/</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2007/12/10/2099/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>Selective C PreProcessor(選択的 C プリプロセッサ)の略で、特定のディレクティブのみを処理できるCのプリプロセッサです。これを使うと不要な#ifdef～#endを除いたソースを作り出すことができ [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2007%252F12%252F10%252F2099%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22scpp%22%20%7D);"></div>
<p>Selective C PreProcessor(選択的 C プリプロセッサ)の略で、特定のディレクティブのみを処理できるCのプリプロセッサです。これを使うと不要な<a href="http://twitter.com/search?q=%23ifdef" rel="nofollow">#ifdef</a>～<a href="http://twitter.com/search?q=%23end" rel="nofollow">#end</a>を除いたソースを作り出すことができます。内部開発用に入れておきたいコードがあるんだけど外部へのリリースには忘れず取り除かなくてはならない・・・といった用途に力を発揮してくれそうです。</p>
<p>仕事でも少し前に必要としていて探したんですが探し方が悪かったみたいです。このソフトはWindowsで動作するものなんですが残念ながら商用利用はできないとあるので仕事で使うのは無理そうです。でも</p>
<blockquote><p>scpp (selective C preprocessor &#8211; 選択的 C プリプロセッサ) と呼ばれるソフトの Win32 移植版です。</p></blockquote>
<p>ということはscppの実装は他にもいくつかあるんでしょう。</p>
<p>他の実装をご存じの方がいらっしゃいましたらコメントで教えてくださいm(_ _ )m</p>
<ul>
<li> <a href="http://cetus.sakura.ne.jp/softlab/toolbox1/index.html#scpp" title="プログラミング・ツール（移植ソフト）">scpp (selective C preprocessor) 0.1 (Win32 版)</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2007/12/10/2099/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Signal Analysis/Processing Software</title>
		<link>http://www.tsunematsu.cc/2007/09/03/1976/</link>
		<comments>http://www.tsunematsu.cc/2007/09/03/1976/#comments</comments>
		<pubDate>Mon, 03 Sep 2007 12:31:56 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[DSP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[いつか使う]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/2007/09/03/2118/</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2007/09/03/1976/"><img align="left" hspace="5" width="150" src="http://img.simpleapi.net/small/http://sound.condorow.net/dsp.html" class="alignleft wp-post-image tfe" alt="" title="" /></a>デジタル信号処理のライブラリ一覧、目的別にかなりの数がリストアップされています。 今は使う予定はないけど車輪の再発明をしないように&#8221;いつか使う&#8221;。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2007%252F09%252F03%252F1976%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Signal%20Analysis%2FProcessing%20Software%22%20%7D);"></div>
<p><a href="http://sound.condorow.net/dsp.html"><img src="http://img.simpleapi.net/small/http://sound.condorow.net/dsp.html" alt="" width="128" height="128" hspace="4" vspace="4" align="left" border="0"></a><br clear="all"><br />
デジタル信号処理のライブラリ一覧、目的別にかなりの数がリストアップされています。</p>
<p>今は使う予定はないけど車輪の再発明をしないように&#8221;いつか使う&#8221;。</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2007/09/03/1976/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ひらメソッド</title>
		<link>http://www.tsunematsu.cc/2007/07/30/1934/</link>
		<comments>http://www.tsunematsu.cc/2007/07/30/1934/#comments</comments>
		<pubDate>Mon, 30 Jul 2007 13:18:19 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[プログラミング-Wiki]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/2007/07/30/2072/</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2007/07/30/1934/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>はてなのid:higeponさんの今日の日記 ひげぽん OSとか作っちゃうかMona- &#8211; 雑談で知ったのですが、 ひらメソッドというソースコードを読む手法があるんですね。 上記URLで読んだ情報によると、ソ [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2007%252F07%252F30%252F1934%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E3%81%B2%E3%82%89%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%22%20%7D);"></div>
<p>はてなのid:higeponさんの今日の日記 <a href="http://d.hatena.ne.jp/higepon/20070729/1185720871" title="ひげぽん OSとか作っちゃうかMona- - 雑談">ひげぽん OSとか作っちゃうかMona- &#8211; 雑談</a>で知ったのですが、 <a href="http://hira.main.jp/wiki/pukiwiki.php?2005_6_23%A5%AB%A1%BC%A5%CD%A5%EB%BA%C2%C3%CC%B2%F1%AD%A1" title="2005_6_23カーネル座談会① - LinuxKernelHackJapan">ひらメソッド</a>というソースコードを読む手法があるんですね。</p>
<p>上記URLで読んだ情報によると、ソースを細かい単位から読んでいくことで、分からない処理、分からない関数を極力減らすことにポイントがあるようです。たとえば　func1()がfunc2()を呼び出してfunc2()の中でさらにfunc3()を呼び出している</p>
<blockquote><p>func1()→func2()→func3()</p></blockquote>
<p>という状況ならfunc3を最初に読んで、次にfunc2、最後にfunc1を読みます。</p>
<p>ついでに各関数を読んでいるときにWikiを使って調べた内容を書き留めておくことも奨励されています。Wikiなら書くのも楽だし、向いているかもしれません。</p>
<p>ついでに見つけたのがGNU GLOBALの解析結果のHTMLにひらメソッド用で活用できるよう書き込みをできるようにした <a href='http://blog.so-net.ne.jp/rainyday/2006-10-07' title='So-net blog:Rainy Day Codings:CodeReadingWi ki'>CodeReadingWiki</a>です。Windows環境を前提として作られているようですが、ほぼ自動でWikiページの作成までしてもらえるのは便利ですね。</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2007/07/30/1934/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ひらメソッド</title>
		<link>http://www.tsunematsu.cc/2007/07/30/1935/</link>
		<comments>http://www.tsunematsu.cc/2007/07/30/1935/#comments</comments>
		<pubDate>Mon, 30 Jul 2007 13:18:19 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[プログラミング-Wiki]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/2007/07/30/2072/</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2007/07/30/1935/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>はてなのid:higeponさんの今日の日記 ひげぽん OSとか作っちゃうかMona- &#8211; 雑談で知ったのですが、 ひらメソッドというソースコードを読む手法があるんですね。 上記URLで読んだ情報によると、ソ [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2007%252F07%252F30%252F1935%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E3%81%B2%E3%82%89%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%22%20%7D);"></div>
<p>はてなのid:higeponさんの今日の日記 <a href="http://d.hatena.ne.jp/higepon/20070729/1185720871" title="ひげぽん OSとか作っちゃうかMona- - 雑談">ひげぽん OSとか作っちゃうかMona- &#8211; 雑談</a>で知ったのですが、 <a href="http://hira.main.jp/wiki/pukiwiki.php?2005_6_23%A5%AB%A1%BC%A5%CD%A5%EB%BA%C2%C3%CC%B2%F1%AD%A1" title="2005_6_23カーネル座談会① - LinuxKernelHackJapan">ひらメソッド</a>というソースコードを読む手法があるんですね。</p>
<p>上記URLで読んだ情報によると、ソースを細かい単位から読んでいくことで、分からない処理、分からない関数を極力減らすことにポイントがあるようです。たとえば　func1()がfunc2()を呼び出してfunc2()の中でさらにfunc3()を呼び出している</p>
<blockquote><p>func1()→func2()→func3()</p></blockquote>
<p>という状況ならfunc3を最初に読んで、次にfunc2、最後にfunc1を読みます。</p>
<p>ついでに各関数を読んでいるときにWikiを使って調べた内容を書き留めておくことも奨励されています。Wikiなら書くのも楽だし、向いているかもしれません。</p>
<p>ついでに見つけたのがGNU GLOBALの解析結果のHTMLにひらメソッド用で活用できるよう書き込みをできるようにした <a href='http://blog.so-net.ne.jp/rainyday/2006-10-07' title='So-net blog:Rainy Day Codings:CodeReadingWi ki'>CodeReadingWiki</a>です。Windows環境を前提として作られているようですが、ほぼ自動でWikiページの作成までしてもらえるのは便利ですね。</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2007/07/30/1935/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>google-gflags</title>
		<link>http://www.tsunematsu.cc/2007/07/17/1920/</link>
		<comments>http://www.tsunematsu.cc/2007/07/17/1920/#comments</comments>
		<pubDate>Tue, 17 Jul 2007 13:35:04 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[ライブラリ]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/2007/07/17/2057/</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2007/07/17/1920/"><img align="left" hspace="5" width="150" src="http://img.simpleapi.net/small/http://code.google.com/p/google-gflags/" class="alignleft wp-post-image tfe" alt="" title="" /></a>Google Japan Blogで紹介されていたGoogleが公開しているプログラミング用ライブラリです。コマンドラインオプションをパースするのに使うgetoptよりも高機能で手軽に使えるようです。main関数に手を入 [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2007%252F07%252F17%252F1920%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22google-gflags%22%20%7D);"></div>
<p><a href="http://code.google.com/p/google-gflags/"><img src="http://img.simpleapi.net/small/http://code.google.com/p/google-gflags/" align="left" border="0" height="128" hspace="4" vspace="4" width="128" /></a><br clear="all" /><br />
<a href="http://googlejapan.blogspot.com/2007/07/google-1.html" title="Google Japan Blog: Google が公開しているソフトウェアの解説 ( その 1 )">Google Japan Blog</a>で紹介されていたGoogleが公開しているプログラミング用ライブラリです。コマンドラインオプションをパースするのに使うgetoptよりも高機能で手軽に使えるようです。main関数に手を入れることなく、defineの定義の追加でオプション指定ができるのは便利ですね。</p>
<p>このライブラリのライセンスは修正BSDライセンス(New BSD Licence)です。著作権の表示と、無保証、免責をクリアすれば使えるかなり制限が緩いライセンスとのことです。これなら会社でも使えるなぁ。</p>
<ul>
<li><a href="http://code.google.com/p/google-gflags/" title="google-gflags - Google Code">google-gflags &#8211; Google Code</a></li>
<li>  <a href="http://ossipedia.ipa.go.jp/kb/New_BSD_License" title="New BSD License || OSS iPedia">New BSD License || OSS iPedia</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2007/07/17/1920/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>masuidrive的プロジェクトの方針</title>
		<link>http://www.tsunematsu.cc/2007/07/13/1915/</link>
		<comments>http://www.tsunematsu.cc/2007/07/13/1915/#comments</comments>
		<pubDate>Fri, 13 Jul 2007 11:55:43 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[Trac]]></category>
		<category><![CDATA[プロジェクト]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/2007/07/13/2052/</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2007/07/13/1915/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>はてなブックマークで知ったmasuidriveさんのプロジェクトの方針を読みました。 masuidrive on rails » Blog Archive » masuidrive的プロジェクトの方針 作業スクリプトまで [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2007%252F07%252F13%252F1915%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22masuidrive%E7%9A%84%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E6%96%B9%E9%87%9D%22%20%7D);"></div>
<p><object type="application/x-shockwave-flash" data="https://s3.amazonaws.com:443/slideshare/ssplayer.swf?id=76093&#038;doc=masuidrive-working-style1351" width="425" height="348"><param name="movie" value="https://s3.amazonaws.com:443/slideshare/ssplayer.swf?id=76093&#038;doc=masuidrive-working-style1351" /></object><br />
はてなブックマークで知ったmasuidriveさんのプロジェクトの方針を読みました。<br />
 <a href='http://blog.masuidrive.jp/index.php/2007/07/11/masuidrive-working-style/' title='masuidrive on rails » Blog Archive » masuidrive的プロジェクトの方針'>masuidrive on rails » Blog Archive » masuidrive的プロジェクトの方針</a></p>
<p>作業スクリプトまでSubversionに入れて管理ってのはこれまで考えたことも無かったので新鮮でした。Tracのチケットというのも使ってみたいのですがこれはちょっと敷居が高そうに感じます。</p>
<p>職場でも使ってみたいですが、うちの場合は徐々に導入することになりそうです。</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2007/07/13/1915/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>デバッグパターン</title>
		<link>http://www.tsunematsu.cc/2007/05/01/1826/</link>
		<comments>http://www.tsunematsu.cc/2007/05/01/1826/#comments</comments>
		<pubDate>Tue, 01 May 2007 13:19:36 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[デバッグ]]></category>
		<category><![CDATA[読み物]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/2007/05/01/1948/</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2007/05/01/1826/"><img align="left" hspace="5" width="150" src="http://img.simpleapi.net/small/http://monoki.fc2web.com/diary/txt/computer/debugpatern.html" class="alignleft wp-post-image tfe" alt="" title="" /></a>C言語の何かを調べている途中で見つけました。様々なデバッグのパターンをまとめているページです。読んでいると&#8221;あー、こういうことあるある&#8221;と納得することが多いです。 プログラミング初級者が読むと学ぶ [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2007%252F05%252F01%252F1826%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%22%20%7D);"></div>
<p><a href="http://monoki.fc2web.com/diary/txt/computer/debugpatern.html"><img src="http://img.simpleapi.net/small/http://monoki.fc2web.com/diary/txt/computer/debugpatern.html" align="left" border="0" height="128" hspace="4" vspace="4" width="128" /></a><br clear="all" /><br />
C言語の何かを調べている途中で見つけました。様々なデバッグのパターンをまとめているページです。読んでいると&#8221;あー、こういうことあるある&#8221;と納得することが多いです。</p>
<p>プログラミング初級者が読むと学ぶことは多いんじゃないでしょうか。</p>
<ul>
<li> <a href="http://monoki.fc2web.com/diary/txt/computer/debugpatern.html" title="モノーキ～デバッグパターン">モノーキ～デバッグパターン</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2007/05/01/1826/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RubyInline</title>
		<link>http://www.tsunematsu.cc/2007/03/13/1755/</link>
		<comments>http://www.tsunematsu.cc/2007/03/13/1755/#comments</comments>
		<pubDate>Tue, 13 Mar 2007 13:09:56 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.tsunematsu.cc/2007/03/13/1811/</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2007/03/13/1755/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>netswitch! &#124; netswitch!さんで知った RubyInlineが気になります．Rubyのソースでネックとなる箇所をインラインのC言語記述で置き換えることで高速化できるようです． RubyにはC言語で作っ [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2007%252F03%252F13%252F1755%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22RubyInline%22%20%7D);"></div>
<p><a href='http://blog.netswitch.jp/articles/2007/03/12/' title='netswitch! | netswitch!'>netswitch! | netswitch!</a>さんで知った <a href='http://www.zenspider.com/ZSS/Products/RubyInline/' title='RubyInline'>RubyInline</a>が気になります．Rubyのソースでネックとなる箇所をインラインのC言語記述で置き換えることで高速化できるようです．</p>
<p>RubyにはC言語で作ったライブラリを組み込む機能が元々あって，大学時代の研究用プログラムで一部使っていましたがやっぱりインラインで書ける方が便利でいいですね．機会があったら使ってみたいと思います．</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2007/03/13/1755/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WDM : Windows Driver Model</title>
		<link>http://www.tsunematsu.cc/2006/09/21/1567/</link>
		<comments>http://www.tsunematsu.cc/2006/09/21/1567/#comments</comments>
		<pubDate>Thu, 21 Sep 2006 12:38:38 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://tune.s266.xrea.com/wordpress/2006/09/21/wdm-windows-driver-model/</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2006/09/21/1567/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>研修の内容が今日から変わってWDM(Windows Driver Model)になりました．Windowsで動作するドライバの作成方法を学びます． - WDMとは 【Windows Driver Model】　─　意味・ [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2006%252F09%252F21%252F1567%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22WDM%20%3A%20Windows%20Driver%20Model%22%20%7D);"></div>
<p>研修の内容が今日から変わってWDM(Windows Driver Model)になりました．Windowsで動作するドライバの作成方法を学びます．<br />
- <a href='http://e-words.jp/w/WDM-1.html' title='WDMとは 【Windows Driver Model】　─　意味・解説 ： IT用語辞典 e-Words'>WDMとは 【Windows Driver Model】　─　意味・解説 ： IT用語辞典 e-Words</a></p>
<p>これまでのプログラミングとは違って地味です．動作も地味ですし，記述内容も工夫の余地が少なく決まった定型文を書くことが多いように感じます．おそらく今後ドライバを書くことは無いかと思いますが授業を受けていて新鮮な感じでした．</p>
<p>そしてWDMのプログラミングをしているとしょっちゅうブルースクリーンが見れます．研修が終わるまでに向こう3年分くらいのブルースクリーンが見れそうです．</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2006/09/21/1567/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C++の勉強中</title>
		<link>http://www.tsunematsu.cc/2006/09/04/1549/</link>
		<comments>http://www.tsunematsu.cc/2006/09/04/1549/#comments</comments>
		<pubDate>Mon, 04 Sep 2006 13:01:18 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://tune.s266.xrea.com/wordpress/2006/09/04/c%e3%81%ae%e5%8b%89%e5%bc%b7%e4%b8%ad/</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2006/09/04/1549/"><img align="left" hspace="5" width="150" src="http://images-jp.amazon.com/images/P/4798103187.09.MZZZZZZZ.jpg" class="alignleft wp-post-image tfe" alt="独習C++" title="" /></a>現在研修でC++の勉強をしています． 独習C++ posted with amazlet on 06.09.05 ハーバート・シルト トップスタジオ 神林 靖 翔泳社 (2002/11)売り上げランキング: 7,570  [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2006%252F09%252F04%252F1549%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22C%2B%2B%E3%81%AE%E5%8B%89%E5%BC%B7%E4%B8%AD%22%20%7D);"></div>
<p>現在研修でC++の勉強をしています．</p>
<div class="amazlet-box" style="margin-bottom:0px;">
<div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798103187/tuneapps-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://images-jp.amazon.com/images/P/4798103187.09.MZZZZZZZ.jpg" alt="独習C++" style="border: none;" /></a></div>
<div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%">
<div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798103187/tuneapps-22/ref=nosim/" name="amazletlink" target="_blank">独習C++</a>
<div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4798103187/tuneapps-22" title="独習C++" target="_blank">amazlet</a> on 06.09.05</div>
</div>
<div class="amazlet-detail">ハーバート・シルト トップスタジオ 神林 靖 <br />翔泳社 (2002/11)<br />売り上げランキング: 7,570</div>
<div class="amazlet-review" style="margin-top:10px; margin-bottom:10px">
<div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /></div>
<p><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> C言語理解者には良書<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-3-0.gif" alt="3" /> ちと難しい気が・・・<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> 良くも悪くも中級者向けの良書</div>
<div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798103187/tuneapps-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
<div class="amazlet-footer" style="clear: left"></div>
</div>
<p>プログラミングはいろいろやりましたが独習シリーズに特にお世話になりました．この本は現在の研修のテキストでもあるので改めて全部読み直しましたが，前はよく分からなかった演算子のオーバーロードやテンプレートの使い方が今回はとても良く理解できました．でも今見るとサンプルソースコードのレベルがいまいちにも感じます．C++の文法は詳しいけどC++らしいプログラムを学ぶには向いていないようです．</p>
<div class="amazlet-box" style="margin-bottom:0px;">
<div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4894714515/tuneapps-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://images-jp.amazon.com/images/P/4894714515.09.MZZZZZZZ.jpg" alt="Effective C++ 原著第3版" style="border: none;" /></a></div>
<div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%">
<div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4894714515/tuneapps-22/ref=nosim/" name="amazletlink" target="_blank">Effective C++ 原著第3版</a>
<div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4894714515/tuneapps-22" title="Effective C++ 原著第3版" target="_blank">amazlet</a> on 06.09.05</div>
</div>
<div class="amazlet-detail">スコット・メイヤーズ 小林 健一郎 <br />ピアソン・エデュケーション (2006/04/29)</div>
<div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4894714515/tuneapps-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
<div class="amazlet-footer" style="clear: left"></div>
</div>
<p>そして，今読んでるのがこれです．研修の副読本として位置づけられているのですが読んでいて目からウロコがぽろぽろこぼれ落ちます．頑張っても1日100ページも読めません，内容が濃い本です．</p>
<p>これからはC++をメインに使っていくことになるので次はSTL周りの本を読もうと思ってます．良い本知ってたら教えてください．</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2006/09/04/1549/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rubyの標準出力に色を付ける</title>
		<link>http://www.tsunematsu.cc/2005/12/31/1290/</link>
		<comments>http://www.tsunematsu.cc/2005/12/31/1290/#comments</comments>
		<pubDate>Sat, 31 Dec 2005 06:41:44 +0000</pubDate>
		<dc:creator>tune</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://tune.s266.xrea.com/wordpress/2005/12/31/ruby%e3%81%ae%e6%a8%99%e6%ba%96%e5%87%ba%e5%8a%9b%e3%81%ab%e8%89%b2%e3%82%92%e4%bb%98%e3%81%91%e3%82%8b/</guid>
		<description><![CDATA[<a href="http://www.tsunematsu.cc/2005/12/31/1290/"><img align="left" hspace="5" width="150" height="150" src="http://www.tsunematsu.cc/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>naoyaのはてなダイアリー &#8211; 無線LANブリッジのIPアドレスを探せのソースコードを見て知ったのですが，標準出力に色を付けるライブラリがPerlにはあるんですね．見やすくなっていいなと感じました． 自分は [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.tsunematsu.cc%252F2005%252F12%252F31%252F1290%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Ruby%E3%81%AE%E6%A8%99%E6%BA%96%E5%87%BA%E5%8A%9B%E3%81%AB%E8%89%B2%E3%82%92%E4%BB%98%E3%81%91%E3%82%8B%22%20%7D);"></div>
<p><a href='http://d.hatena.ne.jp/naoya/20051231/1135992917' title='naoyaのはてなダイアリー - 無線LANブリッジのIPアドレスを探せ'>naoyaのはてなダイアリー &#8211; 無線LANブリッジのIPアドレスを探せ</a>のソースコードを見て知ったのですが，標準出力に色を付けるライブラリがPerlにはあるんですね．見やすくなっていいなと感じました．</p>
<p>自分はRubyを使う機会が多いので，Rubyでも似たようなライブラリを探してみたところ <a href='http://term-ansicolor.rubyforge.org/' title='Term::ANSIColor for Ruby'>Term::ANSIColor for Ruby</a>というのを見つけました．</p>
<p>使い方は以下の通りです．<br />
>><br />
require &#8216;term/ansicolor&#8217;</p>
<p>include Term::ANSIColor<br />
print red, bold, &#8220;red bold&#8221;, reset, &#8220;\n&#8221;<br />
< <</p>
<p>またはこんな書き方もできます．<br />
>><br />
include Term::ANSIColor<br />
print red(bold(&#8220;red bold&#8221;)), &#8220;\n&#8221;<br />
< <</p>
<p>ブロックを使ってresetが自動で行われるようにする書き方もできます．<br />
>><br />
include Term::ANSIColor<br />
print red { bold { &#8220;red bold&#8221; } }, &#8220;\n&#8221;<br />
< <</p>
<p>Mixinして既存クラスの機能を拡張することも可能とのことです．<br />
>><br />
class String<br />
  include Term::ANSIColor<br />
end<br />
print &#8220;red bold&#8221;.red.bold, &#8220;\n&#8221;<br />
< <</p>
<p>これは便利ですね．これから書くプログラムで積極的に使っていきたいと思います．</p>
<p>○追記<br />
PHPでは <a href='http://pear.php.net/package/Console_Color' title='PEAR :: Package :: Console_Color'>PEAR :: Package :: Console_Colorがあるみたいです．</p>

]]></content:encoded>
			<wfw:commentRss>http://www.tsunematsu.cc/2005/12/31/1290/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

