encuentro linux 2011
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 AppEngineTRANSCRIPT
![Page 1: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/1.jpg)
Desarrollo rápido de aplicaciones móviles
Felipe Hernandez@felipeDev
Luis Cruz@lcruzc
Experimento Social
![Page 2: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/2.jpg)
Acerca de los expositores
![Page 3: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/3.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/4.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/5.jpg)
¿Por qué estamos acá?
![Page 6: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/6.jpg)
Para derribar unos cuantos mitos
![Page 7: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/7.jpg)
Mito 1: No es sencillo hacer aplicaciones
móviles
![Page 8: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/8.jpg)
Mito 2: Tengo que gastarme unos cuantos
duros para que mi aplicación salga al aire
![Page 9: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/9.jpg)
Mito 3: Debo invertir mucho tiempo en
codificar el backend y frontend
![Page 10: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/10.jpg)
Mito 4: Debo aprender varios lenguajes nuevos
dependiendo de la plataforma
![Page 11: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/11.jpg)
backend
front-end
![Page 12: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/12.jpg)
FRONT-END
![Page 13: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/13.jpg)
To be or not to be...
![Page 14: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/14.jpg)
To be or not to be...Develop for Android or iOS...
![Page 15: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/15.jpg)
Supongamos que dentro de esta sala hay una bomba...
![Page 16: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/16.jpg)
![Page 17: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/17.jpg)
(Que dramático el ejemplo)
![Page 18: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/18.jpg)
Y la única forma de desactivarla es...
![Page 19: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/19.jpg)
Entre todos ponernos de acuerdo si hacemos nuestra
app para Android o iOS
![Page 20: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/20.jpg)
Entre todos ponernos de acuerdo si hacemos nuestra
app para Android o iOS
![Page 21: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/21.jpg)
En un minuto!!
![Page 22: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/22.jpg)
15 Segundos
![Page 23: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/23.jpg)
30 Segundos
![Page 24: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/24.jpg)
45 Segundos
![Page 25: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/25.jpg)
59 Segundos
![Page 26: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/26.jpg)
![Page 27: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/27.jpg)
Alrededor de un 30% de usuarios SmartPhone,
utiliza iPhone
![Page 28: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/28.jpg)
Sobre un 45% de estos usuarios, utiliza Android
![Page 29: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/29.jpg)
¿Entonces desarrollo dos vecesla misma app?
![Page 30: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/30.jpg)
¿Entonces desarrollo dos vecesla misma app?
![Page 31: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/31.jpg)
![Page 32: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/32.jpg)
Titanium Mobile
![Page 33: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/33.jpg)
¿Qué es?
![Page 34: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/34.jpg)
Un Crossplatform Framework
![Page 35: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/35.jpg)
Según AppCelerator:
![Page 36: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/36.jpg)
“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](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/37.jpg)
Según @FelipeDev
![Page 38: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/38.jpg)
Se generan aplicaciones nativas
![Page 39: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/39.jpg)
Compiladas a lenguajeJava y ObjectiveC
![Page 40: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/40.jpg)
Compiladas a lenguajeJava y ObjectiveC
![Page 41: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/41.jpg)
Multiplataforma
![Page 42: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/42.jpg)
Pero de otra forma ;)
![Page 43: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/43.jpg)
![Page 44: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/44.jpg)
¿Y como lo hace?
![Page 45: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/45.jpg)
Con JavaScript!
![Page 46: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/46.jpg)
Muuuucho JavaScript!
![Page 47: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/47.jpg)
![Page 48: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/48.jpg)
¿Como se ocupa?
![Page 49: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/49.jpg)
![Page 50: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/50.jpg)
Algunas de las empresas que utilizan Titanium
![Page 51: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/51.jpg)
![Page 52: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/52.jpg)
![Page 53: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/53.jpg)
Y bueno, a lo que vinimos...
![Page 54: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/54.jpg)
Hands On!!
![Page 55: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/55.jpg)
BackEnd
![Page 56: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/56.jpg)
![Page 57: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/57.jpg)
¿Otro más?
![Page 58: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/58.jpg)
![Page 59: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/59.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/60.jpg)
El ORM de AppEngine es suficiente (para mí)
![Page 61: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/61.jpg)
![Page 62: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/62.jpg)
¡Ya no tengo todos los datos!
![Page 63: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/63.jpg)
:(
![Page 64: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/64.jpg)
“Micro” framework
![Page 65: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/65.jpg)
Keep It Simple, Stupid!
![Page 66: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/66.jpg)
Simple y de pequeño tamaño
No toma muchas decisiones por ti
Convenciones
Instala lo que necesitas
![Page 67: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/67.jpg)
$ virtualenv .$ source bin/activate$ bin/pip install Flask
![Page 68: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/68.jpg)
Primer Programa (un clásico)
![Page 69: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/69.jpg)
from flask import Flaskapp = Flask(__name__)
@app.route("/")def hello(): return "Hello World!"
if __name__ == "__main__": app.run()
![Page 70: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/70.jpg)
$ source ENV/bin/activate
$ python hello.py * Running on http:/127.0.0.1:5000/
![Page 71: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/71.jpg)
![Page 72: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/72.jpg)
¿Lo juzgan por su tamaño?
![Page 73: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/73.jpg)
...pues no deberían porque su aliado es la
fuerza
![Page 74: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/74.jpg)
“based on Werkzeug, Jinja 2 and good
intentions.”
![Page 75: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/75.jpg)
Así cualquiera...
![Page 76: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/76.jpg)
Armin Ronacher
![Page 77: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/77.jpg)
Plantillas
![Page 78: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/78.jpg)
@app.route("/")def index():anuncios = Anuncio.all() return render_template('index.html', anuncios=anuncios)
![Page 79: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/79.jpg)
![Page 80: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/80.jpg)
<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](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/81.jpg)
![Page 82: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/82.jpg)
<!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>
![Page 83: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/83.jpg)
{% 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](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/84.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/85.jpg)
Ruteo
![Page 86: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/86.jpg)
@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](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/87.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/88.jpg)
Depurador
![Page 89: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/89.jpg)
![Page 90: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/90.jpg)
Y otras cosas sencillas...
![Page 91: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/91.jpg)
from flask import [email protected](404)def page_not_found(error): return render_template('not_found.html'), 404
![Page 92: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/92.jpg)
from google.appengine.api import [email protected]_processordef pre_render(): return dictcurrent_user users.get_current_user())
![Page 93: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/93.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/94.jpg)
TestingBlueprints
Signals
Pluggable Views
Message Flashing
![Page 95: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/95.jpg)
Extensiones
![Page 96: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/96.jpg)
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](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/97.jpg)
:)
![Page 98: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/98.jpg)
Otras razones...
![Page 99: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/99.jpg)
Otra herramienta más para tu caja
![Page 100: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/100.jpg)
“mejor” en ciertos contextos
![Page 101: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/101.jpg)
...puedes aprender ¡es simple de entender!
![Page 102: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/102.jpg)
Flask en proyectos FOSS
![Page 106: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/106.jpg)
Opciones de Deploy
![Page 107: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/107.jpg)
![Page 108: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/108.jpg)
Comunidad muy activa y en crecimiento
Excelente documentación
Versión 0.8
Licencia BSD
flask.pocoo.org
![Page 109: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/109.jpg)
Hands on!!
![Page 110: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/110.jpg)
Y por último!
![Page 111: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/111.jpg)
¿Conoces algo más fuerte que el Titanio?
![Page 112: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/112.jpg)
ADAMANTIO!
![Page 113: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/113.jpg)
Como el titanio... Pero full OpenSource!!
![Page 114: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/114.jpg)
Te invitamos a unirte a nuestra comunidad
de desarrollo de Adamantio
![Page 115: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/115.jpg)
developer.adamantio.org
![Page 116: Encuentro Linux 2011](https://reader038.vdocuments.pub/reader038/viewer/2022102805/555c3b40d8b42a0b038b4a1b/html5/thumbnails/116.jpg)
No olvides visitarnos en:www.imagemaker.cl
www.experimentosocial.clwww.meetup.com/MobDev