Ubuntu10.04 に kinect の設定をする[未解決]

未解決の問題です

kinect が届いたので,
さっそく Ubuntu10.04(32bit) に OpenNI をいれて使ってみようと思います.

http://tclip.blog38.fc2.com/blog-entry-103.html
を参考にインストールをしてみました.

依存ライブラリ(libglut関係,libx関係,libusb関係)のインストール

OpenNI のインストール

mkdir ~/kinect && cd ~/kinect
git clone https://github.com/OpenNI/OpenNI.git
cd OpenNI/Platform/Linux-x86/CreateRedist
./RedistMaker
cd ../Redist
sudo ./install.sh

(libusb-0.0.8 が必要だと言われたら,
libusb-0.0.8 のソースをとってきてインストールする.)

kinect ドライバのインストール

cd ~/kinect/
git clone https://github.com/ros-pkg-git/Sensor.git
cd Sensor/Platform/Linux-x86/CreateRedist
./RedistMaker

激しくエラーが出てきた
../../../../Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp: In member function ‘XnStatus XnSensorIO::OpenDevice(const XnChar*)’:
../../../../Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp:99: error: ‘xnUSBOpenDeviceByPath’ was not declared in this scope
../../../../Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp: In function ‘XnStatus Enumerate(XnUInt16, XnUInt16, XnStringsHash&)’:
../../../../Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp:369: error: expected initializer before ‘*’ token
../../../../Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp:372: error: ‘astrDevicePaths’ was not declared in this scope
../../../../Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp:372: error: ‘xnUSBEnumerateDevices’ was not declared in this scope
../../../../Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp:381: error: ‘xnUSBFreeDevicesList’ was not declared in this scope
make[1]: *** [Release/XnDeviceSensorIO.o] エラー 1


http://d.hatena.ne.jp/unpush/20110117/1295282016
によると

コミットid:b006b6642eb720c93cbba0d03b94fcb98cb9ba75
のコミットがいけないみたい。
なので,直前のコミットまでチェックアウト。

cd ~/Sensor
git checkout b006b6642eb720c93cbba0d03b94fcb98cb9ba75
git checkout HEAD~
cd Platform/Linux-x86/CreateRedist
git clean -dxf
./RedistMaker
cd ../Redist
sudo ./install.sh

NITE のインストール

http://www.primesense.com/?p=515
からダウンロードしてきて ~/kinect で展開
cd ~/kinect
tar -xf NITE-Bin-Ubuntu-x86-1.3.0.17.tar.bz2

Data 以下のファイルの実行権を 644に変更して,
ファイル内の key を編集。
key = 「0KOIk2JeIBYClPWVnMoRKn5cdY4=」

cd ~/kinect/Nite-.*/Data
chmod 644 *
emacs *

インストール開始!
key を聞かれたら,
公式サイトにのっている。
「0KOIk2JeIBYClPWVnMoRKn5cdY4=」
を入れる。

sudo ./install.bash


cp でエラーをはいていた。こんな感じのエラーだった。
http://groups.google.com/group/openni-dev/browse_thread/thread/848487b8857bb668

参照ページを
http://ja.nishimotz.com/openni
にしてトライ。

・「CommonMakefile を chmod 644 して emacs で開き、SSE を 2 にする。」
・niLicense の設定
を試してみる。


sudo niLicense PrimeSense 0KOIk2JeIBYClPWVnMoRKn5cdY4=
sudo ./install.bash

./Sample-Boxes

InitFromXml failed: Can't create any node of the requested type!
とエラーが出てきてしまう・・・

結局どうすればいいかわからなかった。

railsにあったカッコイイ関数について

この前,railsで遊んでたときに

validates :name, :presence => true, :length => {:maximum => 30}

とか書く場面があった.これを書いて
「カッコイイ!!だけどどう実装しているのか分からない(>_<)」
と思った.

だけど,
http://www.oiax.jp/rails/study/active_record_validations_add.html

このサイトをみて何となく分かった.

数の総和を出す関数(数は3つ以下,未定義の数は0にする)を

def tasizan3( kazu = {})
kazu = {
:v1 => 0,
:v2 => 0,
:v3 => 0
}.merge kazu

kazu[:v1]+kazu[:v2]+kazu[:v3]
end

みたいに定義してつかえるみたい.
出力は

tasizan3 #=> 0
tasizan3 :v1=>1 #=> 1
tasizan3 :v1=>1 :v2=>2 #=> 3
tasizan3 :v1=>1 :v2=>2 :v3=>4 #=> 7
tasizan3 :v1=>1 :v2=>2 :v3=>4 :v4=>8 #=> 7

みたいになります.


ちなみに
validates :name, :presence => true, :length => {:maximum => 30}
の第一引数の :name はアクセッサの名前を指定しているみたいです.
だから
validates :name, :presence => true, :length => {:maximum => 30}

:name と同じ名前のアクセサに
:presence (表示)を有効にする ことと

length (長さ)の
maximum (上限)を30にする こと

を有効にします.

という意味みたいです.

そう言えば,twitterAPIのときも同じようなことがありました.

http://github.com/jnunemaker/twitter/blob/master/lib/twitter/trends.rb

どうやら,最後の引数をoptionという名前のハッシュして使うのは常套手段らしいです.

でも,この実装だと,Rdocを作ったときに
http://rdoc.info/github/jnunemaker/twitter/master/Twitter/Trends
どんなオプションがあるのか書いたりするのは大変そうです.
オプション名の補完をするのも難しそう.
どうしているんだろう・・・


でも,引数のデフォルト値を持った関数を定義するのに
便利なので使おうと思いました.■

ruby 私的メモ

文字列の出力中に少しだけ変数を混ぜたいとき
変数をs_valとすると 
"hoge#{s_val}hoge"
みたいにかける.

ハッシュのキーはシンボルを使うといい
hashdayo[:key1]
:key1みたいなやつ.

関数の引数のデフォルト値を定められる

可変長の引数は
def func(*vals)
end
みたいに書く

例外処理
rescue Exception => e
warn "Exception: #{e.message}"
みたいに書くとメッセージが出てくる

ensureは異常でも正常でも実行してほしいもの

アクセサ
読みだけ attr_reader :val
書きだけ attr_writer :val
読書両方 attr_accessor :val

クラスにメソッドを直接追加
class << instancename
def func
end
end

検索コマンドのメモ

  • grep ファイル内文字列の検索

形式
grep (option) [keyword] filename


使いそうなオプション
-i:大文字と小文字を両方検索
-l:ファイル名のリストのみ出力
-r:ディレクトリ以下も再帰的に検索


(例)
$grep hoge hoge.txt
hoge.txtに"hoge"があるか探す


$grep -l -r -i vector *
"vector"を含むファイルがあるか探す.
検索対象は実行した階層以下のすべてのファイル.
"vector"の文字は大文字小文字を区別しない.


(参考)
http://www.k-tanaka.net/unix/grep.html



  • find ファイルの検索


形式
find [directory] (option)


使いそうなオプション
-name [name] ファイル・フォルダ名指定
-print 標準出力
-type d ディレクトリ検索
-type f ファイル検索
-type l シンボリックリンク検索
-exec [command] {} \; コマンド実行


正規表現の注意
-nameでつかう任意の文字列は"\*"("*"ではない).


$find * -name \*.c
.cファイルの検索


$find * | wc -l
階層以下のファイル数表示.


$find * -exec wc {} \;
階層以下のファイルそれぞれの文字数情報をすべて表示.


$find . -name \*.\* -print | xargs grep -l ab
abを含む拡張子付きファイルの表示.

pdfファイルに文字コードを埋め込む

ちゃんとしたやり方かは分からないけれど
自分がやってできた方法はこちら

(環境)
ubuntu9.10
platex
dvipdfmx

フォントディレクトリを作成

$ sudo mkdir -p /usr/share/texmf/fonts/truetype/

移動

$ cd /usr/share/texmf/fonts/truetype/

シンボリックリンクの作成

$ sudo ln -s /usr/share/fonts/truetype/ttf-ipamonafont

登録

$ sudo mktexlsr

  • .mapファイルの作成

tex文章と同じ階層に適当な.mapファイルを作ります

$emacs (てきとう).map

設定値を以下のようにします.

%フォントタイプ 縦組みか横組みか フォント名(ここでは/usr/share/fonts/truetype/ttf-ipamonafont以下のファイル名)
rml-jis H ipam-mona
gbm-jis H ipag-mona

  • dvipdfmxで変換

(nantoka).mapファイルを作って
dvipdfmx に -f (nantoka).map オプションを追加すればできた。

$dvipdfmx -f (nantoka).map -o (outputname).pdf (inputname).dvi

  • メモ

rmlとは明朝体,
gbmとはゴシック体のことらしいです.


システム全体のフォントマップを変えたい場合は
''/etc/texmf/dvipdfm/''
以下の
jis-cjk.map (日本語)
cid-x.map

を変更してください.

gauche+emacs

gaucheemacsで使う時の設定
プログラミング言語Gauche」より

;;gauche                                                                                                                                                                                          
(modify-coding-system-alist 'process "gosh" '(utf-8 . utf-8))

(setq scheme-program-name "gosh -i")
(autoload 'scheme-mode "cmuscheme" "Major mode for Scheme." t)
(autoload 'run-scheme "cmuscheme" "Run an inferior Scheme process." t)

(defun scheme-other-window ()
  "Run scheme on other window"
  (interactive)
  (switch-to-buffer-other-window
   (get-buffer-create "*scheme*"))
  (run-scheme scheme-program-name))

(define-key global-map
  "\C-cs" 'scheme-other-window)

;; ~/elisp をライブラリパスに追加                                                                                                                                                                 
(setq load-path
      (append
       (list
        (expand-file-name "~/elisp/")
        )
       load-path)
)