SlideShare a Scribd company logo
1 of 31
第 35 回 PHP 勉強会 @ トライコーン 亀本 大地 (a.k.a: yudoufu) 2008/08/31 モバイル開発@ symfony
自己紹介 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
今日話すこと ,[object Object],[object Object],[object Object],[object Object],[object Object]
モバイルサイト開発 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
HTML/CSS の仕様 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
HTML/CSS のハマりどころ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
文字コードの押さえ所 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
symfony でモバイル開発 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
symfony のフィルタ
モバイルフィルタの作成 ,[object Object],[object Object],rendering: ~  web_debug: ~  security: ~  # generally, you will want to insert your own filters here  mobile:  class: myMobileFilter  cache: ~  common: ~  flash: ~  execution: ~
モバイルフィルタの作成 ,[object Object],[object Object],<?php class myMobileFilter extends  sfFilter { public function execute($filterChain) { // execute() の前に書くと preFilter $filterChain->execute(); // execute() の後に書くと postFilter } }
キャリア判別 ,[object Object],[object Object],[object Object],[object Object],autoload: PEAR: name: PEAR files: Net_UserAgent_Mobile:  /path/to/Net/UserAgent/Mobile.php
キャリア判別 ,[object Object],[object Object],public function execute($filterChain) { $request = $this->getContext()->getRequest(); $response = $this->getContext()->getResponse(); if ($this->isFirstCall()) { $agent =  @Net_UserAgent_Mobile::singleton(); switch (true) { case $agent->isDoCoMo(): $carrier = 'docomo'; $response->setContentType('application/xhtml+xml; charset=Shift_JIS'); break; case $agent->isEzweb(): //  中略 } $request->setAttribute('agent', $agent); $request->setAttribute('carrier', $carrier); } $filterChain->execute(); preFilter 部に設定 出力ヘッダを指定
絵文字の変換 ,[object Object],[object Object],[object Object],$ symfony plugin-install http://blog.asial.co.jp/data/sfPictogramMobilePlugin-0.0.4.tgz ・ ・  $request->setAttribute('agent', $agent); $request->setAttribute('carrier', $carrier); $pictogram = sfPictogramMobile::factory($carrier, 'utf-8'); $request->setAttribute('pictogram', $pictogram); } $filterChain->execute(); $content = $response->getContent(); $content = $request->getAttribute('pictogram')->replace($content); $response->setContent($content); } } postFilter 文書全体を取得
文字コードの変換 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
文字コードの変換 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],$parameter = $request->getParameterHolder()->getAll(); $pict_output  = sfPictogramMobile::factory($carrier, $pict_encode); $value =  $pict_output->convert ($value); mb_convert_variables($internal_encoding, $view_encoding, $value); $value =  $pictogram->restore ($value);
CSS の切り替え ,[object Object],[object Object],[object Object],if ($this->isFirstCall()) { $request = $this->getContext()->getRequest(); $agent = @Net_UserAgent_Mobile::singleton(); switch (true) { case $agent->isDoCoMo(): $carrier = 'docomo'; $response->setContentType('application/xhtml+xml; charset=Shift_JIS'); $responce->addStylesheet('/path/to/docomo.css');  break; case $agent->isEzweb(): $carrier = 'ezweb'; $responce->addStylesheet('/path/to/ezweb.css');  //  略 ・ ・ キャリア別の CSS を指定
CSS の切り替え ,[object Object],[object Object],[object Object],[object Object],[object Object],$ pear install HTML_CSS $ svn co  http ://svn.coderepos.org/share/lang/php/HTML_CSS_Mobile/trunk /  /path/to/lib $filterChain->execute(); $content = $response->getContent(); $content = $request->getAttribute('pictogram')->replace($content); if ($request->getAttribute('carrier') == 'docomo') { $content = HTML_CSS_Mobile::getInstance()->setBaseDir('/path/to/doc_root')->apply($content); } $response->setContent($content); 出力直前に CSS を インライン展開
テンプレートとヘルパー ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
symfony のテンプレート機能
テンプレートの対応 ,[object Object],[object Object],[object Object],[object Object],<? include_partial('global/dtd'); ?> <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;ja&quot; lang=&quot;ja&quot;> <head> <?php switch (sfContext::getInstance()->getRequest()->getAttribute('carrier')): ?> <?php case 'docomo': ?> <?php echo '<'; ?>?xml version=&quot;1.0&quot; encoding=&quot;Shift_JIS&quot; ?> <!DOCTYPE html PUBLIC &quot;-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/1.1) 1.0//EN&quot; &quot;i-xhtml_4ja_10.dtd&quot;> <?php break; ?> <?php case 'ezweb': ?> <?php echo '<'; ?>?xml version=&quot;1.0&quot; encoding=&quot;Shift_JIS&quot; ?> <!DOCTYPE html PUBLIC &quot;-//OPENWAVE//DTD XHTML 1.0//EN&quot; &quot;http://www.openwave.com/DTD/xhtml-basic.dtd&quot;> //  以下略。。。
テンプレートの対応 ,[object Object],[object Object],[object Object],[object Object]
モバイルヘルパーの実装 ,[object Object],[object Object],[object Object],function m_mail_to($email, $name = ‘’, $options = array(), $default_value = array()) { $carrier = sfContext::getInstance()->getRequest()->getAttribute('carrier'); if ($carrier == 'docomo' || $carrier == 'ezweb') { foreach ($default_value as $key => $val) { $default_value[$key] = mb_convert_encoding($val, 'SJIS-win', 'UTF-8'); } } return mail_to($email, $name, $options, $default_value); } 内部文字コードが UTF-8 なので、 docomo と au を SJIS にしている
モバイルヘルパーの実装 ,[object Object],function m_input_tag($name, $value = null, $options = array()) { $carrier = sfContext::getInstance()->getRequest()->getAttribute('carrier'); if (isset($options['input_style']) && $input_style = strtolower($options[&quot;input_style&quot;])) { unset($options[&quot;input_style&quot;]); switch (strtolower($input_style)) { case &quot;kana&quot;: $options[&quot;mode&quot;] = &quot;hiragana&quot;; if ($carrier != 'docomo') { $options[&quot;istyle&quot;] = &quot;1&quot;; $options[&quot;format&quot;] = &quot;*M&quot;; } else { $options[&quot;style&quot;] .= &quot;;-wap-input-format:&quot;*&lt;ja:h&gt;&quot;;-wap-input-format:*M;&quot;; } break; //  中略 }  return input_tag($name, $value, $options); } 付与する属性を変え、入力モードを適切に切り替えている
セッションのモバイル対応 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
セッションのモバイル対応 ,[object Object],[object Object],[object Object],class myMobileSessionStorage extends  sfSessionStorage { public function initialize($context, $parameters = null) { $agent = @Net_UserAgent_Mobile::singleton(); if ($agent->isDoCoMo() || $agent->isSoftBank()) {  ini_set('session.use_only_cookies', 0);  ini_set('session.use_cookies', 0);  ini_set('session.use_trans_sid', 1);  }  parent::initialize($context, $parameters); } }
セッションのモバイル対応 ,[object Object],[object Object],class myMobileFrontController extends  sfFrontWebController { public function redirect($url, $delay = 0 ,$statusCode = 302) { $request = $this->getContext()->getRequest(); if ($agent = $this->getContext()->getRequest()->getAttribute('agent')) {  if ($agent->isDoCoMo() || $agent->isSoftBank()) {  $url = $this->implementParameter($url, SID); }  }  parent::redirect($url, $delay, $statusCode); } private function implementParameter($url, $implement) { //  略 } } SID(session_id) を含めてリダイレクト URL を再構成
セッションのモバイル対応 ,[object Object],class myMobileFrontController extends  sfFrontWebController { public function redirect($url, $delay = 0 ,$statusCode = 302) { //  略 } public function genUrl($parameters = array(), $absolute = false) { $url = parent::genUrl($parameters, $absolute);  if ($agent = $this->getContext()->getRequest()->getAttribute('agent')) {  if ($agent->isDoCoMo()) {  $url = $this->implementParameter($url, 'guid=ON'); }  }  return $url; } private function implementParameter($url, $implement) { //  略 } }
セッションのモバイル対応 ,[object Object],[object Object],[object Object],//  上略 all: controller: class:  myMobileFrontController storage: class:  myMobileSessionStorage param: session_name: symfony
まとめ? ,[object Object],[object Object],[object Object]
おわりに ,[object Object],[object Object]

More Related Content

Viewers also liked

Viewers also liked (11)

What's new in Symfony3
What's new in Symfony3What's new in Symfony3
What's new in Symfony3
 
Diapositiva maría ingles
Diapositiva maría inglesDiapositiva maría ingles
Diapositiva maría ingles
 
Marco legal de comercio exterior
Marco legal de comercio exteriorMarco legal de comercio exterior
Marco legal de comercio exterior
 
Sd dcp
Sd dcpSd dcp
Sd dcp
 
Final m3 session 2 15.3.17
Final m3 session 2 15.3.17 Final m3 session 2 15.3.17
Final m3 session 2 15.3.17
 
Drugs of abuse
Drugs of abuseDrugs of abuse
Drugs of abuse
 
CAPÍTULO 5. PENETRACIÓN EN MERCADOS EXTRANJEROS
CAPÍTULO 5. PENETRACIÓN EN MERCADOS EXTRANJEROSCAPÍTULO 5. PENETRACIÓN EN MERCADOS EXTRANJEROS
CAPÍTULO 5. PENETRACIÓN EN MERCADOS EXTRANJEROS
 
KCS KTV - Phần mềm kiểm tra cốt thép Vách
KCS KTV - Phần mềm kiểm tra cốt thép VáchKCS KTV - Phần mềm kiểm tra cốt thép Vách
KCS KTV - Phần mềm kiểm tra cốt thép Vách
 
Opioids
OpioidsOpioids
Opioids
 
Miramax
MiramaxMiramax
Miramax
 
Segon de Primària. Assaig de danses per la Trobada.
Segon de Primària. Assaig de danses per la Trobada.Segon de Primària. Assaig de danses per la Trobada.
Segon de Primària. Assaig de danses per la Trobada.
 

Similar to モバイル開発@symfony

第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて
第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて
第10回Mozilla拡張機能勉強会-FireMobileSimulatorについてTakahiro (Poly) Horikawa
 
Tech talk salesforce mobile sdk
Tech talk   salesforce mobile sdkTech talk   salesforce mobile sdk
Tech talk salesforce mobile sdkKazuki Nakajima
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter IntegrationKazuki Nakajima
 
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
 jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキングTakashi Okamoto
 
勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発Kazuki Nakajima
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Yuji Takayama
 
Web リソースを活用した簡単アプリケーション開発(Windows Phone)
Web リソースを活用した簡単アプリケーション開発(Windows Phone)Web リソースを活用した簡単アプリケーション開発(Windows Phone)
Web リソースを活用した簡単アプリケーション開発(Windows Phone)Akira Onishi
 
WordPressと外部APIとの連携
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携Hidekazu Ishikawa
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium MobileNaoya Ito
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用Yatabe Terumasa
 
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメXamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメYoshito Tabuchi
 
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocroYuuki Kuroda
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittrkenjis
 
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQLハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQLTaisuke Fukuno
 
Pf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsolaPf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsolaandroid sola
 

Similar to モバイル開発@symfony (20)

第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて
第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて
第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて
 
Tech talk salesforce mobile sdk
Tech talk   salesforce mobile sdkTech talk   salesforce mobile sdk
Tech talk salesforce mobile sdk
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
 
Jqm20120804 publish
Jqm20120804 publishJqm20120804 publish
Jqm20120804 publish
 
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
 jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
 
勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
 
Web リソースを活用した簡単アプリケーション開発(Windows Phone)
Web リソースを活用した簡単アプリケーション開発(Windows Phone)Web リソースを活用した簡単アプリケーション開発(Windows Phone)
Web リソースを活用した簡単アプリケーション開発(Windows Phone)
 
WordPressと外部APIとの連携
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium Mobile
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメXamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
 
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
3ヶ月でリア充大学生がFBアプリをリリースするまで @macrocro
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittr
 
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQLハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
 
Pf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsolaPf部2012年1月勉強会.androidsola
Pf部2012年1月勉強会.androidsola
 
Sendai.html5#2
Sendai.html5#2Sendai.html5#2
Sendai.html5#2
 

Recently uploaded

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Recently uploaded (9)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

モバイル開発@symfony