CentOS 6.9にgit入れようと思ったらちょっとしたエラー

先日、インフラも勉強しつつ自分のサービスも展開しようと思ってSakura VPSを借りました。

 

で、ぱぱっとアカウント周りとSSHあたりは設定出来たんですが、gitを入れようとしたらエラー出ちゃったのでメモ

 

とりあえず最新のgitを持ってくる

yum でやっちゃうと古いバージョンのgitが入ると聞いたのでソースからビルド

(出力結果は省きます)

 

# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

# wget https://github.com/git/git/archive/v2.14.2.tar.gz

# tar xzvf v2.14.2.tar.gz

# cd git-2.14.2/

# make prefix=/usr/local all

 

するとmakeコマンドを実行したところで

 

===省略===
GEN git-request-pull
GEN git-stash
GEN git-submodule
GEN git-web--browse
SUBDIR perl
/usr/bin/perl Makefile.PL PREFIX='/usr/local' INSTALL_BASE='' --localedir='/usr/local/share/locale'
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3.
BEGIN failed--compilation aborted at Makefile.PL line 3.
make[1]: *** [perl.mak] Error 2
make: *** [perl/perl.mak] Error 2

 

あらら...エラーでとるやん。。。。

 

perlモジュールが足りませんで~

Makefile.PL関係でエラー出てるようですが、よくわからないのでぐぐったら解決

qiita.com

 

はぇ~perlモジュールが関係してるんだってことで

 

# yum install perl-ExtUtils-MakeMaker

 

を実行したら無事にgit導入できました!

 

 

Unityでデータ保持用のクラスを扱う時に戸惑ったお話

こんにちは!
8月と9月に会社訪問やインターンハッカソンで忙しかったころんです。

 

今回はハッカソンでUnityを使った時にちょっと戸惑ったことがあったのでメモメモ 

 

やりたかったこ

 実装したかった流れは以下の通り。

 

  1. サーバーから取ってきたクライアント情報を保持するためのDictionaryが存在し、データ保持用クラスのメンバにはアイテム保持用のリストが宣言
  2. クライアント情報をDictionaryに追加し、クライアントごとにプレハブを生成
  3. 生成したプレハブをUnity上のInspectorで値を確認、編集できるようにしたい

 

今回はデータ構造が入れ子になってごちゃっていますが、許してw

でっこれの何が問題かというと、実行すると確かにアイテムデータは格納されているんですが、InspectorにはNoneと出ちゃうんですよね。

デバッグでInspectorをいじりたいこともありますし、これでは困ります。

 

検証コード

Unityバージョン:2017.1.1f1 Personal(5.6シリーズでも確認済み)

 

コードはこちら↓

ServerManager.csはサーバーからデータを取ってくることを想定。

ClientDataにはアイテムを格納するリストが存在し、専用のクラス(ItemData)も用意

gist.github.com

gist.github.com

gist.github.com

 ServerManager.csを空のGameObjectにアタッチ。ClientData.csはGameObjectに
アタッチした後プレハブ化し、ServerManagerのclientPrefabに適用しています。

確認のためにDictionaryの中身もDebug.Logで表示。

 

これを実行すると以下のようになります

f:id:Collonville:20170927011355j:plain

f:id:Collonville:20170927011359j:plain

Debugではきちんと値が格納されていることが分かります。

しかし、InspectorではItemListの中身はどれもNoneのままです。不思議ですねぇ~

 

原因

ItemData.csに継承しているMonoBehaivourが原因です。

MonoBehaivourを継承することにより、そのクラスはGameObjectとしての挙動を示します。そのため、ItemListにはデータ構造としてのItemDataではなく、GameObjectとしてのItemDataが格納されるため、値が表示されなくNoneとして表示されます。

 

Unity上でクラスを作ると自動的にMonoBehaivourが付いてくるので、気づかないでいたって感じです。

 

docs.unity3d.com

 

kan-kikuchi.hatenablog.com

 

直し方

修正は簡単。ItemDataに継承されているMonoBehaivourを削除するだけです。

修正後のItemData.csと実行結果↓

gist.github.com

f:id:Collonville:20170927015223j:plain

これで無事にInspector上で値の確認ができました!

 

おわりに

今回は、データ構造が入れ子になっている時にMonoBehaivourが原因でInspectorで値が確認できない現象の解決を行いました。

 

本当は、ClientDataのMonoBehaivourも消せれば理想ですが、ServerManagerでGetComponentを使っているので残さないとエラーになります。

 

あんまり遭遇することがない事例だとは思いますが、お役に立てば幸いです。

 

 

 

 

TechnoTUT 新アルバム「Summery Days」

今所属している音楽サークルのTechno TUTですが、無事に今年度初のアルバムを

公開することができました。

 

 

じゃん!!

f:id:Collonville:20170722142631j:plain

 

あぁ、すごい良い。可愛くてかっこいい。

 

アルバムのテーマは「夏」で、新入生2人と既存部員で4曲集まりました。

みんなの個性がハッキリ出ててなかなかおもしろかったw

今回は任意提出でしたが、10月の技科大祭には全員が提出する予定です。

 

アルバムはBootCampでBuy NowからName your priceを0にすれば無料でDLできます!

(もちろんお金を払って購入することも)

technotut.bandcamp.com

ちなみに過去アルバムも整理してから順次公開していくのでお楽しみに。

 

自分が今回作ったazuriteのJ-Coreアレンジですが、Sound Cloudでも確認できます

soundcloud.com

 

うん、ダンスミュージック系のトラックメイク慣れてないせいか難しい。。。

あとSpireSylenth1

せっかくなので、このアルバムに関するマスタリングの記事も書こうと思います

 

最後ですがCD情報も掲載

 

「Summery Days」

Illust : AIR, Design : ayafmy, Mastering : ころんP

1. 0801 - さんまのこぼね

2. 初夏の夜 - ぽねき

3. azurite(CollonP J-Core Remix) - ころんP

4. 残花 - 武

TUT Advent Calendar19日目

この記事は、TUT Advent Calendar 2016 - Adventarの19日目の予定だった記事です。

 

どうもこんにちわ、ころんです。

本当は、今やってる研究の話とか何か新しい分野の開拓でもして記事にしようかなと思っていたのですが予想以上に研究が忙しくなりAdCに書くのも忘れてましたw

 

あと2日目で研究発表をして、卒論を出したら冬コミのアルバムの製作も予定されており、年末まで忙しい日々になります。

 

何を書こう

何を書こう、、、特に書くこともないですが体調面についてちょっと。

 

 

生活習慣には気をつけよう!

f:id:Collonville:20161220192325j:plain

 

知っている人もいますが、自分は不整脈持ってます。よくあるタイプの心室性期外収縮というものです。

www.miyake-naika.or.jp

 

原因は、高専時代の生活習慣ですね。プロコンとかでよく徹夜してたせいでいよいよ病気になりました。

生活面には支障はないですが、やっぱり心臓関係の病気は怖いです。

 

その後の大学でも某イ○○トなウ○○会社のブラックなところでバイトしたり、今は研究で昼夜逆転生活。

なぜかブラックを呼び寄せるようなことばかりですが、さすがにもう辛いですね。

特に自分はストレスを抱えても体調に反映されないんで無理しちゃう傾向があるそうです。

 

このままだとなんか突然死とかも起こりかねないので、来年度からはもっと自分の体を大事にしようかと思います。

 

 

まとめ

ほんと書くことなくてごめんなさいwwwwww

とりあえず自分が言いたいのは

 

早く寝る!
無理しない!
いいものを食べる!

 

以上!!!

パワー正規化(Power Normalization)について

そろそろ研究もまとめに入らないと理系学生が死んじゃう時期になりましたねw

 

自分は、イラストの類似検索の研究をしていますがその中でパワー正規化っという聞きなれない用語が出てきたのでまとめてみました。

 

さまざまな正規化

データの正規化っていろいろあります。

 

L1正規化
L2正規化
平均0・分散1にする正規化

いずれも機械学習においてデータの整合性を取るために大事なものです。

正規化自体、あるルールに基づいて値を変形し使いやすくするという意味だそうです(by Wikipedia)

 

パワー正規化のルール

パワー正規化も同じように下記のルールに基づいて値を変形します。

(はてブロで数式表示したいんだけどやり方がいまいちわからない)

 

f(z) = sign(z)*|z|^a

 

式を見ると元のデータの符号を保ったままべき乗するというルールになっており、パラメーターaは0~1の範囲で選びます。

 

0~1の範囲でべき乗することによって元々1より小さい値は大きく、1より大きい値は小さい値になります。

 

いつ使うの?

パワー正規化は主にスパースベクトル(ほとんど0要素なベクトル)に使うことが多いようです。

画像処理では、自然画像(いわゆる普通の画像)に比べてイラスト画像は使っている色情報が少ないため0要素(0に近い要素)が多くなってしまいます。

音声処理でも似たような単語がありましたが、意味は違うっぽいです。

 

その中で、普通だったら無視されるような値も、特徴の1つとして捉えるようにしようということをしたくてパワー正規化を行います。

自分の研究の場合、パラメーターaを調整することによって検索性能は6%ぐらい上がりました。

 

最近ではFisher Vectorを使う手法が増えてますが、その中でもパワー正規化を使うことで精度向上に貢献しています(p31,35)

www.slideshare.net

 

まとめ

 

パワー正規化について書かれている記事が全然なかったので簡単にまとめてみました。

あなたの研究もパワー正規化で精度向上!?なんてことも???

 

 

 

 

 

MATLABでlibsvmを使用するための手順

研究でSVMを使用したくなったんですけど、どうもMATLAB標準のSVMでは多クラス判定がすごい複雑そうだったのでMATLAB上でlibsvmを使用しました。

 

OS:Windows 7 Pro 64bit

MATLABバージョン:R2016a(9.0.0.341360)

 

用意するもの

libsvmをgitからそのまま落として適当なディレクトリに解凍しておきます。

libsvmは多様な言語に対応してくれてるのがうれしい。

github.com

 

 

MATLAB上での作業

MATLABに先ほどおとしてきたlibsvmのパスとコンパイルを通します。

 

1.コマンドウィンドウを開き「mex -setup」を入力します。

2.「cd('C:\...\libsvm-master\matlab\')」cdコマンドで落としてたlibsvmMATLAB

 フォルダの中に入ります。

3.「make」でコンパイルします。

4.成功したら「libsvmread.mexw64、libsvmwrite.mexw64、svmpredict.mexw64、

 svmtrain.mexw64」の4つのMATLABプラグインが生成されます。

5.最後にcdで入った同じパスを「addpath('C:\...\libsvm-master\matlab\)」で

 MATLAB上にパスを通して終了です。

 

最後にテストコードを書きますが、それはまた後で

 

 

 

「Unity5 + PS Move + PS Eye」 ペアリングから実行までのまとめ

こんにちわ、今抱えてるプロジェクトが3月末までと言われて焦り気味のころんです。

 

会社の案件でUnityとPS Move、PS Eyeを使ったプロジェクトを進めているのですが、ペアリングから実行するまでかなり手間がかかったので自分のまとめとして記事にしてます。

自分の開発環境はたぶんほとんど最新バージョンで組み合わせているので、このやり方でやればだいたいはうまくいくと思います()

開発環境

以下が今回実行した環境になります。

  • OS : Win10 Home 64bit
  • RAM : 8GB
  • グラボ : GeForceGTX 760
  • Unity5.3.3 64bit

PS Moveは2010年と2012年モデルの2つがあるそうですが、今回は2012年モデルのほうを使います。

 

Amazon.co.jp: PlayStationMove モーションコントローラ: ゲーム

Amazon.co.jp: PlayStationEye: ゲーム

PS Eyeの設定

PS EyeはPS Moveの空間位置推定用の使います。端子がUSBなので一般的なWebカメラとしてすることも可能です。

ですが、使用するためのドライバをCode Laboratorieから有料(2.99$)で購入する必要があります。Vペリカでの支払いもOKでした。

CL - Downloads - Code Laboratories

購入後、指定したメールアドレス宛にDL用のリンクを送られてきますので、落としてインストールします。インストーラー起動後はポンポンっと「Next」を押します。

 

f:id:Collonville:20160307014711p:plain

 

インストール後、USB端子をパソコンに挿してPS Eyeの設定は完了です。

f:id:Collonville:20160307014917j:plain

 

ちなみに、無料で使えるドライバが一応あるのですが、確実に動きたかったので今回はパスします。使えた方がいれば教えてください

www.emuline.org

 PS Moveの設定

ここからが一番戸惑いました。おそらく、Unity + PS Moveで検索された方は以下のサイトを巡っていると思います。

 

ウダサンコウボウ: PlayStationMoveをPCかつネットワーク経由で使えるPSMoveServer

UnityでPSMoveを使うときの注意点 - Cross Road

Oculus用操作デバイスの検討(PSMove) - Cross Road

Copenhagen Game Collective – an experimental games collective - Unimove

PS Move API (thp.io)

以上のサイトに乗っているやり方を試しましたが、全部だめでしたね。理由として

  • iPiを起動してPS Moveを接続してもそれ以降進まない!
  • Motion In JoyでペアリングはできるけどBluetoothアダプタが内部で統一可されてUnityで認識しない!!
  • Motion In Joyでペアリングする前にBIOSでドライバ署名を無効にしないといけない!!
  • PS Move APIにpsmovepair.exeがない!!(CMakeがあるから自分でやれってことかな)
  • なんとかUnityに入れてもエラーエラーエラーエラー
  • そもそもPS MoveBluetooth一覧に表示されない

 などなど、いろんな要員が絡んで正直ダメかと思いましたけどできました。

 

動作するまでの手順は以下のようになります。

  1. psmovepair.exeとUSBケーブルでつなげたPS Moveを使ってとりあず仮認識
  2. psmove-pair-win.exeを使ってbluetoothドライバの認識
  3. magnetometer_calibration.exeでPS Moveキャリブレーション
  4. Unityで実行

で、これらのexeファイルをここから落としてきます。

もう~感謝感謝感謝!!!って感じ

Unreal Engineと書いてありますが、必要なexeファイルは関係ないのでまるごと落としてきたほうが良いです。

 

USBケーブル(Mini Type-B)でPCとPS Moveを接続した状態でpsmovepair.exeを起動します。すると以下のような画面が出ます

f:id:Collonville:20160307022555p:plain

説明通りにPS Moveの真ん中にあるPSボタン(PSマークが描かれたボタン)を押すと、SONYと書かれたマークの下にある赤色LEDが点滅します。

しばらくすると消えるので再度PSボタンを押してこれを5,6回繰り返します。

 

次に、psmove-pair-win.exeを起動します。

ここでBluetoothのペアリングをしますが、以下のように

!!!! Successfully connected device xx:xx:xx:xx:xx:xx !!!!

が出てくるまで、根気よくPSボタンを押してください(10秒押し続けると電源ごと消えるので点滅が消えたころに)

もともとWindows環境でのペアリングはうまくいくときと行かないことが多いので。

f:id:Collonville:20160307023429p:plain

ペアリングが完了するとPS MoveのLEDが点灯し続けます。

 

次にキャリブレーションを行います。

magnetometer_calibration.exeを起動すると以下のように表示されて、PS Moveの先端が光ります。

f:id:Collonville:20160307024111p:plain

f:id:Collonville:20160307024417j:plain

この状態でPS Moveを様々な方向に向けます。おそらく磁気キャリブレーションを行っているためかと。すると画面上の数値をどんどん増えていくのでどこへ向けても数字が変わらないってところで、PS Moveの中央上にある縦長のボタン(Moveボタン)を押します。

ちなみに自分は287.0が限界でした。

 

f:id:Collonville:20160307024752p:plain

次に、PS Moveを垂直に立てた状態にして、Moveボタンが自分の正面に来るように持っていきます。すると自動的に解析が始まるので、そのままの体勢を維持します。終わると自動的にプログラムを終了します。

解析が始まらない場合は、場所を変えたりしてみてください。

Unityでの実行

ここまでやればほとんど終わりです。PS Move APIをUnity5で動かせるようにしたリポジトリがあるのでそれを落としてきます。

このプロジェクトファイルをそのままUnityで開いて実行します。

 

f:id:Collonville:20160307025622p:plain

 「Play」ボタンを押すと

 

f:id:Collonville:20160307030223p:plain

するとPS Moveで動かした姿勢がモデルに反映されます。

カメラが見つかりませんなどのエラーが出た場合はカメラのUSBを1回抜いたり、Unityごと再起動すると直ります。

 

面倒ですが、パソコンを再起動するたびにこれらのことをしないといけないそうです。

 

まとめ

以上がUnityとPS Move、PS Eyeを使った環境構築方法です。

これ以外で簡単な方法があれば教えてくださいw

 

PS Moveを使ってみた感想としては、かなりいい精度トラッキングしてくれます。姿勢検知も問題なく動作しますし、Wii Remoteより断然いいです。

 

ある程度予想はしていましたけど、ここまでほぼ半日かかりました。

これでやっとプロジェクトを進められます!!