Dec 26, 2009

PhysicsEffects メモ


masafumi さん情報に感謝です。

入手とビルド
> svn co http://bullet.googlecode.com/svn/branches/PhysicsEffects .
Bullet本体も src/ 以下にダウンロードされます。PhysicsEffects は

  • PhysicsEffects/Physics
  • PhysicsEffects/Util

が本体。

ビルドスクリプトは cmake で生成。Visual Studio 2008 Express Edition を利用したいので:
> cmake -G "Visual Studio 9 2008"
> start PHYSICS_EFFECTS.sln
OpenGLのセットアップが済んでいるなら問題なくビルドは通るはず。

AppHelloWorld が利用方法を示す最低限のサンプルです。で、絵の出るデモはどこにあるんでしょう? AppBasicDemo は Bullet のデモですし。

PfxViewer

独自のシーンフォーマットを持っていて、そのビューアーがこれ。
Havok にもそんなアプリケーションがあったような。

includeパスが SCE_PS3_ROOT という環境変数を利用しているのであらかじめ定義しておきます。
内容は PhysicsEffects のルートでOK。このような感じで:
> set SCE_PS3_ROOT=d:/tmp/PhysicsEffects
> start Plugins/PfxViewer/PfxViewer.sln
ビルド時に app.rc の "afxres.h" が無い、と言われたら…

  * #include "afxres.h"
  ↓
  * // #include "afxres.h"
    #include <windows.h>
    #define IDC_STATIC -1

に書き換えることで切り抜けられます(Ref.: http://ameblo.jp/oregano-blog/day-20090720.html)。

シーンファイルのサンプルが PhysicsEffects/Plugins/Sample/*.txt に配置されています。
サンプルと同じ場所に置いてある *.mb は Maya のデータです。*.txtの元データなのでしょうが…エクスポーターは?

「File -> Open Pfx File」と進んで TestScene2.txt を読み込ませた結果がこちら:



」というアイコンのあたりに日本製の香りを感じます。

Dec 20, 2009

Qt 4.6 と qt4-qtruby の自前ビルド版 で遊んでいるところ。



  • OpenGLの描画後にQtの2D描画を重ねることができる(今回はQPainter::drawText)。
  • RubyからOpenGLを利用したい場合はこちら(ruby-opengl)を。
  • 数学関数はこちら(RMath)。
GLUTにできてQtにできないことは…あとはパッド入力くらいでしょうか。

Dec 13, 2009

Game Engine Architecture : 目次の翻訳

(2010-11-16 追記) 日本語訳が出版されます。こちらからどうぞ:

Jason Gregory, Game Engine Architecture (2009) の目次を訳したものです。
  • 目次 (Table of Contents)
  • はじめに (INTRODUCTION)
    • 1.1   ゲーム製作チームの典型的な構造 (Structure Of A Typical Game Team)
    • 1.2   ゲームとは? (What Is A Game?)
    • 1.3   ゲームエンジンとは? (What Is A Game Engine?)
    • 1.4   ジャンルの比較で見るエンジンの差 (Engine Differences Across Genres)
    • 1.5   ゲームエンジンについての調査 (Game Engine Survey)
    • 1.6   ランタイムシステムの構成 (Runtime Engine Architecture)
    • 1.7   ツールとアセットパイプライン (Tools And The Asset Pipeline)
  • 商売道具 (TOOLS OF THE TRADE)
    • 2.1   バージョン管理 (Version Control)
    • 2.2   Microsoft Visual Studio
    • 2.3   プロファイリングツール (Profiling Tools)
    • 2.4   メモリリークとメモリ破壊の検出 (Memory Leak And Corruption Detection)
    • 2.5   その他のツール (Other Tools)
  • ゲームのためのソフトウェア工学基礎 (FUNDAMENTALS OF SOFTWARE ENGINEERING FOR GAMES)
    • 3.1   C++の概要とベストプラクティス (C++ Review And Best Practices)
    • 3.2   C/C++におけるデータ、コード、メモリ (Data, Code And Memory In C/C++)
    • 3.3   エラーの補足と取り扱い (Catching And Handling Errors)
  • ゲームのための3D数学 (3D MATH FOR GAMES)
    • 4.1   3Dの問題を2Dで解く (Solving 3D Problems In 2D)
    • 4.2   点とベクトル (Points And Vectors)
    • 4.3   行列 (Matrices)
    • 4.4   クォータニオン (Quaternions)
    • 4.5   各種回転表現の比較 (Comparison Of Rotational Representations)
    • 4.6   その他の役立つ道具 (Other Useful Mathematical Objects)
    • 4.7   SIMDハードウェアによる数学演算 (Hardware-Accelerated SIMD Math)
    • 4.8   乱数の生成 (Random Number Generation)
  • 基礎システム (ENGINE SUPPORT SYSTEMS)
    • 5.1   サブシステムの起動と終了 (Subsystem Start-Up And Shut-Down)
    • 5.2   メモリ管理 (Memory Management)
    • 5.3   コンテナー (Containers)
    • 5.4   文字列 (Strings)
    • 5.5   エンジンの設定 (Engine Configuration)
  • リソースとファイルシステム (RESOURCES AND THE FILE SYSTEM)
    • 6.1   ファイルシステム (File System)
    • 6.2   リソースマネージャー (The Resource Manager)
  • ゲームループとリアルタイムシミュレーション (THE GAME LOOP AND REAL-TIME SIMULATION)
    • 7.1   描画ループ (The Rendering Loop)
    • 7.2   ゲームループ (The Game Loop)
    • 7.3   ループ構造のスタイル (Game Loop Architectural Styles)
    • 7.4   時間軸の抽象化 (Abstract Time Lines)
    • 7.5   時間の計測と取り扱い (Measuring And Dealing With Time)
    • 7.6   マルチプロセッサ環境でのゲームループ (Multiprocessor Game Loops)
    • 7.7   多人数参加型ネットワークゲームのループ (Networked Multiplayer Game Loops)
  • ヒューマンインターフェースデバイス (HUMAN INTERFACE DEVICES (HID))
    • 8.1   ヒューマンインターフェースデバイスの種類 (Types Of Human Interface Devices)
    • 8.2   HIDとのインタラクション (Interfacing With A HID)
    • 8.3   入力の種類 (Types Of Inputs)
    • 8.4   出力の種類 (Types Of Outputs)
    • 8.5   ゲームエンジンのHIDシステム (Game Engine HID Systems)
    • 8.6   HIDの実際 (Human Interface Devices In Practice)
  • デバッグと開発のための道具 (TOOLS FOR DEBUGGING AND DEVELOPMENT)
    • 9.1   ロギングと追跡 (Logging And Tracing)
    • 9.2   デバッグ描画機能 (Debug Drawing Facilities)
    • 9.3   ゲーム内メニュー (In-Game Menus)
    • 9.4   ゲーム内コンソール (In-Game Console)
    • 9.5   デバッグ用カメラ、ゲームのポーズ (Debug Cameras And Pausing The Game)
    • 9.6   チート (Cheats)
    • 9.7   スクリーンショットとムービーの取得 (Screen Shots And Movie Capture)
    • 9.8   ゲーム内プロファイリング機能 (In-Game Profiling)
    • 9.9   ゲームに組み込みのメモリ利用統計とリーク検出機能 (In-Game Memory Stats And Leak Detection)
  • 描画エンジン (THE RENDERING ENGINE)
    • 10.1   3D描画の基礎 : 深度バッファを利用した三角形のラスタライズ (Foundations Of Depth-Buffered Triangle Rasterization)
    • 10.2   描画のパイプライン (The Rendering Pipeline)
    • 10.3   高度なライティング処理とグローバルイルミネーション (Advanced Lighting And Global Illumination)
    • 10.4   各種視覚効果とオーバーレイ (Visual Effects And Overlays)
  • アニメーションシステム (ANIMATION SYSTEMS)
    • 11.1   キャラクターアニメーションの種類 (Types Of Character Animation)
    • 11.2   スケルトン (Skeletons)
    • 11.3   ポーズ (Poses)
    • 11.4   クリップ (Clips)
    • 11.5   スキニングとその行列パレットの生成 (Skinning And Matrix Palette Generation)
    • 11.6   アニメーションのブレンド処理 (Animation Blending)
    • 11.7   ポストプロセス (Post-Processing)
    • 11.8   圧縮のテクニック (Compression Techniques)
    • 11.9   アニメーションシステムの構造 (Animation System Architecture)
    • 11.10   アニメーションのパイプライン (The Animation Pipeline)
    • 11.11   行動の状態遷移機械 (Action State Machines)
    • 11.12   アニメーションコントローラー (Animation Controllers)
  • 衝突と剛体の動力学 (COLLISION AND RIGID BODY DYNAMICS)
    • 12.1   物理は必要? (Do You Want Physics In Your Game?)
    • 12.2   衝突処理/物理演算のためのミドルウェア (Collision/Physics Middleware)
    • 12.3   衝突検出システム (The Collision Detection System)
    • 12.4   剛体の動力学 (Rigid Body Dynamics)
    • 12.5   物理エンジンをゲームに組み込む (Integrating A Physics Engine Into Your Game)
    • 12.6   さらに先へ : 高度な物理演算処理 (A Look Ahead: Advanced Physics Features)
  • ゲーム本編のシステムとは (INTRODUCTION TO GAMEPLAY SYSTEMS)
    • 13.1   ゲーム内ワールドの解剖 (Anatomy Of A Game World)
    • 13.2   動的な要素の実装 : ゲームオブジェクト (Implementing Dynamic Elements: Game Objects)
    • 13.3   データ駆動型ゲームエンジン (Data-Driven Game Engines)
    • 13.4   ゲームワールドエディター (The Game World Editor)
  • ゲーム本編を支える基本システム (RUNTIME GAMEPLAY FOUNDATION SYSTEMS)
    • 14.1   基本システムの要素 (Components Of The Gameplay Foundation System)
    • 14.2   実行時オブジェクトモデルの構造 (Runtime Object Model Architectures)
    • 14.3   区画データのフォーマット (World Chunk Data Formats)
    • 14.4   ゲームワールドのロードとストリーミング (Loading And Streaming Game Worlds)
    • 14.5   オブジェクトの参照方法と検索方法 (Object References And World Queries)
    • 14.6   ゲーム内オブジェクトのリアルタイム更新 (Updating Game Objects In Real Time)
    • 14.7   イベントとメッセージ通信 (Events And Message-Passing)
    • 14.8   スクリプトによる記述 (Scripting)
    • 14.9   高レベルなゲーム内状態遷移 (High-Level Game Flow)
  • 「まだまだあるだろ」って? (YOU MEAN THERE’S MORE?)
    • 15.1   本書で触れなかったシステム (Some Engine Systems We Didn’t Cover)
    • 15.2   ゲーム本編のシステム (Gameplay Systems)
  • 索引 (INDEX)
  • 参考文献 (REFERENCES)


Dec 12, 2009

qt4-qtruby を Windows で : Qt 4.6でもOK

…という組み合わせでも問題なくビルドできました。qtrubyのcmakeに渡すオプションに変更が必要でした。
cmake -G "Visual Studio 9 2008" -DCMAKE_INSTALL_PREFIX=d:\ruby19  -DRUBY_EXECUTABLE=d:\ruby19\bin\ruby  -DRUBY_LIBRARY=d:\ruby19\lib\msvcr90-ruby191.lib  -DRUBY_INCLUDE_PATH=d:\ruby19\include\ruby-1.9.1  -DQT_QMAKE_EXECUTABLE=d:\Qt\2009.05\qt\bin\qmake  -Wno-dev  -DENABLE_SMOKE=on  -DENABLE_QTRUBY=on  -DENABLE_QTWEBKIT_SMOKE=off -DENABLE_QTSCRIPT_SMOKE=off  -DENABLE_QTUITOOLS_SMOKE=off  -DENABLE_QTTEST_SMOKE=off  -DENABLE_PHONON_SMOKE=off  -DENABLE_QSCI_SMOKE=off-DENABLE_QWT_SMOKE=off  -DENABLE_KDE_SMOKE=off  -DENABLE_KDECORE_SMOKE=off  -DENABLE_KDEUI_SMOKE=off  -DENABLE_KIO_SMOKE=off  -DENABLE_KPARTS_SMOKE=off  -DENABLE_KFILE_SMOKE=off  -DENABLE_KNEWSTUFF2_SMOKE=off  -DENABLE_KNEWSTUFF3_SMOKE=off  -DENABLE_KUTILS_SMOKE=off  -DENABLE_KDEVPLATFORM_SMOKE=off  -DENABLE_KHTML_SMOKE=off  -DENABLE_KTEXTEDITOR_SMOKE=off  -DENABLE_SOLID_SMOKE=off  -DENABLE_PLASMA_SMOKE=off  -DENABLE_QTWEBKIT_RUBY=off  -DENABLE_QTUITOOLS_RUBY=off  -DENABLE_QTSCRIPT=off  -DENABLE_QTTEST=off  -DENABLE_PHONON_RUBY=off  -DENABLE_QSCINTILLA_RUBY=off  -DENABLE_QWT_RUBY=off  -DENABLE_SOPRANO_RUBY=off  -DENABLE_KDEVPLATFORM_RUBY=off  -DENABLE_KORUNDUM_RUBY=off  -DENABLE_KHTML_RUBY=off-DENABLE_KTEXTEDITOR_RUBY=off  -DENABLE_SOLID_RUBY=off  -DENABLE_KROSSRUBY=off -DENABLE_PLASMA_RUBY=off  -DENABLE_QIMAGEBLITZ_SMOKE=off -DENABLE_QTDBUS_SMOKE=off -DQT_QTDBUS_LIBRARY:FILEPATH= .
ENABLE_KDECORE_SMOKEなどの新しいシンボルを無効化するように指定しています。この点のみ読み替えることで、以下の記事は引き続き利用可能です:

Nov 29, 2009

qt4-qtruby を Windows で : qt4-qtrubyビルド編

ツール導入編からの続きです。


qt4-qtruby

KDEのSubversionリポジトリからソースコードを入手:
> mkdir kdebindings
> cd kdebindings
> svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdebindings .
  ...
  Checked out revision 1055931.
Ruby以外用のソースコード(Python,C#など)も大量にダウンロードされる。今回利用するのは
  • smoke/qt
  • ruby/qtruby
の2個のみ。

まず CMakeLists.txt を qtruby 用に書き換える。

kdebindings/CMakeLists.txt を kdebindings/CMakeLists.txt.qtruby で上書き。その内容を以下のように編集する。
  • "add_subdirectory(smoke)" と書いてある行の上に "add_subdirectory(generator)" と追記する:
  ...
  FIND_PACKAGE (OpenGL REQUIRED)

  add_subdirectory(generator)
  add_subdirectory(smoke)

  if(RUBY_EXECUTABLE)
  ...
"Visual Studio 2008 コマンド プロンプト" を起動し、
kdebindings> PATH=d:\Qt\2009.04\qt\bin;d:\tmp\cmake-2.8.0-win32-x86\bin;d:\ruby19\bin;d:\Perl\bin;%PATH%
kdebindings> cmake -G "Visual Studio 9 2008" -DCMAKE_INSTALL_PREFIX=d:\ruby19  -DRUBY_EXECUTABLE=d:\ruby19\bin\ruby  -DRUBY_LIBRARY=d:\ruby19\lib\msvcr90-ruby191.lib  -DRUBY_INCLUDE_PATH=d:\ruby19\include\ruby-1.9.1  -DQT_QMAKE_EXECUTABLE=d:\Qt\2009.04\qt\bin\qmake  -Wno-dev  -DENABLE_SMOKE=on  -DENABLE_QTRUBY=on  -DENABLE_QTWEBKIT_SMOKE=off -DENABLE_QTSCRIPT_SMOKE=off  -DENABLE_QTUITOOLS_SMOKE=off  -DENABLE_QTTEST_SMOKE=off  -DENABLE_PHONON_SMOKE=off  -DENABLE_QSCI_SMOKE=off-DENABLE_QWT_SMOKE=off  -DENABLE_KDE_SMOKE=off  -DENABLE_KDEVPLATFORM_SMOKE=off  -DENABLE_KHTML_SMOKE=off  -DENABLE_KTEXTEDITOR_SMOKE=off  -DENABLE_SOLID_SMOKE=off  -DENABLE_PLASMA_SMOKE=off  -DENABLE_QTWEBKIT_RUBY=off  -DENABLE_QTUITOOLS_RUBY=off  -DENABLE_QTSCRIPT=off  -DENABLE_QTTEST=off  -DENABLE_PHONON_RUBY=off  -DENABLE_QSCINTILLA_RUBY=off  -DENABLE_QWT_RUBY=off  -DENABLE_SOPRANO_RUBY=off  -DENABLE_KDEVPLATFORM_RUBY=off  -DENABLE_KORUNDUM_RUBY=off  -DENABLE_KHTML_RUBY=off-DENABLE_KTEXTEDITOR_RUBY=off  -DENABLE_SOLID_RUBY=off  -DENABLE_KROSSRUBY=off -DENABLE_PLASMA_RUBY=off  -DENABLE_QIMAGEBLITZ_SMOKE=off -DENABLE_QTDBUS_SMOKE=off -DQT_QTDBUS_LIBRARY:FILEPATH= .

1回目の実行ではCMakeの内部エラー(?)のためソリューションファイル等が生成されない。原因はおそらくこれ:
CMake Error at smoke/qt/QtGuess.txt:134 (list):
この問題は上記コマンドをもう1度実行することで回避できる。2回目のcmake実行後、"kdebindings.sln" が生成されるので、 Visual Studio 2008 で開く。

各種手作業

DBusのサポートを外すため、複数の設定ファイルをビルド前に修正しておく必要がある。
  • kdebindings/smoke/qt/qt_includes.h
    • ファイル最下部: QtDBus.h をインクルードしている行をコメントアウト。
  • kdebindings/smoke/qt/smokeconfig.xml
    • QDBus... という行をすべて削除。

generator.exe のビルド

Qtのヘッダーファイルをパースする generator.exe をビルドする。
  • cppparser
  • generator
  • generator_dump
  • generator_smoke
の4プロジェクトを選択し、「選択範囲のビルド」を実行する。

smokeqt プロジェクトのビルド
  • ソリューション エクスプローラから smokeqt を右クリックで選択、プロジェクトのみをビルド。
    • ※ x_1.cpp ~ x_20.cpp と smokedata.cpp は generator.exe で自動生成されるソースコードなので、ビルド開始時には存在しない。

qtruby4 プロジェクトのビルド

まず以下の箇所に修正が必要。
  • kdebindings/ruby/qtruby/src/qtruby.h
    • 関数 "rb_str_catf" の宣言をコメントアウト。gcc 専用の "__attribute__" が付加されている他、ruby 側での宣言と矛盾しているなどの問題があり、コンパイルエラーの原因となる。

本来だと "qtruby4shared" → "qtruby4" の順にビルドし2個のDLLを生成することになるが、なぜか qtruby4 側から qtruby4shared のシンボルが見つからないため、リンクエラーが発生してしまう。ここでは qtruby4shared のソースコードを qtruby4 に含めてしまい、1個のDLL (qtruby4.so) のみを生成するように変更する。
  • "qtruby4shared" の "Source Files" 以下にある3個のファイル(handlers.cpp, marshall_types.cpp, Qt.cpp) を "qtruby4" プロジェクトの "Source Files" に移動。
  • 出力ファイル名を qtruby4.dll (kdebindings\ruby\qtruby\src\Release\qtruby4.dll) から qtruby4.so に変更。
  • qtruby4 プロジェクトの「追加の依存ファイル」から "Release\qtruby4shared.lib" を削除。
以上の変更を適用した後で qtruby4 プロジェクトのみをビルドする。kdebindings\ruby\qtruby\src\Release\qtruby4.so が生成される。


インストール

INSTALL プロジェクトはうまく動作しないようなので、以下手作業で各種ファイルを配置する。
  • Qt, OpenSSL
    • ビルドした DLL が d:\Qt\2009.04\qt\bin 以下にあるので d:\ruby19\bin にコピー
    • OpenSSL の ssleay32.dll, libeay32.dll も d:\ruby19\bin にコピー
  • qt4-qtruby
    • kdebindings/smoke/qt/Release/smokeqt.dll を d:\ruby19\bin にコピー
    • kdebindings/ruby/qtruby/src/Release/qtruby4.so を d:/ruby19/lib/ruby/site_ruby/1.9.1/i386-msvcr90 にコピー
    • kdebindings/ruby/qtruby/src/lib/*.rb を d:/ruby19/lib/ruby/site_ruby/1.9.1/ へコピー
    • kdebindings/ruby/qtruby/src/lib/Qt/qtruby4.rb を d:/ruby19/lib/ruby/site_ruby/1.9.1/Qt/ へコピー

実行
> ruby -rQt -e "app=Qt::Application.new(ARGV); hello=Qt::PushButton.new('Hello'); hello.show(); app.exec()"
というone-liner を実行して、このようなウィンドウが表示されればOKです:


qt4-qtruby を Windows で : ツール導入編

Ruby から Qt を利用するための qt4-qtruby を Visual C++ 2008 Express Edition で利用できるようにするまでの作業メモ。
長くなったので「ツール導入編」「qt4-qtrubyビルド編」に分けました。

Perl

  https://www.activestate.com/activeperl/downloads/

から ActivePerl-5.10.1.1006-MSWin32-x86-291086.zip をダウンロード。 ここでは D:\Perl 以下にインストールした。

CMake

  http://www.cmake.org/cmake/resources/software.html

から cmake-2.8.0-win32-x86.zip をダウンロード。適当な場所へ展開しておく。パスを通すのは後で。

Ruby

1.9.1-p243 を利用。VC++2008 でのビルド手順はこちらで。
OpenGLを利用したい場合はこちらで。

ここでは d:\ruby19 にインストールする。
qt4-qtruby ビルド時に、インクルードパスを2個以上設定する方法が無い。これでは
ruby19/include/ruby-1.9.1/i386-mswin32_90/ruby/config.h
を見つけられないため問題となる。今回はこの config.h を
ruby19/include/ruby-1.9.1/ruby/config.h
としてコピーしておくことで対処した。

Qt : インストール

  http://qt.nokia.com/downloads

から qt-sdk-win-opensource-2009.04.exe をダウンロード。ここでは D:\Qt にインストール。

OpenSSL

Qt の側は OpenSSL のサポートを外せるものの、qt4-qtruby 側でそれができない(ガード無しで QSslSocket を参照してしまっている)。

  http://gnuwin32.sourceforge.net/packages/openssl.htm

から入手。
> cd openssl-0.9.8h
> ms\32all.bat
でビルド。ヘッダーファイルは
d:/Qt/2009.04/qt/include/openssl
に配置。

※ヘッダーファイルがシンボリックリンクになっていて使えない場合は

  http://downloads.sourceforge.net/gnuwin32/openssl-0.9.8h-1-lib.zip

を展開した内容から include のみを
d:/Qt/2009.04/qt/include/openssl
に配置することで対処。

ライブラリ(out32dllフォルダにある ssleay32.lib, ssleay32.dll, libeay32.lib, libeay32.dll) は
d:/Qt/2009.04/qt/lib
にコピー。

Qt : ビルド

"Visual Studio 2008 コマンド プロンプト" から、
> cd d:\Qt\2009.04\qt
> configure -release -shared -qt-zlib -qt-gif -qt-libpng -qt-libtiff -qt-libmng -qt-libjpeg -no-qt3support -no-webkit -no-scripttools -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -fast
> nmake

qt4-qtruby ビルド編」に続きます。

Nov 14, 2009

Kindle : Wishlist (2)

Kindle Store からのリストアップその2。

Game Physics Engine Development : Ian Millington
http://www.amazon.com/dp/B001C4MZC4/

原著購入済み。Kindleだと半額なのか。
小さな物理エンジンを作って処理の流れを納得するための本。David Eberly 氏のGame Physics よりも実践的でおすすめ。ただしそのまま規模の大きな問題に適用できるシステムではないので過剰な期待は禁物ですが。

この本こそ翻訳されるべきものだと思うのだけれど、そんな話は無いものでしょうかね。



Artificial Intelligence for Games (The Morgan Kaufmann Series in Interactive 3D Technology) : Ian Millington
http://www.amazon.com/dp/B001UN2W70/

上記 Game Physics Engine Development の著者による本。


Artificial Life Models in Software : Andrew Adamatzky, Maciej Komosinski
http://www.amazon.com/dp/B000QCRB3Q/


Dynamic Simulations of Multibody Systems : Murilo G. Coutinho
http://www.amazon.com/dp/B001CN9JM4/



The Pragmatic Programmer : Andrew Hunt, David Thomas
http://www.amazon.com/dp/B000SEGEKI/

訳書はこちら:
  • 達人プログラマー―システム開発の職人から名匠への道: アンドリュー ハント, デビッド トーマス, 村上 雅章

Nov 13, 2009

Kindle : Wishlist

Kindle Store から欲しい本等をリストアップ。

Real-Time Collision Detection (The Morgan Kaufmann Series in Interactive 3-D Technology) : Christer Ericson
http://www.amazon.com/dp/B001086MGM/
購入第一冊目。訳書はこちら:
  • ゲームプログラミングのためのリアルタイム衝突判定: Christer Ericson, 中村 達也
The Art of Multiprocessor Programming : Maurice Herlihy, Nir Shavit
http://www.amazon.com/dp/B00245A4U0/

最近日本語訳が出ました:
  • The Art of Multiprocessor Programming 並行プログラミングの原理から実践まで: Maurice Herlihy, Nir Shavit, 株式会社クイープ
Computational Geometry: Algorithms and Applications: Mark de Berg, Otfried Cheong, Marc van Kreveld, Mark Overmars
http://www.amazon.com/dp/B0019JDOGS/

訳書はこちら、だけど新品は手に入らないらしい…

  • コンピュータ・ジオメトリ―計算幾何学:アルゴリズムと応用: 浅野 哲夫, M.ドバーグ

Nov 3, 2009

Pro C# : Chapter 11 の単語リスト


Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition の Chapter 11 : Delegates, Events, and Lambdas に出てきた表現・単語のメモ。
  • out of the box
    • adj. すぐに利用できる(箱から取り出したままの状態で)
  • crux
    • n. 最も重要なポイント
  • retrofit
    • v. (改良した)部品を組み込む
  • boilerplate
    • n. 定型的なソースコードの断片
  • prim and proper
    • adj. きちんとした、整った
  • showstopper
    • (コンピュータ分野限定、作業を止めてしまうような)不具合
    • ※通常だと「(ショーの進行を止めてしまうほどの)すばらしいもの」のことを指す

Jan 31, 2009

Ruby 1.9.1-p0 : VC++ 2008 Express Edition でビルド


「Ruby 1.9.1をリリースしました。」、ということで作業メモ。
  • OS は Windows Vista SP1 (Home Premium) です。
  • "D:\Programs\Microsoft Visual Studio 9.0" に VC++ 2008 をインストールしてあります。
  • ところどころで cygwin 由来のツール (wget、tar, gzip, bzip2) を使っています。
まずスタートメニューから「Visual C++ 9.0 Express Edition > Visual Studio Tools > Visual Studio 2008 コマンド プロンプト」起動。作業場へ移動します。
D:\Programs\Microsoft Visual Studio 9.0\VC> d:
D:\> cd tmp
D:\tmp>
ソースをいただいてきたら展開しておきます。
D:\tmp> wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p0.tar.bz2
...
D:\tmp> tar xvjf ruby-1.9.1-p0.tar.bz2
...
インストール先を指定して configure.bat を実行します。ここでは d:/ruby19 とします。
D:\tmp> cd ruby-1.9.1-p0
D:\tmp\ruby-1.9.1-p0> win32\configure.bat --prefix=d:/ruby19
Creating Makefile
confargs.c
type `D:\Programs\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe to make ruby.
D:\tmp\ruby-1.9.1-p0>
ビルドとインストールを実行します。
※ 'compiling tk' の部分で時間がかかります。Tkのヘッダーファイルが無いかどうか、様々なインクルードパスを試しているようです。
D:\tmp\ruby-1.9.1-p0> nmake
...
D:\tmp\ruby-1.9.1-p0> nmake install
...
D:\tmp\ruby-1.9.1-p0> d:\ruby19\bin\ruby -v
ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32_90]
ここまでの作業では RubyGems の実行に必要となる zlib.so がビルドされていません。以下で zlib.so のビルドとインストールを行います。 今 Ruby をビルドしたディレクトリはそのままにしておいて、適当な作業場へ移動します。
D:\tmp\ruby-1.9.1-p0>cd ..
zlib のソースコードをいただいて、ビルドを実行します。
D:\tmp> wget http://www.zlib.net/zlib-1.2.3.tar.gz
D:\tmp> tar xvzf zlib-1.2.3.tar.gz
D:\tmp> cd zlib-1.2.3
D:\tmp\zlib-1.2.3> nmake -f win32\Makefile.msc
D:\tmp\zlib-1.2.3> mt -manifest zlib1.dll.manifest -outputresource:zlib1.dll;2
Makefile.msc にはマニフェストを埋め込む記述が無かったので、手動で埋め込んでいることに注意してください。
できあがった zlib1.dll を ruby.exe が配置されている場所にコピーしておきます。
D:\tmp\zlib-1.2.3> copy zlib1.dll d:\ruby19\bin
zlib.so のビルドを行います。Ruby をビルドしたディレクトリにある ext\zlib へ移動します。
D:\tmp\zlib-1.2.3> cd ..\ruby-1.9.1-p0\ext\zlib
D:\tmp\ruby-1.9.1-p0\ext\zlib>
extconf.rb を実行して、Makefile を作り直します。先に zlib をビルドしたディレクトリを渡して、インクルードファイル zlib.h やリンクに必要なスタティックライブラリの場所を伝えます。
D:\tmp\ruby-1.9.1-p0\ext\zlib> d:\ruby19\bin\ruby.exe extconf.rb --with-zlib-include=d:\tmp\zlib-1.2.3 --with-zlib-lib=d:\tmp\zlib-1.2.3
checking for deflateReset() in z.lib... no
checking for deflateReset() in libz.lib... no
checking for deflateReset() in zlib1.lib... no
checking for deflateReset() in zlib.lib... yes
checking for zlib.h... yes
checking for kind of operating system... Win32
creating Makefile

D:\tmp\ruby-1.9.1-p0\ext\zlib>
ビルドとインストールを実行します。
D:\tmp\ruby-1.9.1-p0\ext\zlib>nmake
...
D:\tmp\ruby-1.9.1-p0\ext\zlib>nmake install

Microsoft(R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

install -c -p -m 0755 zlib.so d:\ruby19\lib\ruby\site_ruby\1.9.1\i386-msvcr90

D:\tmp\ruby-1.9.1-p0\ext\zlib>
お疲れ様でした。