Instalacion de Nimbits en GAE


El término Internet de las Cosas apareció por primera vez alrededor de 2008, cuando varios investigadores se reunieron en la primera conferencia de Internet de las cosas  y comenzaron a discutir la aplicabilidad a los objetos físicos del estilo arquitectónico REST  y su aplicación Web como HTTP 1.1.

Las propiedades del llamado Internet of Things  ( o Internet  de las Cosas) se pueden resumir de la siguiente manera:

  • Utiliza HTTP como protocolo de aplicación en lugar de como un protocolo de transporte como se ha hecho en el mundo de WS(Web Services o  Servicios Web)
  • Expone la funcionalidad sincróna de objetos inteligentes a través del interfaz REST (también conocida como REST API ) y, en general respeta los planos de arquitectura orientada a recursos .
  • Expone la funcionalidad asincrónica (es decir, eventos) de los objetos inteligentes a través de la utilización de las normas de sindicación Web ampliamente aceptadas, como Atom o mecanismos Web server-empuje tales como el Comet .

Todas estas características garantizan el acoplamiento de los servicios prestados por los objetos inteligentes,y  además, ofrecen una interfaz uniforme para acceder y aprovechar la funcionalidad de éstoss.

Uno de los primeros prototipos de la Web de las Cosas es el proyecto  “Energie Visible“en el que los sensores son  capaces de monitorizar y controlar el consumo de energía de los electrodomésticos gracias a la funcionalidad  REST API ,la caul se  utiliza a continuación para crear un física Mashup .

Cosm ( antes Xively y mucho antes Pachube) es una web comercial  de Internet  las cosas   de la que tambien hemos hablado en este blog  sobre todo por su soporte a Netduino Plus
Evrythng  es una plataforma para la fabricación de productos etiquetados parte de la Web basada en una arquitectura Web de las Cosas.
Nimbits  es un servidor histórico de datos de código abierto basado en la arquitectura de computación en nube que proporciona conectividad entre los dispositivos que utilizan los puntos de datos.

En este blog se ha hablado de los  modos de desplegar Nimbits

  • En la infraestructura publica de Nimbits
  • En su propio hosting Cloud como por ejemplo en una Instancia de Amazon (EC2) , en la plataforma en nube de Google (GAE) y  tambien en cualuier plataforma cloud qeu soporte  Ubuntu Linux KVM
  • !incluso en la modesta : en una Raspberry py directamente !

 

A continuación describiremos como configurar   con una cuenta en Google App Engine el software de Nimbits

 

-El software lo han colgado directamente en Github en https://github.com/bsautner/com.nimbits :

nimbits

Descargue el software pulsando en la parte derecha en   Download Zip ( puede que tenga que  estar validado en Github para que le permita esta opcion) y extraiga dicho archivo en un  directorio  que el sea facil recordar de su ordenador

Descargue el SDK de GAE y extrigalo en  su ordenador si todavia no lo ha hecho

Cree una nueva instancia  en Google App Engine que será el nombre de la aplicación como por ejemplo ” nimbits_rocks”.Nota: Esta debe ser único – se le avisa si no lo es. Este ID de proyecto identifica su proyecto en la consola de las API de Google y también se utiliza para identificar el backend en laconsola de administración de App Engine .

Descargue el archivo zip GAE  y  extraigalo en  su ordenador

Edite el  archivo  WEB-INF/appengine-web.xml de la descarga Nimbits, cambiando  su nombre de instancia por ejemplo nimbits_rocks

 

<!–?xml version=”1.0″ encoding=”utf-8″?>
http://appengine.google.com/ns/1.0″&gt;
<threadsafe>true</threadsafe>

<!–change this to match your app id, note the version below, you’ll want to set the current version–>
in the app engine admin console. –>
<application>

<!–?xml version=”1.0″ encoding=”utf-8″?>
http://appengine.google.com/ns/1.0″&gt;
<threadsafe>true</threadsafe>

<!–change this to match your app id, note the version below, you’ll want to set the current version–>
in the app engine admin console. –>
<application>nimbits_rocks</application>

</application>

<version>1</version>

<precompilation-enabled>false</precompilation-enabled>

<system-properties>
name=”appengine.orm.disable.duplicate.pmf.exception” value=”false”/>
</system-properties>
<static-files>
path=”/bootstrap/css/**.css” />
path=”/**.css” />
path=”/**.html” />
path=”/**.jsp” />
path=”/**.gif” />
path=”/**.png” />
path=”/**.js” />
path=”/**.ico” />
</static-files>
<inbound-services>
<service>xmpp_message</service>
<!–<service>xmpp_presence</service>–>
<!–<service>xmpp_subscribe</service>–>
<!–<service>xmpp_error</service>–>
</inbound-services>
</appengine-web-app>

Desde el directorio del SDK de Google APP Engine o ejecutar

○     appcfg.cmd update [unzip location]/nimbits_gae
La instancia se ejecutaria    en http:\ nimbits_rocks.appspot.com, abrir esa URL en un navegador y espere e un momento para que se inicie debería ver a su cuenta de usuario en la parte superior izquierda. Haga clic derecho en él para hacer un punto de datos de prueba

Google App Engine


GAE   es una de las primeras  pioneras en estblecer el PaaS(Plataforma como servicio ) , lo cual permite  a cualquier desearrollador  ejecutar  aplicaciones web en la infraestructura de Google. Las aplicaciones App Engine son fáciles de crear, mantener y actualizar al ir aumentando el tráfico y las necesidades de almacenamiento de datos. Con App Engine, no necesitará utilizar ningún servidor: sólo tendrá que subir su aplicación para que sus usuarios puedan empezar a utilizarla.

Puede proporcionar a su aplicación tu propio nombre de dominio (como por ejemplo http://www.example.com/) a través de Google Apps o también puede proporcionar a su aplicación un nombre gratuito del dominio appspot.com que  podrá compartir con todo el mundo o limitar el acceso a los miembros de su organización.

App Engine  ofrecedesde su inicios  un entorno de tiempo de ejecución Python dedicado, que incluye un rápido interprete Python y la biblioteca estándar Python. Los entornos de tiempo de ejecución Java y Python se generan para garantizar que su aplicación se ejecuta de forma rápida, segura y sin interferencias de otras aplicaciones en el sistema.

Google App Engine  ademas admite aplicaciones escritas en varios lenguajes de programació, por ejemplo gracias al entorno de tiempo de ejecución Java de App Engine puede crearstu aplicación a través de tecnologías Java estándar, que incluyen JVM, servlets Java y el lenguaje de programación Java o cualquier otro lenguaje que utilice un intérprete o compilador basado en JVM como, por ejemplo, JavaScript o Ruby.

Puede empezar a utilizar App Engine de forma totalmente gratuita pues  tdas las aplicaciones pueden utilizar hasta 500 MB de almacenamiento y suficiente CPU y ancho de banda como para permitir un servicio eficaz de la aplicación de alrededor de 5 millones de visitas a la página al mes, totalmente gratuitas. Cuando habilita la facturación para su aplicación, se incrementan sus límites gratuitos y sólo paga aquellos recursos que utilice por encima de los niveles gratuitos pues con App Engine, sólo se  paga lo que utiliza  no existiendo costes de configuración ni tarifas recurrentes. Los recursos que utiliza su aplicación, como por ejemplo el almacenamiento y el ancho de banda, se miden por gigabytes y se facturan según competitivas tarifas de modo que controla la cantidad máxima de recursos que consume su aplicación, de modo que siempre permanezcan dentro de su presupuesto.

El entorno de aplicación

Google App Engine permite desarrollar fácilmente aplicaciones que se ejecuten de forma fiable, incluso con pesadas cargas de trabajo y grandes cantidades de datos. App Engine incluye las siguientes funciones:

  • Servidor web dinámico, totalmente compatible con las tecnologías web más comunes,
  • Almacenamiento permanente con funciones de consulta, orden y transacciones,
  • Escalado automático y balanceo de carga,
  • API para autenticar usuarios y enviar correo electrónico a través de las cuentas de Google,
  • Completo entorno de desarrollo local que simula Google App Engine en tu equipo,
  • Tareas programadas para activar eventos en momentos determinados y en intervalos regulares.

Su aplicación se puede ejecutar en uno de los dos entornos de tiempo de ejecución: el entorno Java y el entorno Python. Cada entorno proporciona protocolos estándar y tecnologías comunes para el desarrollo de aplicaciones web.

 

El entorno de tiempo de ejecución Python

Gracias al entorno de tiempo de ejecución Python, puede implementar tu aplicación a través del lenguaje de programación Python y ejecutarla en un intérprete de Python optimizado. App Engine incluye varias API y herramientas para el desarrollo de aplicaciones web de Python, así como un API de modelado de datos detallados, un framework de aplicaciones web fácil de utilizar y herramientas para administrar y acceder a tus datos de la aplicación. También puede beneficiarse de una amplia variedad de frameworks y bibliotecas avanzados para el desarrollo de aplicaciones web de Python, como por ejemplo Django.

El entorno de tiempo de ejecución Python ha estado utilizando la versión 2.5.2. de Python pero estan teniendo en cuenta una compatibilidad adicional con Python 3

El entorno Python incluye la biblioteca estándar de Python. pero  no todas las funciones de biblioteca se pueden ejecutar en el entorno de la zona de pruebas,por ejemplo, una llamada a un método que intenta abrir un conector o escribir en un archivo generará una excepción. Para comodidad del usuario, se han inhabilitado varios módulos de la biblioteca estándar cuyas funciones son incompatibles con el entorno de tiempo de ejecución y el código que los importe generará un error.

El código de aplicación escrito para el entorno Python se debe escribir exclusivamente en Python. Las extensiones escritas en lenguaje C no son compatibles.

El entorno Python proporciona varias API Python para servicios de almacén de datos, cuentas de Google, extracción de URL y correo electrónico. App Engine también ofrece un sencillo framework para aplicaciones web Python denominado webapp que te permitirá empezar a crear aplicaciones fácilmente.

Puedes subir otras bibliotecas de terceros con tu aplicación, siempre que estén implementadas únicamente en Python y no requieran ningún módulo incompatible de la biblioteca estándar.

Para obtener más información sobre el entorno de tiempo de ejecución Python, consulta la sección El entorno de tiempo de ejecución Python.

El almacén de datos

App Engine proporciona un potente servicio de almacenamiento de datos distribuido que incluye un motor de búsqueda y transacciones. A medida que el servidor web distribuido crece con el tráfico, el almacén de datos distribuido crece con los datos.

El almacén de datos de App Engine no es como una base de datos relacional tradicional dado que los objetos de datos, o “entidades”, disponen de un tipo y un conjunto de propiedades. Las consultas pueden recuperar entidades de un tipo determinado filtradas y ordenadas según los valores de las propiedades. Los valores de las propiedades pueden ser de cualquiera de los tipos de valores de propiedades admitidos.

Las entidades del almacén de datos son carecen de esquema. Tu código de aplicación se encarga de proporcionar y de respetar la estructura de las entidades de datos. Las interfaces JDO/JPA de Java y la interfaz del almacén de datos de Python incluyen características para aplicar y respetar la estructura de tu aplicación. Tu aplicación también puede acceder al almacén de datos de forma directa para aplicar mucho o poco la estructura que necesite.

El almacén de datos es muy consistente y utiliza el control de concurrencia optimista. Una entidad se actualizará si se intenta realizar una transacción un número determinado de veces y otros procesos están intentando actualizar la misma entidad al mismo tiempo. Tu aplicación puede ejecutar varias operaciones de almacén de datos en una única transacción, que se ejecutarán con o sin éxito, garantizando así la integridad de tus datos.

El almacén de datos implementa transacciones en su red distribuida mediante “grupos de entidades”. Una transacción manipula entidades de un único grupo. Las entidades del mismo grupo se almacenan juntas para ejecutar las transacciones eficazmente. Tu aplicación puede asignar entidades a grupos al crear las entidades.

Validacion con las cuentas de Google

App Engine admite la integración de una aplicación con Cuentas de Google para la autenticación de los usuarios. Su aplicación puede permitir a un usuario acceder con una cuenta de Google y tener acceso a la dirección de correo electrónico y el nombre de visualización asociados a la cuenta. Las cuentas de Google permiten que el usuario pueda empezar a utilizar la aplicación de una forma más rápida, ya que no tiene que crear una cuenta nueva. También te ahorran el esfuerzo de implementar un sistema de cuentas de usuario sólo para tu aplicación.

 

Servicios de App Engine

App Engine proporciona una gran variedad de servicios que te permitirán realizar operaciones comunes al gestionar tu aplicación. Se incluyen las siguientes API para acceder a estos servicios:

  • Extracción de URL:Las aplicaciones pueden acceder a recursos en Internet, como servicios web u otros datos, mediante el servicio de extracción de URL de App Engine. El servicio de extracción de URL recupera recursos web mediante la misma infraestructura de alta velocidad de Google que recupera páginas web para muchos otros productos de Google.
  • Correo :Las aplicaciones pueden enviar mensajes de correo electrónico mediante el servicio de correo de App Engine. El servicio de correo utiliza la infraestructura de Google para enviar mensajes de correo electrónico.
  • Memcache :El servicio Memcache proporciona a tu aplicación el servicio de memoria caché de valores-claves de alto rendimiento accesible desde varias instancias de tu aplicación. Memcache resulta útil para los datos que no necesitan las funciones de persistencia y transacciones del almacén de datos, como los datos temporales o los datos copiados del almacén de datos en la caché para un acceso a gran velocidad.
  • Manipulación de imágenes:El servicio de imágenes permite a tu aplicación manipular imágenes. Con esta API, podrás recortar, rotar o ajustar el tamaño de imágenes en formato JPEG o PNG.
  • Tareas programadas:El servicio Cron te permite programar tareas que se van a ejecutar en intervalos regulares. Para obtener más información, consulta la documentación sobre el servicio Cron de Python o de Java.

Flujo de trabajo de desarrollo

Los kits de desarrollo de software de App Engine (SDK) para Java y Python incluyen una aplicación de servidor web que emula todos los servicios de App Engine de tu equipo local. Cada SDK incluye todas las API y bibliotecas disponibles en App Engine. El servidor web también simula el entorno seguro de la zona de pruebas, incluyendo las verificaciones con respecto a los intentos de acceso a los recursos del sistema inhabilitados en el entorno de tiempo de ejecución de App Engine. Cada SDK también incluye una herramienta para subir tu aplicación a App Engine.

Una vez que haya creado el código de su aplicación, los archivos estáticos y los archivos de configuración, ejecuta la herramienta para subir los datos. La herramienta te pedirá que introduzcas tu dirección de correo electrónico y contraseña de Google.
Cuando cree una nueva compilación importante de una aplicación que ya se esté ejecutando en App Engine, podrás subirla como una nueva versión. La antigua versión seguirá disponible para los usuarios hasta que cambies a la nueva versión. Puedes probar la nueva versión en App Engine mientras aún se esté ejecutando la antigua.
El SDK Python se implementa exclusivamente en Python y se ejecuta en cualquier plataforma que disponga de Python 2.5, como Windows, Mac OS X y Linux. El SDK está disponible en forma de archivo Zip y los instaladores están disponibles para Windows y Mac OS X.
La consola de administración es una interfaz basada en web que permite administrar las aplicaciones que ejecutas en App Engine. Puedes utilizarla para crear nuevas aplicaciones, configurar nombres de dominio, cambiar la versión disponible de tu aplicación, examinar los registros de error y acceso y buscar el almacén de datos de una aplicación.

Cuotas y límites

Crear una aplicación en App Engine no sólo resulta fácil. ¡Además es gratis! Puedes crear una cuenta y publicar una aplicación que la gente podrá utilizar inmediatamente sin ningún coste ni obligación. Una aplicación de una cuenta gratuita dispone de hasta 500 MB de espacio y admite hasta 5 millones de visitas mensuales. Cuando lo desees, puedes habilitar la facturación, establecer un presupuesto diario máximo y asignar tu presupuesto para cada recurso de acuerdo con tus necesidades.

Puedes registrar hasta 10 aplicaciones por cuenta de desarrollador.

Cada aplicación asigna recursos dentro de límites o “cuotas”. Una cuota determina la cantidad que una aplicación puede utilizar un recurso concreto durante un día del calendario. En un futuro próximo, podrás ajustar alguna de estas cuotas mediante la adquisición de recursos adicionales.

Algunas funciones imponen límites no relacionados con cuotas para proteger la estabilidad del sistema. Por ejemplo, cuando una aplicación se ejecuta para atender una solicitud web, debe emitir una respuesta en 30 segundos. Si la aplicación tarda demasiado, se finaliza el proceso y el servidor devuelve un código de error al usuario. El tiempo de espera de la solicitud es dinámico y se puede reducir si un controlador de solicitudes consume el tiempo de espera con frecuencia para conservar recursos.

Otro ejemplo de un límite de servicio es el número de resultados devuelto por una consulta. Una consulta puede devolver como máximo 1.000 resultados. Las consultas que deberían devolver más resultados sólo devuelven el máximo. En este caso, no es probable que una solicitud que realiza este tipo de consulta devuelva una solicitud antes de agotar el tiempo de espera, pero el límite se mantendrá para conservar los recursos del almacén de datos.

 

La zona de pruebas

Las aplicaciones se ejecutan en un entorno seguro que proporciona acceso limitado al sistema operativo subyacente. Estas limitaciones permiten a App Engine distribuir solicitudes web de la aplicación en varios servidores e iniciar y detener los servidores según las demandas del tráfico. La zona de pruebas aísla la aplicación en su propio entorno seguro de confianza, totalmente independiente del hardware, el sistema operativo y la ubicación física del servidor web.

Algunos ejemplos de las limitaciones del entorno seguro de la zona de pruebas son:

  • Una aplicación sólo podrá acceder a otros equipos de Internet a través de los servicios de correo electrónico y extracción de URL proporcionados. Otros equipos sólo se podrán conectar a la aplicación mediante solicitudes HTTP (o HTTPS) en los puertos estándar.
  • Una aplicación no podrá escribir en el sistema de archivos. Una aplicación podrá leer archivos, pero sólo aquéllos subidos con el código de la aplicación. La aplicación deberá utilizar el almacén de datos de App Engine, Memcache u otros servicios para todos los datos que permanezcan entre las solicitudes.
  • El código de aplicación sólo se ejecuta en respuesta a una solicitud web o a una tarea cron y debe devolver datos de respuesta en un período de 30 segundos en cualquier caso. Un controlador de solicitudes no podrá generar un subproceso ni ejecutar código después de haber enviado la respuesta.

 

Más información…

Para obtener más información sobre Google App Engine: