Successfully reported this slideshow.

Lightweight Language Tiger 2010

1,045 views

Published on

Presentation slide of Physical Computing session in LLTiger 2010

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Lightweight Language Tiger 2010

  1. 1. くるくる研究室 フィジカルコンピューティングを はじめよう。
  2. 2. くるくる研究室 <ul><li>くるくる研究室とは、クリエイティブ集団「 kurukuru 」の部活のひとつ。ケータイアプリからフィジカルコンピューティングまで、幅広く色々なアプリやプロダクトを開発する部活である。 </li></ul>http://labs.kuru2jam.com/ 原 央樹 尾崎俊介 http://labs.kuru2jam.com/ @hara3 @biscuitjam
  3. 3. 作品紹介 http://labs.kuru2jam.com/ くるくる研究室
  4. 4. 【 事例 】 お化け屋敷
  5. 5. フィジカルコンピューティング
  6. 6. と言っても、いきなり難しいと思うので、 できるところから、やってみる。
  7. 7. 体験しよう 【 ポチっとレンジ 】
  8. 8. 体験したい人!
  9. 9. 動作の仕組み ③ ソケット通信 電気信号 ④ 電子回路 Data ② 一定間隔でデータを確認 ① HTML から POST
  10. 10. HTML から POST PHP
  11. 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. 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. 13. 一定間隔でデータを確認 ActionScript 3.0
  14. 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. 15. Flash から PHP にアクセス ActionScript 3.0
  16. 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. 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. 18. Gainer と接続
  19. 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. 20. Gainer に命令
  21. 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. 22. ありがとうございました。
  23. 23. あっ!本買ってください。

×