[[konashi]]

* konashiをProcessing.jsとともに使う - konashi [#bb9639a1]

#contents

**私について [#ldb07428]
konashiの開発元であるユカイ工学でアルバイトをしております.~
中の人として,konashi.jsについて解説しろという要請がありそうだと感じましたので,急いで書かせていただきました.~
konashiの開発元であるユカイ工学でアルバイトをしておりました.(過去)~
当時開発に関わっていた中の人として,konashi.jsについて解説しろという要請がありそうだと感じましたので,急いで書かせていただきました.~
この記事の内容について質問等がありましたら[[コメント欄>#r23dfe78]]にお書きいただくか,私の個人メールアドレス~
 tokoro10g[atmark]tokor.org
までお願いします.(@に置き換えてください)

**konashi.jsについて [#s065d61e]
konashi.jsは,iOS向けアプリとそれに対応したJavascriptライブラリです.~

Javascript,HTML,CSSをブラウザ上でコーディングして実行できるサービス"jsdo.it"の開発元であるカヤックさんにご協力いただき,jsdo.it上でkonashiを制御するコードを作成し,アプリでそれを読み込んで実行することができるようになっています.~

[[konashi.js | エンジニアとデザイナ・アーティストを繋ぐアプリ:http://jsdo.it/konashijs/]]~

これまでのkonashi-ios-sdkでは,開発にMacとiOS Developer Programのライセンスが必要でしたが,このkonashi.jsを利用することによって,Mac以外の環境でもkonashiを動かすプログラムを書くことができます.~
また,WebディベロッパやWebデザイナの方にはとても扱いやすいことと思います.~

アプリはApp Storeから無料でダウンロード出来ますので,是非お試しください.~
このチュートリアルでは,このアプリとjsdo.itを使用してコーディングを行なっていきます.

** Processing.jsについて [#rc2e1eec]
[[Processing:http://www.processing.org/]]は,ビジュアライズのためのプログラミング言語・開発環境であり,デザインやアートの世界においてはもちろん,グラフネットワークやクラスタリングなどの可視化にも幅広く利用されています.~

単純な図形の描画・アニメーションに加えて,最近のものは3D表示にも対応しており,様々なデータの表現が可能です.~

このProcessingの動作に相当するものをJavascriptからも実行できるようにと開発されたのが[[Processing.js:http://processingjs.org/]]です.~

Processing.jsには,Processingのコードをそのまま渡すか,Javascriptにコンパイルしたものを実行するかの2通りの動作方法があります.~
konashiと連携させるためにはProcessingの動作部分にいくつか手を加える必要があるので,後者を採用することになります.~

なお,2013年7月現在,安定版としてバージョン1.4.1が公開されています.~

** konashiとの連携 [#sbbd824b]
***概要 [#e3a8268c]
それでは,Processing.jsのサイトに公開されているボールが弾むサンプル[[BouncyBubbles:http://processingjs.org/learning/topic/bouncybubbles/]]を例にとって説明します.~
目標は,ボタンを押している間ボールの弾み具合を変えるというものを作成するところまでです.~
私が作成したサンプルはボタンを押すとボールの数を増やすというものでしたが,ボールを追加するためのスクリプトが少しむずかしいため,今回は簡単にコーディングできそうな弾み具合の変更を実装します.~

***必要なもの [#wbe56eda]
- konashiと電源(もちろん動作させるために必要です)
- 対応したiPhoneまたはiPad(対応状況は[[http://konashi.ux-xu.com]]をごらんください.)
- konashi.jsのアプリ(App Storeから無料で入手しましょう)
- [[jsdo.it:http://jsdo.it]]のアカウント(登録しましょう)

***forkからはじめよう [#a0c4ce6d]
まずjsdo.itで[[konashiの初歩:http://jsdo.it/monakaz/vkGq]]をforkしてみましょう.~
#ref(http://pckles.com/tokoro10g/5565de.png)~
forkすると編集画面が出てきます.~
#ref(http://pckles.com/tokoro10g/69c6d7.png)~
とりあえずこの状況で"Finish Editing"をクリックして,iPhone/iPadから動作を確認してみてください.

***Processing.jsサンプルコードの変換 [#d7e9b9b0]
Processing.jsのサンプル[[BouncyBubbles:http://processingjs.org/learning/topic/bouncybubbles/]]のページのソースコードをまずまるごとコピーします.~
#ref(http://pckles.com/tokoro10g/f78a40.png)~
次に,同じページの右側にあるメニューから"Processing.js Helper"をクリックします.~
#ref(http://pckles.com/tokoro10g/a5f830.png)~
すると,Processingのコードを貼り付ける場所が表示されます.~
#ref(http://pckles.com/tokoro10g/5086cc.png)~
これはProcessingのコードをProcessing.jsで扱えるJavascriptのコードにコンパイルできるツールです.ここで生成したコードを改造してkonashiと連携させます.~
コードを貼り付けて"Convert to JS"をクリックすると,Javascriptのコードが生成されます.~
#ref(http://pckles.com/tokoro10g/81052b.png)~
#ref(http://pckles.com/tokoro10g/7b5519.png)~

***変換後のコードを使えるようにする [#ue306d2b]
このJavascriptコードは,関数オブジェクトが生成されているだけなので,Processing.jsで利用するには少しだけコードを付け足す必要があります.~
jsdo.itの編集画面に戻って,生成されたコードを一番最初に貼り付けて,その直前に
#highlightjs(javascript){{
var sketch=
}}
と記述します.つまり,
#highlightjs(javascript){{
var sketch=(function($p) {
    var Ball = (function() {
        function Ball() {
            var $this_1 = this;
...
}}
のような感じになります.念のため画像でも示すとこんな感じになります.~
#ref(http://pckles.com/tokoro10g/068e0c.png)~
次に,貼りつけたコードの最後にセミコロンを追加します.(追加しても動くかもしれないけど御行儀よく行きましょう.)~
#ref(http://pckles.com/tokoro10g/10fdd0.png)~
このような感じになれば大丈夫です.~

***キャンバスの準備 [#u11dc755]
次に,このProcessingのコードの実行結果を描画するためのcanvasを作成します.~
HTMLを開いて,もともとあったpタグを削除し,canvasタグを次のように挿入します.~
#ref(http://pckles.com/tokoro10g/1a1e84.png)~
#ref(http://pckles.com/tokoro10g/840260.png)~
上の画像のようについでにメッセージも変えておきましょう.~

***Processing.jsの読み込み [#na423bd4]
また,HTML中にProcessing.jsを読みこませるためのscriptタグを記述します.~
まず,[[Processing.jsのダウンロードページ:http://processingjs.org/download/]]に飛んでprocessing-1.4.1.min.jsのアドレスをコピーしましょう.~
#ref(http://pckles.com/tokoro10g/0af5fc.png)~
こういうのって直リンクするとお行儀が悪くて怒られるんですが,今回はテスト用途なので直リンク張っちゃいましょう.(さっきお行儀よくとか言ったのに・・・)~
(気になる方は,jsdo.itのファイルアップロード機能を使ってリンクを生成してください.)~
で,貼り付けます.~
#ref(http://pckles.com/tokoro10g/610aea.png)~
(scriptタグを閉じ忘れないように気をつけてください)~

***キャンバスとスケッチを結びつける [#r42d464f]
次に,またJavascriptに戻り,作成したcanvasとsketchを結びつけます.~
#highlightjs(javascript){{
var canvas=document.getElementById("canvas-processing");
// attaching the sketch to the canvas
var p = new Processing(canvas, sketch);
}}
を先ほどセミコロンを挿入した次の行に追記します(コメントの部分は不要です).~
#ref(http://pckles.com/tokoro10g/54745d.png)~

ここまででProcessing.jsの準備は完了です.お疲れ様でした.~
jsdo.it上でProcessingのコードが動作していることを確認できます.~
#ref(http://pckles.com/tokoro10g/a7b72b.png)~

この段階でのコードを載せておきます.~
Javascript:&ref(konashi-processing-01.js);~
HTML   :&ref(konashi-processing-01.html);~

***konashiの準備完了時の処理の記述 [#qfb2dcd4]
まずkonashiの準備が完了した時の処理を記述します.~
今回作成するものは基板にあるスイッチ(S1)の入力を受け取るだけのシンプルなものですので,ready時の処理も非常に簡単です.~
S1に相当するピン(PIO0)をインプットに設定するだけですので,以下のように記述すればOKです.~
#highlightjs(javascript){{
// konashiと接続できたら実行される
k.ready(function(){
    // I/Oの設定
    k.pinMode(k.S1, k.INPUT);
});
}}
fork元のサンプルで記述されているk.ready関数の中身をこれに置き換えます.~
#ref(http://pckles.com/tokoro10g/34a325.png)~

***スイッチを押した時の処理の記述 [#fabeb96b]
次に,スイッチを押した時の処理を記述します.~
ボールの弾み具合を決定する変数 spring がコード内に定義されていますので,konashiの入力から変更できるようにグローバルな場所に変数を移します.~
要するにこれを~
#ref(http://pckles.com/tokoro10g/d301c1.png)~
ここに動かします(カット&ペーストです.コピー&ペーストではありません.)~
#ref(http://pckles.com/tokoro10g/8ec823.png)~
これでkonashiのイベントハンドラから値を変更できるようになりました.~

konashiのIOピンの変化は,JavascriptではupdatePioInput関数で扱うことができます.~
[[konashi - Documents updatePioInput:http://konashi.ux-xu.com/documents/#javascript-updatePioInput]]~

updatePioInput関数の引数には,インプットピンが変化した時に実行させたい関数を記述します.~
実行させたい関数には現在のすべてのインプットピンの値が引数として渡されるようになっています.~
つまり,こんな感じに書くことができます.~
#highlightjs(javascript){{
k.updatePioInput(function(value){
    if(value==0){
        alert("全部のピンがLOWだよ");
    }
});
}}
もちろん,digitalRead関数を用いてピンの状態を取得することもできます.~
#highlightjs(javascript){{
k.updatePioInput(function(){
    k.digitalRead(k.S1,function(value){
        if(value==k.HIGH){
            alert("S1がHIGHになったよ");
        }
    });
});
}}
わかる方はこの2つの例を見ていただいても分かる通り,konashiへの命令や状態の変化の取得は非同期に行うことになります.~
今回は後者を使おうと思います.(前者の場合,S1の値だけを取り出すには少しテクニック的な処理を書く必要があるため)~

さて,処理を記述して行きましょう.~
ボタンが押されている間(つまり,S1がHIGHになってからLOWに戻るまでの間)だけspringの値を0.5にしてみます.~
#highlightjs(javascript){{
// 入力が変化した時の処理
k.updatePioInput(function(value){
    k.digitalRead(k.S1, function(value){
        if(value==k.HIGH){
            spring=0.5;
        } else {
            spring=0.05;
        }
    });
});
}}
これをjsdo.itのJavascript編集画面に追記します.~
#ref(http://pckles.com/tokoro10g/b13a6f.png)~

この段階でのJavascriptコード~
#ref(konashi-processing-02.js)~

この状態でiPhone/iPad上でkonashi.jsアプリを起動して実行してみましょう.~
#ref(https://dl.dropboxusercontent.com/u/2730390/pub/konashi-processing.png)
konashiのスイッチをポチポチと何度か押してみると,ボールが激しく弾むのがわかると思います.~

これで今回のチュートリアルの内容は終わりです.お疲れ様でした.~

***konashi.jsとProcessing.jsの連携のコツ [#za22e2c9]
(そのうち書く)~
Processingのコードにkonashi向けのコードを埋め込めるようにしたいなあ

** コメント欄 [#r23dfe78]
#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS