Local blog for Spanish speaking developers in LATAM
El poder de Polymer y YouTube desde la comunidad, una nueva entrega experiencia
jueves, 23 de abril de 2015
YouTube permite personalizar su reproductor de video e integrarlo en nuestras páginas y aplicaciones para crear experiencias con videos interactivos.
Es un gran desafío personalizar el reproductor de modo de lograr una experiencia consistente a través de diferentes dispositivos, con distintos tamaños de pantalla, como móviles, TV, laptops y tablets. ¿
Como podemos hacerlo?
El componente Web del reproductor de Youtube
Gracias a Polymer y los componentes de YouTube podemos utilizar y personalizar el reproductor. Podemos configurar sus parámetros, gestionar su estado y sus eventos!
Los parámetros más importantes son el
videoid
, con el que especificamos el video que queremos ver, la altura y ancho (parámetros height y width), y finalmente un parámetro que permite simular el modo
Chromeless
(el reproductor sin controles y branding..), de modo de crear nuestros propios controles para reproducir el video.
Recreando caso de éxito "Videos interactivos, Knorr Mexico"
Recreemos la experiencia con videos interactivos de Knorr México, utilizando Polymer, Fig.1:
Fig.1
En esta experiencia se logra ocultado los controles estándar del reproductor (utilizando el modo
Chromeless
), y mostrando en cambio controles personalizados. Además se comienza en forma automática la reproducción de video.
Como lo podemos hacer con el componente web de YouTube? Simple:
Vamos a configurar el componente de YouTube con reproducción automática y sin controles (
Chromeless
):
<google-youtube
videoid
="3T87lMYzqf4"
height
="100%"
width
="100%"
rel
="0"
autoplay
="1"
chromeless
>
</google-youtube>
Veamos el ejemplo:
http://matiasmolinas.github.io/google-youtube/components/google-youtube/demo.html
Puedes hacer un fork del proyecto en Github:
https://github.com/matiasmolinas/google-youtube
En el ejemplo solo falta utilizar paper elements para crear nuevos controles de reproducción, algo que es muy recomendado cuando utilizas el modo
Chromeless
!
En el próximo artículo veremos cómo incorporar este tipo de controles (paper elements), junto con el API de Datos de YouTube, al hacer uso del componente:
google-youtube-video-wall
https://github.com/GoogleWebComponents/google-youtube-video-wall
Hasta la próxima!
Este post ha sido escrito por
+Matias Molinas
, Google Developer Expert para YouTube API. Editor by +Nicolas Bortolotti
El poder de Polymer y YouTube desde la comunidad de expertos
martes, 31 de marzo de 2015
Cual es uno de los mayores desafíos a los que nos enfrentamos hoy en día los desarrolladores al momento de crear la UI de una aplicación?
Probablemente uno de los mayores desafíos es que las aplicaciones se han convertido en servicios, que se consumen desde distintos dispositivos, como móviles, tabletas, portátiles, TV, dispositivos vestibles y autos!!! Todos con distintos tamaños de pantallas, e incluso con distinto tipo de
entrada
de datos, como mouse y teclado, pantalla táctil y voz.
Por si esto fuera poco, incluso se utilizan estos nuevos servicios o aplicaciones desde distintos dispositivos en forma simultánea.
Este es un problema al que también se enfrenta
Google
, ya que provee servicios para todas las plataformas, e inclusive es pionero creando algunas de estas plataformas, como
Android Wear
y
Android Auto
.
La buena noticia es que
Google
no solo esta preparado para estos escenarios, en los que ofrece sus aplicaciones y servicios con una interfaz de usuario (UI) y una experiencia de usuario (UX) consistente, si no que ademas a desarrollado un
lenguaje de diseño
,
Material Design
, que resuelve el problema, y lo ha implementado sobre varios frameworks y tecnologías open source, como
Polymer, Android L y AngularJS
, lo que facilita y permite la rápida adopción de esta solución por parte de los desarrolladores para sus propias aplicaciones.
Material Design
Material Design
es un
lenguaje de diseño
que utiliza los principios clásicos de diseño, e incorpora la ciencia y la tecnología para dar un aspecto
material
a los componentes de UI, como sombras y aceleración, de modo de lograr una metáfora de los componentes con objetos reales que le transmita al usuario información en forma intuitiva y que permita aplicar cientos de años de diseño aplicado a objetos materiales a una nueva rama de diseño, que es el diseño de UI, que solo lleva pocos años de vida.
Material Design
es ademas el resultado de la evolución de
Android
a través de sus diferentes versiones.
Como se trata de una evolución de
Android
lo podemos encontrar en todas las versiones de
Android L
o superior, y en sus distintas plataformas,
Android, Android Wear, Android TV
y
Android Auto.
Y para el desktop? y para la Web? Contamos con una implementación sobre las más modernas opciones tecnológicas para la Web, esto es
Polymer
para
Web Components
y otra para
Angular JS.
Polymer
Polymer
es una librería que nos permite crear páginas y aplicaciones Web mediante componentes (
web components
).
La potencia de este enfoque radica en que nos permite utilizar componentes propios y de terceros y componerlos para construir nuestra aplicaciones de forma simple, reduciendo tiempos y esfuerzo.
Polymer
provee un set de controles estándar,
Polymer paper elements
, que permiten implementar la UI con
Material Design
. Ademas
Google
provee una colección de componentes
Polymer
que integran la funcionalidad de las distintas APIs de
Google
:
https://github.com/GoogleWebComponents
Si vemos la lista de componentes vemos que, entre otros, contamos con controles de
YouTube.
https://github.com/GoogleWebComponents/google-youtube
Youtube
Cuales son los controles basados en
Polymer
nos provee
YouTube
?
El control del reproductor:
google-youtube
http://googlewebcomponents.github.io/google-youtube/components/google-youtube/
Este componente encapsula el reproductor, y expone como propiedades los parámetros que personalizan su apariencia y comportamiento.
El muro de videos:
google-youtube-video-wall
http://googlewebcomponents.github.io/google-youtube-video-wall/components/google-youtube-video-wall/
Este control nos provee un muro de videos personalizable, basado en Material Design, y
Polymer
paper elements
.
Este control utiliza el
API de datos de Youtube
para recuperar y filtrar los vídeos que se presentan en el muro. Y nos permite especificar los parámetros con los que invoca el API de búsqueda y de datos.
Resumen
Vemos que
Google
a resuelto uno de los mayores desafíos que se presentan al crear la UI en una aplicación moderna, y ofrece un lenguaje de diseño y diferentes frameworks y plataformas que lo implementan, todo integrado a sus APIs y servicios para utilizarlos en una forma rápida y simple!
El siguiente paso es simplemente utilizarlo en nuestra aplicación!!
Te invito a leer la próxima entrega donde visitaremos casos de éxito de experiencias de usuario y aplicaciones Web con videos de YouTube, con el objetivo de analizar cómo las podemos re-implementar utilizando
Polymer
y
Material Design
, de modo de comparar y analizar la potencia de estas nuevas tecnologías y conceptos.
Hasta la próxima!
Este post ha sido escrito por
+Matias Molinas
, Google Developer Expert para YouTube API. Editor by +Nicolas Bortolotti
Google Developer Experts, una experiencia desde la comunidad de expertos
jueves, 19 de marzo de 2015
Hacia finales del año pasado tuve el privilegio de ser invitado por Google Developers para producir una serie de videos contando cómo fue nuestra experiencia utilizando las tecnologías de
Google Cloud Platform
para potenciar los exigentes requerimientos de nuestros juegos masivos en
ZupCat
.
Estos videos pueden ser vistos en 4 capítulos en el canal oficial de YouTube de Google Developers en los siguientes links:
Operando un hit
Métodos de persistencia y distribución
Simple-DataStore
Escenarios de BigQuery
Cada video contiene referencias de código, configuraciones o APIs que me gustaría compartir para poder completar estas entregas y de paso hacer un breve repaso.
En
operando un hit
hace referencia a un archivo de configuración de aplicaciones llamado
app-engine.xml
que permite expresar algunas características importantes de las aplicaciones que hosteamos en la plataforma.
En el segundo capítulo, donde cuento acerca de de las tecnologías disponibles para persistencia y distribución de contenido, hago referencia a Cloud Storage. Es posible acceder a este servicio para subir y modificar contenido utilizando librerías disponibles en diferentes lenguajes, que pueden ser encontradas en
este link
.
En referencia a Cloud DataStore, las APIs de acceso sobre Java pueden ser encontradas en
este otro link
y la manera de acceder a Cloud SQL desde AppEngine
se describe aquí
.
En el tercer capítulo, donde hago referencia a Simple DataStore, se puede encontrar el código del proyecto
aquí
y los ejemplos de código en
este
y
este
link.
Finalmente el capítulo final del ciclo, que habla de BigQuery, contiene varias referencias de acceso a la base de datos desde un cliente Java regular y de otro dentro de AppEngine. Los links son:
Connection factories:
BigQueryClientFactory.java
: acceso desde un cliente java común
BigQueryServerFactory.java
: acceso desde un cliente hosteado en App Engine
BigQueryClient.java
: acceso al servidor BigQuery
SendClientLogToBigQueryService.java
: un ejemplo de uso
Este post ha sido escrito por
+Hernán Liendo
, Google Developer Expert Cloud Platform, profesor universitario y co-fundador/CTO de ZupCat donde coordina los esfuerzos de ingeniería para desarrollar juegos mid-core free-to-play.
Editor by
+Nicolas Bortolotti
O’Clock, el startup de social countdowns que descansa sobre Google App Engine
jueves, 29 de enero de 2015
O’Clock es una plataforma de cuentas regresivas sociales que nos ayuda a recordar los momentos importantes de la vida. Solo basta acceder al sitio
www.oclck.com
o
descargar la App
, programar una cuenta regresiva social (o seguir una existente) y comenzar a interactuar con nuestros amigos (y/o desconocidos) para compartir esa ansiada espera.
Los relojes están organizados en la plataforma por ubicación (mediante geolocalización) o tendencias y se pueden acelerar y/o compartir por redes sociales o incrustarlos en otros sitios web. Hasta el momento hemos recibido el reconocimiento de múltiples organizaciones, entre los que destacan Angelhack, AppCampus, AppMyCity, IncubaUC, AppCircus y desde hace pocos días, formamos parte del programa
Startup Launch
.
La plataforma web ha sido construida en Python (algunos procesos con Django y otros sin framework para agilizar los tiempos de respuesta), el motor DB para datos persistentes es MySQL, la App fue desarrollada de forma nativa con Android SDK, y utilizamos algunos servicios externos mediantes APIs como Mandrill y PubNub entre otros, para concentrar nuestro foco en el producto.
Sin embargo, el servicio más importante que utilizamos y que nos ha permitido escalar tranquilos es Google App Engine. Los peaks de uso de O’Clock ocurren en la proximidad de fechas emotivas (San Valentín, Navidad, año nuevo, etc...), y utilizar esta plataforma como servicio nos permite descansar en problemas de escalamiento, sin estar despiertos a las 2 de la mañana por un peak de usuarios.
El apoyo de los Google Developer Experts ha sido vital
Cuando O’Clock comenzó a aparecer en
prensa
, nos dimos cuenta que:
El rendimiento no era óptimo.
La experiencia de un usuario en Europa era distinta a la de un usuario en Latinoamérica.
Y si bien intentamos prescindir de Django (framework) para agilizar algunos procesos, nos dimos cuenta que no era suficiente, y fue entonces cuando tocamos la puerta (o más bien el Hangout) de los Google Developer Experts Hernan Liendo (Argentina) y David Cifuentes (Colombia), quienes no solo nos ayudaron a resolver algunas dudas específicas, sino que también nos dieron los siguientes consejos que tuvieron gran impacto en el rendimiento y experiencia:
Cambiar de Blobstore a Cloud Storage para el almacenamiento de imágenes
: Mejoramos el rendimiento, obteniendo el máximo potencial de la infraestructura y distribuyendo las imágenes para que los usuarios que descarguen el contenido lo hagan desde un punto cercano (y por lo tanto, más rápido).
Pasar de SQL a GAE Datastore:
Con esta medida hemos podido mejorar la velocidad/rendimiento de la plataforma, considerando algunas cualidades como el manejo de entidades que nos permiten seguir escalando tranquilos.
A continuación les dejamos un pequeño código de como realizamos el upload de las imágenes:
def create_file(filename,fil):
write_retry_params=gcs.RetryParams(backoff_factor=1.1) content_type=mimetypes.guess_type(filename)[0]
with gcs.open(filename,'w',content_type=content_type,options={b'x-goog-acl':b'public- read'}) as f:
while True:
chunk=fil.read(8192)
if not chunk: break f.write(chunk)
return 'https://storage.googleapis.com%s'%(filename)
Este método recibe el nombre de la imagen y el contenido de esta como parámetro, dentro del método obtiene el MIME Type ('image/jpeg','image/bmp') del archivo, luego usando la librería cloudstorage, creamos un nuevo archivo usando el modo 'w', pasando además el nombre de la imagen, el tipo de contenido, y la opción para dejar un enlace público a la imagen ('x-goog-acl':'public-read'), luego se lee el contenido de la imagen y se escribe en el nuevo objeto de gcs, y finalmente se retorna la url para acceder a la imagen en GCS.
También pueden utilizar al siguiente función para obtener información del archivo (tamaño, tipo, timestamp y md5 por ejemplo) :
def stat_file(filename):
stat=gcs.stat(filename)
return repr(stat)
Gracias al apoyo de inversionistas ángeles, en 2015 hemos traído nuestra operación a San Francisco (EE.UU), donde esperamos acelerar el desarrollo. Los invitamos a seguir o crear las cuentas regresivas sociales para esas fechas importantes que no quieren dejar pasar.
Este post ha sido creado por Guillermo Díaz, fundador y CEO de O’Clock.
Qué es #OneCommunity
lunes, 27 de octubre de 2014
One Community nace para promover la colaboración entre las comunidades que conforman el ecosistema emprendedor latinoamericano y para que esta unión de esfuerzos genere sinergias entre todos los miembros del ecosistema, ya sean desarrolladores, gente de negocios, diseñadores, creativos, emprendedores, etc.
Google Developers se ha aliado con
UP Global
, una organización sin ánimo de lucro dedicada a fomentar el emprendimiento en el mundo. Y ahora, para incrementar la calidad de las startups latinoamericanas;
Google Developers
y
UP Latam
buscamos unir a los líderes de las comunidades de emprendimiento y técnicas, y que se involucren en la organización de diversos Startup Weekends. Para este piloto seleccionamos varias ciudades en México, Colombia, Argentina, Perú, República Dominicana, Costa Rica, Chile, Guatemala y Uruguay.
“Ésta es una gran oportunidad para desatar el potencial de nuestra región. Si trabajamos juntos, las startups latinoamericanas serán más competitivas a nivel internacional.” - Gustavo Álvarez, director de Up Global Latam.
“El futuro de la comunidad de emprendimiento debe ser uno que nos una a todos”- Francisco Solsona, Developer Relations en Google.
¿Cuáles son los beneficios de One Community para tu comunidad?
Conectar a los líderes de UP Latam y de Google para que continúen trabajando en el desarrollo de sus ecosistemas locales de manera conjunta.
Incrementar el nivel de los proyectos que se generan en Startup Weekend, al contar con más perfiles técnicos entre los participantes.
Generar contenido técnico y de negocio que fortalezca las habilidades de los emprendedores antes y después de Startup Weekend (bootcamps, meetups, workshops, etc.).
Crear contenido de valor para la comunidad de tu ciudad.
Participar en One Community es muy sencillo. Primero, participa en el siguiente Startup Weekend en tu ciudad e invita a tus compañeros y amigos. Segundo, acércate a los grupos y comunidades que existen en tu ciudad:
GDG
,
GBG
, JavaScript, Java, PHP, Python, entre muchos otros.
Te dejamos las fechas de los siguientes Startup Weekend que forman parte de la campaña #OneCommunity. ¡Apúntate y desata tu potencial!
Bogotá, COLOMBIA 24 de octubre
Medellín, COLOMBIA 14 de noviembre
Guatemala, GUATEMALA 14 de noviembre
Lima, PERÚ 14 de noviembre
La Paz, BOLIVIA 14 de noviembre
Arequipa, PERÚ 21 de noviembre
México DF, MÉXICO 21 de noviembre
Monterrey, MÉXICO 21 de noviembre
Santo Domingo, REPÚBLICA DOMINICANA 21 de noviembre
Buenos Aires, ARGENTINA 21 de noviembre
Quito, ECUADOR 21 de noviembre
Cali, COLOMBIA 21 de noviembre:
Juliaca, PERÚ 21 de noviembre:
Montevideo, URUGUAY 21 de noviembre:
San José, COSTA RICA 21 de noviembre:
Puedes encontrar más información sobre cada uno de los eventos
aquí
.
Startup Grind: Generando comunidad en México
miércoles, 1 de octubre de 2014
Startup Grind es una organización mundial que nace en Silicon Valley en 2010 y que tiene como objetivo educar, conectar e inspirar emprendedores a través de distintos mecanismos, principalmente realizando eventos mensuales con actores clave del ecosistema emprendedor. Actualmente, tiene capítulos en más de 125 ciudades y 55 países alrededor del mundo, gracias al apoyo de Google for Entrepreneurs. Con el objetivo de contribuir al ecosistema emprendedor mexicano, hace un año decidí traer la iniciativa a México y actualmente se celebran eventos mensuales en Monterrey y en DF, y en los próximos meses iniciaremos actividades en San Luis Potosí y Morelia.
En lo que va de 2014 hemos realizado 16 eventos, en nuestros dos capítulos: DF y Monterrey. Si lo ponemos en números, podríamos decir que hemos impactado personalmente a más de 1,300 personas y, dado que las charlas quedan grabadas y se puede acceder a ellas a través de internet, digitalmente otras 3,670 han podido ser parte de esto.
La idea detrás de nuestra comunidad es crear un espacio de apoyo y de amplio impacto que logre no solo brindar conocimiento a los fundadores de Startups, sino también crear verdaderas comunidades en las que los emprendedores se sientan incluidos y que se conviertan en grupos de colaboración.
En los primeros 12 meses, hemos generado 15 citas entre startups e inversionistas, hemos dado mentoría a 9 startups y hemos hecho más de 35 presentaciones. Hemos disminuido la regionalización de los ecosistemas invitando a Monterrey Speakers de otras ciudades o países.
Paul Ahsltrom comentó que en México existe un gran número de oportunidades para emprender, un porcentaje importante de las empresas en las que invierte están en México, y casi todas tocan al mercado mexicano.
Enrique Jacob Rocha habló de la importancia de integrar al ecosistema emprendedor actores estratégicos, como el Gobierno y las Universidades.
Con Andres Barreto platicamos de el estado del Venture Capital en América Latina, y el proceso que deben de seguir las startups buscando capital.
A través de estos encuentros logramos que fundadores de Startups exitosas, inversionistas, directores de fondos públicos o privados, compartan con nuestra comunidad sus principales éxitos, fracasos y consejos para generar sabiduría colectiva y eventualmente desarrollar y crear ecosistemas que apoyen e impulsen a los nuevos emprendedores.
Este post ha sido escrito por
Pablo G. Lascurain
, Director de Startup Grind México Para conocer más detalles de nuestros eventos y acceder a los videos, pueden visitar nuestro sitio
www.mexico.startupgrind.com
.
Dev. F, una escuela no tradicional para hackers
miércoles, 13 de agosto de 2014
Hace un mes abrió las puertas en México una escuela diferente a las demás:
Dev.F
. Sus estudiantes iban desde niños de 14 años hasta señores de 50. Todos ellos con un objetivo común: convertirse en hackers.
Esta des-escuela, como la llaman sus fundadores, nace para promover una cultura diferente entre los desarrolladores y generar talento developer que ayude a nutrir la demanda que existe hoy en día, como dice Manuel Morato, fundador, “desarrollar personas que construyan cosas nuevas en este mundo, personas que se atrevan a hacer cosas diferentes, personas que transformen nuestras industrias y nuestra sociedad de manera positiva.” Lo que buscan, en palabras de
+Enrique Díaz,
GDG Androidtitlán y uno de los fundadores de Dev.F, es “aprovechar las distintas virtudes de cada individuo y potenciarlas, en vez de formar a todos con un mismo molde.”
La primera edición de su curso
Cinta Blanca
finalizó hace una semana. Entre los participantes de esta primera edición había ingenieros mecatrónicos, desarrolladores de aplicaciones móviles, diseñadores web, un actuario, estudiantes de preparatoria, estudiantes universitarios, estudiantes de secundaria y desarrolladores de videojuegos. Durante su participación recibieron mentoría uno a uno con alrededor de 20 especialistas, emprendedores y líderes de comunidades en México, y aprendieron tecnologías como Android, Ruby on Rails, HTML + CSS, Polymer y Github, entre otras. Además, se ha hablado de otras tecnologías como JavaScript, Python, Google Cloud Platform, Open Data, Agile Development, Scrum y Git. En resumen, todos los asistentes tuvieron la oportunidad de utilizar herramientas que apenas conocían o que desconocían totalmente y estaban fuera de su área de experiencia.
Los resultados de esta iniciativa ya son cuantificables: al inicio del curso dos personas recibieron ofertas de trabajo y fueron contratados, el 70% de los participantes ha recibido ofertas de empleo y uno de los equipos recibió una oferta de inversión para su proyecto.
Cómo comenzó
Dev.F surge de la energía y las ganas de cambio de 5 jóvenes,
+Manuel Morato
,
+Elias Shuchleib
,
Enrique Díaz
(parte del GDG Androidtitlán),
+Sandy Macías
y
+Víctor Borja
, quienes quieren promover la cultura hacker y llevar los valores del desarrollo no sólo a quienes ya lo conocen, sino también a quienes aún no tienen conocimientos técnicos, fomentando el trabajo en equipo, la resolución de problemas reales, el pensamiento crítico y la capacidad de aprender de manera eficiente.
Optimiza tus apps usando Google App Engine
martes, 10 de junio de 2014
Una plataforma avanzada como
Google App Engine
presenta varias diferencias al momento de poner a punto una aplicación. Hoy
Hernán Liendo
,
Google Developer Expert de Cloud Platform
, co-fundador y CTO de
ZupCat
, habla de estas diferencias basándose en su experiencia haciendo hosting de juegos masivos.
En primer lugar, la motivación es diferente cuando ponemos a punto una app en una infraestructura tradicional ya que el resultado puede hacer que funcione o no.
Google App Engine es una plataforma con auto-escalabilidad por lo que puede tomar recursos virtualmente sin límites. En este caso
la principal motivación es reducir los costos de hosting
.
El
modelo
Platform as a Service
(PaaS) es superior al modelo
Infrastructure as a Service
(IaaS) en el sentido de que
no debemos lidiar con ajustes de parámetros de bajo nivel
, que en general tienen relación con el desempeño de una aplicación.
En experiencias pasadas con IaaS acabé haciendo
búsquedas binarias
hasta encontrar valores de configuración óptimos sobre diferentes muestras de procesamiento. Este esfuerzo requería lidiar con aspectos como:
parámetros del kernel, drivers, buffers, pools, caches, sistema operativo, networking, procesos, firewalls, routers, parámetros del filesystem, application servers, clusters, threads, colas, workers, base de datos, memoria, etc.
La buena noticia es que, no sólo no necesitamos lidiar con todos ellos sino que, además, la mayor parte de la configuración de desempeño de Google App Engine se reduce a esta pantalla:
Mi recomendación es dejar todos estos parámetros en sus valores por defecto.
En relación al ajuste del software de aplicación, hay que seguir los principios asociados a los
atributos de calidad software
como en toda pieza de software.
Pero con Google App Engine además
es particularmente importante controlar de cerca las invocaciones a las APIs que Google ofrece
. Y esto se debe a que
la mayoría de las llamadas a estas APIs tienen relación con consumo de recursos en red y al sistema de facturación de la plataforma.
Google tiene una herramienta llamada
AppStats
, que permite
monitorear y poner a punto las llamadas a APIs de Google App Engine
. Para ello intercepta cada una de las llamadas a estas APIs y almacena el llamado y tiempo de procesamiento en
MemCache
con el objetivo de generar estadísticas de uso.
El resultado puede visualizarse en una página web dinámica donde se detallan los últimos 1,000 requests efectuados. Se podrá ver la información ordenada por
request
de negocio (por ejemplo
https://miapp.appspost.com/miServicio
) y también ordenada por método específico de un API (por ejemplo:
datastore.Put()
)
En ambos casos veremos la cantidad de invocaciones que fueron efectuadas y el tiempo que tomaron.También es posible visualizar una línea de tiempo que indica las llamadas efectuadas por un servicio:
Esto
nos permite encontrar resultados no deseados
, como más llamadas de las esperadas, así como oportunidades para uso de MemCache, para uso de asincronismo o
refactoring de código
.
Los pasos necesarios para configurar AppStats se encuentran en el sitio oficial de
Google App Engine
pero es importante mencionar que es también necesario incluir varios jars como indica
este foro
.
Este post ha sido elaborado por
Hernán Liendo
,
GDE Cloud Platform
,
profesor universitario y co-fundador y CTO de
ZupCat
,
donde coordina los esfuerzos de ingeniería para desarrollar juegos masivos free-to-play.
Procesamiento masivo en la Nube con MapReduce
jueves, 8 de mayo de 2014
Google App Engine
permite escalar aplicaciones y es por ello que en
ZupCat
desarrollamos nuestros juegos masivos free-to-play sobre esta plataforma. En esta ocasión les contaremos cómo realizamos nuestros
procesamiento batch
.
Para darles una idea de volumen que nuestros juegos alcanza, tenemos tablas con
270 millones de registros
y no es raro tener requerimientos que impliquen recorrer cada uno de ellos para realizar operaciones como reactivación de usuarios o generación de rankings.
Procesar un registro en un proceso batch lleva los siguientes pasos obligatorios:
Leer el registro de entrada
Ejecutar
queries
adicionales en función del registro de entrada
Correr ciertas líneas de código
Efectuar operaciones de escritura relacionadas al registro de entrada
Imaginen ejecutar estos 4 pasos 270 millones de veces durante varias veces al día. Si procesar un registro lleva 1 segundo, todo el proceso demoraría ¡¡3125 días!!
Ma
pReduce
es un modelo de programación destinado a
procesar grandes cantidades de datos en paralelo y de manera distribuida sobre un cluster
. Se basa en partir el total de registros a procesar en grupos con cantidades similares de registros. Cada grupo va a ser procesado en paralelo de manera distribuida.
Ese procesamiento comienza por una fase llamada
Map
que se ocupa de filtrar, seleccionar, contar u ordenar un conjunto de registros.
El resultado de la fase Map, que en general es menor al grupo original de registros, es procesado en una fase posterior llamada
Reduce
. Esta fase también corre en paralelo y en general sumariza los resultados de la fase
Map
.
En general un programador necesita implementar código en
Map
y
Reduce
mientras que el framework se ocupa de correr las tareas en paralelo, administrar la comunicación entre los procesos, transmitir datos y proveer redundancia y tolerancia a fallos.
Es posible utilizar este modelo en Google App Engine integrando el proyecto open source llamado
appengine-mapreduce
y contar con esta estrategia de procesamiento.
Esta captura de un proceso real muestra como casi
7000 registros fueron procesados a una promedio de 84 por segundo en 50 procesos en paralelo
. Las barras amarillas muestran como claramente el proceso fue dividido en 50 trabajadores paralelos.
Es importante notar que 50 trabajadores es un número configurable en relación a velocidad contra el costo de procesamiento que estamos dispuestos a pagar. Es decir,
podemos reducir linealmente el tiempo que demora un proceso aumentando la cantidad de trabajadores involucrados en Map Reduce.
Esto se logra sin tocar una sola línea de código sino solo configurando los parámetros del proceso.
Este post ha sido escrito por
Hernán Liendo
, Google Developer Expert en Cloud Computing, profesor universitario y co- fundador y CTO de ZupCat donde coordina los esfuerzos de ingeniería para desarrollar juegos masivos free-to-play.
Labels
.app
.dev
.txt
#AMP
#CPU
#DeveloperStudentClubs
#DevFest
#DragonBall
#DSC
#Forsety
#ForsetySecurity
#freeandopen
#GCP
#Google
#GoogleCloud
#GoogleCloudPlatform
#GoogleLaunchpad
#iio2009
#Kubernetes
#MaterialDesign
#OneCommunity
#Security
#TensorFlow
#UPGlobal
#UpLatam
#WithGoogle
+page
10 YEARS
2013
2019
64 bits
A/B Testing
AA
Accelerator
Action on Goolge
actionbar
Actions
Actions Console
AdMob
Ads
adwords
adwords api
AI
AIY
ajax
alarmmanager
ALFA
almacenamiento
alojamiento de proyectos en google code
AMP
AMP Conf
AMP Project
amp-date-picker
amphtml
Analytics
Andorid
android
Android (operating System)
Android 3.1
android 3.3
android 4.2
android 9
Android 9 Pie
Android App Bundle
android design
Android Dev Summit
Android Developers
android Jetpack
Android P
Android SDK
Android Studio
Android Things
Android Wear
AndroidDevStory
androititlan
angelina jolie
Annotation
Announcements
anuncios
API
API Analytics YouTube
Apigee
APIs
Aplicaciones
aplicaciones chrome
app
app engine
App Indexing
app invites
App Server
applications
AppQuality
apps
Apps Script
AR
ARCore
arte
ATLAS
AWP
backend
Base64
batch
Bava
Betatesting
Better Ads Standars
bigdata
BigQuery
Biometrics
blink
bootcamp
BOT
BQ
Business
búsqueda ajax
by Google
byCases
byCommunity
byDevelopers
byGoogle
C++
CALENDAR
Cardboard
case
caso de éxito
Casos de éxito
casos destacados
CCOSS
Century Fox
chat
chrome
chrome web store
chromebook
chromecast
chromium
Cinéfilos
cloud
Cloud Anchors
CLOUD endpoints
Cloud Firestore
Cloud Functions
Cloud IoT Core
Cloud Next
Cloud Scheduler
Cloud services
cloud test lab
Cloud Text-to-Speech
Cloud Translation
CMD en vivo
coconut
code
code-in
code.org
CodeLabs
código
código abierto
Colab
colombia
Communities
Comunidades
concurso google
conference
contenedores
convocatoria
Coordinate
crashlytics
CRE
crear aplicaciones ajax
creatividad
Crowdsource
CSS
cws
daniela robles
dart
dart sdk
dartium
dartlang
Dataset
DCL
denis labelle
desarrolladores
Desarrolladores Google
desarrolladores LatAm
Desarrollar
Design
Design Sprint
Destacados
dev
Dev.f
DevArt
DevBus
DevBusLatAm
Developer Bus
Developer Summit
DeveloperConsole
developers
DevFest
devoxx
dialogflow
diseño UX
Distribuir
DNS
DOM
domain
DonkeyCar
doubleclick
Drive SDK
Drivers
ecommerce
ecosistema
elections
elizalde
Emoticons
emprendedores
empresas
engagement
english
Enhanced Campaigns
enterprise
eventos
Events
evolución de aplicaciones
Excel
ExpertosDicen
Faas
Family
FanBridge
FCM
FCP
Featured
fido
find people
Fintech
firebase
Firebase Cloud Messaging
firebase summit
flu trends
Flutter
Flutter 1.0
flutter 1.7
flutter developers
Flutter Live
FlutterLive
FoundersLab
Freebase
Fuction
Fuctions
Full-Stack
functional programming
G Suite Dev Show
G+
g+ goto gal
G+GotoGal
GAE
game
games
GCloud
gcm
GCP
GCS
GDA
GDE
GDG
GDH
GDL
GDLevent
GDS
Get Inspired
get.app
GitHub
GLP
gmail
golang
GOMO
Google
Google Accelerator
Google AdMob SDK
Google AdWords
Google Analytics
Google APIS
Google App Engine
Google Apps
Google Apps Script
Google Art Project
Google Assistant
google calendar
google cast
Google Charts
Google Chrome
Google Cloud
Google Cloud Console
Google Cloud Messaging
Google Cloud Next
Google Cloud Platform
Google Cloud Platform Newsletter
google cloud platforn
Google Cloud Storage
google code-in
Google Compute Engine
Google Dataset
Google Developer Groups
google developers
Google Developers Academy
google developers expert
Google Developers Hackademy
google dns
Google Drawings
Google Drive
Google Earth
Google for games
Google Forms
google geo
Google Home
google i/o
google i/o extended
google io
Google Keep
Google Kubernetes Engine
Google Launchapad
Google Launchpad
Google Maps
google maps coordinate
Google Maps Platform
Google Mexico
Google Nose
google now
Google Person Finder
google places api
Google Play
Google Play Books
Google Play Developer API
google play games
Google Play Movies
Google Play Protect
Google Play Services
Google Plus
Google Science Fair
google search
Google Sheets
google sign in
Google Top Geek
Google+
Google+ Communities
Google+ Hangouts
google+ sign-in
GoogleAPI
googlecloud storage
GoogleCloudPlatform
googledevs
GooglePlay
Googleplex
Goolge Lunchpad
GTG
Hackademy
hackers
Haiko
Haití
hangouts
Hangouts Remote Desktop
hardcode
Heello
honeycomb
HTML
HTML5
HTTPS
I/O
IA
IAM
IETF
IFAI
in app purchases
in-app
ingles
Ingress
instagram
integración de soluciones
interactive post
Interesante
International
International Women’s Day
IO
io15
io18
io19
iOS
IoT
istio
IU
IVR
J2EE
java
JavaScript
jelly bean
JS
JSON
Juegos
juegos html5
Kit ML
Knative
kotlin
kUBERNATES
Kubernetes
LATAM
latamRegionSur
Launchpad
Launchpad Studio
Lenovo Mirage Solo
lightbox
linux
lucero galindo
machine learning
Made with Code
Mapdata
Mapeo
maps
Maps Ad Unit
Maps API
Maps Engine
Market
Marketing
Marshmallow
MATERIAL DESIG
Material Design
mejores apps 2013
México
michelle marie
MIT
MIT Global Start-up Labs
MIT-AITI
ML
ML Kit
mobile
monetizar
mongoDB
MOOC
Motorola
Mountain View
móvil
MQTT
mr.white
mTLS
natalie villalobos
Navigation
NBA JAM
NES
Next Big Sound
Next Level
nfc
Niantic
Nik
NINTENDO
node.js
NoSQL
nube
OAuth2
Objective-C
OClock
open source
OPenApi
OS
OSS
Paas
PageSpeed
PagesSpeed
parallel18
patrones
patters
performance
permisos
Pipeline API
Pixability
pixel
Píxel
play
Play Console
Playtime
Podcast
pollito pio
Polymer
por lote
Posse
Prediction API
primer
Producto
programación
Propositos
Protocol Buffers
proyecto 20%
Push API
PYMES
python
Q
Q4
quickoffice
Rasberry Pi Zero WH
Raspberry Pi
Realtime
Reflectly
register
Release
Resources
robots.txt
Safe
SDK
Search
Security
seedbank
seguridad
SEO
servidores
Showyou
sign-in
SNES
SO
social media
Spain
SpLATAM
SQL
SQLite
Start
startup grind
Startup Launch
startup weekend
startup weekend for the planet
startupbus
startups
StayAtHome
story
Street View
subtitles
success
sw
SyScan
tablet
Tablet Optimization Tips
tabletas
takeaction
Tango
tendencias 2013
TensorFlow Developer Summit
testing
TextView
TF JAM
The Garage
The Venture City
tips G+
tips gmail
TLD
TLS
Top Experts
Top Geek
top level domain
TopExpert
topics
traducciones
Transparency Report
triggers
Tubular Labs
twilio
Tyka
TypeScript
UAC
udacity
ui
Umbrales
UNAM
unity
Unity3D
universal search
UX
Vector
VectorDrawable
video juegos
vidIQ
ViewPager
Visual Progress
Voicekit
VPC
VR
VSCode
web
Web hosting
Web móvil
WebAssembly
with google
Wizdeo
WizTracker
Women at Google
Women Techmakers
workmanager
WTM
XKCD
XML
Yifat Cohen
youtube
YouTube Analytics API
YouTube API
YouTube Data API
YouTube One Channel
YouTube Player API
Archive
2023
nov
oct
sept
ago
jun
may
abr
mar
ene
2022
dic
nov
oct
sept
ago
jul
jun
may
abr
mar
feb
ene
2021
dic
nov
oct
sept
ago
jul
jun
may
abr
mar
feb
2020
dic
nov
oct
sept
ago
jul
jun
may
abr
mar
feb
ene
2019
dic
nov
oct
sept
ago
jun
may
abr
mar
feb
ene
2018
dic
nov
oct
sept
ago
jul
jun
may
abr
mar
feb
2017
nov
sept
ago
jul
jun
may
abr
ene
2016
nov
oct
sept
ago
jul
jun
may
abr
mar
feb
ene
2015
dic
nov
oct
sept
ago
jul
jun
may
abr
mar
feb
ene
2014
dic
oct
sept
ago
jul
jun
may
abr
mar
feb
ene
2013
dic
nov
oct
ago
jul
jun
may
abr
mar
feb
ene
2012
dic
nov
oct
sept
ago
jul
2011
nov
oct
may
mar
2010
dic
nov
oct
sept
ago
jul
jun
may
abr
mar
feb
ene
2009
dic
nov
sept
ago
jul
jun
may
abr
mar
feb
ene
2008
oct
sept
ago
jul
jun
may
abr
mar
feb
ene
2007
dic
Feed
Desarrolladores
Eventos y Comunidad
Casos Destacados
Dicen los Expertos
Google Accelerator