Xcodeのよく分からないエラー【解決】
ずいぶん前からXcodeのよく分からないエラーに悩まされていました.
vectorを使ったらエラーが出て,その後どれだけコードを修正してもエラーが出続けるといったようなやつです.
今回も似たような意味不明のエラーが出てきました.配列の要素数をコードで変更したのに,ビルドして実行してもプログラムに反映されていませんでした.
で,似たようなことEclipseでもあったなーとなんとなく思い出して,あの時どうやって解決したっけ..あれ,プロジェクトをクリーンしたらいいんじゃない?と思って調べてみたらやっぱそれで行けそうでした.
Xcodeのキャッシュをクリアしたかった | M4C
上のリンク先を参考に,XcodeのメニューバーからProduct -> Cleanをしてやると,コードの変更がきちんと反映されていました.
しばらく放置してた問題だったので解決してよかったー
気になる2015/2/6-
和製 セグウェイ【Segway】オムニライド - YouTube
ホイールがオムニホイールです.
空間に線を描くように、自在に3Dプリント。ヒントはクモの糸 : ギズモード・ジャパン
補強の線がもっと細くなって違和感がなく,空中にもサポート材なしで自由自在に描けるようになったとすれば,3Dプリンタでもう何でも作れそうですね.
マサチューセッツ工科大が開発、自動開閉チャック : ギズモード・ジャパン
チャック開閉状態のセンシングというアイデアを持っていたので,先を越されたかという感じです.まあ思いついたのはこの記事が出る前の週くらいなんですが.
音のビームの経路を可視化するシステム - DigInfo TV
けっこう前の記事ですが,超音波で電力供給をするというものです.こんな使い方もできるのかー.
openFrameworksでlibSVM
openFrameworks上でlibSVMを実装してみました.
目指すところとしては,あらかじめ学習したデータセットでモデルを作っておき,リアルタイムに入ってくるデータセットのクラスを判別するという感じです.
この方の記事を参考にさせて頂きました.というかほとんどそのままです.
なんだか雲行きの怪しい雑記帖 週アレ(11) C++で始めるLibSVM
addonでofxSVMというのもあったんですが,今回の用途には適していないと感じたので普通のlibSVMのソースを落としてきました.
プロジェクトのsrcフォルダにsvm.hとsvm.cppを追加します.
ヘッダファイルはこんな感じ
- ofApp.h - #pragma once #include "ofMain.h" #include "svm.h" class node{ public: node(int label, double x, double y){ this->x = x; this->y = y; this->label =label; } int label; double x, y; }; class ofApp : public ofBaseApp{ public: void setup(); void update(); void draw(); void keyPressed(int key); void keyReleased(int key); void mouseMoved(int x, int y); void mouseDragged(int x, int y, int button); void mousePressed(int x, int y, int button); void mouseReleased(int x, int y, int button); void windowResized(int w, int h); void dragEvent(ofDragInfo dragInfo); void gotMessage(ofMessage msg); vector<node> samples; int sampleDataNum = 500; };
cppファイルは抜粋するとこんな感じ
#include "ofApp.h" //-------------------------------------------------------------- void ofApp::setup(){ ofSetWindowShape(600, 400); int class1label = 1; int class2label = -1; for (int i=0; i < sampleDataNum; i++) { node n(class1label, ofRandom(100), ofRandom(60)); samples.push_back(n); } for (int i=0; i < sampleDataNum; i++) { node n(class2label, ofRandom(100), ofRandom(60)+40); samples.push_back(n); } } //-------------------------------------------------------------- void ofApp::draw(){ float mapX = ofGetWidth()/100; float mapY = ofGetHeight()/100; ofSetColor(255, 0, 0); for (int i=0; i < sampleDataNum; i++) { ofCircle(samples[i].x * mapX, ofGetHeight() - samples[i].y * mapY, 5); } ofSetColor(0, 0, 255); for (int i=sampleDataNum; i < sampleDataNum+sampleDataNum; i++) { ofCircle(samples[i].x * mapX, ofGetHeight() - samples[i].y * mapY, 5); } } //-------------------------------------------------------------- void ofApp::mousePressed(int x, int y, int button){ svm_problem prob; svm_node* prob_vec; // size of training data prob.l = samples.size(); // label of each training data prob.y = new double[prob.l]; for (int i=0; i<samples.size(); ++i) { prob.y[i] = samples[i].label; } // vector of each training data prob_vec = new svm_node[prob.l * (2+1)]; prob.x = new svm_node*[prob.l]; for (int i=0; i < samples.size(); ++i) { prob.x[i] = prob_vec+i*3; prob.x[i][0].index = 1; prob.x[i][0].value = samples[i].x; prob.x[i][1].index = 2; prob.x[i][1].value = samples[i].y; prob.x[i][2].index = -1; } // parameter svm_parameter param; param.svm_type = C_SVC; param.kernel_type = LINEAR; param.C = 8096; param.gamma = 0.1; param.coef0 = 0; param.cache_size = 100; param.eps = 1e-3; param.shrinking = 1; param.probability = 0; param.degree = 3; param.nu = 0.5; param.p = 0.1; param.nr_weight = 0; param.weight_label = NULL; param.weight = NULL; // learning! cout << "Ready to train..." << endl; svm_model* model = svm_train(&prob, ¶m); cout << "Finished..." << endl; int correct_count = 0, wrong_count = 0; cout << "predict training samples..." << endl; for (int i=0; i < samples.size(); i++) { svm_node test[3]; test[0].index = 1; test[0].value = samples[i].x; test[1].index = 2; test[1].value = samples[i].y; test[2].index = -1; // predict by libsvm const auto predict_label = static_cast<int>(svm_predict(model, test)); // count result if (predict_label == samples[i].label) correct_count++; else wrong_count++; } cout << "done" << endl; cout << "correct: " << correct_count << endl; cout << "wrong: " << wrong_count << endl; cout << "accuracy: " << 100 * correct_count/(correct_count+wrong_count) << "%" << endl; }
とりあえず動作確認したいだけなのでこんなもので.
今回はランダムでサンプルデータを作ってるんですが,ある一回のサンプルデータの分布がこんな感じでした.
ちなみにこのときのaccuracyは84%でした.
SVMはパラメータ調整が非常に大事とのことなので,そこら辺もちゃんと実装していかなければ.
けど今回はこのへんで.
音響ルミネサンス
音響ルミネサンスという言葉を最近知りました.
これは,液体に強い超音波を当てると,液体中の気泡が急激に高温状態になり,光を発する現象.だそうです.
音ルミネセンス(オトルミネセンス)とは - コトバンク
これを発光タイミングや発光する場所を自由に複数制御できたら面白いんじゃないかと思いました.
sono luminescenceという単語で画像検索すると,
こんなのが出てきてすげーとなりますが,ちょっと調べてみると,液体全体がぼんやり光っているように見える程度だとかいう情報も出てきます.
実際に動画だと
Sonoluminescence: Mystery and Delight - YouTube
こんな感じで微妙
こっちの動画はまだ分かりやすいけど多分拡大したやつな気がする.
sonoluminescence - YouTube
見る限り発光するタイミングを制御するのは難しそうな感じもする.
こういうのは化学系の人なら知ってるんだろうか.
ちょっと見てみたいしやってみたいなー
気になる2015/2/2-
忙しさを表すライトで同僚と良い関係を : ギズモード・ジャパン
Granutというところが開発したLuxaforというデバイス.現在Kickstarterで資金集め中みたいです.自分のPCに小さなライトを付けて,その点灯の色で今急がしいかどうかを周囲に知らせるというもの.シンプルなアイデアですが,オフィスや研究室など共有の作業空間では求められているものだと思います.上司はこれを見ながら仕事を振り分けるとかもできるかも.
3Dプリント義手で、少年がギターを弾けるようになった - TechCrunch
3D Gluckというところのメーカーたちが作った,3Dプリントでできた義手です.通常の義手の値段は35万以上はする見たいですが(前腕義手 | 義肢(義指・義手・義足)の専門メーカー 佐藤技研<-このページ参照),3Dプリントだと50ドル(2015/2/3では約5900円)以下で作れるようです.強度や人体との相性とかを考えるとさすがに不安要素がありますが,ギターを弾く時など特定の場面に特化した義手を安く作れるというのは,非常にいい話だと思います.
気になる2015/1/26-
舌から音を聞く? 点字の代わりになるかもしれないデバイス : ギズモード・ジャパン
耳の不自由な人のためのデバイスで,コロラド州立大学の研究チームによるものらしいです.
マイクで取得した環境音を電気信号に変換し,それに応じて舌に微弱な電気信号を送ると,練習は必要だが脳が音声として理解できるとのこと.舌への電気信号で音声が取得できるんですね..これは知らなかった.
WiFiでギターとPC・アンプを直結するアダプタJack出資募集中、低遅延で非圧縮伝送 - Engadget Japanese
スコットランドのスタートアップIngenious AudioがKickstarterで出資を募集している,Wifiでギターとアンプ/PCを直結するアダプタです.無線で信号を飛ばすという物があるのは知っていましたが,wifiを使った物は今までにないとのこと.従来のものより音質がよく,低遅延なのだとか.自分もギターやるんですが,ワイヤレスは使ったことが無いので,従来のものがどの程度の音質や遅延があるかとか分からないです.が.こういったところにもチャンスというか改善の余地があったんだなーと思いました.
気になる2015/1/23-
速報:マイクロソフト、メガネ型ホログラムコンピュータHoloLens発表。視界に3D映像を重ねて表示 - Engadget Japanese
マイクロソフトが発表した,司会に3Dのオブジェクトを重ねて表示できるMicrosoft HoloLensです.環境側にマーカを設置したり,自身にセンサを装着する必要なく,オブジェクトを表示したり,ジェスチャを取得できるとのこと.デモビデオにもあるけど,設計とかにはとても便利そうです.あとエンタメですね.
新しい「ドライ」心電センサーが、ウェアラブル医療機器への道を開く - TechCrunch
ノースカロライナ大学の研究者が開発したドライ型の心電センサです.従来のものはセンサと皮膚の間にジェルを塗らないといけなかったが,これはそういったものが無しでいけるようです.ドライ型のセンサは今もある気がしましたが,それよりも性能が良いんでしょうか.記事ではそう書いていますが.