hirotakaster のすべての投稿

Maker Faire Taipei 2014

Maker Faire台北の様子を写真を中心にアップしていく。日本でもワークショップをやった事が無いのに、初めてのワークショップは台北でというオマケ付き。ちなみに、同じ週の前半にBay Areaに行って来ていて、その同じ週末は台北で展示とワークショップという何気に過酷スケジュール。

会場はこんな感じ。バルーンもあがってこれからだね!!って感じがする。

IMG_3092

会場の外観。緑に包まれている。

この一帯は、何て言うのかなー。映画館、ライブハウス(℃-uteなる日本のアイドルがライブをしていた)、アートギャラリー多数なカルチャーエリアって感じ。

会場近くに何だこれ…?と思って見てみたら、全部ASUSのマザーボードだった。左側から年代毎に並んでいる。圧巻。

会場はこんな感じ。めっちゃ広い。右上の3Dプリンタで出したと思われるオブジェが素敵。

そして、人もめっちゃ多い。満員電車のような、歩く隙間が全く無い感じ。

何気に重要展示ということで、パンフデビューしていた。

スライムで遊ぶちびっ子達。中国語は何を言っているのかサッパリ分からないっす。あと、これとDepth+Drone物で公開しているGithubを使っているよ!!という人も居たりして、まさか台北で使っている人が居るとは!!って感じ。

FourBeatはここでも、バンバン遊ばれていました。机が揺れまくり!!

BLEでリモートで光るもの。ロウで出来ている感じ。裏に基盤が仕込んである。ロウをLEDで光らせるとこんなに素敵になるのか!!と。

微生物アート

電極が仕込んであって、触れると音が鳴るゆり。

3Dプリンタもの

メインのワークショップ。光るスライムを作るワークショップ。ジュールシーフ回路で単4電池1本でLEDを光らせて、スライムを作ってつっこんで光らせるといった感じ。凄い人が来て、予約空きで待っている人達も…めっちゃ緊張した。

事前にKeynoteで作って、中国語に翻訳してもらった資料を使いながら、自分の右側に居る方は日本語->中国語の通訳さん。

ノリツナ師作成のコイルキットと、日本から持参のスライムの材料を使って、参加者全員できたー!!

事前に、通訳さん(Maker Editorだった)と話していたら、多分誰も出来ないと思います…と言われて少し凹んだ。うちらの前はクッキーを焼いていたそうで、回路は厳しいんじゃないか…と。ただ、これで何とかやってやろう!!と思えた。

全員みごと完成。ノリツナ師と1時間があっと言う間。時間の感覚がめっちゃ短かった。そして2日間の展示もあっと言う間に終わった感じ。ワークショップ後は、もう脱力だった。

こちらはナイトマーケット。

凄まじいサイズの唐揚げ。人の顔以上、40cm以上はあったと思われ。3口位たべて、脂っこくてすぐギブした…

夜はほとんど屋台で食べたと思う。安くて美味しい。

 

 

 

 

システム監視のetc

Web・インターネットサービスは初期開発もだけど、それ以上に運用の方が期間的に非常に長い。一度公開したら、「運用期間 >>> 初期開発期間」という具合に運用期間の方が圧倒的に長い。

よく監視で何を見て、どうすれば?というのを聞かれたりするけど、確かにそういう何を監視してどうするか?といった部分で経験的な所や監視ツールの説明はあるけど、Web上にあまり情報が無いような気がする。特に開発側はあまり意識しないで、リリース&開発優先!!という流れもあったりするけど、基本的な所だけでも意識しておいた方が良い気がする。

Nagios/Cacti/Munin/Zabbix…etc とか運用監視ソリューションを使って監視をしよう!!というのよく見たりするけど、それはツールの話であって、そもそも監視って何で?何の役に立つの?という所を書き残しておくことは必要かなと(大体はSNMPだし)。いきなりツールの話をしちゃいけないような気が若干…ってことで、自分の経験的な所も含めて書いてみる。

 

– 運用監視って?
前提として、「監視をしていないシステムは止まっているのと一緒」だと思っている。
監視&確認されないシステムが正常に稼働しているかどうか?は24時間365日ベタ付きで見ていない限り、「ちゃんと動いています!!」と言えない。もちろん、どこまで監視用の設備を用意するかどうか?といったコスト見合いもあるけどね。
更に監視は障害が発生した時の検知・原因分析や情報を残しておく事で、運用におけるスケーラビリティ・増強についての指針、ボトルネックや問題解決の特定といった情報のベースにもなる。そこで監視を行う理由としては以下がある。

1. 正常に稼働している事を確認する
2. 何かシステムに問題があった時の検知を行う
3. システムにおけるボトルネック・問題発生後の原因分析
4. スケーラビリティ・増強を検討する際の指針

 

– 何を監視するのか?
監視をキーワードに書籍とか何かを見ると長々と書いてあったり、監視用ミドルの話が多いと思うけど、視点として大体は次を覚えときゃOKと思っている。

1. 死活
2. リソース
3. プロセス
4. ログ
5. サービス・アプリ(optional)

これらの監視を行って、何か問題があればメール(携帯直撃は当たり前)で通知が行われる。つまり、[監視]-(問題発生)->[通知]->[対応]といった一連の流れになる。
ここで前後するけど、監視には「インフラ・ネットワーク」「OS以上のレイヤーであるシステムアプリ周り」という2つの側面があって、どちらがどこまで監視を行うか?どちらに問題があるのか?はよく話に上がる(いわゆる責任分解点というやつ)。ここでは、OS以上の層について対象としておく。

1-5は何なのか?というと次の通り。

 

1. 死活
これはその名の通り、サーバ・ミドルが死んでいるのか活きているのか監視を行う。よく対象とするのは、

– OSが稼働しているかどうか(ping)
– ミドルが稼働しているかどうか(Web:telnet/wget, DB/Memcache…その他ミドル:接続する)

というのが基本になる。OSの稼働は対象のIPに対してpingを打つ。サーバが稼働していればレスポンスが戻ってくるというもの。またミドルに関しては実際に接続して、対象のミドル・ポートに対して接続できる事といった感じ。OSの死活はもちろん、経路上のNWの問題も検知する事が出来たりする。
ただし残念な事だけど、たまにこのどちらも稼働していても、対象のサーバに接続できないという事もあったりする。

 

2. リソース
これは、CPU・メモリ・ディスク、LoadAvg、Connection数といったOS上の統計情報、ミドルが持っている統計情報から、安定稼働の状態で推移しているかどうか監視を行う。過負荷な状態・データファイルを大量に使っている・スレッド数が凄いことになってるー!!…etc等をフックに、システムの増強・問題点の対応・分析を行うことになる。
ここで、インフラ・ネットワーク的な所だと、NIC&ポート・ファン・電源・ディスクといった機器リソースの監視等もあったりする。

死活もだけど通知にはよく何種類かあって、Warning, Criticalという警告レベルがある。例えばメモリ使用量が7割を超えたらWaring、9割を超えたらCrititalというように、通知される警告レベルに段階を設定する事で、急転直下で「突然ヤバいぜ!!」(Critical)という事が無くなる。

 

3.プロセス
これもその名の通り、OS上で動いているプロセス数を監視する。「プロセスが無くなったら止まっているんだし、死活で分かるじゃん」とパッと思うかも知れないけど、forkや何かバッチでプロセスが大量生成されていないか?サービスレベル(Apache/DB)以外の物で確認が必要なプロセスがあった時のも含まれる。

 

4.ログ
これはOSが吐き出すsyslogもだけど、アプリケーションが吐き出すログも対象にして、「ログにこの文字(CRITICAL)が含まれていたら、何か異常が発生しているから通知する」といった感じになる。通知しないにしても、ERRORやWARNINGをカウントして監視用ミドルに残しておいて、状態の確認を行えたりする。

ちなみに、監視のタイミングは常時行われてる物ではなく、大抵は5分に1回のタイミングで監視のタスクが実行される。つまり、定点観測される時間以内に発生した事はある意味ブラックボックスになってしまうため、ログ監視を行うことでそれらを補完する事が出来る。例えば、死活・リソース・プロセス監視を行っていても、その5分以内にWeb(Apache)が再起動したとしても検知は出来ない。ただしログを見ると、”caught SIGTERM, shutting down”といったように再起動が行われたイベントが書いてあると、再起動が行われた!!と通知を行う事が出来る。

 

5.サービス・アプリ(optional)
1-4は基本的な監視でシステムが何であっても大抵は同じような感じだと思う。ただ、これは「サービス・アプリがどういった状態で稼働しているのが正しいのか?」という、サービス・アプリが正常に動作している事を確認する事になる。
例えば、何らかの認証APIを利用しているアプリケーションの場合、上記の監視1-4が正常に稼働していてもアプリケーションに不具合が発生して認証出来ない事が発生するかも知れない。その時、認証APIが正常に動作しているか監視を行うことで、問題点の早期発見につながる。

この監視が付随的だと思っているのは、サービス・アプリの独自の正確が出ることで、監視側もそのサービス・アプリに特化した監視用スクリプトを用意する事になる。前述の認証APIのように、あるプロトコルや引数を渡さないと確認出来ないような物は、その監視のために特別な物を用意する事になって…そう、つまり面倒の一言に尽きる。ただ、ちゃんとしている所は、「サービス・アプリとしてこの部分の動作確認が取れていないとヤバいだろう」という部分については監視を行っていたりする。

 

他にもセキュリティ監視(iptablesで怪しいのは通知&取っておいたり、WebだとWAFを仕掛けておくとか)、ミドルレベルならメールキューの数を監視したり色々他にもある。あと冒頭に書いたように、色んな監視用ミドルがある訳で、最初に用意しておけば使い回しも出来るしとっても便利だと思う。ただツールを使うにしても、デフォルトの設定や書いてある通りに行うのではなく、何で?どういう監視が必要なのか?というのを知っておいた方が良い。
監視していないシステムは止まっているのと一緒だと思うけど、何でもかんでも監視すれば良いという訳でも無いと思うし、監視を運用するコスト・問題が発生した時の対応といった別の課題もある。ただ、最低限の監視(1-4のどれか)を行っておいた方が良いのは間違い無いと思うけど。

ピンポン玉でディフューザー

ピンポン玉にLEDを仕込んでちょっと何か作ろうと思っている前段で、ちょっとまとめ。プロジェクタで投影するのとはちょっと違う見栄えになる。それにしても色々あって面白い。

how to float a ping pong ball in the air
LEDを仕込んだ玉を風で浮かせている。単純だけど良い感じ。

– 25,000 Ping-Pong balls for a Tiny Pied-à-Terre by Snarkitecture
部屋中をピンポン玉で埋め尽くすというもの。光りはしないようだ。

– The Much Larger Board Of Many Ping-Pong Balls
音楽に合わせてパターンが変わるもの。

ping pong ball projection
プールに大量のピンポン玉を浮かばせて上から投影。これは結構前に見たことが。

Quad Cubatron
平面に配置するのではなく、x-y-zで配置。LED QUBEみたいになる。

カーネギーメロンのクラス資料
手でふれでバラバラして遊ぶもの。サーボでも仕込んでぐるぐる動かしてみたら面白いかも。

Bacardi Breezer Bottle Wall
ピンポン玉ではなく、ガラスのボトルを使ったもの。

Water Light Graffiti by Antonin Fourneau, created in the Digitalarti Artlab
水をかけると光るLED Wall

The Man with No Shadow
ピンポン玉では無いけど、LEDを仕込んだ玉を人形にして光らせたら…と思って調べてみたら、違う方法で既に。LED ping pongでやってみるとまた違う感じになるかな…

LED Wall物と似ていて、更にプロジェクターで投影したりとかも。あと、ちょっと違う感じで、こういうのも面白い。トラッキングして表示を変えるのとか。
LED wall and Kinect join forces
Cubepix, Kinetic Projection Mapping On A Moving Wall of Cubes [Arduino + OF + Kinect]

あとはInfinity LEDを大量に使った物とか、LED Wallものは調べてみると既に製品としてある物が割と多いような気がする。
LED Wall Light, LED Tunnel Light with 3D Effect

8X8dots Led wall curtain & dance floor

OpenNI2 DS325 and Android ODROID 4.4.2 memo

Install Android 4.4.2 to ODROID U3 Community Edition($65), let’s try to use 3D point cloud with Depth Sense DS325. All environment is here.

ODROID U-3 Community Edition
OS : Android 4.4.2
Camera : DepthSense DS325
Software: OpenNI2 for DS325, openFrameworks 8.1

Connection each others.

Application running result.

Android with OpenNI2 and DS325 can easy to use. In this case I use ODROID as Android, DS325 is verrry small and light weight. Capturing real-world 3D model using mobile devices(like a Google Tango project) is coming here.

OpenNI2 DS325 driver for Android and Arm Linux(Raspberry Pi)

SIProp.org develop OpenNI2 DS325(DepthSense) driver for Android and Arm Linux. There is no choice to use DepthSense 3D ToF sensor camera in embedded device(Arm, Android…), because of PrimeSense Xtion is discontinued and will be hard to get. Here is “How to build OpenNI2 DS325 driver for Android and Arm Linux Raspberry Pi”.

1.  Android Build

# Build OpenNI2 DS325 Driver for Android
wget http://dl.google.com/android/ndk/android-ndk-r8e-darwin-x86_64.tar.bz2
tar -jxvf android-ndk-r8e-darwin-x86_64.tar.bz2
cd android-ndk-r8e
export NDK_ROOT=$PWD
export PATH=$PATH:$PWD
cd ..
git clone https://github.com/SIProp/openni2ds325.git
cd openni2ds325/Packaging/
python ReleaseVersion.py android

# copy all shared libraries and ini file to Android
cd OpenNI-android-2.2
./adb push libusb.so /system/lib/
./adb push libOpenNI2.so /system/lib/
./adb push libOniFile.so /system/lib/
./adb push libDS325.so /system/lib/
./adb push libPSLink.so /system/lib/
./adb push libPS1080.so /system/lib/
./adb push OpenNI.ini /system/lib/
./adb push PS1080.ini /system/lib/
./adb push DS325.ini /system/lib/
./adb push SimpleRead /system/lib/

# Sample Application Build
cd openni2ds325/Samples/DS325Sample/jni/
ndk-build

# import DS325Sample Project on Eclipse and Run.

 

2. ARM Raspberry Pi

sudo apt-get update
sudo apt-get install g++ python libusb-1.0-0-dev freeglut3-dev \
                      doxygen graphviz openjdk-6-jdk libudev-dev
git clone https://github.com/SIProp/openni2ds325.git

# edit "ThirdParty/PSCommon/BuildSystem/Platform.Arm" file
------------------------------------------------
# change CFLAGS option.
CFLAGS += -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp #-mcpu=cortex-a8
to
CFLAGS += -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard

# disable NEON option
DEFINES += XN_NEON
to
#DEFINES += XN_NEON
------------------------------------------------

# build OpenNI2
cd openni2ds325/Packaging
python ReleaseVersion.py Arm

# Run and check DS325
cd OpenNI-Linux-Arm-2.2/Samples/Bin
./SimpleRead

prime number in triangle

πで綺麗に絵を書いているのを見て、素数をちょっと使ってみようと、ちょっとばかし時間があったからやってみた。ウラムの螺旋とかサックスの螺旋とか以外にも色々あるけど、ここでは三角形の配列を使ってみる。

line:1                 1
line:2               2  3
line:3            4   5   6
line:4       7    8    9   10
line:5   11 12 13 14 15
………

こんな感じの3角形の配列を用意して、素数の所だけ塗りつぶす。これはウラムの螺旋とかと一緒の感じで。

line:1                   1
line:2                2   3
line:3            4    5   6
line:4         7    8   9   10
line:5     11 12 13 14 15
………

こんな感じで素数の所だけ塗りつぶしていく。他はグレーにしているけど、素数じゃない所は何も塗りつぶさない。あとline:1は1だから無しで。プログラム的な流れは、一番左の1,2,4,7,11,16…は (n*n -n +2)/2だから、行番号(n)を上げていってその横幅(行数と同じ個数)にある素数を特定したら、その箇所を塗りつぶす。

結果はこんな感じ。oFでサクッと描いた。

生成される時の動画はこんな感じ。

あんまり規則性が見えなかったかも…スケールを変えると微妙に縦や斜めに線が見え始めるけど、うーん…って感じ。微妙に濃淡があるけど、これはキャプチャの限界で、スケールを変えるとちゃんと全部同じ濃さ&サイズになる。色をつけてみたら何か感触かわるかなぁ。まぁ、けど、何か面白かった。

一応環境としてはMacbook Air 11-ich, Mid 2011, Core i5 1.6GHz, Mem : 4Gbyte, OS X 10.8.5, openFrameworks 8.1を使って、22,685個の素数をポイントしている。

RabbitMQ with AMQP PHP

RabbitMQ AMQP-PHP library build on Ubuntu 13.10 memo.

# environment
# cat /etc/lsb-release
# DISTRIB_ID=Ubuntu
# DISTRIB_RELEASE=13.10
# DISTRIB_CODENAME=saucy
# DISTRIB_DESCRIPTION=”Ubuntu 13.10″

# build rabbitmq-c
git clone https://github.com/alanxz/rabbitmq-c.git
cd rabbitmq-c/
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/rabbitmq-c/ ..
cmake –build .
make install

# build AMQP PHP
wget http://pecl.php.net/get/amqp-1.4.0.tgz
tar -zxvf amqp-1.4.0.tgz
cd amqp-1.4.0/
phpize
./configure –with-librabbitmq-dir=/usr/local/rabbitmq-c –with-amqp

# modify Makefile
AMQP_SHARED_LIBADD = -Wl,-rpath,/usr/local/rabbitmq-c/lib -L/usr/local/rabbitmq-c/lib -lrabbitmq /usr/local/rabbitmq-c/lib/x86_64-linux-gnu/
to
AMQP_SHARED_LIBADD = -Wl,-rpath,/usr/local/rabbitmq-c/lib -L/usr/local/rabbitmq-c/lib -lrabbitmq -L/usr/local/rabbitmq-c/lib/x86_64-linux-gnu/

make
make install
cat <<EOF > /etc/ld.so.conf.d/rabbitmq-c.conf
/usr/local/rabbitmq-c/lib/x86_64-linux-gnu/
EOF
ldconfig

# add apache, php.ini
cat <<EOF > /etc/php5/mods-available/amqp.ini
extension=amqp.so
EOF
ln -s /etc/php5/mods-available/amqp.ini /etc/php5/apache2/conf.d/20-amqp.ini
service apache2 restart

sender.php

<?php
$cnn = new AMQPConnection();
$cnn->connect();
$ch = new AMQPChannel($cnn);

// Declare a new exchange
$ex = new AMQPExchange($ch);
$ex->setName('exchange-test');
$ex->setType(AMQP_EX_TYPE_FANOUT);
$ex->declareExchange();

// Create a new queue
$q = new AMQPQueue($ch);
$q->setName('queue-test');
$q->setFlags(AMQP_NOPARAM);
$q->declareQueue();
$q->bind($ex->getName());

for ($i = 0; $i < 10000; $i++) {
    $data = array('id' => $i, 'time' => time());
    $ex->publish(serialize($data));
}
$cnn->disconnect();

?>

reciever.php

<?php

ini_set('amqp.auto_ack', false);

$cnn = new AMQPConnection();
$cnn->connect();
$ch = new AMQPChannel($cnn);
$ch->setPrefetchCount(1);

// Declare a new exchange
$ex = new AMQPExchange($ch);
$ex->setName('exchange-test');
$ex->setType(AMQP_EX_TYPE_FANOUT);
$ex->declareExchange();

// Create a new queue
$q = new AMQPQueue($ch);
$q->setName('queue-test');
$q->setFlags(AMQP_NOPARAM);
$q->declareQueue();
$q->bind($ex->getName());

$q->consume(
    function (AMQPEnvelope $msg, AMQPQueue $queue) use ($ex) {
        echo $msg->getBody(), PHP_EOL;
        return $queue->ack($msg->getDeliveryTag());
});
?>

rabbitmqctl list_queues
Listing queues …
queue-test 10764
…done.

Creative Senze3D – Intel Interactive Gesture Camera Teardown

Intel RealSense SDK camera – Creative Senze3D Gesture Camera Teardown, and compare to DepthSense DS325.

1. open the attachment, take the screw.

2. open the rubber stopper, take the screws.

3. open the back cover.

4. Unscrew the hexagon bolt, open the 1st board. This board is printed “SOFTKINETIC KOREA DS325V2_M”.

5. Take the screws and hexagon bolt from next board.

6. DepthSense DS325 and Creative Senze3D.

both boards is printed “SOFTKINETIC KOREA DS325V2_M”.

Creative Senze3D all parts.

openFrameworks 8.1 and OpenNI 2.2 on Android tutorial

This tutorial is “How to use oF 8.1 with OpenNI 2.2 on Android”, using Xtion. If want to use Kinect, use OpenNI 1.x and Sensor Kinect driver. And my build envrionment, I use Mac OS 10.8.5, Android 4.2.2 (device is MK 802 IV HDMI dongle type Android, root user needed) on this tutorial. May be other Android devices OpenNI 2.2 works well(OpenNI ran on Nexus7 in my test).

1. Built OpenNI 2.2
# Download Android NDK
cd $HOME
mkdir work
cd work
wget http://dl.google.com/android/ndk/android-ndk-r8e-darwin-x86_64.tar.bz2
tar -jxvf android-ndk-r8e-darwin-x86_64.tar.bz2

# Download OpenNI 2.2 from git
cd $HOME/work
git clone https://github.com/OpenNI/OpenNI2.git
cd OpenNI2
# change PS1080.ini file path
vi ./Source/Drivers/PS1080/Sensor/XnSensor.cpp
#define XN_GLOBAL_CONFIG_FILE_NAME “PS1080.ini”
to
#define XN_GLOBAL_CONFIG_FILE_NAME “/system/lib/PS1080.ini”

# change OpenNI.ini file path
vi ./Source/Core/OniContext.cpp
static const char* ONI_CONFIGURATION_FILE = “OpenNI.ini”;
to
static const char* ONI_CONFIGURATION_FILE = “/system/lib/OpenNI.ini”;

static const char* ONI_DEFAULT_DRIVERS_REPOSITORY = “OpenNI2” XN_FILE_DIR_SEP “Drivers”;
to
static const char* ONI_DEFAULT_DRIVERS_REPOSITORY = “/system/lib/”;

# build OpenNI 2.2
cd Packaging
python ReleaseVersion.py android
cd Final
tar -xvf OpenNI-android-2.2.tar
cd OpenNI-android-2.2
ls
EventBasedRead OpenNI.ini SimpleRead libOpenNI2.so libPSLink.so
MultipleStreamRead PS1080.ini libOniFile.so libPS1080.so libusb.so

# copy shard library and ini file to Android
adb push OpenNI.ini /system/lib/
adb push PS1080.ini /system/lib/
adb push libOpenNI2.so /system/lib/
adb push libPS1080.so /system/lib/
adb push libusb.so /system/lib/
adb push libOniFile.so /system/lib/
adb push libPSLink.so /system/lib/
adb push SimpleRead /system/lib/

# check OpenNI running.
adb shell
cd /system/lib/
SimpleRead
./SimpleRead
[00000000] 585
[00033369] 585
[00066738] 584
[00100107] 584
[00133477] 584
[00166846] 584
[00200215] 584
[00233584] 583
[00266954] 583
……

2. oepnFrameworks 8.1 for Android
Download openFrameworks 8.1 for Android from official site, of course Android SDK, Eclipse, JDK is needed. openFrameworks for Android tutorials is here.

# download Android NDK
cd $HOME/work
wget http://dl.google.com/android/ndk/android-ndk-r9d-darwin-x86_64.tar.bz2
tar -jxvf android-ndk-r8d-darwin-x86_64.tar.bz2

# set paths.make. following is my example.
vi libs/openFrameworksCompiled/project/android/paths.make
SDK_ROOT=$HOME/work/android-sdk-macosx
NDK_ROOT=$HOME/work/android-sdk-macosx/android-ndk-r9d

# set OpenNI include files, shard library file oF make file.
“libs/openFrameworksCompiled/project/android/config.android.default.mk” changes diff is following.

36c36
< ABIS_TO_COMPILE_RELEASE = armv5 armv7 neon — > ABIS_TO_COMPILE_RELEASE = armv5 armv7 neon x86
193c193
< PLATFORM_LDFLAGS += –sysroot=$(SYSROOT) -nostdlib -L”$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(GCC_VERSION)/libs/$(ABI_PATH)” -L$HOME/work/OpenNI2/Packaging/Final/OpenNI-android-2.2 — > PLATFORM_LDFLAGS += –sysroot=$(SYSROOT) -nostdlib -L”$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(GCC_VERSION)/libs/$(ABI_PATH)”
311d310
< PLATFORM_HEADER_SEARCH_PATHS += “$HOME/work/OpenNI2/Include”
343,345d341
< PLATFORM_LIBRARIES += OpenNI2
< PLATFORM_LIBRARIES += OniFile
< PLATFORM_LIBRARIES += PS1080

3. Sample android application
Eclipse project androidOpenNIExample.tar.gz.
APK androidOpenNIExample.apk

MK 802 IV is HDMI dongle type android device(just like a Chromecast by google), easy to use with LED TV. About 60,000 point cloud is drawing in 30fps in this application.