Encuentro Linux 2011

923 views

Published on

Presentación realizada en Pto Montt durante el Encuentro Linux 2011.
El tema fue el desarrollo de aplicaciones móviles multi-plataforma con backend en Flask sobre AppEngine

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
923
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
11
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Encuentro Linux 2011

  1. 1. Desarrollo rápido de aplicaciones móviles Felipe Hernandez @felipeDev Luis Cruz @lcruzc Experimento Social
  2. 2. Acerca de los expositores
  3. 3. Felipe Hernández R. @FelipeDev Desarrolla aplicaciones móviles en ImageMaker IT. Organiza MeetUp.com/MobDev Parte del equipo de Adamantio Framework Dicta clases de desarrollo en Android
  4. 4. Luis Cruz @lcruzc Y por sobre todo un apasionado desarrollador! about.me/lcruz CTO y Co-Founder de Experimento Social Ex-Gerente de Desarrollo de Imagemaker IT
  5. 5. ¿Por qué estamos acá?
  6. 6. Para derribar unos cuantos mitos
  7. 7. Mito 1: No es sencillo hacer aplicaciones móviles
  8. 8. Mito 2: Tengo que gastarme unos cuantos duros para que mi aplicación salga al aire
  9. 9. Mito 3: Debo invertir mucho tiempo en codificar el backend y frontend
  10. 10. Mito 4: Debo aprender varios lenguajes nuevos dependiendo de la plataforma
  11. 11. backend front-end
  12. 12. FRONT-END
  13. 13. To be or not to be...
  14. 14. To be or not to be... Develop for Android or iOS...
  15. 15. Supongamos que dentro de esta sala hay una bomba...
  16. 17. (Que dramático el ejemplo)
  17. 18. Y la única forma de desactivarla es...
  18. 19. Entre todos ponernos de acuerdo si hacemos nuestra app para Android o iOS
  19. 20. Entre todos ponernos de acuerdo si hacemos nuestra app para Android o iOS
  20. 21. En un minuto!!
  21. 22. 15 Segundos
  22. 23. 30 Segundos
  23. 24. 45 Segundos
  24. 25. 59 Segundos
  25. 27. Alrededor de un 30% de usuarios SmartPhone, utiliza iPhone
  26. 28. Sobre un 45% de estos usuarios, utiliza Android
  27. 29. ¿Entonces desarrollo dos veces la misma app?
  28. 30. ¿Entonces desarrollo dos veces la misma app?
  29. 32. Titanium Mobile
  30. 33. ¿Qué es?
  31. 34. Un Crossplatform Framework
  32. 35. Según AppCelerator:
  33. 36. “ Titanium ” traduce las habilidades aprendidas en aplicaciones nativas que se ven y operan tal como si hubiesen sido escritas en ObjectiveC o Java. Con más de 300 Apis y bla bla bla yakiris makis...
  34. 37. Según @FelipeDev
  35. 38. Se generan aplicaciones nativas
  36. 39. Compiladas a lenguaje Java y ObjectiveC
  37. 40. Compiladas a lenguaje Java y ObjectiveC
  38. 41. Multiplataforma
  39. 42. Pero de otra forma ;)
  40. 44. ¿Y como lo hace?
  41. 45. Con JavaScript!
  42. 46. Muuuucho JavaScript!
  43. 48. ¿Como se ocupa?
  44. 50. Algunas de las empresas que utilizan Titanium
  45. 53. Y bueno, a lo que vinimos...
  46. 54. Hands On!!
  47. 55. BackEnd
  48. 57. ¿Otro más?
  49. 59. Copy the following folders into your project django-testapp > <project> django-nonrel/django => <project>/djangodjangotoolbox/djangotoolbox => <project>/djangotoolboxdjango-autoload/autoload => <project>/autoloaddjango-dbindexer/dbindexer => <project>/dbindexerdjangoappengine => <project>/djangoappengine
  50. 60. El ORM de AppEngine es suficiente (para mí)
  51. 62. ¡Ya no tengo todos los datos!
  52. 63. :(
  53. 64. “ Micro ” framework
  54. 65. Keep It Simple, Stupid!
  55. 66. <ul><li>Simple y de pequeño tamaño </li></ul><ul><li>No toma muchas decisiones por ti </li></ul><ul><li>Convenciones </li></ul><ul><li>Instala lo que necesitas </li></ul>
  56. 67. $ virtualenv . $ source bin/activate $ bin/pip install Flask
  57. 68. Primer Programa (un clásico)
  58. 69. from flask import Flask app = Flask( __name__ ) @app.route(&quot;/&quot;) def hello(): return &quot;Hello World!&quot; if __name__ == &quot;__main__&quot;: app.run()
  59. 70. $ source ENV/bin/activate $ python hello.py * Running on http:/127.0.0.1:5000/
  60. 72. ¿Lo juzgan por su tamaño?
  61. 73. ...pues no deberían porque su aliado es la fuerza
  62. 74. “ based on Werkzeug, Jinja 2 and good intentions. ”
  63. 75. Así cualquiera...
  64. 76. Armin Ronacher
  65. 77. Plantillas
  66. 78. @app.route(&quot;/&quot;)def index(): anuncios = Anuncio.all() return render_template('index.html', anuncios=anuncios)
  67. 80. <h1>Anuncios <span class=&quot;dark&quot;>disponibles</span></h1> {% for anuncio in anuncios %} <div class=&quot;post&quot;> <p> <span class=&quot;title&quot;> {{anuncio.titulo}} </span> {{anuncio.empresa}} - {{anuncio.web}} </p> <p> <a href=&quot; {{ url_for('detalle', key=anuncio.key()) }} &quot;>Más información</a> </p> </div> {% endfor %}
  68. 82. <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot;> <html lang=&quot;en&quot;> <head> {% block head %} <title> {% block title %}{% endblock %} - My Webpage</title> {% endblock %} </head> <body> <div id=&quot;content&quot;> {% block content %}{% endblock %} </div> <div id=&quot;footer&quot;> {% block footer %} &copy; Copyright 2008 by you. {% endblock %} </div> </body> </html>
  69. 83. {% extends &quot;base.html&quot; %} {% block title %} Index {% endblock %} {% block head %} {{ super() }} <style type=&quot;text/css&quot;> .important { color: #336699; } </style> {% endblock %} {% block content %} <h1>Index</h1> <p class=&quot;important&quot;> Welcome on my awesome homepage. </p> {% endblock %}
  70. 84. 2 1 {% macro input(name, value='', type='text', size=20) -%} <input type=&quot;{{ type }}&quot; name=&quot;{{ name }}&quot; value=&quot;{{value|e }}&quot; size=&quot;{{ size }}&quot;>{%- endmacro %} <p>{{ input('username') }}</p><p>{{ input('password', type='password') }}</p>
  71. 85. Ruteo
  72. 86. @app.route(&quot;/&quot;) def index(): anuncios = Anuncio.all() return render_template('index.html', anuncios=anuncios) @app.route(&quot;/publicar/&quot;, methods=(&quot;GET&quot;, &quot;POST&quot;)) def publicar(): pass @app.route(&quot;/detalle/<key>&quot;) def detalle(key): pass
  73. 87. app.add_url_rule(' / ', 'index', index)app.add_url_rule(' /users/<int:user_id> ', show_user, methods=['GET', 'PUT', 'DELETE'])
  74. 88. Depurador
  75. 90. Y otras cosas sencillas...
  76. 91. from flask import render_template @app.errorhandler(404) def page_not_found(error): return render_template('not_found.html'), 404
  77. 92. from google.appengine.api import users @ appmain.context_processor def pre_render(): return dictcurrent_user users.get_current_user())
  78. 93. class FlaskrTestCase(unittest.TestCase): def setUp(self): self.app = mymodule.app.test_client() def tearDown(self): pass def test_empty_db(self): rv = self.app.get('/') assert 'No entries here' in rv.data
  79. 94. Testing Blueprints Signals Pluggable Views Message Flashing
  80. 95. Extensiones
  81. 96. <ul><li>Flask-Admin </li></ul><ul><li>Flask-Babel </li></ul><ul><li>Flask-OAuth </li></ul><ul><li>Flask-SQLAlchemy </li></ul><ul><li>Flask-MongoKit </li></ul><ul><li>Flask-WTF </li></ul><ul><li>Flask-Cache </li></ul><ul><li>Flask-MongoKit </li></ul><ul><li>Flask-OpenID </li></ul><ul><li>Y otras! </li></ul>
  82. 97. :)
  83. 98. Otras razones...
  84. 99. Otra herramienta más para tu caja
  85. 100. “ mejor ” en ciertos contextos
  86. 101. ...puedes aprender ¡es simple de entender!
  87. 102. Flask en proyectos FOSS
  88. 103. MoinMoin Wiki(2.0) http://moinmo.in/MoinMoin2.0
  89. 104. Sugar WebSDK http://git.sugarlabs.org/websdk
  90. 105. Invenio http://invenio-software.org
  91. 106. Opciones de Deploy
  92. 108. <ul><li>Comunidad muy activa y en crecimiento </li></ul><ul><li>Excelente documentación </li></ul><ul><li>Versión 0.8 </li></ul><ul><li>Licencia BSD </li></ul><ul><li>flask.pocoo.org </li></ul>
  93. 109. Hands on!!
  94. 110. Y por último!
  95. 111. ¿Conoces algo más fuerte que el Titanio?
  96. 112. ADAMANTIO!
  97. 113. Como el titanio... Pero full OpenSource!!
  98. 114. Te invitamos a unirte a nuestra comunidad de desarrollo de Adamantio
  99. 115. developer.adamantio.org
  100. 116. No olvides visitarnos en: www.imagemaker.cl www.experimentoso cial.cl www.meetup.com/M obDev

×