Cuando O’Clock comenzó a aparecer en prensa, nos dimos cuenta que:

  1.  El rendimiento no era óptimo. 
  2.  La experiencia de un usuario en Europa era distinta a la de un usuario en Latinoamérica. 
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:

  1.  El rendimiento no era óptimo. 
  2.  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: 


  1. 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).
  2. 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.

Los componentes web marcan el inicio de una nueva era de desarrollo web basado en elementos personalizados encapsulados e interoperoperables que se extienden al mismo HTML.








En esta sesión, Hernán nos habla de Cloud Data Store y del framework open source que liberaron en +GitHub para aprovechar las capacidades de las bases de datos.
GDE Community Experiences con +Hernán Liendo 

En nuestra más reciente serie de aprendizaje, los expertos en tecnología Google nos incentivan con sus experiencias mientras nos llenan de consejos y casos reales en las diferentes plataformas y herramientas Google. En esta ocasión +Hernan Liendo de +ZupCat durante 4 sesiones nos habló de las claves para operar productos con millones de usuarios a través de Google Cloud Platform.

En esta primer sesión, Hernán nos explica las ventajas que ofrece App Engine y su escalamiento automático al tener varios requerimientos masivos con ZupCat.


En la segunda entrega Hernán Liendo nos comparte todos sus conocimientos acerca del buen manejo de frameworks basándose en su experiencia en ZupCat.


En esta sesión, Hernán nos habla de Cloud Data Store y del framework open source que liberaron en +GitHub para aprovechar las capacidades de las bases de datos.


Cerrando esta serie de GDE Community Experiences, Hernan Liendo nos cuenta como Big Query nos puede ayudar en nuestro desarrollo y nos muestra paso a paso una implementación.  


Hackademy: YouTube API 

El 2014 fue un año de mucho código y programación, y repasamos los dos Hackademy que nos dejó el año. Pónganse cómodos que el aprender nunca termina.

En nuestro primer Hackademy del año retomamos el código con +Matías Molinas, Google Developer Expert para Youtube. En esta recapitulación, repasa o descubre las 4 sesiones de YouTube API en las que se explica cómo sacarle el máximo partido.

Aprende a usar el API de datos y cómo registrar tu app en esta primera sesión.


En la segunda entrega, Matias Molinas nos muestra cómo utilizar las API IFrame y Flash del reproductor para gestionar eventos y controlarlos mediante JavaScript, a través de casos reales.



Descubre por qué el reproductor nativo de Youtube es la mejor opción para apps móviles en Android en esta tercer vídeo.


Por último en este Hackademy, aprende a medir el desempeño y rendimiento de tus vídeos y canales a través de Youtube Analytics, así como Google Analytics aplicado a las experiencias en la web que incluyan vídeos.

Hackademy: App Engine

En este segundo Hackademy del 2014, +David Cifuentes y +Maciek Ruckgaber nos enseñaron a desarrollar un app en 30 días con App Engine. Además de aprender con nuestros expertos, nuestro amigo Paco hace su debut como entusiasta por el código, y lo ayudamos en su camino por la creación de su app.

David Cifuentes y Maciek Ruckgaber nos explican los beneficios de ejecutar una aplicación en la plataforma (PaaS) de Google App Engine de una manera simple y sencilla.


En esta sesión aprende a manejar el SDK de App Engine.


En esta tercer entrega, Maciek desglosa el panel de administración del SDK.


David nos detalla el registro de una nueva app en Google App Engine.


En esta quinta parte, Maciek nos explica cómo conectar todos los pasos anteriores para realizar el despliegue de nuestra app y la infraestructura de Google App Engine comience a servir.


Una vez que la primera versión de nuestra aplicación se publicó en la web, ¿qué se debe hacer? David nos lo explica a continuación.


En esta séptima entrega, De la mano de Maciek le damos funcionalidad a nuestra app con el micro-framework WebApp2.


En esta última sesión repasamos los pasos básicos para crear aplicaciones sencillas sobre la plataforma Google App Engine con la ayuda de Maciek y David.