Lightweight Language Tiger 2010

Post on 24-Jan-2015

1.890 views 2 download

description

 

Transcript of Lightweight Language Tiger 2010

くるくる研究室

フィジカルコンピューティングをはじめよう。

くるくる研究室

くるくる研究室とは、クリエイティブ集団「 kurukuru」の部活のひとつ。ケータイアプリからフィジカルコンピューティングまで、幅広く色々なアプリやプロダクトを開発する部活である。

http://labs.kuru2jam.com/原 

央樹 尾崎俊介http://labs.kuru2jam.com/

@hara3 @biscuitjam

作品紹介

3

http://labs.kuru2jam.com/

くるくる研究室

4

【事例】お化け屋敷

5

フィジカルコンピューティング

6

と言っても、いきなり難しいと思うので、できるところから、やってみる。

7

体験しよう【ポチっとレンジ】

8

体験したい人!

動作の仕組み

9

③ソケット通信

電気信号

④電子回路

Data

②一定間隔でデータを確認①HTMLから POST

10

HTMLから POSTPHP

ケータイからアクセスする PHP

11

<?php// HTML文字のエスケープ$text = htmlspecialchars( $_POST["push"] );if($text){

$fp = fopen("./status.dat", "w");fwrite($fp, 1);fclose($fp);

$url = "http://www.yourserver.com/complete.html";header("Location: $url") ;

?><html><head>

ケータイからアクセスする HTML

12

…<html><head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body>

<img src="logo.gif"><br /><form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>"

method="post"> <input type="submit" name="push" id="push" value="ボタンを押す ">

</form><br /><hr />2010 kurukuru labs.

</body></html>

13

一定間隔でデータを確認ActionScript 3.0

14

package {

import flash.display.MovieClip;import flash.events.Event;import flash.net.URLLoader;import flash.net.URLRequest;import flash.utils.Timer;import flash.events.TimerEvent;

import funnel.*;

public class Pochitto extends MovieClip{

private var _timer:Timer;private var _gio:Gainer;private const _D_OUT_1:int = 12;

public function Pochitto() {

_gio = new Gainer();_gio.addEventListener(FunnelEvent.READY, trace);_gio.addEventListener(FunnelEvent.READY, _gioReadyHandler);_gio.addEventListener(FunnelErrorEvent.REBOOT_ERROR, trace);_gio.addEventListener(FunnelErrorEvent.CONFIGURATION_ERROR, trace);_gio.addEventListener(FunnelErrorEvent.ERROR, trace);

}

private function _gioReadyHandler(e:FunnelEvent):void {

_gio.digitalOutput(0).value = 0;_timer = new Timer(1000, 0);_timer.addEventListener(TimerEvent.TIMER,_timerHandler);_timer.start();

}

private function _timerHandler(e:TimerEvent):void {

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, _completeHandler);urlLoader.load(new URLRequest("http://www.yourserver.com/getStatus.php?" +

Math.random()));}

private function _completeHandler(e:Event):void {

var status:Number = Number(URLLoader(e.target).data);trace("status : " + status);if (status == 1) {

_gio.digitalOutput(0).value = 1;}

}

}

}

15

Flashから PHPにアクセスActionScript 3.0

16

public class Pochitto extends MovieClip{

private var _timer:Timer;

public function Pochitto() {

_gio = new Gainer(); _gio.addEventListener(FunnelEvent.READY, _gioReadyHandler);

}

private function _gioReadyHandler(e:FunnelEvent):void {

_gio.digitalOutput(0).value = 0;_timer = new Timer(1000, 0);_timer.addEventListener(TimerEvent.TIMER,_timerHandler);_timer.start();

}

private function _timerHandler(e:TimerEvent):void {

var urlLoader:URLLoader = new URLLoader();urlLoader.addEventListener(Event.COMPLETE, _completeHandler);//キャッシュ対策のため、パラメタにランダムな値を入れるurlLoader.load(new URLRequest("http://www.yourserver.com/getStatus.php?" + Math.random()));

}

private function _completeHandler(e:Event):void {

var status:Number = Number(URLLoader(e.target).data);if (status == 1) {

_gio.digitalOutput(0).value = 1;}

}

}

Flashからアクセスする PHP

17

<?php//読み込み$status = 0;$fp = fopen("status.dat", "r");while ($line = fgets($fp)) {

$status = $line;}

fclose($fp);

//ファイルをリセット$fp = fopen("status.dat", "w");fwrite($fp, "0");fclose($fp);

echo $status;?>

18

Gainerと接続

19

package {

import funnel.*;

public class Pochitto extends MovieClip{

private const _DT:Number = 1000;//1秒 (1000ミリ秒毎 )private const STATUS_URL:String = "http://www.yourserver.com/getStatus.php";private var _timer:Timer;private var _gio:Gainer;private const _D_OUT_1:int = 12;

//コンストラクターpublic function Pochitto() {

//インスタンス化_gio = new Gainer();_gio.addEventListener(FunnelEvent.READY, trace);_gio.addEventListener(FunnelEvent.READY, _gioReadyHandler);_gio.addEventListener(FunnelErrorEvent.REBOOT_ERROR, trace);_gio.addEventListener(FunnelErrorEvent.CONFIGURATION_ERROR, trace);_gio.addEventListener(FunnelErrorEvent.ERROR, trace);

}

//準備ができたら実行private function _gioReadyHandler(e:FunnelEvent):void {

_gio.digitalOutput(0).value = 0;_timer = new Timer(_DT, 0);_timer.addEventListener(TimerEvent.TIMER,_timerHandler);_timer.start();

}

}

}

20

Gainerに命令

Gainerに命令

21

//読み込みコンプリートハンドラーprivate function _completeHandler(e:Event):void {

var status:Number = Number(URLLoader(e.target).data);trace("status : " + status);if (status == 1) {

_gio.digitalOutput(0).value = 1;}

}

22

ありがとうございました。

あっ!本買ってください。

23