KinectをMacで使ってみる

とはいっても本当にデモ動かした程度ですが…

ナウなヤングにKinectが大人気!
ということで触ってみました.
このKinect,何がすごいって深度センサー(センサと対象の大まかな距離がわかる)がある.
とりあえずインストールはココを参考にしてやりました.
いちおう日本語にまとめておくと,

1.前もってgitとcmakeをインストールしておきます.
私の場合はmacportsを使って

sudo port install git-core
sudo port install cmake
でやっちゃいました.

2.適当なフォルダを作り,そこに移動します.
私の場合はユーザ以下のSourcesというディレクトリで作業を行っているので
mkdir Sources(既にある人は必要なし)
cd Sources
といった形で移動します.

3. libfreenectをGitで持ってきます.
ここは
git clone https://github.com/snicholls/libfreenect.git
と打ってやればOK
するとSourcesフォルダ以下にlibfreenectというディレクトリが出来ます.

4.インストールします
イケメンたちが自動インストールのシェルスクリプトをつくってくれたみたいです.
というわけでここは
cd libfreenect/platform/osx/
chmod +x osx-setup.sh
sudo ./osx-setup.sh
でOK.スゴーイ
(もし↑ダメだったらココを参考にやってみるといいかも)


というわけで実際に実行してみましょう.
cd ../../
cd c/build/examples
./build
で実行出来るはずです(↓こんな感じ).
ちなみに後ろの汚い部屋については突っ込みはない方向で…はぁ片付けなきゃ…
実行の際に
GL thread
Failed to submit xfer 1: -99
Failed to submit xfer 2: -99
Failed to submit xfer 3: -99
Xfer error: 1
Failed to submit xfer 1: -99
Failed to submit xfer 2: -99
Failed to submit xfer 3: -99
Xfer error: 1
とかいうエラーが出て実行できない場合は,一度ココに置いてあるサンプルアプリを実行してからもう一度やってみると,うまく動くかもしれません.
というか私はそれでした,なんのこっちゃ.

ちなみに実行結果を見てみるとTerminal上に加速度データがでてるんですが,Kinectって据え置きセンサーだったよね?
なんか意味あるのかしら?
カッコイイだろう!!(ギャキィッ)
ってだけで付けたのなら面白いけど.

さて,ソースを見てみるとなんかPythonのサンプルコードもあります.
実行してみるとfreenect.pyの段階でコケてしまいますが,OpenCVとも連携していてこれは使えそう.
今後に期待のツールですね.

全てのiPhone・iPadアプリの値段を調べてみたよ

AppleのAppStoreのアプリは群雄割拠.
高いアプリから無料アプリまで幅広く存在しています.

でもそのお値段の分布ってどないなもんなんだろってのは調べた限りあまり載っていません.
うちのボスからお値段一覧調べられない?と聞かれまして,ちょいとばかし調べてみました(うちのボスが書いた内容が大学HPに掲載されました!…というかこの公開をまってこの記事を公開したのですが).

【注意事項】
データ参照元:iPhoneアプリ一覧検索【CatchApp For iPhone and iPod touch】おすすめアプリランキング
データ取得日:2010年9月16日近辺
取得・プロット方法:データの取得にはPythonを,プロットにはRを用いています.
みんながやると参照先に迷惑かかるのでスクリプトは公開はしません.

【取得したデータ】
※データはRのワークスペース形式であるRdataにして保存してあります.データを読み込むためにはRをインストールしてください.
※上にも書いてある通りデータは2010年9月16日近辺のものです.
※ワークスペース内の変数とストアカテゴリー対応表は以下のとおり
#全て:price_all
#ゲーム:game
#ブック:book
#ビジネス:busi
#教育:edu
#ファイナンス:fina
#健康&フィットネス:heal
#ライフスタイル:life
#メディカル:medi
#ミュージック:musi
#ナビゲーション:navi
#ニュース:news
#写真:phot
#仕事効率化:work
#レファレンス:refe
#スポーツ:spor
#旅行:trav
#ユーティリティ:util
#天気:weat
#エンターテインメント:ente
#ソーシャルネットワーキング:soci
iPhone・iPadアプリ価格データ
iPad専用アプリ価格データ


【結果】
んで結果は以下のような感じ.うーむ,いい形をしていますねぇ…
細かい考察は後日やるとして (データがどんな分布に従ってるか調べるだけでも面白そう),今回はiPhone・iPadの全価格データのヒストグラムを以下に表示してみました.
お値段高めの3000円以上のアプリは表示してません(対数変換って手もありましたが価格のイメージが掴みづらいと思いますし今回はこうしました)がデータにはきちんと入ってますヨ!
最近はiPhoneやiPadを持ってる学生も多いし,授業とかに使うと面白いかも?


Mac OS X 10.6 Snow Leopard でMacPortsを使ったOpenCVのセットアップ方法(MacPortsで入れたPythonも使えるようにする)

####MacPortsを用いたOpenCV 2.2のインストールに関する記事をまとめてあります.コチラへどうぞ####

##参考サイト
Setup von OpenCV und den Python-Bindings unter Mac OS X(ドイツ語注意)

##必要なもの
・最新版のXcode
・MacPorts(執筆時点最新版:1.9.1)
・何度失敗しても折れない心


##1.MacPortsのインストール
これに関しては過去の記事を参照.
きちんとセットアップ後に

sudo port -d selfupdate
sudo port -d sync
を実行しておくこと

##2.必要なライブラリのインストール
これは全部MacPortsにお任せ
・Subversionのインストール
sudo port install subversion
・Cmake-Toolsのインストール
sudo port install cmake
・pkg-configのインストール
sudo port install pkgconfig
・libjpeg, libtiff, libjasper, libpng, zlibのインストール
sudo port install jpeg tiff jasper libpng zlib
・ffmpeg, gstreamer, libdc1394のインストール
sudo port install ffmpeg gstreamer libdc1394

##3.OpenCVのダウンロード
適当なディレクトリhogeで
svn co https://code.ros.org/svn/opencv/trunk opencv
とするとダウンロード可能
svnの段階で「サーバー証明書でエラー出てるけどほんまにダウンロードしまっか?セキュリティとか大丈夫でっか?」的なことを聞かれるので「p」を押してでダウンロード
するとディレクトリにopencvというフォルダが出来,その中には「opencv」と「opencv_extra」という二種類のフォルダが出来る.

##4.PythonのMacPortsでのインストール
MacPortsでPython2.6とデフォルトのPythonの選択ツールであるpython_selectのインストール
sudo port install python26
sudo port install python_select
インストールが完了したら,
sudo python_select python26
として,MacPortsでインストールしたPython26を設定する.
設定後に
which python
として,
/opt/local/bin/python
が帰ってくればOK

##5.OpenCVのセットアップ
ダウンロードしたopencv内のopencvフォルダにbuildディレクトリを構築する
cd opencv
mkdir opencv/build
cd opencv/build
そこでCMakeを実行
sudo cmake -G "Unix Makefiles" ..
実行終了したら,ccmakeで設定ファイルの編集を行う
sudo ccmake .
設定画面に写ったら(↓みたいな感じ),まず「t」キーを押して,アドバンスドモードに移行する.

そして以下の項目を設定する(該当項目でReturn(Enter)キーを押して,:より右側の項目を入力すればOK)
BUILD_NEW_PYTHON_SUPPORT:ON
CMAKE_BUILD_TYPE:Release
CMAKE_INSTALL_PREFIX:/opt/local
PYTHON_EXECUTABLE:/opt/local/bin/python2.6
PYTHON_INCLUDE_DIR:/opt/local/Library/Frameworks/Python.framework/Headers
PYTHON_LIBRARY:/opt/local/Library/Frameworks/Python.framework/Python
入力が完了したら一度「c」キーを押してConfigureし,終了したら「g」キーを押して設定ファイルを生成する..
ccmakeの設定が終了したら,
sudo make -j8
でmakeし,終了したら
sudo make install
でインストール

##6.終了後の設定
#設定ファイルにOpenCVの設定を追加
まず,使用しているシェルの設定ファイルに以下の項目を書き加える.
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PYTHONPATH=/opt/local/lib/python2.6/site-packages:$PYTHONPATH
上記の設定を加えることによって,MacPortsのPythonでもOpenCVのサンプルファイルが実行可能.

#Cのサンプルファイルのコンパイル
Cのサンプルファイルはopencv/samples/c以下に入っているので
cd opencv/samples/c
で移動し
sh build_all.sh
でコンパイル可能.
./lkdemo
とかすることによってサンプルを実行可能.

#Pythonのサンプルファイルの実行
Pythonのサンプルファイルはopencv/sample/python以下に入っているので
cd opencv/samples/python

で移動し
python lkdemo.py
とかすることによってサンプルを実行可能.




以上でとりあえずMac OS X 10.6 Snow Leopard でMacPortsを使ったOpenCVの環境構築を完了.
めでたしめでたし.

Mac OS XでのEmacs, ESSの環境構築

###まえがき(長いので飛ばしてOK)
ちょっと前(というよりも先週末あたり)に研究室で,Rのエディタについての話題が上がりました(といっても私とボスの間だけですが).
んで,jEditというJavaベースのエディタが話題になったのですが,どうも調べてみるとあんまり資料が無いご様子.
んじゃEmacsでESS環境構築しちゃうかと思い立って色々やってみたら思いのほかドツボにハマってしまったのでメモ.



###注意
とりあえずEmacsの右も左もわからないド素人の私(←ここ重要)が個人的に使い易い俺仕様の環境をゲットするためのメモです.
(特に.emacs.elは人の設定を切り貼りしているので無駄なところとか多々あると思います)
こんなんじゃだめだYO!という人はこれをベースにするも良し,自分で作るもよしです.



###個人的環境設定
##設置場所
今回のに必要なファイル(ESS最新版・auto-complete・auto-complete-acrなどなど)について,私は全て
~/Sources
フォルダ以下に置いています(R・CarbonEmacs・.emacs.el・.Rprofile除く).
Emacsの設定ファイルである.emacs.elもそういうふうに記載していますので,
必要に応じて変更してください.
##Emacs・ESS俺仕様
・Mac特有のCommand+cとかは有効になってます
・メタキーはOptionキーに割り振ってます
・M(メタキー)-x RでRとか起動します(ついでに三画面分割したりします)
・ESSモードでは_を入力するとかってに<-に補完される機能を切ってあります
・あとなんかイロイロ設定した記憶がありますが忘れました
・勝手に背景透過にしたりしてます.
・ここらへんの設定変更も適当にググってください
##仕様?
・最初にM-x Rで起動すると,関数のauto-completeが起動しなかったりします.最初に.Rのファイルを開いてからM-x Rしましょう.




###参考にしたページ
##ESSとかそこら辺の設定
ありえるえりあ
Sheephead
##.Rprofileまわりの設定
つぶやき〜
##その他
・いっぱい(いろいろ試行錯誤したので覚えていないページ多数)



###用意するもの(いろいろ試行錯誤したので必要ないものもあるかも)
R
CarbonEmacs
→CocoaEmacsが良い人はそっち使ってください(いくつか.emacs.elを修正する必要があるので注意)
ESSの最新版
auto-complete
auto-complete-acr
ess-R-object-popup.el(多分必要?)
・↑のを作ってくれた方々に対する深い感謝マインド
・俺仕様.emacs.el(継ぎ接ぎだらけで無駄が多いので要改良)
・俺仕様.Rprofile
・うまくいかなくても泣かない心
・自分の心理的安定を支えるためのコーヒー等々



###レシピ
##RとCarbonEmacsのインストール
Rはここらへんを参照.ちなみに最新版はR-2.10.1なので注意.
CarbonEmacsに関してはそのままApplicationフォルダにつっこみませう.



##.emacs.elと.Rprofileの設置
まず下準備ということで,上の俺仕様.emacs.elと.Rprofileをユーザ以下に設置します.
ファイル名はdotemacs.elとdotRprofileとなっていると思うので


cd ダウンロードしたディレクトリ
cp ./dotemacs.el ~/.emacs.el
cp ./dotRprofile ~/.Rprofile

で設置が完了します.



##ESS・auto-complete・auto-complete-acr・ess-R-object-popup.elの設置
上記の「用意するもの」からダウンロードしてきた
ESS・auto-complete・auto-complete-acr・ess-R-object-popup.el
を~/Sources以下に展開します
ちなみに各フォルダ名などは

ESS→ess-5.8
auto-complete→auto-complete
auto-complete-acr→auto-complete-a
ess-R-object-popup.el→~/Sources/R_Emacsフォルダ内

って感じにしてます
(↓こんな感じ(LIBSVMとかは気にしないでください)).

こんなん気にくわないYOって人は適当に俺仕様に変更した後に,.emacs.el内の最初に書いてある

(setq load-path (append (list
(expand-file-name "~/Sources/R_Emacs")
(expand-file-name "~/Sources/auto-complete")
(expand-file-name "~/Sources/auto-complete-a")
) load-path))



(load "~/Sources/ess-5.8/lisp/ess-site")

の部分を書き直しちゃってください.


これでEmacsを起動して,適当な.Rファイルを突っ込み,M-x Rすればそれっぽいのが動くと思います.

こんな感じ

Gmailってお利口さん:添付機能で指摘してくれた

所要でGmailからメールを送ったときにペケしてしまって,添付ファイルをつけ忘れてしまいました.
そしたらGmailが
「ファイルを添付しましたか?
メッセージに「添付」と書かれていますが、ファイルが添付されていません。このまま送信しますか?」
だってさ.
本文中の添付って文字をきちんと見てるんだ
ちょうお利口さんじゃないっすか.
 
この調子で間違った文章を誤って送ってしまったときに指摘してくれる機能も欲しい!
判定難しいけど.

Rでメモリが足りなくて大変だよ!助けてドラえもん!

最近Rで結構大規模なデータを扱っており,読み込むのも一苦労な代物なんですが,色々データをいじくっているとMacの4GBのメモリがいい感じにゴリゴリと削れていき,あまり心臓に良いものではないです.
特に帰る前にプログラムを動かして,朝仕事場に来たら強制終了していたときは泣きたくなります.

というわけで色々なところから抜粋

・gc()を使おう,それも2回
RjpWikiの「知っているといつか役にたつ (?)関数達」より

「Rの基礎とプログラミング技法」、U. Ligges 著、石田基広訳、によるとガベージコレクション関数 gc() は二度続けて行なう方が良いそうである。理由はもっともで、直近の計算結果を保存する .Last.value というオブジェクトが気づかぬままに巨大になっていることがあるが、一度目の gc() でこれが消え、二度目の gc() 実行で解放されたメモリーが整頓される、からだそうです。効果はしばしば劇的だそうですから、お試しあれ。
はじめて知ったんですが(よくよく考えるとあって当然ですが),Rにはgc()というガベージコレクション用の関数があり,それを使おうというお話
Rは直近の計算結果も保存してしまうのですが,gc()を2回繰り返すとそれも消してくれるそうです
ということで
invisible({rm(list=c("hoge"));gc();gc()})
でメモリの節約ができます


Libera Memory Resident を使おう
Lifehackerの「Macの動作が遅くなったら再起動の前に『Libera Memory』!」より
これは別にRでなくてもMac全体に使えるソフトですが,気がつけば結構占有しているMacのメモリの非使用領域を開放してくれるソフトです.
手動でやるLibera Memoryと自動でやるLibera Memory Residentがありますが,継続的に計算する場合は後者のほうがいいかも.

・コードを見直そう
RjpWikiの「メモリについて」より
アイディアをその都度追加・削除していったコードは気がつけば無駄が多かったりするものです(俺だけ?).
RjpWikiでも
考えられる原因をメモしてみます。rm(...) で開放されたメモリは必ずしもそのあと再使用できないことが有る(特に、細切れに使っている場合)ようです.こうした場合はガベージコレクション  gc() を実行して空きメモリの強制回収をします。ただし、これはそれなりに時間を喰いますから、頻繁に行うと実行時間が極端に低下する恐れが有ります。もう一つ 考えられるのは、プログラムのまずいメモリ管理のせいでメモリを浪費することも有るようです.さらに留意すべきは、R 関数は基本的に「値渡し(引数オブジェクトのコピーをそのつど新規に作る)」ですから、巨大なオブジェクトを引数に与えるとその分メモリは消費されます。 もしこれが原因なら、永続付値 <<- 等を使い、ある環境中に置かれたオブジェクトを直接操作することにより「参照渡し」にすべきです.なにかおもいあたることがありますか。

と書いてあります.
幾つか工夫をすると,意外と消費量は大きくなりません,基礎中の基礎だけど大事だよね,こういうの.
(関係ないけどこの記事見てて思ったのが,たまにRjpWikiって殺伐としてるところありますよね…)

以上の方法で幾分ましになってきました.
え?いい計算結果は出ているのかって?
そういう事は聞かないでください.



(追記)
上記の方法を使ってもメモリがヒーヒーいっているというあなた!(というか俺,データ量が増えたらアウトでしたー!)
Rのバッチ処理を使うっていう手がありますわよ奥さん!
分割可能な処理を出来る限り分解して処理させれば,私の処理の場合,メモリが悲鳴をあげることもなくなりました(もちろん計算の内容などによっては改善しにくい場合もあります)

バッチモードRscriptの二つがあるみたいですが,私の環境の場合,なぜか前者では引数の値を受け取ってくれなかったので,ここではRscriptを使った簡単な例をご紹介

基本的には
Rscript --vanilla hogehoge.R arg1 arg2
でバッチ処理が実行できます.
ここで,計算の内容をhogehoge.Rに書いておくわけです.
arg1やarg2はhogehoge.Rで使う引数です.
引数は
commandArgs()[7]
で第1引数をとってくることができます.commandArgs()[8]とすれば第2引数です.

以下,簡単なtipsとして…

(1)バッチ処理中でバイナリファイルを読み込む
これはいつもどおりに
load("hoge.Rdata")
とプログラム中に書き込んでおけば読み込んでくれます.
MacOSXでの場合,実行したディレクトリが作業ディレクトリになるので注意(Windowsはしりましぇん).

(2)バッチ処理中で他のRプログラムを読み込む
これも同様に
source("hoge.R")
とプログラム中に書き込んでおけば読み込んでくれます.
大体の処理を別のファイルに書いておいて読み込ませると楽かもしれません.

(3)バッチ処理の引数を利用する
 例えば,第1引数argの値を,myhogeという関数で計算しarg_rという変数に格納したい場合,
nam <- commandArgs()[7]
eval(parse(text=paste(nam,"_r","<- myhoge(",nam,")",sep="")))
とすれば実行できます.
ここで引数のargは,Rの中ではただの文字列として扱われていることに注意しましょう.
つまり,argという変数を最初に用意しておく(あるいは用意する)必要があります.

(4)計算結果を出力する
例えば,(3)の計算結果arg_rを第1引数argに「R」をつけたargR.Rdataを結果として保存したいとします.その場合,
an <- paste(nam,"_r",sep="")
sn <- paste(nam,"R.Rdata",sep="")
eval(parse(text=paste("save(",an,",file=\"",sn,"\")",sep="")))
 とすることによって,作業ディレクトリにargR.Rdataというファイルが出来ます.

(5)いろいろなバッチ処理を連続しておこないたい
コレを行う場合,私のMacOSXの環境ではシェルスクリプトを用いました.
#!/bin/sh
echo 'Start\n'
# 確認メッセージ。"yes"の入力でスタート
echo 'Begin Training and Transforming? yes or no'
read INPUTSTRING

if [ $INPUTSTRING == yes ]
then
    echo 'START'
else
    echo 'CANCEL'
    exit 0
fi

echo 'Processing Start\n'
Rscript --vanilla hogehoge.R arg1
Rscript --vanilla hogehoge2.R arg2
echo 'Processing Finish\n'
 というような感じのシェルスクリプトを作り,ターミナル上で実行することによって連続したバッチ処理を行えました.
Windowsの場合も似たようなのがあると思うので,頑張って探してください.


以上,コレで少なくとも私の研究内容では,メモリの残量に悲鳴をあげることがなくなりました.
それ,計算コスト的にどうなのよとか,色々突っ込み入るかもしれませんが,これが私にとっての現状ベストな方法です.
他にも良い方法などがあるかもしれませんので,見つけた人はご一報くだされば幸いでございます.
ではでは

IE8でページを表示すると白紙で何もないページが表示される問題の解決策

長いこと頭抱えていた問題の原因が分かりました.
頑張って作った研究室の新しいサイトをIE8でページを表示すると,白紙で何もないページが表示される問題の解決策

使用していたJavaScriptがまずかったのかなぁ…とかDreamWeaverCS3の不具合かなぁ…とか色々原因を考えてしまいましたが,結局IE8のHTMLコード読み取りの問題(?)だということが分かりました.

参考にしたサイトは以下の通り:
SOHOの備忘録


空白ページになる原因ですがどうやら
1) 文字コードがUTF-8になっている場合に、
2) 文字コード指定(5行目)より前(4行目)に、日本語を入れてしまった
のがいけなかったようです。
文字コードを指定する前に日本語を入れた → 文字化けした → HTMLが正しく記述されていないとIE8が解釈し、ページを表示しなくなった。
と考えられます。


とのこと.
結局,UTF-8だよと宣言する前に日本語を使ってしまい,IE8がこりゃだめだと判断してしまったのが原因のようです.

というわけで,研究室のサイトもUTF-8の宣言の前にあった日本語の部分を,後に書き直しただけで解決しました.
なんのこっちゃ

おしまい