encuentro linux 2011

Post on 20-May-2015

614 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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

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 %} &copy; 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

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

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

Inveniohttp://invenio-software.org

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

top related