2012年2月25日土曜日

Perl Beginners #1に行ってきました

 「Perl Beginners #1」という勉強会に参加してきました。
http://atnd.org/events/24780

4月からPerlを使うのが確定となり、勉強し始めたところで調度よく
"初心者向け"の勉強会が見つかったので即参加表明。
補欠だったけど繰り上がって無事参加できました。

しかし、ガチBeginnerは僕だけだったんじゃなかろうか。
(僕はまだ入門書読んでる途中)

Perl初心者が質問して、それに対して聴衆の方々が回答していく、
という形式のセッションだったのですが、いきなりテストとかフレームワークの話に。。。
みんなもう初心者じゃないやん(^_^;)

そしてPerl勉強会でまさかRailsのLTがあるとは思ってなかったので笑いました。
LTはRailsだとこんな簡単にWebアプリ出来ますよとライブコーディングがあり、
じゃあPerlだと何使ってますか?と質問を投げかける形で終わり、そこから皆さんが
これがいい、あれがいいと活発な意見交換に発展していきました。
Amon2とかkossyとかmojoがいいらしい?Catalystはオワコン?

僕と同じようにSIerの方もいれば、インフラ系の方、デザイナの方、完全に趣味でやられてる方、といろんな方がいて2次会も楽しく盛り上がりました。

早く皆さんに追いつきたいなと思いました。

最後に主催の@ytnobody さん、幹事の@hattara_tw さんありがとうございました。
#2も是非参加したいと思います。

2012年2月12日日曜日

kinect for windows買いました。

以前同居人達とxbox用のkinectをハックしてデザフェスに出展したりしたのが楽しくて買ってしまいました。
前はOpenNIを使って非公式な感じだったのですが、今度はちゃんと公式のSDKを使おうと思います。









普段はmacでwindowsはXPしかなかったのでvmware fusion と7を買って仮想環境を作成。
いちいち再起動なんてしてられるか!

vmの導入は特に迷うこともなく、あっけなく終了。
visual sutdioやkinect SDKも順次インストール。
僕のMBPはメモリを8Gに増設していたので、そこそこ快適に動いてる。

さあkinectを繋いでサンプルを動かそう!

が、しかしkinectを正しく認識してくれない。
vmの設定をいろいろ試してみたけど全然だめ。

なにやら仮想マシンじゃ動かないらしい。
http://social.msdn.microsoft.com/Forums/br/kinectsdk/thread/86528a22-0643-4a1f-819f-8125d7668a68

しょうがないのでwindows7をBootCampで入れ直し。
ここがわかりやすかった。
http://inforati.jp/apple/mac-tips-techniques/windows-hints/how-to-install-windows-with-mac-boot-camp.html

BootCampだと普通にkinect認識してくれました。
とりあえず良かった。
公式だと荒ぶるキャリブレーションポーズがいらなくて嬉しい!

一応、vmからBootCamp呼び出せるのでたまには使ってあげようと思います。
IE検証くらいしか思いつかないけど。。。

環境は整ったのでこれからはkinectもいじっていこうと思います。

2012年2月6日月曜日

さくらVPS + CentOSにAsakusaSatelliteを入れたメモ

AsakusaSatellite
http://www.codefirst.org/AsakusaSatellite/

開発者がリモートでコミュニケーションを取りながらスムーズに開発を出来るようにするためのツール。
実際に東京ー名古屋間でリモートで開発を進めたらしい。
会社に行きたくない僕もとしてはオンライン上で開発出来たってのはすごく憧れる。
自分も出来るようになりたいと思いつつ、プライベートの開発で使ってみようと思っています。


必要なのは
・Ruby 1.8.7
・RubyGems 1.4.2以降
・MongoDB 1.8.1以降
・Bundler 1.0.7以降
らしいので入れていく。

最初にbundlerをインストール。
gem install bundler
次はmongoDBを入れる
参考にしたのは
http://cloudrop.jp/mongodb/install_memo_on_sakuravps

インストールと起動をまとめて
vim /etc/yum.repos.d/10gen.repo
yum install mongo-10gen* --enablerepo=10gen
/etc/init.d/mongod start
10gen.repoの中身は
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
AsakusaSatellite本体
wgetでよくわからなかったのでブラウザからローカルに落としてサーバーにftpで送った。
解凍して以下を実行
cd AsakusaSatellite/
bundle install --path vendor/bundle
しかしnokogiriが入らないと怒られる。
gem install nokogiri
でも入らない。

以下2つを怒られては入れ、怒られては入れしてやっとnokogiriが入った
yum -y install libxml2-devel
yum install libxslt-devel

再度
bundle install --path vendor/bundle
でやっと入った。

よし、起動!
bundle exec thin -R socky/config.ru -p3002 -t0 start
がno such file to load -- openssl (RuntimeError)だと。

yum install openssl-devel
で入れて、Rubyを入れ直し。
今度こそ起動!
bundle exec thin -R socky/config.ru -p3002 -t0 start
undle exec rails server
やっと動いた。 railsにも慣れていかないとなー。

さくらVPS + CentOS に Rails入れたメモ

AsakusaSatellite
http://www.codefirst.org/AsakusaSatellite/

を試したかったのだが、そもそもRubyの環境が無かったのでインストール。

まずはRubyを特に何も考えずえいやっと実行。
yum install ruby

でもバージョンが古かったので一回消して公式のやり方で入れ直し。
yum remove ruby
wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p180.tar.gz
tar xvzf ruby-1.9.2-p180.tar.gz
cd ruby-1.9.2-p180
./configure
make
make install
make clean

次はRubyGem
wget http://rubyforge.org/frs/download.php/75711/rubygems-1.8.15.tgz
tar -xvzf rubygems-1.8.15.tgz
cd rubygems-1.8.15
ruby setup.rb

そしてRailsを入れる。
gem install rails
あれ?入らない?
No such file to load -- zlib (LoadError) って怒られる。。。

zlibを入れてrubyにパスを通す(?)
yum install zlib-devel
cd ruby-1.9.2-p180/ext/zlib
ruby extconf.rb --with-zlib-include=/usr/include -with-zlib-lib=/usr/lib
make site-install

再度gem install railsでやっと入った。

次回は本来やりたかったAsakusaSatelliteのインストール。

2012年1月30日月曜日

OpenNIでチルトモーターを動かす

SyntaxHighlighterを導入してみたのでコードを貼ってみた。

過去にはてなダイアリーに書いてたエントリーのコピペ。

KINETで何か開発するにはチルトモーターの制御は欲しいところ。
しかし、OpenNIのリファレンスを見ても全然載ってない(?)
唯一見つけられたhagino_3000さんのエントリーを参考にしてボタンで制御できるようにした。
http://d.hatena.ne.jp/hagino_3000/20110720/1311097327
※xnUSBInit()は呼び出すだけで落ちるから使っていない。
#include 
#include 
#include //Tilt

#include 
#include 
#include 

#define VID_MICROSOFT 0x45e//Tilt
#define PID_NUI_MOTOR 0x02b0//Tilt

constchar* CONFIG_XML_PATH = "/*****/config.xml";
XN_USB_DEV_HANDLE dev;//Tilt


int main (int argc, constchar * argv[])
{    
    xn::Contextcontext;
    IplImage *rgbImage = NULL;
    int angle = 0;//Tilt
    XnUChar empty[0x1];//Tilt
    
    try {
        xn::EnumerationErrorsctxErrors;
        XnStatus rc = context.InitFromXmlFile(CONFIG_XML_PATH, &ctxErrors);
        if (rc != XN_STATUS_OK) {
            XnChar strError[1024];
            ctxErrors.ToString(strError, 1024);
            std::cout << strError << std::endl;
            return1;
        }
        context.SetGlobalMirror(false);
        xn::ImageGeneratorimage;
        rc = context.FindExistingNode(XN_NODE_TYPE_IMAGE, image);
        if (rc != XN_STATUS_OK) {
            throwstd::runtime_error(xnGetStatusString(rc));
        }
        
        XnMapOutputMode mapMode;
        image.GetMapOutputMode(mapMode);
        
        int width = mapMode.nXRes;
        int hight = mapMode.nYRes;
        
        rgbImage = cvCreateImage(cvSize(width, hight), IPL_DEPTH_8U, 3);
        
        while (1) {
            context.WaitAndUpdateAll();
            
            
            xn::ImageMetaDataimageMetaData;
            image.GetMetaData(imageMetaData);
            
            xnOSMemCopy(rgbImage->imageData, imageMetaData.RGB24Data(), rgbImage->imageSize);
            
            cvCvtColor(rgbImage, rgbImage, CV_RGB2BGR);
            cvShowImage("Video View", rgbImage);
            
            char key = cvWaitKey(10);
            if (key == 27 || key == 'q') {
                break;
            }
            
            elseif (key == 's'){
                angle = 0;
                
                rc = xnUSBOpenDevice(VID_MICROSOFT, PID_NUI_MOTOR, NULL, NULL, &dev);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
                
                rc = xnUSBSendControl(dev, XN_USB_CONTROL_TYPE_VENDOR, 0x31, (XnUInt16)angle, 0x0, empty, 0x0, 0);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
                
                rc = xnUSBCloseDevice(dev);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
                
            }
            
            elseif (key == 'u'){
                angle += 5;
            
                rc = xnUSBOpenDevice(VID_MICROSOFT, PID_NUI_MOTOR, NULL, NULL, &dev);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
                
                rc = xnUSBSendControl(dev, XN_USB_CONTROL_TYPE_VENDOR, 0x31, (XnUInt16)angle, 0x0, empty, 0x0, 0);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
                
                rc = xnUSBCloseDevice(dev);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
            }
            elseif (key == 'd'){
                angle -= 5;
                
                rc = xnUSBOpenDevice(VID_MICROSOFT, PID_NUI_MOTOR, NULL, NULL, &dev);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
                
                rc = xnUSBSendControl(dev, XN_USB_CONTROL_TYPE_VENDOR, 0x31, (XnUInt16)angle, 0x0, empty, 0x0, 0);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
                
                rc = xnUSBCloseDevice(dev);
                if (rc != XN_STATUS_OK) {
                    throwstd::runtime_error(xnGetStatusString(rc));
                }
            }
            
        }
        
    } catch (std::exception& ex) {
        std::cout << ex.what() << std::endl;
    }

    if (rgbImage != NULL) {
        cvReleaseImage(&rgbImage);
    }
    
    context.Shutdown();
    return0;
}

2012年1月26日木曜日

テスト

Bloggerがぐぐたすと連携ということで、ブログはこっちにしようかと検討中。