浪漫の求道者

いけてると思った技術情報を綴るのです。

スポンサーサイト   --.--.--

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。

XAMPP×MediaWiki×OpenPne×Trac   2009.09.21

元々、TracLightingのApache上に、php、OpenPNEとやんちゃな入れ方をしていたサーバマシンを再セットアップ。

MySQLの管理が楽なのでXAMPPを入れる事に。

以下、時系列に。

・XAMPP、最新版の1.7.2を入れる。
http://www.apachefriends.org/jp/xampp-windows.html

・MediaWiki 1.16をSVNから入れてみるが失敗。1.15をインストール。
http://svn.wikimedia.org/svnroot/mediawiki/branches/REL1_15/phase3

って、1.16じゃなくて、1.6入れようとして古いからエラー出たんじゃね・・・?

その他もろもろ、プラグインを設定。

・OpenPNE3をインストールしようとする
 最近流行ってるらしい、symfonyというフレームワークのインストールにてこずる。
 なんとか入るも、パスがおかしいのかうまくいかない・・・。
 一日悩んだ末、あきらめる。

・OpenPNE2.14.1.1に変更
http://labs.zsrv.net/blog/52/21
インストールできた!
かに見えたが、セットアップページから進まない。。。

・これか・・・
> PC逝ったこともあって、丁度すっからかんの状態でxampp1.7を入れた。
> そしたら何か動作が変だ。
> 調査めんどかったので、とりあえずバージョンを1.68に落としてやった。
http://ameblo.jp/php-ruby/entry-10200561692.html
他のページにもそんな感じの出てきたし・・・。

・xamppを1.68に←今ここ
超めんどらあああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ




iPhoneアプリ開発環境セットアップ   2009.07.25

テーマ:プログラミング - ジャンル:コンピュータ
MacをゲットしたのでiPhoneアプリの開発環境をセッティングしながらメモ書き。

参考URL:
http://gihyo.jp/dev/serial/01/iphone
http://core.atmarkit.co.jp/keyword/iphone.html

*iPhoneSDKのインストール
iPhoneSDKの取得はアカウントを作成してログインしないとSDKをダウンロードできないもよう。
登録&DL・・・

ダウンロード完了。
「dmgパッケージなので、マウントしてインストーラーを実行しましょう。」
Macに慣れていないので全く意味がわからない・・・

あらなるほど。mpkgをダブルクリックでいいのか。
って、初期設定で拡張子表示されてないから記事の画像がなかったらわからんかった。

インストール後、とりあえずこれにしたがって動かしてみる。
http://gihyo.jp/dev/serial/01/iphone/0002?page=2

おおおおおおおおおお!!

シミュレーターすげー!

iPhoneの画面と操作そっくりでシミュレーションができる。
ついでにSafariとか、写真とかも開けるし、実機じゃなくてもかなりいろいろできそう。

よし、とりあえず環境セットアップ無事完了。

開発環境まとめ   2009.07.05

テーマ:プログラミング - ジャンル:コンピュータ
GoogleTestの訳の続きを書かなきゃって思っていたら全然やる気が起きず更新しなくなってしまった・・・。

ここは一旦違う事をさくっと書こう。

やりたい事のまとめ


ゲーム開発環境

・VC++2005 Express Edition

・ゲームプログラマになる前に覚えておきたい技術 Finalライブラリ


・Hudson
自動ビルド、自動テスト、パッケージング

・Trac
バグトラック、タスク管理

・GoogleTest
テスト

これプラスiPhoneアプリの並行開発にも手を出したいなぁ

GoogleTestがかなりいけてる その2   2009.05.19

テーマ:プログラミング - ジャンル:コンピュータ

【GoogleTest Assertions まとめ】


↓のWikiから、Assertionを和約(適当)してまとめてみる。
http://code.google.com/p/googletest/wiki/GoogleTestPrimer
http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide

注)勢いで書いたので、自分に都合の良い所だけ抽出、意訳しています。
  あと、実はバージョン1.2.0の時に訳したもののコピペです。




基本


Fatal assertionNonfatal assertionVerifies
ASSERT_TRUE(condition);EXPECT_TRUE(condition);condition is true
ASSERT_FALSE(condition);EXPECT_FALSE(condition);condition is false


Fatal assertion(ASSERT_HOGE) と Nonfatal assertion(EXPECT_HOGE)


  • ASSERTの場合は、その関数から抜ける(returnする)
  • EXPECTの場合は、そのまま処理を続ける


値比較


Fatal assertionNonfatal assertionVerifies
ASSERT_EQ(expected, actual);EXPECT_EQ(expected, actual);expected == actual
ASSERT_NE(val1, val2);EXPECT_NE(val1, val2);val1 != val2
ASSERT_LT(val1, val2);EXPECT_LT(val1, val2);val1 < val2
ASSERT_LE(val1, val2);EXPECT_LE(val1, val2);val1 <= val2
ASSERT_GT(val1, val2);EXPECT_GT(val1, val2);val1 > val2
ASSERT_GE(val1, val2);EXPECT_GE(val1, val2);val1 >= val2

  • 失敗したらGoogleTestが自動的にval1とval2の値を出力してくれます。
  • <<を使う事もできます。
  • ASSERT_EQ()はポインタ比較するので、Cの文字列(const char*とか)の中身を比較したい時はASSERT_STREQ()を使って下さい。
  • 文字列のNULLはASSERT_STREQ(NULL, c_string)でチェックできます。
  • string同士を比較する時は、ASSERT_EQを使って下さい。


文字列比較


  • このアサーションはCの文字列を比較します。
  • stringを比較したい場合は、EXPECT_EQ, EXPECT_NEなどを代わりに使って下さい。

Fatal assertionNonfatal assertionVerifies
ASSERT_STREQ(expected_str, actual_str);EXPECT_STREQ(expected_str, actual_str);the two C strings have the same content
ASSERT_STRNE(str1, str2);EXPECT_STRNE(str1, str2);the two C strings have different content
ASSERT_STRCASEEQ(expected_str, actual_str);EXPECT_STRCASEEQ(expected_str, actual_str);the two C strings have the same content, ignoring case
ASSERT_STRCASENE(str1, str2);EXPECT_STRCASENE(str1, str2);the two C strings have different content, ignoring case

  • wchar_t*は比較できます。(比較が失敗した場合、UTF-8のnarrow stringで出力されます)
  • NULLポインタと空の文字列は別です。


Test Fixtures: Using the Same Data Configuration for Multiple Tests


  • 同じ様なテストをいろんなところでやりたい場合、それをFixtureとして作成できます。
  • 作り方は簡単。testing::test を継承したクラスを作成するだけ。
  • Fixtureを使う時は、TEST()の代わりにTEST_F()を使うだけ。ここで、TEST_F()の第一引数にはFixtureの名前を入れます。
  • C++のマクロの仕様のせいで2つの種類のテストを1つのマクロで扱う事ができません。ちっくしょう。


Explicit Success and Failure


SUCCEED();FAIL();ADD_FAILURE();

で直接成功や失敗を呼ぶ事ができます。
Failが致命的なエラーで、ADD_FAILUREが致命的でないエラーです。



例外アサーション


Fatal assertionNonfatal assertionVerifies
ASSERT_THROW(statement, exception_type);EXPECT_THROW(statement, exception_type);statement throws an exception of the given type

ASSERT_ANY_THROW(statement); | EXPECT_ANY_THROW(statement); | statement throws an exception of any type |
ASSERT_NO_THROW(statement); | EXPECT_NO_THROW(statement); | statement doesn't throw any exception |


  • statementに渡した関数が例外を投げるかどうかなど


述語(Predicate)アサーション


Fatal assertionNonfatal assertionVerifies
ASSERT_PRED1(pred1, val1);EXPECT_PRED1(pred1, val1);pred1(val1) returns true
ASSERT_PRED2(pred2, val1, val2);EXPECT_PRED2(pred2, val1, val2);pred2(val1, val2) returns true
.........

Fatal assertionNonfatal assertionVerifies
ASSERT_PRED_FORMAT1(pred_format1, val1);`EXPECT_PRED_FORMAT1(pred_format1, val1);pred_format1(val1) is successful
ASSERT_PRED_FORMAT2(pred_format2, val1, val2);EXPECT_PRED_FORMAT2(pred_format2, val1, val2);pred_format2(val1, val2) is successful
...... 

  • 自分でアサーションを作る場合かな?


浮動小数点比較


Fatal assertionNonfatal assertionVerifies
ASSERT_FLOAT_EQ(expected, actual);EXPECT_FLOAT_EQ(expected, actual);the two float values are almost equal
ASSERT_DOUBLE_EQ(expected, actual);EXPECT_DOUBLE_EQ(expected, actual);the two double values are almost equal

  • 4 ULP 以内はおおむねイコール。

Fatal assertionNonfatal assertionVerifies
ASSERT_NEAR(val1, val2, abs_error);EXPECT_NEAR(val1, val2, abs_error);the difference between val1 and val2 doesn't exceed the given absolute error

  • Floating-Point Predicate-Format Functions
    • EXPECT_PRED_FORMAT2みたいなやつがある


Windows HRESULT assertions


Fatal assertionNonfatal assertionVerifies
ASSERT_HRESULT_SUCCEEDED(expression);EXPECT_HRESULT_SUCCEEDED(expression);expression is a success HRESULT
ASSERT_HRESULT_FAILED(expression);EXPECT_HRESULT_FAILED(expression);expression is a failure HRESULT


Type Assertions


  • StaticAssertTypeEqで型チェック。
  • バージョン1.3.0から入ります。


Death Tests


  • エラーをあえて起こして失敗を確認できる。
  • バージョン1.3.0から使える様になっています!


Using Assertions in Sub-routines


  • SCOPED_TRACE(message);
  • スコープが効いている所でエラーが出たら、messageをつけて出力してくれます。


サブルーチンでのアサーション


Fatal assertionNonfatal assertionVerifies
ASSERT_NO_FATAL_FAILURE(statement);EXPECT_NO_FATAL_FAILURE(statement);statement doesn't generate any new fatal failures in the current thread.

  • statementの中でエラーが起こったかどうか


致命的なエラーの検出


  • HasFatalFailure() で現在のテストに致命的なエラーがあるか調べる事ができます。


ログへの追加情報


  • RecordProperty("key", value) で追加できます。
  • アプリの実行経過のログ取りに使えますね。


複数のテストケース間でのリソースの共有


  • まず、テストfixtureでstaticな変数を定義します。
  • 次に、static void SetUpTestCase()とstatic void TearDownTestCase()を共有のセットアップとティアーダウンとして定義します。
  • (公式Wikiではprotectedで宣言してるけど、publicじゃないと通らない?)


Global Set-Up and Tear-Down


  • 全体で使用するセットアップとティアーダウンです。
  • testing::Environment クラスのサブクラスを定義して、そこのSetUpTearDownを実装します。

  class Environment {

public:

virtual ~Environment() {}

// Override this to define how to set up the environment.

virtual void SetUp() {}

// Override this to define how to tear down the environment.

virtual void TearDown() {}};

  • 以下を定義しておしまい。
      Environment* AddGlobalTestEnvironment(Environment* env);


値の範囲テスト


  • 値の範囲テストを簡単に書く方法を教えてあげよう。

  • まず、testing::TestWithParam<T>を継承した fixture クラスを作る。(Tはパラメータの型:Tはコピー可能な型ならなんでもいい。ポインタ値のライフスパンを管理したい場合、生のポインタを入れる事もできる)
  • 次に、TEST-Pマクロを使いたいテストパターンの数だけ定義する。
  • 最後に、INSTANTIATE_TEST_CASE_Pを使って、チェックしたい値の範囲をテストケースにセットする。
  • あとはGoogleTestが勝手にテストパラメータを入れた関数群を作ってくれるよ!これをparameter generators って呼んでるんだ。すごいでしょ!!まじすごい!!びっくりした!!!

Range(begin, end[, step])Yields values {begin, begin+step, begin+step+step, ...}. The values do not include end. step defaults to 1.
Values(v1, v2, ..., vN)Yields values {v1, v2, ..., vN}.
ValuesIn(container) and ValuesIn(begin, end)Yields values from a C-style array, an STL-style container, or an iterator range [begin, end).
Bool()Yields sequence {false, true}.
Combine(g1, g2, ..., gN)Yields all combinations (the Cartesian product for the math savvy) of the values generated by the N generators. This is only available if your system provides the <tr1/tuple> header. If you are sure your system does, and Google Test disagrees, you can override it by defining GTEST_HAS_TR1_TUPLE=1. See comments in include/gtest/internal/gtest-port.h for more information.

  • 使用例
      INSTANTIATE_TEST_CASE_P(InstantiationName, FooTest, testing::Values("meeny", "miny", "moe"));

  •  --gtest_filterでもなにやらできるらしい。
  • ちなみにWindows環境ではVC8.0以上が必要
イカス!!!



Typed Tests以下はまた次回・・・

GoogleTestがかなりいけてる その1   2009.05.17

テーマ:プログラミング - ジャンル:コンピュータ

[GoogleTest1.3.0を使ってみた]

Google C++ Testing Framework
http://code.google.com/p/googletest/

Googleのテストフレームワーク「GoogleTest」に去年の年末くらいから興味を持ち始めて使ってみた。
かなりいけてるのに日本語解説が少ないので、やった事をいろいろと書き出す。

 
なにができるのか
・マルチプラットフォーム対応
 Windows(VC)、Cygwin(gcc)、Linux、MacOS、WindowsCE、Symbian・・・
 
・テストコードの自動発見
   RUN_ALL_TESTS() で勝手にTEST(Hoge, hoge)と書いたコードを探索して実行してくれる
 (もちろん任意のテストだけ実行する、しないのオプションもあり)
 
・豊富なAssertion
 失敗(ASSERT)と警告(EXPECT)を使い分ける事ができる
 値の範囲テストはまじでいけてる
 浮動小数点の「ほぼイコール」や、文字列のイコール用のAssertion
 失敗を確認するテスト「DeathTest」がある(Windowsは1.3.0より)
 
・テスト結果のXML出力
 --gtest_output=xml のオプションでJUnit形式でXMLを出力できる
 CIツール「hudson」との連携も可能(1.3.1より対応予定)
 http://code.google.com/p/googletest/issues/detail?id=114
 
・開発が活発
 Google内で利用されている事もあり、機能がどんどん増えている
 昨年7月の1.0.0登場から、11月に1.2.0、この3月に1.3.0とどんどんバージョンがあがっている
 便利な機能がどんどん実装されている点がすばらしい
 

まずは導入

 なにはともあれ動かしてみる。手順はVCのみ解説。他の環境の人はきっと猛者なのでなんとでもなるだろう。

 ちなみに、いろんなVCバージョンで試した気がするが、今回動作確認したのは VC2005 Express Edition。

1.公式サイトのDownloasからダウンロード。(2009/05/16では1.3.0が最新)
 http://googletest.googlecode.com/svn/trunk/
 で開発中最新リポジトリ

2.gtest-1.3.0 の中に msvc フォルダがあるので開いて、gtest.sln を実行
 
VisuallStudio変換ウィザードが走るので適当にOK。

3.gtest と gtest_main プロジェクトをビルド
 Debug、Release両方で。gtestを最初にビルド。

4.テストしたいプロジェクトにインクルードパスとリンクするライブラリを追加
 追加のインクルードディレクトリ → include\gtest
  追加の依存ファイル → gtest.lib, gtest_main.lib (Debugならgtestd.lib,gtest_maind.lib)

5.mainとかに以下の2行を追記
 testing::InitGoogleTest(&argc, argv);
 RUN_ALL_TESTS();

6.どこかにテストコードを書く(勝手に見つけてくれる)
 #include <gtest/gtest.h>
    TEST(firstTest, abs)
    {
        EXPECT_EQ(1, abs( -1 ));
        EXPECT_EQ(1, abs( 1 ));
    }

7. ビルド→実行でおしまい!
 イカス!!!

 

«  | HOME |  »