<?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/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>Solitaire &#187; C#</title>
	<atom:link href="http://blog.redhawk.jp/archives/tag/c/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.redhawk.jp</link>
	<description>Sato Tatsuma&#039;s weblog about programming and systems.</description>
	<lastBuildDate>Sun, 05 Sep 2010 02:31:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.redhawk.jp/archives/tag/c/feed" />
		<item>
		<title>C++: boost: boost::thread を C++ の class で使う</title>
		<link>http://blog.redhawk.jp/archives/2777?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=c-boost-boostthread-%25e3%2582%2592-c-%25e3%2581%25ae-class-%25e3%2581%25a7%25e4%25bd%25bf%25e3%2581%2586</link>
		<comments>http://blog.redhawk.jp/archives/2777#comments</comments>
		<pubDate>Fri, 16 Jul 2010 17:39:41 +0000</pubDate>
		<dc:creator>reciente</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[boost]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Thread]]></category>

		<guid isPermaLink="false">http://blog.redhawk.jp/?p=2777</guid>
		<description><![CDATA[pthread と Windows Thread は元々使っていたんだけれど、boost::thread が C++0x での Thread 実装の殆どそのままらしいから、使ってみることに。 っていうか、こういうライブラリ使わないと、Linux と Windows で動かすときに不便だしねー ってかね、サンプルの殆どが class を使ってないんだよね。 その場合、pthread とか使っていれば直ぐに分かるから、まあいいんだけれど、class を使った場合のが苦労した。 最初、static なメソッドしかスレッドで実行できないと思っていたんだけれど、実はそうじゃないっぽい。 とりあえず、コンパイル通って実行してるやつを元に、簡略化して抜き出し。 簡略化の後コンパイル通してないから、若干タイプミスあるかも。 #include #include class MyThread { public: MyThread(); ~MyThread(); void Create(); void Release(); void TerminateThread(); private: bool terminate_; std::tr1::shared_ptr thread_; void Run(); }; MyThread::MyThread() { this->terminate_ = false; } MyThread::~MyThread() { this->Release(); [...]]]></description>
			<content:encoded><![CDATA[<p>pthread と Windows Thread は元々使っていたんだけれど、boost::thread が C++0x での Thread 実装の殆どそのままらしいから、使ってみることに。<br />
っていうか、こういうライブラリ使わないと、Linux と Windows で動かすときに不便だしねー</p>
<p>ってかね、サンプルの殆どが class を使ってないんだよね。<br />
その場合、pthread とか使っていれば直ぐに分かるから、まあいいんだけれど、class  を使った場合のが苦労した。<br />
最初、static なメソッドしかスレッドで実行できないと思っていたんだけれど、実はそうじゃないっぽい。</p>
<p>とりあえず、コンパイル通って実行してるやつを元に、簡略化して抜き出し。<br />
簡略化の後コンパイル通してないから、若干タイプミスあるかも。</p>
<pre class="brush:c++">
#include <memory>

#include <boost/thread.hpp>

class MyThread
{
 public:
  MyThread();
  ~MyThread();

  void Create();
  void Release();

  void TerminateThread();

 private:
  bool terminate_;

  std::tr1::shared_ptr<boost::thread> thread_;

void Run();
};

MyThread::MyThread()
{
  this->terminate_ = false;
}

MyThread::~MyThread()
{
  this->Release();
}

void MyThread::Create()
{
  this->thread_ = std::tr1::shared_ptr<boost::thread>(new boost::thread(boost::bind(&#038;MyThread::Run, this)));
}

void MyThread::Release()
{
  if (this->thread_.get() &#038;&#038; this->thread_->joinable()) {
    this->terminate_ = true;
    this->thread_->join();
  }
}

void MyThread::TerminateThread()
{
  this->terminate_ = true;
}

void MyThread::Run()
{
  while(!this->terminate_) {
    this->thread_->sleep(boost::get_system_time() + boost::posix_time::milliseconds(2000));
  }
}

int main()
{
  MyThread thread1;
  MyThread thread2;
  MyThread thread3;

  thread1.Create();
  thread2.Create();
  thread3.Create();

  thread1.Release();
  thread2.Release();
  thread3.Release();

  return 0;
}
</pre>
<p>boost::thread を new する時に、 boost::bind を使って、を複数の引数を持たせられるようにしてある。<br />
boostのライブラリって、本当にシンタックスシュガーを目指している感じがするなぁ・・・</p>
<p>この手のライブラリは便利なんだけれど、名前空間のおかげでコードが長くなるねー<br />
まあ、自分は using は使わない方針なので、仕方がないのだけれどｗ</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.redhawk.jp/archives/2777/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.redhawk.jp/archives/2777" />
	</item>
		<item>
		<title>C++: Google C++ Style Guide</title>
		<link>http://blog.redhawk.jp/archives/2612?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=c-google-c-style-guide</link>
		<comments>http://blog.redhawk.jp/archives/2612#comments</comments>
		<pubDate>Fri, 02 Apr 2010 09:36:48 +0000</pubDate>
		<dc:creator>reciente</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://blog.redhawk.jp/?p=2612</guid>
		<description><![CDATA[Google C++ Style Guide Google C++スタイルガイド 日本語訳 全てがそのまま、自分の組み方にいい訳じゃないけれど、 組み方の参考にはなる。 最近の流行、というか、2年くらい前から自分のTABじゃなくてスペースを使っている。 Eclipse環境の時だけ、JavaはTABだけれどね。 Pythonの影響だね。 PythonとかC/C++のソースコードを組む時に、 Pythonのコーディング規約を結構参考にしていたからねー。 他にも、多重継承は基本的に禁止だけれど、 インターフェースクラスだけは、有益と判断されれば多重継承を用いても良い。 など、Javaの人たちの考えを参考にしているところもある。 Operatorの多重定義の禁止は結構大胆。 正直な話、MAYA C++ APIとかを触っていると、classのoperatorの多重定義は使いやすい。 でも、あれはMAYAっていう3D分野に限られているから、余り混乱しなくていいんじゃないかな～って思ったりもする。 という訳で、どっちかに統一されていればいいんだけれど、数学的な部分以外を扱う時には、 余り上書きは良くないかもね。 まあ、Javaが長かったから、classでoperatorを使うのは、build-inライブラリのもの意外は抵抗があるね。 namespaceは自分も同じ考えで、usingは絶対使わない。 名前空間が分けわからなくなるんだよね・・・。 STLを使う時でも、自分は std::cout]]></description>
			<content:encoded><![CDATA[<p><a href="http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml">Google C++ Style Guide</a><br />
<a href="http://www.textdrop.net/google-styleguide-ja/cppguide.xml">Google C++スタイルガイド 日本語訳</a></p>
<p>全てがそのまま、自分の組み方にいい訳じゃないけれど、<br />
組み方の参考にはなる。</p>
<p>最近の流行、というか、2年くらい前から自分のTABじゃなくてスペースを使っている。<br />
Eclipse環境の時だけ、JavaはTABだけれどね。<br />
Pythonの影響だね。<br />
PythonとかC/C++のソースコードを組む時に、<br />
Pythonのコーディング規約を結構参考にしていたからねー。</p>
<p>他にも、多重継承は基本的に禁止だけれど、<br />
インターフェースクラスだけは、有益と判断されれば多重継承を用いても良い。<br />
など、Javaの人たちの考えを参考にしているところもある。</p>
<p>Operatorの多重定義の禁止は結構大胆。</p>
<p>正直な話、MAYA C++ APIとかを触っていると、classのoperatorの多重定義は使いやすい。<br />
でも、あれはMAYAっていう3D分野に限られているから、余り混乱しなくていいんじゃないかな～って思ったりもする。<br />
という訳で、どっちかに統一されていればいいんだけれど、数学的な部分以外を扱う時には、<br />
余り上書きは良くないかもね。</p>
<p>まあ、Javaが長かったから、classでoperatorを使うのは、build-inライブラリのもの意外は抵抗があるね。</p>
<p>namespaceは自分も同じ考えで、usingは絶対使わない。<br />
名前空間が分けわからなくなるんだよね・・・。<br />
STLを使う時でも、自分は<br />
std::cout << std::endl;<br />
と、名前空間から書くほう。<br />
理由は、どのcoutを参照しているか明確にしたいだけ。<br />
後でソースコードを見た時に、STLとかboostくらいなら別に分かるからいいんだけれど、<br />
それ以外のライブラリの時、どのライブラリを参照しているのか明確にしておきたいんだよね。<br />
書くのが面倒という人もいるだろうけれど、自分はそこは面倒でも割り切って書くほう。</p>
<p>後は、定数の命名規則もなかなか好み。<br />
MAYA::kWorld<br />
という感じで、MAYA APIを使った時から、prefixにkを使っていると、非常に分かりやすい。<br />
マクロ名と定数名って今までごっちゃになっていたから、これからはそこを分けるために、kを使うね。</p>
<p>後面白いのが、変数名と変数スコープ。<br />
classのメンバ変数はprivateのみ。っていうのは、凄い割り切っている。<br />
自分もJavaが長かったから、Java Beanっていう考え方で、<br />
基本的にデータ構造として扱う時はprivateにset、get関数付けていたけれど、<br />
それ以外のclassではたまに、publicな関数があったりはした。<br />
そこを、private限定って割り切ってる辺りが凄い。<br />
こういう徹底をしないと、globalスコープにどんどん変数を露出させていく人がいるから、<br />
コーディング規約でそれを出来なくしてしまうのは、正解だと思う。</p>
<p>基本的に、設計がおかしい。まあ、簡単に言えば汚いソースコードは、<br />
コーディング規約がきちんとまとまっていなかったり、<br />
デザインパターンなどの技法を使っていなかったりする場合が多い。</p>
<p>Javaで一緒にプログラムを組んでいた人が、<br />
こういう場合はこのデザインパターンを使う。とかある程度決まっていて、<br />
そういう中でプログラムを組んでいけば、Javaプログラマーの間では、<br />
ソースコードが読みやすくなる。<br />
と言っていた。</p>
<p>まあ、その人とプログラムを組んでいて困ったことはないし、<br />
次に自分が設計をした時も、他の人が結構触れていたしね。</p>
<p>ま、設計を覚えるのは大変だけれど、<br />
こういうきちんと理由付けがあるコーディング規約を見るのは、<br />
どうしてそうなってるんだろう？と、考えるために知識を仕入れたりもするので、<br />
なかなかいい勉強材料じゃないかな。</p>
<p>しかし、C++0xも触ってみないとなぁ・・・<br />
Threadが標準がされるって素晴らしい！！<br />
Googleが触れてるね。<br />
<a href="http://code.google.com/edu/languages/index.html#_cplus_threads">Programming Languages C++ Threads</a></p>
<p>余談だが・・・Guideの部分が何度もGuildになったのはおかしい。<br />
手がいけないんだ！！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.redhawk.jp/archives/2612/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.redhawk.jp/archives/2612" />
	</item>
		<item>
		<title>GNU make: -j オプション</title>
		<link>http://blog.redhawk.jp/archives/1617?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=gnu-make-j-%25e3%2582%25aa%25e3%2583%2597%25e3%2582%25b7%25e3%2583%25a7%25e3%2583%25b3</link>
		<comments>http://blog.redhawk.jp/archives/1617#comments</comments>
		<pubDate>Fri, 15 Jan 2010 03:07:48 +0000</pubDate>
		<dc:creator>reciente</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[make]]></category>

		<guid isPermaLink="false">http://blog.redhawk.jp/?p=1617</guid>
		<description><![CDATA[職場でコンパイル時間の遅いプロジェクトの、コンパイル時間の最適化を行っているんだけれど その中で見つけたのが、make -j オプション。知らなかった・・・ make -j2 make -j4 などで、コンパイル時に同時に走るJob数を選択できる。 物理的なコアの数分指定するのが妥当かな。ということで Core2Duo だから -j2 で1.8倍くらいは早くなった。 Core2Quad で、 -j4 だと、 3.4倍くらいは早くなるんじゃないだろうか？ という事で、Core2Quad じゃないけれど、Xeonで試してみました。 早かった！！ 20分コンパイルにかかっていたのを、こっちの作業で10分以内まで短縮していて Core2Duoで-j2 で5分だったのが、Xeon で -j4 は3分以内だった！！ すばらしい！！ っていうか、20分もかかっていたのはソースコードとかクラス設計がおかしかったせいなので 直すのしんどいです・・・ 新卒に設計を任せちゃダメって事ですね。]]></description>
			<content:encoded><![CDATA[<p>職場でコンパイル時間の遅いプロジェクトの、コンパイル時間の最適化を行っているんだけれど<br />
その中で見つけたのが、make -j オプション。知らなかった・・・</p>
<p>make -j2<br />
make -j4</p>
<p>などで、コンパイル時に同時に走るJob数を選択できる。<br />
物理的なコアの数分指定するのが妥当かな。ということで<br />
Core2Duo だから -j2 で1.8倍くらいは早くなった。<br />
Core2Quad で、 -j4 だと、 3.4倍くらいは早くなるんじゃないだろうか？</p>
<p>という事で、Core2Quad じゃないけれど、Xeonで試してみました。</p>
<p>早かった！！</p>
<p>20分コンパイルにかかっていたのを、こっちの作業で10分以内まで短縮していて<br />
Core2Duoで-j2 で5分だったのが、Xeon で -j4 は3分以内だった！！</p>
<p>すばらしい！！</p>
<p>っていうか、20分もかかっていたのはソースコードとかクラス設計がおかしかったせいなので<br />
直すのしんどいです・・・<br />
新卒に設計を任せちゃダメって事ですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.redhawk.jp/archives/1617/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.redhawk.jp/archives/1617" />
	</item>
		<item>
		<title>MotionBuilder: OpenRealitySDK setup</title>
		<link>http://blog.redhawk.jp/archives/1606?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=motionbuilder-openrealitysdk-setup</link>
		<comments>http://blog.redhawk.jp/archives/1606#comments</comments>
		<pubDate>Thu, 14 Jan 2010 13:54:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MotionBuilder]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[OpenRealitySDK]]></category>

		<guid isPermaLink="false">http://blog.redhawk.jp/?p=1606</guid>
		<description><![CDATA[職場でお世話になっているモーションデザイナーの人と話をしていて、MotionBuilderのpluginを開発する事になったので 仕事とは関係なく、ちょっと家で作業中。という訳で、メモ。 とりあえず、Windows環境。暇があったら、Linux環境でもやるかもしれないけれど、まずないなｗ MotionBuilderをインストールする時に、Customを選んで、OpenRealitySDKをインストールする。 Customじゃないとインストールされない模様。 次に、VisualStudioを起動して、新規作成 -> プロジェクト -> VisualC++ &#8211; >Win32プロジェクト -> DLL（空のプロジェクト） -> 完了 プロジェクト -> プロパティ -> 構成プロパティ ->　C++ -> 追加のインクルードディレクトリに以下を追加。 C:\Program Files\Autodesk\MotionBuilder 2010\OpenRealitySDK\include C:\Program Files\Autodesk\MotionBuilder 2010\OpenRealitySDK\include\fbsdk プロジェクト -> プロパティ -> 構成プロパティ -> リンカ -> 追加のライブラリディレクトリに以下を追加。 C:\Program Files\Autodesk\MotionBuilder 2010\OpenRealitySDK\lib\win32 プロジェクト -> プロパティ -> 構成プロパティ -> リンカ -> 入力 -> 追加の依存ファイルに以下を追加。 fbsdk.lib 環境によってPATHが違うと思うので、合わせてください。 [...]]]></description>
			<content:encoded><![CDATA[<p>職場でお世話になっているモーションデザイナーの人と話をしていて、MotionBuilderのpluginを開発する事になったので<br />
仕事とは関係なく、ちょっと家で作業中。という訳で、メモ。</p>
<p>とりあえず、Windows環境。暇があったら、Linux環境でもやるかもしれないけれど、まずないなｗ</p>
<p>MotionBuilderをインストールする時に、Customを選んで、OpenRealitySDKをインストールする。<br />
Customじゃないとインストールされない模様。</p>
<p>次に、VisualStudioを起動して、新規作成 -> プロジェクト -> VisualC++ &#8211; >Win32プロジェクト -> DLL（空のプロジェクト） -> 完了<br />
プロジェクト -> プロパティ -> 構成プロパティ ->　C++ -> 追加のインクルードディレクトリに以下を追加。<br />
C:\Program Files\Autodesk\MotionBuilder 2010\OpenRealitySDK\include<br />
C:\Program Files\Autodesk\MotionBuilder 2010\OpenRealitySDK\include\fbsdk<br />
<a href="http://blog.redhawk.jp/wp-content/uploads/2010/01/fbsdk01.png"><img src="http://blog.redhawk.jp/wp-content/uploads/2010/01/fbsdk01-300x221.png" alt="" title="fbsdk01" width="300" height="221" class="alignnone size-medium wp-image-1610" /></a></p>
<p>プロジェクト -> プロパティ -> 構成プロパティ -> リンカ -> 追加のライブラリディレクトリに以下を追加。<br />
C:\Program Files\Autodesk\MotionBuilder 2010\OpenRealitySDK\lib\win32<br />
<a href="http://blog.redhawk.jp/wp-content/uploads/2010/01/fbsdk03.png"><img src="http://blog.redhawk.jp/wp-content/uploads/2010/01/fbsdk03-300x232.png" alt="" title="fbsdk03" width="300" height="232" class="alignnone size-medium wp-image-1612" /></a></p>
<p>プロジェクト -> プロパティ -> 構成プロパティ -> リンカ -> 入力 -> 追加の依存ファイルに以下を追加。<br />
fbsdk.lib<br />
<a href="http://blog.redhawk.jp/wp-content/uploads/2010/01/fbsdk02.png"><img src="http://blog.redhawk.jp/wp-content/uploads/2010/01/fbsdk02-300x207.png" alt="" title="fbsdk02" width="300" height="207" class="alignnone size-medium wp-image-1613" /></a></p>
<p>環境によってPATHが違うと思うので、合わせてください。</p>
<p>今回は、Constrainの自作を行っているので、次回はオリジナルのConstrainの作り方でも。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.redhawk.jp/archives/1606/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.redhawk.jp/archives/1606" />
	</item>
		<item>
		<title>FBX: FBX SDK install</title>
		<link>http://blog.redhawk.jp/archives/1604?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=fbx-fbx-sdk-install</link>
		<comments>http://blog.redhawk.jp/archives/1604#comments</comments>
		<pubDate>Thu, 14 Jan 2010 12:39:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FBX]]></category>
		<category><![CDATA[Autodesk]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://blog.redhawk.jp/?p=1604</guid>
		<description><![CDATA[FBX形式のデータを扱う事もあるので、SDKをインストールしてみようかなと。 といっても、Autodeskのサイトから落としてくるだけだけれどね。 Autodesk FBX FBX SDKの使い方などはそのうち記事を書いていくかも（・・？ とりあえず、MotionBuilderのPluginの話がきているので、MotionBuilderの試用期間が終わる前に作らなければｗ]]></description>
			<content:encoded><![CDATA[<p>FBX形式のデータを扱う事もあるので、SDKをインストールしてみようかなと。</p>
<p>といっても、Autodeskのサイトから落としてくるだけだけれどね。</p>
<p><a href="http://usa.autodesk.com/adsk/servlet/index?siteID=1169823&#038;id=8341083">Autodesk FBX</a></p>
<p>FBX SDKの使い方などはそのうち記事を書いていくかも（・・？</p>
<p>とりあえず、MotionBuilderのPluginの話がきているので、MotionBuilderの試用期間が終わる前に作らなければｗ</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.redhawk.jp/archives/1604/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.redhawk.jp/archives/1604" />
	</item>
	</channel>
</rss>
