くるくる研究室 フィジカルコンピューティングを はじめよう。
くるくる研究室 くるくる研究室とは、クリエイティブ集団「 kurukuru 」の部活のひとつ。ケータイアプリからフィジカルコンピューティングまで、幅広く色々なアプリやプロダクトを開発する部活である。 http://labs.kuru2jam.com/ 原 央樹 尾崎俊介 http://labs.kuru2jam.com/ @hara3  @biscuitjam
作品紹介 http://labs.kuru2jam.com/ くるくる研究室
【 事例 】 お化け屋敷
フィジカルコンピューティング
と言っても、いきなり難しいと思うので、 できるところから、やってみる。
体験しよう 【 ポチっとレンジ 】
体験したい人!
動作の仕組み ③ ソケット通信 電気信号 ④ 電子回路 Data ② 一定間隔でデータを確認 ① HTML から POST
HTML から POST PHP
ケータイからアクセスする PHP <?php // HTML 文字のエスケープ $text =  htmlspecialchars(  $_POST[&quot;push&quot; ] ); if($text){ $fp  = fopen( &quot;./status.dat&quot; ,  &quot;w&quot; ); fwrite($fp, 1); fclose($fp); $url  =  &quot;http://www.yourserver.com/complete.html&quot; ; header( &quot;Location: $url&quot; ) ; ?> <html> <head> …
ケータイからアクセスする HTML … <html> <head> <meta  http-equiv = &quot;Content-Type&quot;  content = &quot;text/html; charset=utf-8&quot; > </head> <body> <img  src = &quot;logo.gif&quot; > <br /> <form  action = &quot;<?php echo $_SERVER['SCRIPT_NAME']; ?>&quot;  method = &quot;post&quot; > <input  type = &quot;submit&quot;   name = &quot;push&quot;   id = &quot;push&quot;   value = &quot; ボタンを押す &quot; > </form> <br /> <hr /> 2010 kurukuru labs. </body> </html>
一定間隔でデータを確認 ActionScript 3.0
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 ( &quot;http://www.yourserver.com/getStatus.php?&quot;  +  Math.random ())); } private function  _completeHandler(e: Event ): void  { var  status: Number  =  Number (URLLoader(e. target ).data); trace ( &quot;status : &quot;  + status); if  (status == 1) { _gio.digitalOutput(0). value  = 1; } } } }
Flash から PHP にアクセス ActionScript 3.0
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 ( &quot;http://www.yourserver.com/getStatus.php?&quot;  +  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 <?php // 読み込み $status  = 0; $fp  = fopen( &quot;status.dat&quot; ,  &quot;r&quot; ); while ( $line  = fgets( $fp )) {   $status  =  $line ; } fclose( $fp ); // ファイルをリセット $fp  = fopen( &quot;status.dat&quot; ,  &quot;w&quot; ); fwrite( $fp ,  &quot;0&quot; ); fclose( $fp ); echo  $status ; ?>
Gainer と接続
package  { import funnel.*; public class  Pochitto  extends MovieClip { private const  _DT: Number  = 1000;//1 秒 (1000 ミリ秒毎 ) private const  STATUS_URL: String  =  &quot;http://www.yourserver.com/getStatus.php&quot; ; 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 (); } } }
Gainer に命令
Gainer に命令 // 読み込みコンプリートハンドラー private function  _completeHandler(e: Event ): void  { var  status: Number  =  Number (URLLoader(e. target ).data); trace ( &quot;status : &quot;  + status); if  (status == 1) { _gio.digitalOutput(0). value  = 1; } }
ありがとうございました。
あっ!本買ってください。

Lightweight Language Tiger 2010

  • 1.
  • 2.
    くるくる研究室 くるくる研究室とは、クリエイティブ集団「 kurukuru」の部活のひとつ。ケータイアプリからフィジカルコンピューティングまで、幅広く色々なアプリやプロダクトを開発する部活である。 http://labs.kuru2jam.com/ 原 央樹 尾崎俊介 http://labs.kuru2jam.com/ @hara3 @biscuitjam
  • 3.
  • 4.
    【 事例 】お化け屋敷
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
    動作の仕組み ③ ソケット通信電気信号 ④ 電子回路 Data ② 一定間隔でデータを確認 ① HTML から POST
  • 10.
  • 11.
    ケータイからアクセスする PHP <?php// HTML 文字のエスケープ $text = htmlspecialchars( $_POST[&quot;push&quot; ] ); if($text){ $fp = fopen( &quot;./status.dat&quot; , &quot;w&quot; ); fwrite($fp, 1); fclose($fp); $url = &quot;http://www.yourserver.com/complete.html&quot; ; header( &quot;Location: $url&quot; ) ; ?> <html> <head> …
  • 12.
    ケータイからアクセスする HTML …<html> <head> <meta http-equiv = &quot;Content-Type&quot; content = &quot;text/html; charset=utf-8&quot; > </head> <body> <img src = &quot;logo.gif&quot; > <br /> <form action = &quot;<?php echo $_SERVER['SCRIPT_NAME']; ?>&quot; method = &quot;post&quot; > <input type = &quot;submit&quot; name = &quot;push&quot; id = &quot;push&quot; value = &quot; ボタンを押す &quot; > </form> <br /> <hr /> 2010 kurukuru labs. </body> </html>
  • 13.
  • 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 ( &quot;http://www.yourserver.com/getStatus.php?&quot; + Math.random ())); } private function _completeHandler(e: Event ): void { var status: Number = Number (URLLoader(e. target ).data); trace ( &quot;status : &quot; + 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 ( &quot;http://www.yourserver.com/getStatus.php?&quot; + Math.random ())); } private function _completeHandler(e: Event ): void { var status: Number = Number (URLLoader(e. target ).data); if (status == 1) { _gio.digitalOutput(0). value = 1; } } }
  • 17.
    Flash からアクセスする PHP<?php // 読み込み $status = 0; $fp = fopen( &quot;status.dat&quot; , &quot;r&quot; ); while ( $line = fgets( $fp )) { $status = $line ; } fclose( $fp ); // ファイルをリセット $fp = fopen( &quot;status.dat&quot; , &quot;w&quot; ); fwrite( $fp , &quot;0&quot; ); fclose( $fp ); echo $status ; ?>
  • 18.
  • 19.
    package {import funnel.*; public class Pochitto extends MovieClip { private const _DT: Number = 1000;//1 秒 (1000 ミリ秒毎 ) private const STATUS_URL: String = &quot;http://www.yourserver.com/getStatus.php&quot; ; 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.
  • 21.
    Gainer に命令 //読み込みコンプリートハンドラー private function _completeHandler(e: Event ): void { var status: Number = Number (URLLoader(e. target ).data); trace ( &quot;status : &quot; + status); if (status == 1) { _gio.digitalOutput(0). value = 1; } }
  • 22.
  • 23.