encuentro linux 2011

116
Desarrollo rápido de aplicaciones móviles Felipe Hernandez @felipeDev Luis Cruz @lcruzc Experimento Social

Upload: felipe-andres

Post on 20-May-2015

614 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Encuentro Linux 2011

Desarrollo rápido de aplicaciones móviles

Felipe Hernandez@felipeDev

Luis Cruz@lcruzc

Experimento Social

Page 2: Encuentro Linux 2011

Acerca de los expositores

Page 3: Encuentro Linux 2011

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

Page 4: Encuentro Linux 2011

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

Page 5: Encuentro Linux 2011

¿Por qué estamos acá?

Page 6: Encuentro Linux 2011

Para derribar unos cuantos mitos

Page 7: Encuentro Linux 2011

Mito 1: No es sencillo hacer aplicaciones

móviles

Page 8: Encuentro Linux 2011

Mito 2: Tengo que gastarme unos cuantos

duros para que mi aplicación salga al aire

Page 9: Encuentro Linux 2011

Mito 3: Debo invertir mucho tiempo en

codificar el backend y frontend

Page 10: Encuentro Linux 2011

Mito 4: Debo aprender varios lenguajes nuevos

dependiendo de la plataforma

Page 11: Encuentro Linux 2011

backend

front-end

Page 12: Encuentro Linux 2011

FRONT-END

Page 13: Encuentro Linux 2011

To be or not to be...

Page 14: Encuentro Linux 2011

To be or not to be...Develop for Android or iOS...

Page 15: Encuentro Linux 2011

Supongamos que dentro de esta sala hay una bomba...

Page 16: Encuentro Linux 2011
Page 17: Encuentro Linux 2011

(Que dramático el ejemplo)

Page 18: Encuentro Linux 2011

Y la única forma de desactivarla es...

Page 19: Encuentro Linux 2011

Entre todos ponernos de acuerdo si hacemos nuestra

app para Android o iOS

Page 20: Encuentro Linux 2011

Entre todos ponernos de acuerdo si hacemos nuestra

app para Android o iOS

Page 21: Encuentro Linux 2011

En un minuto!!

Page 22: Encuentro Linux 2011

15 Segundos

Page 23: Encuentro Linux 2011

30 Segundos

Page 24: Encuentro Linux 2011

45 Segundos

Page 25: Encuentro Linux 2011

59 Segundos

Page 26: Encuentro Linux 2011
Page 27: Encuentro Linux 2011

Alrededor de un 30% de usuarios SmartPhone,

utiliza iPhone

Page 28: Encuentro Linux 2011

Sobre un 45% de estos usuarios, utiliza Android

Page 29: Encuentro Linux 2011

¿Entonces desarrollo dos vecesla misma app?

Page 30: Encuentro Linux 2011

¿Entonces desarrollo dos vecesla misma app?

Page 31: Encuentro Linux 2011
Page 32: Encuentro Linux 2011

Titanium Mobile

Page 33: Encuentro Linux 2011

¿Qué es?

Page 34: Encuentro Linux 2011

Un Crossplatform Framework

Page 35: Encuentro Linux 2011

Según AppCelerator:

Page 36: Encuentro Linux 2011

“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...

Page 37: Encuentro Linux 2011

Según @FelipeDev

Page 38: Encuentro Linux 2011

Se generan aplicaciones nativas

Page 39: Encuentro Linux 2011

Compiladas a lenguajeJava y ObjectiveC

Page 40: Encuentro Linux 2011

Compiladas a lenguajeJava y ObjectiveC

Page 41: Encuentro Linux 2011

Multiplataforma

Page 42: Encuentro Linux 2011

Pero de otra forma ;)

Page 43: Encuentro Linux 2011
Page 44: Encuentro Linux 2011

¿Y como lo hace?

Page 45: Encuentro Linux 2011

Con JavaScript!

Page 46: Encuentro Linux 2011

Muuuucho JavaScript!

Page 47: Encuentro Linux 2011
Page 48: Encuentro Linux 2011

¿Como se ocupa?

Page 49: Encuentro Linux 2011
Page 50: Encuentro Linux 2011

Algunas de las empresas que utilizan Titanium

Page 51: Encuentro Linux 2011
Page 52: Encuentro Linux 2011
Page 53: Encuentro Linux 2011

Y bueno, a lo que vinimos...

Page 54: Encuentro Linux 2011

Hands On!!

Page 55: Encuentro Linux 2011

BackEnd

Page 56: Encuentro Linux 2011
Page 57: Encuentro Linux 2011

¿Otro más?

Page 58: Encuentro Linux 2011
Page 59: Encuentro Linux 2011

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

Page 60: Encuentro Linux 2011

El ORM de AppEngine es suficiente (para mí)

Page 61: Encuentro Linux 2011
Page 62: Encuentro Linux 2011

¡Ya no tengo todos los datos!

Page 63: Encuentro Linux 2011

:(

Page 64: Encuentro Linux 2011

“Micro” framework

Page 65: Encuentro Linux 2011

Keep It Simple, Stupid!

Page 66: Encuentro Linux 2011

Simple y de pequeño tamaño

No toma muchas decisiones por ti

Convenciones

Instala lo que necesitas

Page 67: Encuentro Linux 2011

$ virtualenv .$ source bin/activate$ bin/pip install Flask

Page 68: Encuentro Linux 2011

Primer Programa (un clásico)

Page 69: Encuentro Linux 2011

from flask import Flaskapp = Flask(__name__)

@app.route("/")def hello(): return "Hello World!"

if __name__ == "__main__": app.run()

Page 70: Encuentro Linux 2011

$ source ENV/bin/activate

$ python hello.py * Running on http:/127.0.0.1:5000/

Page 71: Encuentro Linux 2011
Page 72: Encuentro Linux 2011

¿Lo juzgan por su tamaño?

Page 73: Encuentro Linux 2011

...pues no deberían porque su aliado es la

fuerza

Page 74: Encuentro Linux 2011

“based on Werkzeug, Jinja 2 and good

intentions.”

Page 75: Encuentro Linux 2011

Así cualquiera...

Page 76: Encuentro Linux 2011

Armin Ronacher

Page 77: Encuentro Linux 2011

Plantillas

Page 78: Encuentro Linux 2011

@app.route("/")def index():anuncios = Anuncio.all() return render_template('index.html', anuncios=anuncios)

Page 79: Encuentro Linux 2011
Page 80: Encuentro Linux 2011

<h1>Anuncios <span class="dark">disponibles</span></h1>

{% for anuncio in anuncios %} <div class="post"> <p> <span class="title">{{anuncio.titulo}}</span>

{{anuncio.empresa}} - {{anuncio.web}} </p> <p> <a href="{{ url_for('detalle',

key=anuncio.key()) }}">Más información</a> </p>

</div>{% endfor %}

Page 81: Encuentro Linux 2011
Page 82: Encuentro Linux 2011

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"><html lang="en"><head> {% block head %} <title>{% block title %}{% endblock %} - My Webpage</title> {% endblock %}</head><body> <div id="content">{% block content %}{% endblock %}</div> <div id="footer"> {% block footer %} &copy; Copyright 2008 by you. {% endblock %} </div></body></html>

Page 83: Encuentro Linux 2011

{% extends "base.html" %}{% block title %}Index{% endblock %}{% block head %} {{ super() }} <style type="text/css"> .important { color: #336699; } </style>{% endblock %}{% block content %} <h1>Index</h1> <p class="important"> Welcome on my awesome homepage. </p>{% endblock %}

Page 84: Encuentro Linux 2011

2

1

{% macro input(name, value='', type='text', size=20) -%} <input type="{{ type }}" name="{{ name }}" value="{{value|e }}" size="{{ size }}">{%- endmacro %}

<p>{{ input('username') }}</p><p>{{ input('password', type='password') }}</p>

Page 85: Encuentro Linux 2011

Ruteo

Page 86: Encuentro Linux 2011

@app.route("/")def index():anuncios = Anuncio.all() return render_template('index.html', anuncios=anuncios)@app.route("/publicar/", methods=("GET", "POST")) def publicar(): pass

@app.route("/detalle/<key>")def detalle(key): pass

Page 87: Encuentro Linux 2011

app.add_url_rule('/', 'index', index)app.add_url_rule('/users/<int:user_id>',

show_user, methods=['GET', 'PUT', 'DELETE'])

Page 88: Encuentro Linux 2011

Depurador

Page 89: Encuentro Linux 2011
Page 90: Encuentro Linux 2011

Y otras cosas sencillas...

Page 91: Encuentro Linux 2011

from flask import [email protected](404)def page_not_found(error): return render_template('not_found.html'), 404

Page 92: Encuentro Linux 2011

from google.appengine.api import [email protected]_processordef pre_render(): return dictcurrent_user users.get_current_user())

Page 93: Encuentro Linux 2011

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

Page 94: Encuentro Linux 2011

TestingBlueprints

Signals

Pluggable Views

Message Flashing

Page 95: Encuentro Linux 2011

Extensiones

Page 96: Encuentro Linux 2011

Flask-Admin

Flask-Babel

Flask-OAuth

Flask-SQLAlchemy

Flask-MongoKit

Flask-WTF

Flask-Cache

Flask-MongoKit

Flask-OpenID

Y otras!

Page 97: Encuentro Linux 2011

:)

Page 98: Encuentro Linux 2011

Otras razones...

Page 99: Encuentro Linux 2011

Otra herramienta más para tu caja

Page 100: Encuentro Linux 2011

“mejor” en ciertos contextos

Page 101: Encuentro Linux 2011

...puedes aprender ¡es simple de entender!

Page 102: Encuentro Linux 2011

Flask en proyectos FOSS

Page 103: Encuentro Linux 2011

MoinMoin Wiki(2.0)http://moinmo.in/MoinMoin2.0

Page 104: Encuentro Linux 2011

Sugar WebSDKhttp://git.sugarlabs.org/websdk

Page 105: Encuentro Linux 2011

Inveniohttp://invenio-software.org

Page 106: Encuentro Linux 2011

Opciones de Deploy

Page 107: Encuentro Linux 2011
Page 108: Encuentro Linux 2011

Comunidad muy activa y en crecimiento

Excelente documentación

Versión 0.8

Licencia BSD

flask.pocoo.org

Page 109: Encuentro Linux 2011

Hands on!!

Page 110: Encuentro Linux 2011

Y por último!

Page 111: Encuentro Linux 2011

¿Conoces algo más fuerte que el Titanio?

Page 112: Encuentro Linux 2011

ADAMANTIO!

Page 113: Encuentro Linux 2011

Como el titanio... Pero full OpenSource!!

Page 114: Encuentro Linux 2011

Te invitamos a unirte a nuestra comunidad

de desarrollo de Adamantio

Page 115: Encuentro Linux 2011

developer.adamantio.org

Page 116: Encuentro Linux 2011

No olvides visitarnos en:www.imagemaker.cl

www.experimentosocial.clwww.meetup.com/MobDev