2015年5月13日水曜日

How to know what animation is playing at Unity script

Do you have ever being in trouble when you using Animator in Unity?
I have.
I want to know what is playing now from script and it was little bit hard to find.

I was using C# and Unity4.5

In Animator class there is GetCurrentAnimatorStateInfo(0).IsName.
And It is the method to get the playing animation name.

It will write like this!

Animator UnityChanAnimation;
public GameObject UnityChan;

void Start () {
    UnityChanAnimation = UnityChan.GetComponent<Animator> ();
}

void Update () {
  if(UnityChanAnimation.GetCurrentAnimatorStateInfo(0).IsName("dance")) == true){
  //playing
  }
}

if dance motion is playing, the it will return true!!

RedisとSailsってなんで相性いいの?

Nodejsのフレームワークとメモリキャッシュを調べているときにsailsとExpressの比較表を見つけた。
ここの表だと、sailsはredisと相性いいよ! みたいなことが書いてある。
なにが相性いいんだ? ってずっと思ってたけど、どうもsailsに入ってるsocketI/Oがデフォルトでredisに対応しているかららしい。

よくよく見るとsailsのconfig/sockets.js にも書いてある。

参考サイト

2015年3月28日土曜日

OpenCL1.2のあれこれ

OpenCL1.2をいじってたので、それのまとめ

OpenCLはなんなのかというと
グラボを使って、処理を並列化させて高速化させましょうね というGPGPUのフレームワークの一種です。
ちなみに3秒かかる処理とかを0.03秒ぐらいにはなります。(kinectの全ピクセルに対する法線計算)

じゃあ、他のGPGPUと何が違うのって話になるんだけど、OpenCLだと
違うグラボであっても動くということ

いまのところ
・Radeon
・Intel
・NVIDIA
の三種のグラボがあるんだけど、普通はNVIDIA用のプログラムとかIntel用のプログラムとかを書かなくちゃいけないんだけど、
OpenCLだとそのへんを意識しなくてもいける

で、そのOpenCLの1.2使った感想からいうと
・Intelは動かない
・Radeonは多少プログラム間違えててもなぜか動く
・NVIDIAは少しでも間違ってくるとプログラムを落とす

ちなみに試したのは
・Intel(Intel HD 4000)
・Radeon(ATI Radeon HD 6750M)
・NVIDIA(NVIDIA GeForce GT 750M)
で全部Mac

OpenCLはプログラムをビルドする必要があるんだけど、
Intelのグラボを使おうとするとそもそもビルドが通らない
調べてみたらどうもMacだと使えないらしくWindowsでbootして、SDKを入れたら動くようになるらしい

RadeonとNVIDIAについて特にいうことはないです。
適当に書くとバグのもとなのでちゃんと書きましょう(反省)

あと、どうもOpenCLの開発はOpenGLと同じ会社らしく
連携させることで描画の高速化とかバッファをOpenCL同士で受け渡せる らしい

描画の高速化は結構常識っぽいんだけど、バッファをOpenCL間(正確にはカーネル間)で受け渡せるが結構重要な割にはマイナーなネタな気がする。
なんで重要かというと、OpenCLはGPUへのバッファの受け渡しが一番時間かかるから
なので、バッファをOpenCL間受け渡しできるなら、かなり高速化できる
次にいじる機会があったらやってみようと思います。
ちなみにhttps://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clCreateFromGLBuffer.htmlの話ですね


OpenHackDay3出ました

OpenHackDay3出ました。

http://weekly.ascii.jp/elem/000/000/312/312088/
の10番

http://monoist.atmarkit.co.jp/mn/articles/1503/13/news047.html
の3ページ目、一番最後に取り上げられてるやつです

システムの作りとしては
pao(クライアント)->サーバ<->アプリケーション->API(カメラ、鍵など)
   ↑                 ↓
    ←←←←←←←←←←←←

って感じになってます(矢印がデータの送信向きです。)
paoはサーバに自分の加速度、角加速度を送ります。
サーバはpaoのデータをフィルタして、アプリケーションからの要求に従ったデータをアプリケーションい送ります。
アプリケーションはサーバから受け取ったデータから、paoについてるLEDとかカメラとかを動かします
アプリケーションからpaoに直接矢印が向いてるけど、実際はサーバが中継してます


自分が担当した部分は
サーバ部分とアプリケーション部分です。
といってもアプリケーションのAPI操作部分は別の人に使いやすいように書いてもらったの使ってるので、自分はAPIとか意識してないですけど

残念ながら賞はもらえなかったけど、尖がってますねとかインパクト強いですねって評価されたから個人的には全体的に満足してます。
個人的には出来は良かったと思うし、評価の仕方的に賞はもらえないのも仕方ないかな という感じだったので

いろいろ大変だったけど、期間とか限定される集中できるし、テーマとも指定されなくて、基本自由なので、やりやすいですね

どうぞ、皆さんもぜひ



2015年2月4日水曜日

2015年2月3日火曜日

androidStudioでプロジェクトのインポート

躓いたからメモ代わり

よくプロジェクトのインポート方法が書いてあるけど、
だいたいEclipseによる方法なので、androidstudioでやる方法残しとく


以下、手順

1.
androidStudio立ち上げて、
File->Import moduleをクリック

2.
出てきたwindowにインポートしたいプロジェクトまでのディレクトリを貼る

この時点でプロジェクトツリー(デフォルトで左側にあるやつ)のところにインポートしたいプロジェクトが出てくるはず

3.
プロジェクトツリーにある自分のプロジェクト(追加したいやつじゃない)を右クリックして
Open Module Settingsをクリック

4.
プロジェクトツリーにある自分のプロジェクトを選択して、Dependenciesタブをクリック

5.
右上にある「+」ボタンをクリックして、「3 Module Dependency」をクリック

6.
出てきたウィンドウにインポートしたいプロジェクトが出てるはずなので、それをクリックしてOKボタンをクリック


以上

参考
https://groups.google.com/forum/#!searchin/usb-serial-for-android/androidstudio/usb-serial-for-android/BUxOPvXW0XE/FG_FF0chfyYJ





2014年11月26日水曜日

マイクロマウス:迷路情報の格納の仕方

たぶんあまり興味ないネタだと思うけど


一昨年出た時、シミュレーター主体で組んでたせいで、迷路情報アホみたいにでかくてメモリオーバー起こしたので、それの反省を込めて、省メモリの迷路情報保存

つっても区画情報は保存してるし、従来のやつとはあまり変わらないけど



1区画は

class MazeBlock{

public:
bool north;
bool west;
int Count;
};

にしました。


なんで、迷路情報は

MazeBlock mouseMaze[MAX_N][MAX_M];

こんな感じ

1区画だと上と左しか壁情報保存しないけど、
ある区画の右壁情報って隣の区画の左壁情報と同じなわけで

壁情報を使うときに関数を使えば問題ない的な? みたいな?

つまり、こういうこと

bool CheckNorthWall(int x,int y){
if(x < 0) return true;
if(x >= MAX_N) return true;
return mouseMaze[x][y].north;
};

bool CheckWestWall(int x,int y){
if(y < 0) return true;
if(y >= MAX_M) return true;
return mouseMaze[x][y].west;
};

bool CheckEastWall(int x,int y){
if(y+1 >= MAX_M){
return true;
}
return mouseMaze[x][y+1].west;
};

bool CheckSouthWall(int x,int y){
if(x+1 >= MAX_N){
return true;
}
return mouseMaze[x+1][y].north;
};


たぶん、これが一番省メモリだと思います(嘘)
というか、みんなどういう風にしてんの?