viernes, 11 de julio de 2014

Pensando en servicios escalables, Cloud Endpoints

En este ejemplo vamos presentar una estructura inicial que proponga la construcción  de un servicio para poder consumirlo desde diversos ambientes. El caso tradicional, es consumirlo desde escenarios móviles y tomando el modelo arquitectural que propone Google Cloud Endpoints. Vamos a iniciar con simples pasos. Crearemos un servicio que reciba un id y en base a esto el retorno sea una cadena.

Para este ejemplo emplearemos Python en App Engine y aplicaremos conceptos de Google Protocol RPC library.

Lo que buscamos es este mismo mecanismo que muestra la Fig. 1. Utilizaron Google API Explorer? Bueno vamos a trabajar el mismo escenario.

Fig.1 Google APIs explorer
A crear el servicio!

Fig.2 Imports y representación del modelo para el servicio
Como pueden observar en la Fig.2 estamos implementando Google Protocol RPC library. Luego tenemos  la clase Mensaje y el manejo de la colección de mensajes.

Ahora vamos a crear la clase que maneje el servicio y su marcado.

Fig.3 Clase que maneja el servicio.
Compilamos y poner a funcionar el servicio, el formato queda implementado como muestra la Fig.4.
Fig.4 Implementación del servicio
Luego al seleccionar el servicio, tenemos la opción de ingresar los parámetros declarados como muestra la Fig.5.

Fig.5 Utilizando el servicio 

Finalmente el resultado de la operación, con parámetro "1", que no es novedad para ninguno de ustedes ya que conocen las opciones de explorar el código de implementación.

Fig.5 Resultado de la operación
Queda mucho por recorrer en la implementación de este tipo de servicios, como el ambiente de autorización y diversidad en las respuestas. Pero indudablemente este tipo de implementación favorecen notoriamente nuestras arquitecturas.

El código de implementación completo lo pueden encontrar en GitHub. Proyecto Scalable-Service


Creative Commons License
Pensando en servicios escalables, Cloud Endpoints is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
Based on a work at http://nbortolotti.blogspot.com.

miércoles, 2 de julio de 2014

Dashboard-Bigquery, explicación paso a paso del main.py

Luego de la publicación Integrando un panel con soporte escalable de consultas, BigQuery llegaron muchas preguntas y solicitudes sobre el paso a paso del código implementado,  ahora les comparto este análisis sobre la implementación.

Pueden encontrar actualizada una parte de la wiki del proyecto con esta información ampliada aquí. También los invito  a quienes quieran pueden colaborar en el proyecto de github trabajando un fork y demostrar el talento comunitario. Siempre es bienvenido. 

Fig.1 importaciones
Para trabajar la integración con BigQuery es necesario autorizarse mediante OAuth2.0. El siguiente decorador Fig.2, me permite obtener el archivo json con la información de seguridad y su ámbito.


Fig.2 El decorador
Vamos a construir el servicio de integración utilizando apiclient.discovery, en concreto con el método build.
Fig.3 Construcción del servicio de integración con BigQuery
Ahora vamos a trabajar algunas variables del proyecto Fig.4. Esto depende el estilo que proponga el desarrollador, puede variar.

Fig.4  Variables del proyecto
Para trabajar la visualización en el HTML en este proyecto se manejó con Jinja2. Fig.5
Fig.5 Configuración entorno Jinja
Ahora vamos a trabajar sobre el manejador principal de la aplicación. Esta clase lleva el nombre de Panel. Fig.6
Fig. 6 Clase Panel cabecera

Dentro de la clase Panel existe la declaración de una variable http para obtener desde el decorador el objeto http autorizado. Luego trabajamos el servicio para seleccionar los jobs de Bigquery. http = decorator.http() jobtesting = servicio.jobs()

Vamos a colocar la consulta dentro de una estructura de control y resguardo a errores. Construimos la consulta en la variable consulta_datay luego ejecutamos la misma en el servicio para almacenar la respuesta en Respuesta_Consulta. Fig. 7

Fig.7 Construcción de la consulta 
Como vamos a utilizar un gráfico para mostrar los datos, una buena práctica es formar el json de salida con el formato correcto para interpretar por el gráfico. Por este motivo vamos a crear esta estructura a continuación.

Fig.8 Creación de las variables para el gráfico
Definimos los tipos de datos de cada uno de las columnas que deseamos incluir en el gráfico. Fig.9

Fig.9 Determinación del tipo de variables para la información del gráfico
Iteramos sobre la respuesta a la consulta de BigQuery para poder formar el json correspondiente al formato desarrollado. Fig. 10

Fig.10 Iteración para la información obtenida desde Bigquery
Ahora si utilizamos simplejson como encoder sobre la información almacenada en chart_data. Fig.11.

Fig.11 Encoder mediante simplejson.
Ahora trabajamos la plantilla jinja para determinar las variables que vamos a insertar en el javascript o html de nuestra aplicación. Fig.12
Fig.12 Variables para jinja
Finalmente determinamos el html que vamos a trabajar con jinja e inferimos los valores correspondiente para renderizar nuestra aplicación. Fig.13

Fig.13. Renderizado de nuestra aplicación.
Recuerden que pueden obtener más detalles en la wiki del proyecto.

Creative Commons License
Dashboard-Bigquery, explicación paso a paso del main.py is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
Based on a work at http://nbortolotti.blogspot.com.ar/2014/07/dashboard-bigquery-explicacion-paso.html.

sábado, 28 de junio de 2014

Integrando un panel con soporte escalable de consultas, BigQuery

Una de las tradicionales tareas en gran cantidad de escenarios corporativos tiene que ver con el análisis de datos y su visualización en modo panel. En esta oportunidad les voy a compartir el inicio de la integración para un panel basado en BigQuery.

El objetivo propone encontrar el mecanismo que nos permita minar millones de filas en determinadas tablas. En este ejemplo iniciamos el desarrollo utilizando App Engine con Python como plataforma de trabajo y aplicamos la integración por API de Bigquery.

En el proyecto utilizaremos webapp2 como manejador principal y jinja2 para el trabajo de las plantillas HTML. La Fig.1 muestra el entorno de desarrollo completo y la arquitectura básica de la aplicación.

Fig. 1 Entorno de desarrollo utilizado
Tendremos que realizar la operación en 3 pasos generales:
  1. Vamos a tener que consultar los datos a Bigquery.
  2. Tendremos que formatear estos datos para insertarlo en un Google Chart.
  3. Tendremos que integrar estos datos para el render en el HTML.
#Creación de la consulta al banco de datos.
Fig.2 Creación de la consulta al banco de datos
#Formatear los datos.
Fig.3 Manipulación de datos para insertar en el gráfico
#Integrar los datos mediante Jinja2 al HTML.
Fig.4 Manejo de la plantilla jinja2
Finalmente vamosa  visualizar una gráfica como la que muestra la Fig.5. Iniciamos con una integración básica pero podemos varios los gráficos y desarrollar un panel con múltiples opciones.

El proyecto completo lo pueden consultar aquí. (GitHub - Licencia Apache 2.0).

Creative Commons License
Integrando un panel con soporte escalable de consultas, BigQuery is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
Based on a work at http://nbortolotti.blogspot.com.ar/.

viernes, 6 de junio de 2014

Definitivamente la resolución DNS en la infraestructura de Google

En esta gira que llevamos por todo LatAm encontramos gran cantidad de solicitudes y de hecho historias tecnológicas. Además como se imaginarán gran cantidad de solicitudes y consultas. Una pregunta frecuente giraba por el DNS. Si bien se había anunciado el pasado 25 de marzo en el lanzamiento de todas las características de nube desde el equipo de Cloud Platform de Google no se vislumbraba en concreto la funcionalidad que de soporte al DNS. Bien con esta introducción le comparto la experiencia sobre la creación de una zona y sus registros en Google Cloud DNS. Nuestro desafío será referenciar desde nuestro administrador de dominio los servidores de nombre de Google y luego crear y administrar una zona en Google Cloud DNS. Para esto vamos a utilizar la herramienta gcloud.

Fig. 1 - comando gcloud para la creación de una zona


Podemos validar los datos de la creació como muestra la Fig. 2
Fig. 2 Validando los datos de la creación de la zona


Al aceptar vemos el resultado de la zona creada.

Fig. 3 Resultado de la creación.
En el recuadro verde podemos ver los servidores de nombre que debemos referenciar en el administrador de nuestro dominio para que Cloud DNS pueda operar.

Podemos listar los registros de la zona como una buena práctica como  muestra la Fig. 4.

Fig. 4 Los registros actuales de la zona creada.
Por supuesto que podemos agregar más registros, de hecho estaría bien un registro A para apuntar a un Servidor Web por ejemplo...¿que opinan?

Lo vemos en el próximo !

domingo, 4 de mayo de 2014

El potencial de la nube en 5 pasos desde Buenos Aires y junto al ecosistema regional

La experiencia de pasar por #BuenosAires y compartir junto a los desarrolladores locales fue una gran experiencia llena de gratas sorpresas. Iniciamos nuestras actividades el 23 de abril con un evento (tenemos este espacio para preguntas, consultas o comentarios) en Google Argentina.
Fig. 1 - Google Argentina Buenos Aires
Una audiencia muy concentrada, y junto a +Francisco Solsona los primeros 45 mins de presentación. Analizando la experiencia de Google en el desarrollo de la plataforma de nube, sus datacenters, como contribuir a una conectividad más segura y los principales elementos tecnológicos. El talento de la audiencia no tardó en llegar y recibimos muy buen feedback, ¿la sorpresa? un equipo local de desarrollo GO con muy buenos proyectos. ++1

Gracias a la comunidad +GTUG Buenos Aires | GDG  por acompañarnos, y a todos los asistentes que llegaron a pesar de los inconvenientes de siempre en las grandes ciudades. Para nosotros es un placer desde siempre contribuir y compartir estas ambientes tecnológicos.

Próximos pasos San Luis, Córdoba y Mendoza.

Más detalles aquí