SlideShare a Scribd company logo
1 of 42
Miércoles de Profundización en
                                     e-business
                                     Tema : Construyendo y publicando nuestra primera
                                     App multiplataforma.

                                     Conferencista: Carlos Alonso Pérez
                                     País: España




                                          Aula Virtual: http://www.interlat.co/moodle/
www.interlat.co – info@interlat.co - http://www.facebook.com/interlat - www.twitter.com/interlat - PBX: 57(1) 658 2959 - Bogotá - Colombia
Índice de la presentación



• Planeando nuestra aplicación
• Construcción
• Publicación
• Conclusiones
Planeando nuestra aplicación


• Objetivos
• Problemas
• Soluciones
• Viabilidad
• Decisión final
Objetivo: Triunfar
¿Qué hace falta para triunfar?




                                 Y ...
Llegar a todos los públicos
Problema: La fragmentación
Fragmentación: Sistemas Operativos.
Fragmentación: Tamaño de pantalla.
Fragmentación: Método de entrada.
Fragmentación: Hardware.
Fragmentación: Errores software.
Fragmentación: Conclusión


    Equilibrio
Capacidades utilizadas
          vs

 Clientes Potenciales
Solución: Una única aplicación multiplataforma.
Estudio de la solución: Tecnologías disponibles
HTML 5. Potencia y capacidades para tu browser

Etiquetas semánticas      Multimedia y Gráficos          Comunicaciones en
     <nav> <section>            canvas 2D y 3D              tiempo real
 <header> <figure>               audio y vídeo              Notificaciones
 <footer> <article>        gráficos vectoriales (SVG)        WebSockets
         <menu>                                             Web workers

 Acceso Hardware         Funcionamiento offline
                                                        Almacenamiento local
 Filesystem   Sensores
Javascript. El lenguaje de programación de la web.

                          Object
           isFunction                              Clases y objetos

                                   prototype
  typeof
                        eval                    instanceof


    new Function()
                                     Object.isPrototypeOf()
CSS 3. Experiencia de usuario de última generación

        Selectores              Efectos en textos
                                                          Animaciones
Tipografías personalizadas    Esquinas redondeadas
                                                        Transformaciones
  Semi Transparencias        Organización en columnas
                                                           Gradientes
        Sombras               Colores personalizados
jQuery Mobile. Desarrollo móvil rápido y sencillo

    Javascript no intrusivo              Máxima compatibilidad


    Plugins            ‘write less, do more’    Ampliamente usado


              Muy ligero                 Documentación
Viabilidad técnica

           SI                         NO
• Geolocalización (GPS)     • Otros sensores
• Reproducción multimedia   • Cámara
• Sensores de movimiento    • Notificaciones
• Almacenar datos locales   • Web GL
• Acceso offline            • Alto rendimiento
           http://mobilehtml5.org/
Decisión final
Construyendo nuestra aplicación multiplataforma


• Primeros pasos
• Componentes UI
• Capacidades HTML 5
• Diseño personalizado
• Demos
Primeros pasos. El documento

    <!DOCTYPE html>
    <html>
        <head>
    <meta charset="utf-8" />
                   <title>HTML 5 Demo</title>
                   <!-- CSS -->
                   <link rel="stylesheet"
                href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
                   <!-- jQuery Core -->
                   <script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
                   <!-- jQuery Mobile -->
                   <script type="text/javascript"
                src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js">
            </script>
        </head>
        <body>
        </body>
    </html>
Primeros pasos. El viewport


<head>
....
    <meta name=”viewport”
        content=”width=device-width, initial-scale=1”>
</head>




<!-- Sin Zoom -->
<meta .... user-scalable=no”>
Primeros pasos. Estructura de la aplicación


                <body>
                    <div data-role="page">
                               <div data-role="header">
                                   <h1>Header</h1>
                               </div>
                               <div data-
                role="content">
                                   <p>Content</p>
                               </div>
                               <div data-role="footer"
                            data-position="fixed">
                                   <h4>Footer</h4>
                               </div>
                    </div>
                </body>
Componentes UI
Componentes UI.
Componentes UI
Componentes UI
Componentes UI. Menu y Toolbar

<div data-role="content">
  <ul data-role="listview">
    <li><a href="#geolocation">Geolocation API</a></li>
    <li><a href="#canvas">Canvas</a></li>
    <li><a href="#storage">Offline Storage</a></li>
  </ul>
</div>




 <div data-role="footer" data-position="fixed">
   <div data-role="navbar">     <ul>     <li><a
 href="#main-menu">Home</a></li>      <li><a
 href="#geolocation">GPS</a></li>      <li><a
 href="#canvas">Canvas</a></li>      <li><a
 href="#storage">Storage</a></li>    </ul> </div>
 </div>
Capacidades HTML5. Geolocalización
<script type="text/javascript">
  $('#geolocation').live('pageinit', function(){
   navigator.geolocation.getCurrentPosition (function(pos) {
      var lat = pos.coords.latitude;
      var lng = pos.coords.longitude;
      ... Lógica de invocación del mapa Google ...
</script>




<div data-role="page" id="geolocation" data-add-back-btn="true">
  ... Header ...   <div data-role="content">   <p>Wait for the map...</p>
</div>
  ... Footer ...</div>
Capacidades HTML5. Canvas

var context = $('#theCanvas')
[0].getContext('2d');context.beginPath();context.rect(20, 20, 200, 100);
context.fillStyle = context.createLinearGradient(20, 20, 220,
120);context.fill();




<div data-role="page" id="canvas" data-add-back-btn="true">
  ... Header ...   <div data-role="content">   <canvas
id=”theCanvas”></canvas>   </div>
  ... Footer ...</div>
Capacidades HTML5. Almacenamiento de datos

var $input = $('#item');
var arr = localStorage.items ? JSON.parse(localStorage.items) :
[];arr.push($input.val());localStorage.items = JSON.stringify(arr);
... Lógica jQuery para refrescar la lista ...




<div data-role="page" id="storage" data-add-back-btn="true">
  ... Header ...   <input type="text" id="item" placeholder="Add Item..."
value=""/>   <input type="button" id="add_btn" value="Add Item" data-
icon="plus"/>   <ol data-role="listview" data-inset="true"></ol>
  ... Footer ...</div>
Diseño personalizado.


• CSS
• jQuery Theme Roller
• Fireworks Theme editor
<head>
...
<link rel="stylesheet"
 href="css/custom_css.min.css" />
...
</head>
Demos
Publicando nuestra aplicación multiplataforma




• Como aplicación nativa
• Como aplicación híbrida
• Como aplicación web
Como aplicación nativa




                         ...   ...
Como aplicación híbrida




                          ...   ...
Como aplicación web. Instalación

<head>

...

<link rel="apple-touch-icon" href="icons/icon57.png" sizes="57x57">
<link rel="apple-touch-icon" href="icons/icon114.png" sizes="114x114">
<link rel="apple-touch-icon" href="icons/icon72.png" sizes="72x72">
<link rel="apple-touch-icon" href="icons/icon80.png" sizes="80x80" >
<link rel="apple-touch-icon-precomposed" href="icons/icon57.png" sizes="android-only">

...

</head>
Como aplicación web. Funcionamiento offline


 CACHE MANIFEST:
 # version 1.0

 # Archivos jQuery
 http://code.jquery.com/jquery-1.6.1.min.js
                                                               <html manifest="offline.appcache">
 http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css
 http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js    ...
 ...

 # Archivos de la aplicación
                                                               </html>
 icons/*

 NETWORK:
 # Archivos que no se deben cachear
Conclusión




        Buena solución, pero no definitiva.
Carlos Alonso Pérez
                                                     Senior Developer - Unkasoft
                                                     calonso@unkasoft.com
                                                     Twitter: @calonso
                                                     http://www.linkedin.com/in/calonsoperez


                                                                                                           Gracias!
                                          Aula Virtual: http://www.interlat.co/moodle/
www.interlat.co – info@interlat.co - http://www.facebook.com/interlat - www.twitter.com/interlat - PBX: 57(1) 658 2959 - Bogotá - Colombia

More Related Content

Viewers also liked (7)

Diapositivas dep xaraes
Diapositivas dep xaraesDiapositivas dep xaraes
Diapositivas dep xaraes
 
Diapositivas estefania
Diapositivas estefaniaDiapositivas estefania
Diapositivas estefania
 
Diapositivas torres porto
Diapositivas torres portoDiapositivas torres porto
Diapositivas torres porto
 
Diapositivas atahualpa centro corporativo
Diapositivas atahualpa centro corporativoDiapositivas atahualpa centro corporativo
Diapositivas atahualpa centro corporativo
 
2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShare2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShare
 
What to Upload to SlideShare
What to Upload to SlideShareWhat to Upload to SlideShare
What to Upload to SlideShare
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare
 

Similar to Webinar interlat apps_2012_carlos_a-perez_españa

Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
cok12v
 
Html5 y otras yerbas
Html5 y otras yerbasHtml5 y otras yerbas
Html5 y otras yerbas
Avanet
 

Similar to Webinar interlat apps_2012_carlos_a-perez_españa (20)

Construyendo y publicando nuestra primera app multiplataforma
Construyendo y publicando nuestra primera app multiplataformaConstruyendo y publicando nuestra primera app multiplataforma
Construyendo y publicando nuestra primera app multiplataforma
 
Phonegap
PhonegapPhonegap
Phonegap
 
Html5
Html5Html5
Html5
 
HTML5, CSS3 y móviles
HTML5, CSS3 y móvilesHTML5, CSS3 y móviles
HTML5, CSS3 y móviles
 
Mini curse
Mini curseMini curse
Mini curse
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
Html5 y otras yerbas
Html5 y otras yerbasHtml5 y otras yerbas
Html5 y otras yerbas
 
Html5 y otras yerbas
Html5 y otras yerbasHtml5 y otras yerbas
Html5 y otras yerbas
 
JQquery Mobile por Yamil Lambert
JQquery Mobile por Yamil LambertJQquery Mobile por Yamil Lambert
JQquery Mobile por Yamil Lambert
 
Innovaciones para Internet: La visión de Mozilla
Innovaciones para Internet: La visión de MozillaInnovaciones para Internet: La visión de Mozilla
Innovaciones para Internet: La visión de Mozilla
 
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
 
En 20 minutos ... Responsive Design
En 20 minutos ... Responsive DesignEn 20 minutos ... Responsive Design
En 20 minutos ... Responsive Design
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web Design
 
HTML5-Aplicaciones web
HTML5-Aplicaciones webHTML5-Aplicaciones web
HTML5-Aplicaciones web
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
 
Lecciones aprendidas creando una red social
Lecciones aprendidas creando una red socialLecciones aprendidas creando una red social
Lecciones aprendidas creando una red social
 
Full-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScript
Full-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScriptFull-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScript
Full-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScript
 
Herramientas Digitales
Herramientas DigitalesHerramientas Digitales
Herramientas Digitales
 
Nuevas herramientas de visualizacion en JavaScript
Nuevas herramientas de visualizacion en JavaScript Nuevas herramientas de visualizacion en JavaScript
Nuevas herramientas de visualizacion en JavaScript
 

Webinar interlat apps_2012_carlos_a-perez_españa

  • 1. Miércoles de Profundización en e-business Tema : Construyendo y publicando nuestra primera App multiplataforma. Conferencista: Carlos Alonso Pérez País: España Aula Virtual: http://www.interlat.co/moodle/ www.interlat.co – info@interlat.co - http://www.facebook.com/interlat - www.twitter.com/interlat - PBX: 57(1) 658 2959 - Bogotá - Colombia
  • 2. Índice de la presentación • Planeando nuestra aplicación • Construcción • Publicación • Conclusiones
  • 3. Planeando nuestra aplicación • Objetivos • Problemas • Soluciones • Viabilidad • Decisión final
  • 5. ¿Qué hace falta para triunfar? Y ...
  • 6. Llegar a todos los públicos
  • 13. Fragmentación: Conclusión Equilibrio Capacidades utilizadas vs Clientes Potenciales
  • 14. Solución: Una única aplicación multiplataforma.
  • 15. Estudio de la solución: Tecnologías disponibles
  • 16. HTML 5. Potencia y capacidades para tu browser Etiquetas semánticas Multimedia y Gráficos Comunicaciones en <nav> <section> canvas 2D y 3D tiempo real <header> <figure> audio y vídeo Notificaciones <footer> <article> gráficos vectoriales (SVG) WebSockets <menu> Web workers Acceso Hardware Funcionamiento offline Almacenamiento local Filesystem Sensores
  • 17. Javascript. El lenguaje de programación de la web. Object isFunction Clases y objetos prototype typeof eval instanceof new Function() Object.isPrototypeOf()
  • 18. CSS 3. Experiencia de usuario de última generación Selectores Efectos en textos Animaciones Tipografías personalizadas Esquinas redondeadas Transformaciones Semi Transparencias Organización en columnas Gradientes Sombras Colores personalizados
  • 19. jQuery Mobile. Desarrollo móvil rápido y sencillo Javascript no intrusivo Máxima compatibilidad Plugins ‘write less, do more’ Ampliamente usado Muy ligero Documentación
  • 20. Viabilidad técnica SI NO • Geolocalización (GPS) • Otros sensores • Reproducción multimedia • Cámara • Sensores de movimiento • Notificaciones • Almacenar datos locales • Web GL • Acceso offline • Alto rendimiento http://mobilehtml5.org/
  • 22. Construyendo nuestra aplicación multiplataforma • Primeros pasos • Componentes UI • Capacidades HTML 5 • Diseño personalizado • Demos
  • 23. Primeros pasos. El documento <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>HTML 5 Demo</title> <!-- CSS --> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" /> <!-- jQuery Core --> <script src="http://code.jquery.com/jquery-1.6.4.min.js"></script> <!-- jQuery Mobile --> <script type="text/javascript" src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"> </script> </head> <body> </body> </html>
  • 24. Primeros pasos. El viewport <head> .... <meta name=”viewport” content=”width=device-width, initial-scale=1”> </head> <!-- Sin Zoom --> <meta .... user-scalable=no”>
  • 25. Primeros pasos. Estructura de la aplicación <body> <div data-role="page"> <div data-role="header"> <h1>Header</h1> </div> <div data- role="content"> <p>Content</p> </div> <div data-role="footer" data-position="fixed"> <h4>Footer</h4> </div> </div> </body>
  • 30. Componentes UI. Menu y Toolbar <div data-role="content"> <ul data-role="listview"> <li><a href="#geolocation">Geolocation API</a></li> <li><a href="#canvas">Canvas</a></li> <li><a href="#storage">Offline Storage</a></li> </ul> </div> <div data-role="footer" data-position="fixed"> <div data-role="navbar"> <ul> <li><a href="#main-menu">Home</a></li> <li><a href="#geolocation">GPS</a></li> <li><a href="#canvas">Canvas</a></li> <li><a href="#storage">Storage</a></li> </ul> </div> </div>
  • 31. Capacidades HTML5. Geolocalización <script type="text/javascript"> $('#geolocation').live('pageinit', function(){ navigator.geolocation.getCurrentPosition (function(pos) { var lat = pos.coords.latitude; var lng = pos.coords.longitude; ... Lógica de invocación del mapa Google ... </script> <div data-role="page" id="geolocation" data-add-back-btn="true"> ... Header ... <div data-role="content"> <p>Wait for the map...</p> </div> ... Footer ...</div>
  • 32. Capacidades HTML5. Canvas var context = $('#theCanvas') [0].getContext('2d');context.beginPath();context.rect(20, 20, 200, 100); context.fillStyle = context.createLinearGradient(20, 20, 220, 120);context.fill(); <div data-role="page" id="canvas" data-add-back-btn="true"> ... Header ... <div data-role="content"> <canvas id=”theCanvas”></canvas> </div> ... Footer ...</div>
  • 33. Capacidades HTML5. Almacenamiento de datos var $input = $('#item'); var arr = localStorage.items ? JSON.parse(localStorage.items) : [];arr.push($input.val());localStorage.items = JSON.stringify(arr); ... Lógica jQuery para refrescar la lista ... <div data-role="page" id="storage" data-add-back-btn="true"> ... Header ... <input type="text" id="item" placeholder="Add Item..." value=""/> <input type="button" id="add_btn" value="Add Item" data- icon="plus"/> <ol data-role="listview" data-inset="true"></ol> ... Footer ...</div>
  • 34. Diseño personalizado. • CSS • jQuery Theme Roller • Fireworks Theme editor <head> ... <link rel="stylesheet" href="css/custom_css.min.css" /> ... </head>
  • 35. Demos
  • 36. Publicando nuestra aplicación multiplataforma • Como aplicación nativa • Como aplicación híbrida • Como aplicación web
  • 39. Como aplicación web. Instalación <head> ... <link rel="apple-touch-icon" href="icons/icon57.png" sizes="57x57"> <link rel="apple-touch-icon" href="icons/icon114.png" sizes="114x114"> <link rel="apple-touch-icon" href="icons/icon72.png" sizes="72x72"> <link rel="apple-touch-icon" href="icons/icon80.png" sizes="80x80" > <link rel="apple-touch-icon-precomposed" href="icons/icon57.png" sizes="android-only"> ... </head>
  • 40. Como aplicación web. Funcionamiento offline CACHE MANIFEST: # version 1.0 # Archivos jQuery http://code.jquery.com/jquery-1.6.1.min.js <html manifest="offline.appcache"> http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js ... ... # Archivos de la aplicación </html> icons/* NETWORK: # Archivos que no se deben cachear
  • 41. Conclusión Buena solución, pero no definitiva.
  • 42. Carlos Alonso Pérez Senior Developer - Unkasoft calonso@unkasoft.com Twitter: @calonso http://www.linkedin.com/in/calonsoperez Gracias! Aula Virtual: http://www.interlat.co/moodle/ www.interlat.co – info@interlat.co - http://www.facebook.com/interlat - www.twitter.com/interlat - PBX: 57(1) 658 2959 - Bogotá - Colombia