lunes, 9 de diciembre de 2013

Un vistazo a Google App Engine

Google App Engine (GAE), es la plataforma backend de Google nos permite crear y publicar aplicaciones web de manera rápida y fácil, sin la necesidad de preocuparnos por el hardware donde se ejecutara.

El desarrollo usando esta plataforma tienen muchas ventajas, las cuales  se mencionan en el sitio de desarrolladores de Google en la sección de app engine, y de hecho si hacen los Quick Start se darán cuenta de lo fácil que es.

Desarrollo en multiples plataformas
Pueden hacerlo desde Linux, Mac o Windows, solo necesitan instalar el SKD dependiendo de su lenguaje de programación que vayan a utilizar y el sistema operativo (también hay que instalar el interprete del lenguaje a utilizar).

Seguridad
La autenticación corre por parte de Google, así que nosotros ya no debemos preocuparnos por ello.
Habilitar HTTPS para conexiones seguras es realmente fácil y solo toma una línea en el archivo de configuración. Y claro no te enfrentas a ese feo aviso de que el certificado no e puede comprobar.

Flexibilidad
Puedes programar en Python, PHP, Java o go. Usando un editor de textos o eclipse con su complemento para App Engine.

Ambiente de pruebas y entorno de producción
Puedes probar tus aplicaciones en un entorno local y con simplemente oprimir un botón o ejecutar una instrucción en la CLI subir tus aplicaciones a un ambiente de producción.

Versiones
Puedes elegir fácilmente que versión esta en producción y cual no.

Limites de uso
5 millones de visitas al mes y 1 giga de almacenamiento en uso gratuito, es un límite que en algunos casos satisface las necesidades de una aplicación.

Hay muchas razones para usar GAE pero esas son al menos las razones por las que yo lo uso. Pero prefiero mostrar las cosas con ejemplos en vez de palabras, así que en próximas publicaciones desarrollare un proyecto en GAE(Python) con las siguientes características:


  • Almacenamiento de datos.
  • Manejo de usuarios con distintos privilegios.
  • Soporte para datos geográficos.
  • Correo electrónico.
  • Uso de Memcache
  • Endpoints (Este punto me llevará algo de tiempo).
Espero que estén al pendiente, no olviden comentar, si quieren que agregue algún punto pueden avisarme y lo agrego. Tampoco olviden revisar las otras entradas del blog.

viernes, 6 de diciembre de 2013

Felicitaciones de cumpleaños automaticas con GAS

Supongamos que somos los dueños de una empresa o simplemente somos personas con muy mala memoria para ciertos eventos, en un caso en particular los cumpleaños. Aunque hay calendarios que nos recuerdan que se acerca el cumpleaños de una persona, a veces hacemos caso omiso y después se olvida dicho evento. Pero usando Google Apps Script podemos solucionar esos pequeños inconvenientes.

Esta entrada no será muy extensa ya que el código es realmente muy corto. En primer lugar hay que crear un script, una vez creado pueden hacer un copy paste del mio y ponerlo en su script.



Una vez hecho eso, creen un grupo en gmail al que quieran mandarle felicitaciones o simplemente cambien la instrucción ContactsApp.getContactGroup por ContactsApp.getContacts() e inclusive pudo hacerse de manera mucho más fácil usando el método getContactsByDate(), pero como es un método de ContactsApp y no de un grupo específico pues no tendría mucho chiste el post jeje , para mayor información consulten la documentación. El código no es muy complejo realmente, la lógica que se sigue puede resumirse en los siguientes pasos:


  • Obtener a los contactos que me interesa ver su fecha de nacimiento para saber si es su cumpleaños.
  • Obtener la fecha de hoy y sumarle un día para mandarles una felicitación un día antes de que cumplan años.
  • Iterar los contactos.
  • Comparar fechas (día y mes).
  • Mandar correo.

 El método devuelve fecha fue necesario porque GAS y Javascript no manejan el mismo formato de mes y pues una cosa llevo a la otra, en fin, aquí esta la imagen con la implementación.


 No hay mucho que explicar realmente, así que pasaremos a la configuración del trigger que ejecutara el script a diario para felicitar a la gente que cumpla años al siguiente día, en un post anterior vimos un ejemplo de como crear un trigger que se ejecuta cuando surge cierto evento ligado a un documento (veanlo para saber como se crea un trigger), pero para este utilizaremos un trigger que se ejecuta por tiempo, pueden ver un ejemplo aquí. Bueno en este caso lo configure para que el script se ejecute a diario entre 8-9 de la mañana.



Con esto ha terminado el post, espero les haya gustado. Pueden probar y cualquier duda pueden contactarme :), no se les olvide seguirme en G+,TwitterFacebook. Cuando consiga un micrófono haré la versión de este tutorial en vídeo mientras pueden suscribirse en mi canal. Si quieren que haga un tutorial sobre cierto tema de GAS también pueden solicitarlo, hazlo aquí :) No olviden comentar.

jueves, 5 de diciembre de 2013

Explorando el servicio de rutas de la API de Google Maps

Antes de avanzar con este tutorial para el uso del servicio de rutas de la API de Google Maps, te recomiendo ver la entrada pasada Introducción al API de Google Maps ya que me basare en ese ejemplo para hacer este.

El servicio de rutas se obtiene mediante un objeto de la API llamado DirectionsService, según la documentación de Google este objeto "permite obtener rutas para distintos medios de transporte. Este objeto se comunica con el servicio de rutas del API de Google Maps, que recibe solicitudes de rutas y devuelve los resultados calculados".

Para explorar el API haremos un ejemplo donde podamos poner un punto inicial, un punto final, además de agregar puntos intermedios en una ruta.

El código en ciertas formas es similar al del ejemplo de Introducción al API de Google Maps, eliminaremos unas cosas, agregaremos otras, pero al fin y al cabo sigue siendo un mapa. Seguiremos usando la estructura del ejercicio pasado, un archivo "index.html" y 2 carpetas "js" y "css". Al archivo index.html le agregaremos un par de elementos ya que no solo necesitamos el mapa, ahora también otros elementos con los que se pueda interactuar para brindarle funcionalidad. Necesitamos 2 combos, uno para seleccionar el tipo de transporte y otro para seleccionar el tipo de punto(inicial, final o intermedio) que se agregara al mapa.


Como hay que cambiar el contenido del ejemplo anterior, hay que editar el archivo index.html para dejarlo de la siguiente manera.



En este ejemplo solo usaremos 2 tipos de modos de viaje, caminando o manejando, hay otros tipos pero estos dependen mucho del lugar del que solicitemos la ruta.

Después iremos al archivo "mapa.js" y agregaremos unas cuantas variables.


Las variables que destacan son dibuja_rutas, la cual es un objeto DirectionsRenderer que se liga con el mapa y lo dibuja según lo que la variable servicio_rutas traiga como resultado, la opción suppressMarker evita que cree marcadores en el punto de inicio y final ya que en este ejemplo se dibujaran cuando le demos clic al mapa, y la variable servicio_rutas, es un objeto DirectionsService que realiza una consulta tomando como parámetros el tipo de viaje, puntos inicial, final e intermedios, entre otros.

Modificaremos un poco el comportamiento del método cargar_mapa, para que asigne un evento cuando el combo que indica el tipo de transporte cambie y que ligue el mapa con el objeto DirectionsRenderer.


Modificaremos el método agregar_punto para que guarde el punto según el tipo deseado, hay que destacar que cuando el tipo es 2 se guarda un DirectionsWaypoint, este objeto es una especificación  no tienen una clase como tal y no puede crearse con new , solo se declara el objeto en notación javascript y cuando se use el DirectionsService este consultara los atributos del waypoint, cabe aclarar que en la documentación oficial indica que en el API gratuita solo permite 8 DirectionsWaypoint en una consulta (incluyendo el origen y el destino) y en el API for Bussiness permite 23 (incluyendo el origen y el destino).



Agregaremos un método llamado calcula ruta, que solo se ejecutara cuando el punto inicial y final no sean nulos, este en su variable request recolecta los parámetros con los cuales DirectionsService realizará la consulta, y al recibir la respuesta mandará a llamar al .



Agregaremos un método para crear la ruta y otro para crear un marcador, el de crear ruta dibujara los elementos según los datos que hayamos agregado. En el método crea_ruta recibe 2 parametros, el primero es un objeto de tipo DirectionsRoute que contiene el resultado de la consulta y el segundo es un objeto DirectionsStatus que indica el estado de la consulta. Si la consulta fue satisfactoria entonces el resultado se dibuja en el mapa.



No fui muy explicito con algunas partes de este post ya que documente el código entonces, muchas cosas las explico. He aquí el resultado final y el Código.


Cualquier duda pueden contactarme :), no se les olvide seguirme en G+TwitterFacebook. Cuando consiga un micrófono haré la versión de este tutorial en vídeo mientras pueden suscribirse en mi canal. Si quieren que haga un tutorial sobre cierto tema de Google Maps (web) también pueden solicitarlo, hazlo aquí :) No olviden comentar.



miércoles, 4 de diciembre de 2013

Introducción a GAS (Google Apps Script)

GAS es un lenguaje de script que permite hacer cosas muy cool con las Google Apps, ya que te da la flexibilidad de programar ciertos comportamientos, acceder a elementos que almacenes en ellas, entre otras cosas. Para más información sobre GAS, antes de continuar sugiero visitar su página oficial y también revisar los vídeos sobre Google Apps Script del proyecto Google Developers Hackademy  en YouTube (De igual forma aquí les dejo el primer vídeo).



A continuación realizaremos un pequeño ejemplo, algo simple pero muy útil imaginemos que tenemos un evento y queremos hacer un registro en línea para un curso o taller, entonces para que esto sea lo más correcto posible debemos mandar un correo confirmando el registro y cerrar el registro cuando el cupo este lleno.

Para hacer esto hay que crear un formulario como cualquier otro con los items que se deseen, en mi caso solo pondré 2: nombre y correo electrónico.



Una vez creado el formulario, hay que abrir el spreadsheet al que esta vinculado para guardar las respuestas. Dentro del menú "Herramientas", hay que dar clic en "Editor de secuencias de comandos", al hacerlo seleccionaremos "Proyecto en blanco".

Una vez hecho esto, agregaremos las siguientes lineas de código que se muestran en la imagen (Igualmente aquí dejo el código).



Ya tenemos un código funcional, pero esto no es todo lo que debemos hacer. El método "datosGuardados" debe ejecutarse cada vez que le enviemos una respuesta. Para ello tenemos que asignarle un activador o "trigger". Para realizar esto se tiene que ir al menú de "Recursos" y seleccionar la opción "Activadores del proyecto activo". Al hacerlo, aparecera una ventana como la siguiente.



Solo hay que dar clic para agregar el activador en el enlace y posteriormente configurar el activador de la siguiente manera(para mayor información sobre los eventos en GAS consulte la documentación), se selecciona la función a ejecutar, el origen del evento (tiempo o el documento) y el evento.



Adicionalmente podemos configurar notificaciones para en caso de que haya un fallo en la ejecución del script (yo lo hice para que me la mandara inmediatamente después de un error).



Una vez que todo se ha configurado todo, al dar guardar saldrá una ventana que nos dice que el script necesita ciertos permisos para correr, autorizamos y con esto terminamos el ejemplo.



Pueden probar y cualquier duda pueden contactarme :), no se les olvide seguirme en G+, Twitter, Facebook. Cuando consiga un micrófono haré la versión de este tutorial en vídeo mientras pueden suscribirse en mi canal. Si quieren que haga un tutorial sobre cierto tema de GAS también pueden solicitarlo, hazlo aquí :) No olviden comentar.

martes, 3 de diciembre de 2013

Introducción al API de Google Maps

Esta es una ligera introducción a una serie de tutoriales acerca del API de Google Maps, ¿porque Google Maps? Google Maps es una de las API's más utilizadas en el mundo de la tecnología, tan solo hay que pensar cuantas personas no ubican un lugar o se transportan a el haciendo uso de Google Maps.

Para esta serie usaré la versión 3 del API hecha en JavaScript, ya que solo haré ejemplos en el entorno web ya que apenas aprenderé a usar Android.

Antes de empezar hay que organizar el lugar donde crearemos nuestro para ellos creen una carpeta donde guardaran el trabajo en ella creen un archivo html y 2 carpetas una llamada "css" y una llamada "js". Sugiero esta organización para mantener por separado el contenido html, los estilos y la funcionalidad.



Bueno una vez hecho esto procederemos a crear el archivo html, en este caso le llame "index.html".


En el código se puede observar que solo se definieron 3 cosas

La referencia a los estilos.
La referencia al API de Google Maps (Aquí pueden encontrar información acerca de los parámetros que podemos agregar al cargar la API de Google Maps).
La referencia a jQuery (Esta no es necesaria para usar Google Maps, pero este ejercicio servirá como base para hacer otras cosas así que lo agregue).
La referencia a un script que es el que contendrá el funcionamiento del mapa ("mapa.js").
Un elemento div que contendrá el mapa.

Ahora hay que darle un tamaño al elemento que contendrá al mapa ya que sino aunque cargue el API no seremos capaz de verlo. Para ello hay que agregar las siguientes lineas en el archivo css.




Ahora pasamos a la parte más divertida, JavaScript :D. Aquí pondremos toda la funcionalidad.


Con estas líneas ya se puede visualizar el mapa. Hay que destacar que la variable opciones cuenta con los atributos obligatorios para hacer que el mapa aparezca. Para ver que otros parámetros puede recibir el objeto mapa se puede consultar la documentación.

Ahora que ya tenemos mapa vamos a agregarle una pequeña funcionalidad que permita que se agregue un marcador cada vez que se de un click sobre el mapa.

Ahora agregaremos una función que abra una ventana cada vez que se da click al marcador.

Con esto ha terminado esta pequeña introducción al API de Google Maps, próximamente un tutorial para usar el API de rutas y uno sobre distintos usos de un mapa de calor, dudas o comentarios o peticiones para próximas entradas pueden dejar un mensaje :) También pueden entrar a mi canal en el que próximamente pondré la versión en vídeo.

Código