ホーム

ka.taoka.info

ダイビングとか結婚式準備とか機材購入とか

また随分と久々になってしまった。
最近はダイビング始めてCカード取ったり、結婚式準備で忙しくしています。

ダイビングとか色々高すぎてヤバい。それしかできなくなる。
ショップ指定の機材じゃないと保険効かないとかヤバい。これって普通??楽天で安いダイブコンピューター買いたい。。

結婚式についても何も知らなすぎてびびった。なんか式次第とか内装とか、式までの手順が色々決まってるわりに定石が無くて困る。

そんな中、今更ながらまともなAudioIFが必要な感が否めないので、買うことにした。
モバイルな開発環境にしたいので、どうせなら軽いMIDIコンもあるといいと思って、以下2択で迷った。
1.TRAKTOR AUDIO 2nanoKONTROL2とか、小さいMIDIコン
2.DJ Console Mk4
結局、USB節約して2にしてみた。
最近、自作ソフトにOSCを取り入れることができるようになったので、MIDI-OSCブリッジソフトを使えば自作ソフトもホイールでぐるぐる動かせる!かもしれない。

App Inventor for Androidがヤバい

Androidもいじってみとかないとな、と思って、色々開発環境をインストールした。
調べてみると、クロスプラットフォームな開発環境が多くてびっくり。Linuxじゃ無理っぽいのはUnityぐらいだった。
開発環境はクロスプラットフォームで、WindowsもMacもLinuxも動くものが多いんだけど、対象デバイスをクロスプラットフォーム=iPhoneでもAndroidでもソースレベルでは互換性があるようにしようとすると、選択肢は少ない。あたりまえだけど。
結局、Titaniumなんかは両方(開発環境がクロスプラットフォーム&対象OSがクロスプラットフォーム)を満たしているっぽいんだけど、まだ手を付けていない。
なぜかというと、最初に手を付けたApp Inventorが楽しいから。

App Inventorは、もともとGoogle Labsで公開されていた、Visual Programming環境で、今はGoogle Labsの閉鎖に伴ってMITに移っている。まあ画面キャプチャとかはググれば出てくる。
Visual programmingというとPdやMAXやScilabのScicosやMATLABのSimulinkなど、先で繋いでくものが思いつく。いや思いつく人少ないか。ちなみにオープンソースを先に挙げてるのはわざとね。
App Inventorは、Visualといっても、ソースコードそのまんま箱に入れただけみたいな構造。先に挙げた配線系のやつらはプログラミングいらず!とか言って宣伝できるけど、App Inventorはプログラミングじゃん!というかんじ。だと思った。
ぶっちゃけ配線するスタイルはコード書くのが普通な人には馴染めないところがあると思うんだけど、その点逆にわかりやすかった。

わかりやすすぎて、音声認識でTweetしてみようと思って、実機テストするまで1時間ぐらいだった気がする。
ログインボタンでTwitterコンポーネントを用いたログイン、音声認識ボタンで音声認識コンポーネントを用いて音声認識、あとは確定ボタンとTweetボタンをちょこっと書くだけ。

GPSとかのセンサ情報を得たり、SMSでメッセージを送ったりもコンポーネントが用意されていて一瞬でできる。ヤバい。
とくに携帯アプリとかって、簡単な構造でも便利な機能を思いついたりする。そんなときにさっと作れるのが素晴らしい。しかも、データはすべてクラウドにあるので、一度環境を作ってしまえば、PCもOSも選ばない。Windowsデスクトップでコード書いてて急に出かけても、Ubuntuノートで続きが書ける。僕のような引篭りにはあまり関係ないが、よく出かける人は便利だと思う。

かといってけっこう凝ったこともできて、例えばFusion tablesというGoogleが提供するデータベースサービスにクエリを投げて、クラウドなデータベースを作れる。上手く使えばサーバーにモバイルのセンサ情報を送って処理したりできる。ぽい。

というわけで、プログラムかじったことある人は使ってみると良いと思います。
App Inventorと関係ないけど、VirtualBoxにx86用Androidをインストールして、ホストオンリーアダプタ経由でデバッグすると、糞重いAndroidエミュレータとオサラバできてより快適です。このデバッグ方法もおすすめ。

XtionによるSkeleton Trackingの弱点

Xtionによる、というかOpenNIによるのかな?
ライブでの利用を想定して、プロジェクタ画面との位置関係の算出をしようとゴニョゴニョしていたけど、どうもうまくいかない。
結論から言うと、骨格認識の精度が悪い。KinectとかXtionとかは、Motion detectするために、Realtime性重視のアルゴリズムになっているらしく、Frame rateは速いが、その分精度はよくないらしい。
特に後ろ姿の認識や、壁の近くでの認識率が非常に良くない。手や頭の座標精度というよりは、手や頭が在るかどうかの認識が出来なかったり、柱を誤認識したりする。
まあ、もともとゲームなどの用途だし、しょうがないか。。3D点群の座標自体の精度は思ったよりよさそうなのに、残念。
横向きに撮るなどして精度改善を狙おう。

Kinect互換デバイスXtion Proで遊んでる

Xtionで色々遊んでいます。
とりあえず、ジェスチャー認識で色々やってみてたりする人がたくさん居る中で、新しくて使えそうなことをやりたかったので、ちょっと数学を使う分野に手を出してみている。
やりたい事は、プロジェクターとのカップリング。プロジェクターで映像が映せるとこに持って行って、適当に設置して、ちょっとキャリブレーションするだけでスクリーンの位置を認識して、なんかスクリーンの前に立つ人とのインタラクションする。
Xtionでとった3次元空間から平面っぽいところを認識して、人がプロジェクターの映像の四隅を指さしたりすることで、プロジェクター画面の座標と3次元座標を対応付ける予定。

いつか書いた開発環境についてはVisual Studio on WindowsとMonoDevelop on Linuxを横断して、Dropboxでプロジェクトファイルごと同期しながら書いてる。特に安物ノートPCのUbuntu上でこれほど簡単に空間認識できるのはヤバい。
後はMacの動作確認をしたい所。

Kinect互換デバイス購入して開発環境作った

Kinect hackっぽいことをしてみようと思っています。
数年前に流行りましたが、今ではもはやHackでも何でもなく、Microsoftから公式SDKも公開されている。

Hardware

とりあえずKinect sensorを買っても良かったんですが、互換デバイスであるXtionを買うことにしてみた。
本家Kinectとの違いは以下の通り。機能は多少犠牲になるが、モバイル性能重視でXtionにした。

  • バスパワー駆動。USBケーブル1本で接続完了!
  • 小さい。Kinectの半分ぐらいに見える。
  • 普通のカメラが無く、RGB画像は撮れない。Depth画像のみ。
  • チルトモーターが無い。本家は首がモーターで上下に傾くらしい。

Software library

とりあえずOpenNIをいじっている。本家KinectだとKinect SDKがいいかもしれない。
OpenNIは骨格認識の際に、上半身だけとかでも認識できるらしい。ライセンス的にもOpenNIの方がよさそう。何よりLinux対応の良さが重要。

Development Environment

開発に使うOSと開発環境(開発言語)は迷うところ。
KinectやXtionを使う人はメディアアート界隈の人が多くて、openFrameworksなどからプラグイン経由で使ってる人とかが多いのかな?
MaxとかjitterとかopenFrameworksとか、そのへんの仕組みは面白そうだし、cross platformなのも魅力だが、変化が激しいし、コードを書くのに慣れた人には逆にとっつきにくい。

で、結局いつものパターンで開発言語はC#を使いたい。慣れてるから。現在、LinuxなMobile PCとWindowsなDesktopを使っているので、両方に対応したい。てことでMonoDevelopってことになる。
Xtionは情報が少なくて、特にMonoで動かす事例があんまり無い。公式にもLinuxでの対応言語にC#は無い。
最悪C++でいいや!と思って買っちゃったが、WindowsでビルドできたプロジェクトをLinuxでも普通にビルド&実行できた。
(落としてきたまんまのサンプルのバイナリは動かなかったが、理由は追っていない。)

新年のご挨拶と婚約報告

あけましておめでとうございます。今年もよろしくお願いします。
昨年も色々なことがありました。特に地震には敏感になって、未だに時々不安になります。毎日を大事にしたいです。

知ってる人は知ってるかと思いますが、昨年の暮れに2年間余り同棲していた彼女と婚約しました。
しっかりしなきゃなぁ。

仕事は円高もあってイマイチではありますが慣れてきたし、趣味も私生活も充実させていきたいです。

Gtk#でWorker threadからのGUI更新のInvokeがうまくいかない

最近悩まされたBugのメモ。

最近メインで使うのがLinuxなので、Cross-platformなGUI ToolkitとしてGtk#を使っている。MonoDevelopにGUIデザイナが統合されていて、Linuxでコード書くときには非常に便利。
ところが、最近悩まされていたメモリリークの原因がどうやらGUI周りだったようで、僕の勉強不足なのか、ToolkitのBugなのかはよくわからん。内容はよくあるWorker threadからの定期的なGUI更新。Windows FormsでいうところのBeginInvokeする場面。プログレスバー表示とかの時のアレね。
Gtk#の場合にどうやってやるかというと、Mono Projectのサイト内に書いてある通りにGtk.Application.Invokeしたり、Gtk.ThreadNotify使ったりすればよい。はずだった。。

気づいた過程としては、なぜかGC.Collect()してるのにメモリ使用量がどんどん増えていて、CLR Profilerで見てみるとManagedメモリは正常。パフォーマンスモニタでUnmanagedなメモリがリークしてる。Unmanagedな処理は極力避けてるぞ?と思って思い当たったのがGtk#でした。

しかしこれからGUI Toolkitどうしよう。Cross-platformでC#から呼べるのってQtとかが思いつくけど、QtのC#ラッパーがUbuntu11.10のリポジトリには見つからないぞ?

今回、CLR Profilerとかパフォーマンスモニタとかで、メモリの中身を調査する方法がかなり理解できたので、まあ勉強にはなった。

MSI U270をUbuntu11.10にアップデート

  • 2011/10/15 21:41
  • PC

以前買ってUbuntu化して常用してたMSI U270のOSをUbuntu11.10にアップデートした。

放置しとけばいいかと思ったけど、途中色々質問されて意外とめんどくさかった。
クラシックなGNOMEのUIがなくなるらしく、設定消していい?とか。

カーネルも新しくなり、唯一認識できてなかったSDカードリーダーがサクッと動いてニヤニヤした。
以前Ubuntu化した時から、もうすぐ10月だし次のリリースで認識するかもと期待していただけに嬉しい。便利になった。

その他、特に問題は発生してない。

.NET FrameworkでLOH断片化によるメモリリークもどき

ちょっと前に、画像とかをManagedな配列で持つと、処理は遅いけどGarbage Collectionしてくれるし良いかも的な事を書いたけど、どうやら遅いだけでは無いらしい。

Garbage Collectionがメモリの配置をゴニョゴニョ弄ってくれるおかげでメモリリークをある程度気にしなくて良いかと思いきや、やはり巨大なデータをゴニョゴニョするのは時間がかかるらしく、C#(というかCLR)では85kbよりでかい配列などのメモリはLarge Object Heap (LOH)に入れて、再配置はしないようになってるそうです。
http://msdn.microsoft.com/ja-jp/magazine/cc534993.aspx

てことで、画像とかGC任せで管理するのは危険とおもはれる。
アプリを開いてから閉じるまでの枚数が限られてたりする場合はいいけど、そうじゃない場合は断片化してメモリ食っちゃう可能性がありそう。
まあ考えてみれば当然ですよね。世の中の画処理ライブラリもそうなってるし。。
でも僕のような素人のために画処理の本の最初に書いといて欲しい。

結局Marshal使ってunmanageで頑張るしか無いらしい。
msec単位で時間かかるとしても、GCにLOHメモリの再配置を指示できればいいのに。。。

MSI U270を買ってUbuntu 11.04 をインストール

ノートパソコンが壊れたので、新しくMSIのU270を買った。
公式スペック
AMDのFusion APUでグラフィックが強い。USB3.0あり。でもなぜかこの機種はバッテリーが激弱。基本ACでの使用になると思う。
メインはLinuxで使いたかったので、早速入れてみた。

HDDは元からCドライブにWindows7が入っていて、空のDドライブにデータを入れて欲しそうな名前が付いているので、Dドライブをパーティションごと削除してUbuntu入れることにした。

まず忘れちゃいけないのがRestore Disk作り。Windowsのデスクトップに置いてあるMSI BurnRecoveryを実行して、リカバリディスクを作る。詳細オプション的なところでISOイメージとしても吐き出せる。ディスクドライブが無いんだから最初からISOにして欲しい。。
リカバリディスク作成が終わったら、さらに念の為ドライブ全体をClonezillaでバックアップしておいた。

UbuntuインストールはUSBメモリから難なく終了。

OSインストール後はSuperOSリポジトリをインストールして、主要なアプリを入れて、Firefoxにプラグイン入れて、ひと通りの設定をしておく。
なぜか、デフォルトという名前のキーリングが作成されてしまうので、「パスワードと暗号鍵」からデフォルトを削除して、loginをデフォルトに設定する。
それから、無線LANの接続設定で、すべてのユーザーに使用可能にするチェックをつける。
これらをしないと、ログオンの度にデフォルトのキーリングのロックを解除しなきゃいけない。めんどい。

内蔵のWebカメラが認識できないという書き込みがどっかにあったが、Fnキー+F6でWebカメラ有効にすれば、普通にSkypeで使える。
SDカードリーダーが未だに認識出来ていない。その他は問題なし。

もちろんWindowsの方もちゃんと生きてる。使わないけど。
OS無しモデルがあればよかったのにな。。

1 2 3 4 5

ホーム

カレンダー
« 2018 年 1月 »
S M T W T F S
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
最近の反応
メタ情報

ページの上部に戻る