2013年7月31日水曜日

Arduino はじめました

ちょっと個人的にやりたいことがあったので、Arduino をはじめました。
最終的な目標は LED マトリックス使って文字や絵を表示することです。
電子工作自体はじめてですが、頑張って納期までに完成させたいと思います。

まずは購入
というわけで、まずは Arduino を購入しました。
今回購入したのはこちら。


とりあえず、初心者なので入門キットを買いました。
LED マトリックスは目星をつけているのがあるのですが、Arduino に慣れてから購入するつもり。

早速 LED チカチカ
早速、届いたので開発環境をインストールして、サンプルを実行しました。

開発環境のインストールはこちらからしました。
http://arduino.cc/en/Guide/windows
サンプルの実行まで、手順が書いてあるのでそのとおりにやるだけでーす。


できた~(^O^)
delay の数値を弄って点滅スピードが変わるのも確認。

非常に簡単ですね!

次へ
今回購入した Arduinoをはじめようキット はこちらの本の内容を実践するためキットなのですが、

この本は買ってないのです。(2,100円だし買ってもいいのだけど…)

というわけで、早速次に何するか迷子になっているわけですが…
タクトスイッチと LED があるので、スイッチに反応して LED チカチカでも、やりましょうかね。

…えーと、ではまた次回!

2013年7月30日火曜日

[gtest] テストの書き方 TIPS

Google Test でテストを書くときのちょっとしたテクニックを紹介します。
(※ こちらの記事では gtest 1.6.0 を使用しています。)

テストフィクスチャの再利用1
テストフィクスチャは typedef で別名を定義することで、再利用できます。
class TestHoge : public ::testing::Test {};

TEST_F(TestHoge, Test)
{
}

typedef TestHoge TestFoo;

TEST_F(TestFoo, Test)
{
}
複数のテストケースで同じセットアップ処理を実行する場合に便利です。

テストフィクスチャの再利用2
値のパラメータ化テスト用に定義したテストフィクスチャは、通常のテストのテストフィクスチャとして利用できます。
class TestHoge : public ::testing::TestWithParam {};

TEST_P(TestHoge, A)
{
}

TEST_F(TestHoge, B)
{
}

INSTANTIATE_TEST_CASE_P(A, TestHoge, ::testing::Range(0, 2));
TEST_P 用の TestWithParam を継承したテストフィクスチャは、TEST_F でも使用できます。
一部分だけパラメータテストをしたい場合に便利です。

複雑なパラメータの作成
パラメータに乱数を使用したり、複雑な計算結果を利用する場合、
パラメータを格納した ::std::vector を返す関数を作成することで、楽に書けます。
::std::vector MakeParam()
{
  ::std::vector v(10);
  ::std::mt19937 engine;
  ::std::uniform_int_distribution dist(0, 1000);
  ::std::generate(v.begin(), v.end(), [&](){ return dist(engine); });
  return v;
}

INSTANTIATE_TEST_CASE_P(A, TestHoge, ::testing::ValuesIn( MakeParam() ) );

まとめ
以上で、TIPS 終わりです…
書き出してから気づきましたが、
なんか、あんま大したこと書いてないですね…

2013年7月23日火曜日

cygwin の clang パッケージで標準ライブラリが見つからないエラー

新しいノートパソコンが来たので、cygwin をインストールしなおしたら、
gcc が 4.7 系になっていたので喜んでいたら、 clang でビルドできなくなって大変困ってしまった。

エラーの内容としては、
../include/iutest_config.hpp:106:14: fatal error: 'set' file not found
#    include 
             ^
と、いう感じで標準ライブラリが見つからないようです。


皆目検討がつかず、WEB を彷徨っていたらそれっぽい情報を見つけました。
clang++ broken by recent GCC update

i386 がサポートされなくなったのか?
ん~困った。

2013/12/16 追記
-v オプションつけて詳細表示させたところ、4.5.3 を参照していることがわかりました。
clang -cc1 version 3.1 based upon LLVM 3.1 default target i386-pc-cygwin
ignoring nonexistent directory "/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++"
ignoring nonexistent directory "/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/i6
86-pc-cygwin"
ignoring nonexistent directory "/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/ba
ckward"
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory "/usr/lib/gcc/i686-pc-cygwin/4.5.3/include"

古い cygwin 環境から 4.5.3 一式をコピペしたところ無事ビルドできました。
(これでいいのかはわかりません。)