Node.js お勉強
いまさらですがNode.jsについての覚え書き
ここに書くよりもなんかgithubでマークダウン記法で書いた方が楽かなぁとか思ってそっちに今回は上げました。
https://github.com/mintsu/node_study
Nodeについて覚書
https://github.com/mintsu/node_study/blob/master/about_node.md
Node.jsを触ってみる
https://github.com/mintsu/node_study/blob/master/node_sample.md
XSSとか対策してないコードなので気をつけてくださいね!
node.js, php, perl, go, c 速度比較 メモ
node.js(v8) , php ,perl, go , c でどのくらい計算速度が違うのかちょっと気になったのでメモ。
for文で1~100000000を足していく処理を行ってみる。
$ time node -e 'var sum=0; for(var i=0; i<100000000; i++){ sum+=i;} console.log(sum);' 4999999950000000 real 0m0.904s user 0m0.900s sys 0m0.023s
$ time php -r '$sum=0; for($i=0; $i<100000000; $i++){ $sum+=$i;} echo $sum."\n";' 4999999950000000 real 0m6.361s user 0m6.352s sys 0m0.007s
$ time perl -e 'my $sum=0; for(my $i=0; $i<100000000; $i++){$sum+=$i;} print "$sum\n"' 4999999950000000 real 0m11.372s user 0m11.363s sys 0m0.005s
$ cat test.go package main import("fmt") func main() { sum := 0 for i:=0; i<100000000; i++ { sum += i } fmt.Println(sum); } $ time ./test 4999999950000000 real 0m0.085s user 0m0.082s sys 0m0.005s
$ cat test.c #include <stdio.h> int main() { long long int i, sum=0; for(i=0; i<100000000; i++){ sum+=i; } printf("%ld \n", sum); return 0; } $ time ./test_c_O0.out 4999999950000000 real 0m0.338s user 0m0.336s sys 0m0.001s $ time ./test_c_O1.out 4999999950000000 real 0m0.002s user 0m0.000s sys 0m0.002s $ time ./test_c_O2.out 4999999950000000 real 0m0.002s user 0m0.000s sys 0m0.002s $ time ./test_c_O3.out 4999999950000000 real 0m0.002s user 0m0.000s sys 0m0.002s
結果
node.js(v0.10.5) : 0.904s
php(v5.3.3) : 6.361s
perl(v5.10.1) : 11.372s
go(v1.2.2) : 0.085s
c(O0)(gcc 4.4.7) :0.338s
c(O1)(gcc 4.4.7) :0.002s
c(O2)(gcc 4.4.7) :0.002s
c(O3)(gcc 4.4.7) :0.002s
node.jsが結構早い。
以外だったのがphpよりperlが遅いこと。しかもだいぶ遅いです。
goはコンパイルが必要な言語だけあってやはりそれなりに早い。Cの最適化なし(O0)より早い結果に。
Cで最適化すると圧倒的な早さ。 最適化オプションをつけると内部的な処理はぜんぜん違うものになってたりすることがあるので、この結果を信用していいかは微妙ですが。
そのうちもう少し複雑な処理で比較してみたいです。
gitのプロジェクトをEclipseでインポートする
githubやbitbucketなどのリポジトリをEclipseでインポートするときのメモ
鍵の作成
putty-genなどで鍵は作っておきます。
githubやbitbucketのほうに公開鍵を登録しておいてください。
鍵の作成方法は
putty-genというソフトを使って
SSH-2RSAを選択して「Generate」をクリックするだけでできます。
「publick key」と「private key」を保存しておきましょう
Eclipseに鍵を登録
Eclipseのメニューから
Preferences->General->Network Connections->SSH2
Add privateKeyをクリックして作成した秘密鍵を登録します。
プロジェクトのインポート
メニューから
File->import->Git->Projects from Git
を選びます
Nextをクリック
↓
「URI」を選択してNextをクリック
↓
URIのところにbitbucketやgithubのcloneURLを入れると
Host:、Repository path:は自動で入るのでその状態で
Nextをクリック
↓
ブランチを選んでNextをクリック
↓
ここの選択したディレクトリはあとで使うので覚えておくなりメモしておくなりしておいてください。
Nextをクリック
↓
今回はandroidのプロジェクトをインポートするので
「Use the New Project wizard」を選択してFinishをクリック
↓
プロジェクト作成のウィザードが出てくるので
Android->Android Project from Existing Code
を選択してNextをクリック
↓
Root Directoryに先ほどメモしたディレクトリを選択します。
NewProjectNameは編集できるので任意のプロジェクトネームに変えておきます。
Copy projects into workspace にチェックを入れてFinishをクリック
これでインポートは完了です。
cloneだけでなくそのままEclipseからコミットなどの操作もできるようにするために設定を行います
package explorerからプロジェクトを右クリックして
Team->Share Project
をクリック
プロジェクトがデフォルトで選択されていると思うのでそのまま「Finish」をクリック
この後
プロジェクトを右クリックして
Teamを選択するとCommitやpullなどgitの操作ができるようになっていると思います。
追記
このままだと pull の操作をした時にエラーが出たのでその時の対処を書いておきます。
プロジェクトを右クリックして
Team->Pullを選択すると次のようなエラーが出る場合があります
対処
git Repositories のperspectiveを開きます
対象のリポジトリを右クリックして
Propertiesをクリックすると下のような画面が出てきます
Add Entryをクリック
して次の値を入力して保存します
Key: branch.master.remote Value: origin
Key: branch.master.merge Value: refs/heads/master
Key: branch.master.rebase Value: true
これでpull等ができるようになるとお思います
WebRecommend公開
WebRecommend
というサービスをこっそり公開してみました。
どんなサービスかというと
おすすめの記事を見つけ出して、Twitterタイムラインに書き込む
といったものです。
実際これを作ったのは大学3年くらいの時につくってからもう2年になるのですが。
最初はPHPの練習と自分用にだけ使っていました。 以前からこれを見た友人に公開して欲しいとか言われていたので、2年ぶりくらいにプログラムに手を入れて一応公開いたしました。
サーバーに負荷のかかる処理をやっているため、とりあえず今は登録できる人数に制限をかけています。
需要がありそうであれば、もうちょっと登録出来る人数とか増やすかもしれません。 今のところあんまり需要なさそうなので、極少人数にしてます。
もし登録してみたいとかいう方いましたら、コメントにでも書き込んでいってくださいー
Mac OS X Snow Leopard バージョン10.6 で バンドルアプリケーションがインストールできない
Mac Book Pro (early 2011) にSnow Leopardをクリーンインストールしたときにでたエラーのメモ。
概要
付属のアプリケーションをDVDをセットし、
「install Bundled Software」をダブルクリックし、手順通りインストールを進めていくと、
「インストールに失敗しました」
と表示されてインストールできない。
解決策
http://support.apple.com/kb/DL1512?viewlocale=ja_JP
からソフトをダウンロードし、
ソフトウェアインストーラーのアップデートをする。
メモ
一部のAppleソフトウェアがインストールできない問題が解決されると書いてあるので、バンドルソフトウェアだけでなく、ほかのソフトでも関係あるかも。
クリーンインストールしたときはこのソフトをアップデートしといたほうがよさそう。
セッションできるサイトを作ってみた
ブラウザ上でセッションできるサイトを作ってみました。
MIDI.js *リンク先で音がなります
少し前にMIDI.jsっというのを見つけて面白いなと思っていたのですが、
これって WEB MIDI APIと組み合わせたら演奏できそうだし面白そう!
と思って実験的に作ってみました。
ついでにいろんな人とセッションできたらもっと面白いよね!
ってこでWebSocketも使って実験的に作ってみました。
実際にセッションしてもらったときの動画もとってみました。
いくらWebSocketがリアルタイムに向いてるといえ、さすがにセッションするのは難しいかなーと思っていたのですが、安定で高速なネット回線があれば可能っぽいですね。
作ったサイトはこちら。
WebDuetto
Web MIDI APIを使ってみる
Web MIDI APIとは
Web MIDI APIとは、ブラウザとMIDI機器をつなぐものです。
HTML5の一部として、策定が進められています。
2013年10月13日現在
現在実装しているブラウザはGoogleChromeのMac版のみです。
他のブラウザでも,Jazz-puluginというのを使えばMIDI機器をつなげるようになるらしいです。
使ってみる
http://www.w3.org/TR/webmidi/
大体はここを見ればわかります。
とりあえずこんなかんじに書いてみました。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Web Midi API TEST</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script> $(function(){ var midi = null; var inputs =null; navigator.requestMIDIAccess().then( onMIDISuccess, onMIDIFailure); function onMIDISuccess(midiAccess) { console.log( "MIDI ready!" ); midi = midiAccess; inputs = midi.inputs() if(inputs.length==0){ $("#info").append("<p>利用可能なMIDIデバイスが見つかりませんでした</p>"); }else { for( var i=0; i<inputs.length; i++){ $("#device").append('<option value="'+ i +'">' + inputs[i]["name"] + '</option>'); } } } function onMIDIFailure(msg) { console.log( "Failed to get MIDI access - " + msg ); } function onMIDIMessage( event ) { console.log(event); var str = "MIDI message received [" + event.data.length + " bytes]: "; for (var i=0; i<event.data.length; i++) { str += "0x" + event.data[i].toString(16) + " " ; } console.log(str); } $("#device").on("change", function(){ var port = $("#device option:selected").val(); console.log(port); inputs[port].onmidimessage = onMIDIMessage; }); }); </script> </head> <body> <h1>Web Midi API TEST</h1> <div id="info"></div> <select id="device"> <option>選択してください</option> </select> </body> </html>
MIDI機器からの入力を受け取って、console.logで出力しています。
実際にMIDI機器をつないで、信号を送ったりすると、
MIDI message received [3 bytes]: 0x90 0x3c 0x60 MIDI message received [3 bytes]: 0x80 0x3c 0x40
というようなログが出力されます。
1バイト目は メッセージの種類
2バイト目は ノート番号
3バイト目は ベロシティ
です。
1バイト目のメッセージの種類というのは
0x90ならノートオン(キーボードを押した時)
0x80ならノートオフ(キーボードを話した時)
といったようなものです。
2バイト目はノートの番号です。
一般的にピアノであれば中央の「ド」の音が0x3c (60)になると思います。
3バイト目はベロシティです。
音の強弱の情報で、
1~127の間で、高いほうが強い音となります。
実際に作った確認のページはこちら
http://mintsu-dev.com/webmidiapitest/