「weblog」カテゴリーアーカイブ

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でサクッと描いた。

primenumber

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

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

一応環境としては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.

AgIC使ってみた

話題のAgICを使ってみた。

 こんな感じで書いた所に電気を流す事ができるという、素敵アイテム。これはとっても面白い。

単にLEDを光らせるだけじゃなく、ちょっと遊んでみようと小10分ほど…やっぱり何かに書いて使いたくなっちゃよね!!

グルグルを書いてみる。

 書いた所に沿ってハサミで切って…光ったー!!

そして次は、トランジスタで増幅させて、LEDを光らせてみる。

これは何かというと、グルグルに切った紙をビョーンと伸ばしたりひねったりすると、微妙に抵抗値が変わるから、トランジスタで増幅させて、LEDの光りが強くなったり弱くなったりする感じ。

例えば他にも、これを音にする事で、紙をビョーンと伸ばしたりひねったりして音に出して遊んだりといった事もねっ!!

単に電気を流す回路を書く事以外でも、めっちゃ遊べそー!!

 

 

新卒

今年も4/1の大学や学校を卒業した新卒の時期になった。
エイプリルフール企画と共に、どこの入社式がリア充なのか?がお約束のようにTwtiter上を賑わす事になる。

自分は何故か新卒エンジニアと今まで1度も仕事をした事が無い。
今年で38歳、もう40歳手前というのに。

ネット系の仕事は幸か不幸か、年齢という物をあまり感じる事が少ない。
10代であっても、37歳の自分であっても、同じインターネット上という土俵で戦う事になる。
差があるとしたら経験という部分だけ。

その経験という所ですら、PCがあれば大抵の事は開発が出来るネット系では、年齢の差という所は薄くなってきていると思う。

まず作る、ダメでも、上手くいかなくっても。
教えられているのではなく、自分でやってみて形にする事の大切さ。
突き詰めて、めっちゃ突き詰めて考える。

例えばネット系のシステム一つとっても、ネットワーク構成、スイッチ・ルータ、物理・仮想サーバ、インタフェイス、CPU、メモリ、ディスク、RAID、電源、冗長化、監視、バックアップ、LoadBalancer、FW、ストレージ…
アプリは多様な言語、ミドル、DB、負荷分散・冗長、ログ、データ解析、セキュリティ、フレームワーク、アルゴリズム、プトコル・データ形式だったり…

どこを取っても考える事は凄まじくあるし奥が深い。
机上で教えられるより、これを作ってみてよ!!と課題を与えられて作るのも良いけど…

自分で考えて、突き詰めて解が出るところまでやってみる。
間違えていたり前提や仮定が間違っていても、それは次に活きてくる。

色々と触れてみて、自分に合っている所があれば、それを磨いていけば良いし、既に持ってい人はもっと磨けば。

「絶対にこのシステムは落とすな!!」とか「バグの無いシステムを作れ!!」とか、理不尽な事は何度もある。
ただエンジニアリングは、理想と現実の間にある数々の制約の中で解を出していく事だと思うから、そういう数々の要求に対して、どう解を出すのか?議論をするのか?というのはエキサイティングであるはず。
言われた事だけやる没個性ではなく、その中で自分なりのアイディアや色を入れていければね。

あと、基本はとっても大切だと思う。
ユニークで凄く新しい物や斬新な物、凄いアイディアだ!!と感動を覚える事のバックグラウンドは基本の積み重ね。
突き詰めて考えるのと似ているけれど、いきなり凄い物を作ろうとしても、その過程で知る・覚えるべき物は沢山ある。

時間の流れは早くなる一方だし、やれる時間も限られている。
自分を信じて、信念をもっていって欲しいと心から思う。

Point Cloud Library on Mac OS X Mavericks

PCLをMacで使おうとしたら、本家の手順だとハマりまくったから、ちょっと備忘録として。
ソースからインストールします。

# OpenNI
# OpenNIは1.x系だけど、brewで/usr/loca/以下に展開されるから、
# 2.x系と共存できるし入れといても良いんじゃないかなと
# thanks totakke formula!!
brew tap homebrew/science
brew tap totakke/openni

# install
brew install openni # 1.5.7.10
brew install sensor
brew install sensor-kinect
brew install nite # 1.5.2.21

# symbolic link
cd /usr/local/include
ln -s ni openni

# pcl
brew install cmake
brew install boost
brew install eigen
brew install flann
brew install vtk5 –with-qt

# 以下、PCLのビルドとか
cd $HOME
git clone https://github.com/PointCloudLibrary/pcl
cd pcl
mkdir build
cd build
cmake ..
make

ABC 2014 Spring

先日、秋葉原 UDXで行われたAndroid Bazaar and Conference 2014で話してきました。

資料はこちら。

他に目を惹いたのは…

100円ショップで作るOculus

こちらはEpsonさんのメガネ

Leap motionを使った洗面台に進化していた