View
615
Download
1
Category
Preview:
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
Citation preview
Desarrollo rápido de aplicaciones móviles
Felipe Hernandez@felipeDev
Luis Cruz@lcruzc
Experimento Social
Acerca de los expositores
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
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
¿Por qué estamos acá?
Para derribar unos cuantos mitos
Mito 1: No es sencillo hacer aplicaciones
móviles
Mito 2: Tengo que gastarme unos cuantos
duros para que mi aplicación salga al aire
Mito 3: Debo invertir mucho tiempo en
codificar el backend y frontend
Mito 4: Debo aprender varios lenguajes nuevos
dependiendo de la plataforma
backend
front-end
FRONT-END
To be or not to be...
To be or not to be...Develop for Android or iOS...
Supongamos que dentro de esta sala hay una bomba...
(Que dramático el ejemplo)
Y la única forma de desactivarla es...
Entre todos ponernos de acuerdo si hacemos nuestra
app para Android o iOS
Entre todos ponernos de acuerdo si hacemos nuestra
app para Android o iOS
En un minuto!!
15 Segundos
30 Segundos
45 Segundos
59 Segundos
Alrededor de un 30% de usuarios SmartPhone,
utiliza iPhone
Sobre un 45% de estos usuarios, utiliza Android
¿Entonces desarrollo dos vecesla misma app?
¿Entonces desarrollo dos vecesla misma app?
Titanium Mobile
¿Qué es?
Un Crossplatform Framework
Según AppCelerator:
“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...
Según @FelipeDev
Se generan aplicaciones nativas
Compiladas a lenguajeJava y ObjectiveC
Compiladas a lenguajeJava y ObjectiveC
Multiplataforma
Pero de otra forma ;)
¿Y como lo hace?
Con JavaScript!
Muuuucho JavaScript!
¿Como se ocupa?
Algunas de las empresas que utilizan Titanium
Y bueno, a lo que vinimos...
Hands On!!
BackEnd
¿Otro más?
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
El ORM de AppEngine es suficiente (para mí)
¡Ya no tengo todos los datos!
:(
“Micro” framework
Keep It Simple, Stupid!
Simple y de pequeño tamaño
No toma muchas decisiones por ti
Convenciones
Instala lo que necesitas
$ virtualenv .$ source bin/activate$ bin/pip install Flask
Primer Programa (un clásico)
from flask import Flaskapp = Flask(__name__)
@app.route("/")def hello(): return "Hello World!"
if __name__ == "__main__": app.run()
$ source ENV/bin/activate
$ python hello.py * Running on http:/127.0.0.1:5000/
¿Lo juzgan por su tamaño?
...pues no deberían porque su aliado es la
fuerza
“based on Werkzeug, Jinja 2 and good
intentions.”
Así cualquiera...
Armin Ronacher
Plantillas
@app.route("/")def index():anuncios = Anuncio.all() return render_template('index.html', anuncios=anuncios)
<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 %}
<!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 %} © Copyright 2008 by you. {% endblock %} </div></body></html>
{% 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 %}
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>
Ruteo
@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
app.add_url_rule('/', 'index', index)app.add_url_rule('/users/<int:user_id>',
show_user, methods=['GET', 'PUT', 'DELETE'])
Depurador
Y otras cosas sencillas...
from flask import render_template@app.errorhandler(404)def page_not_found(error): return render_template('not_found.html'), 404
from google.appengine.api import users@appmain.context_processordef pre_render(): return dictcurrent_user users.get_current_user())
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
TestingBlueprints
Signals
Pluggable Views
Message Flashing
Extensiones
Flask-Admin
Flask-Babel
Flask-OAuth
Flask-SQLAlchemy
Flask-MongoKit
Flask-WTF
Flask-Cache
Flask-MongoKit
Flask-OpenID
Y otras!
:)
Otras razones...
Otra herramienta más para tu caja
“mejor” en ciertos contextos
...puedes aprender ¡es simple de entender!
Flask en proyectos FOSS
Opciones de Deploy
Comunidad muy activa y en crecimiento
Excelente documentación
Versión 0.8
Licencia BSD
flask.pocoo.org
Hands on!!
Y por último!
¿Conoces algo más fuerte que el Titanio?
ADAMANTIO!
Como el titanio... Pero full OpenSource!!
Te invitamos a unirte a nuestra comunidad
de desarrollo de Adamantio
developer.adamantio.org
No olvides visitarnos en:www.imagemaker.cl
www.experimentosocial.clwww.meetup.com/MobDev
Recommended