Monday, September 4, 2017

Game Tutorial using Node.js - IBM Bluemix (Part 1)

Hi folk,

Many of you ask me to teach how to create a game in the cloud, I am preparing a tutorial step by step so everyone can realize their own game.

There is no better way to learn technological concepts than by playing with them.

Setup project local environment and deploy to Bluemix

What you'll need to build your game

Simple, all you need is:
  • Firefox (Browser)
  • Atom (Text Editor)   
  • NodeJS (Server)
  • Bluemix account (Hosting your game Online)


Project folder structure

A little theory about the project structure, folders and files so that throughout the tutorial people can identify the one we are modifying and why it is modified.


Install software

There is the software that you have to install:

Create project

Before to start the procedure you have to create a project structure with following folders and empty file


1) Open a terminal and go to project directory
2) Open the file package.json by command line (e.g.):
 
$ atom package.json

3) Copy and paste following lines:
 
{
  "name": "project",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "dependencies": {
    "express": "^4.13.4",
    "socket.io": "^1.4.5"
  },
  "devDependencies": {},
  "author": "",
  "license": "ISC",
  "scripts": {
      "start": "node app.js"
  }
}
 
4) Save file package.json
5) Execute following command into project root folder to install node modules dependencies:

$ npm install

New node_modules is added to project

6) Open file app.js
7) Copy and paste following lines:
  
 var http = require('http');
 var express = require('express');
 var app = express();
 
 app.get('/',function(req, res) {
  res.sendFile(__dirname + '/client/index.html');
 });

 app.use('/client',express.static(__dirname + '/client'));

 var server = http.createServer(app);
 server.listen(3000, function(){

   console.log('Express server listening on port ' + app.get('port'));

 });
 
8) Save file app.js
9) Open files index.html
10) Write following line:
 
Hello Folk! Start game here!

11) Save file index.html
12) Execute following command into project root folder to run local Express server:
 
 $ node app.js

13) Open a browser and type:
 
http://localhost:3000

The result:



Try: You can access to client files
http://localhost:3000/client/img/lock.png

Deploy to Bluemix

Now is time to host the application to the cloud.

1) Open a terminal and go to project directory
2) Connect and log in to Bluemix using your account:
 
$ bluemix api https://api.ng.bluemix.net

3) Open file manifest.yml
4) Copy and paste following lines:
 
 applications:
 - path: .
  memory: 512M
  instances: 1
  domain: mybluemix.net
  name: tgbm
  host: {write-your-unique-hostname}
  disk_quota: 1024M
 
 5) Update the host property with your own host name

Note: In this manifest.yml file, random-route: true property generates a random route for your app to prevent your route from colliding with others. If you choose to, you can replace random-route: true with host:{write-your-unique-hostname}, supplying a host name of your choice

6) Save file manifest.yml
7) Execute following command into project root folder to push your app to Bluemix.
 
$ bluemix app push

Note: Deploying your application can take a few minutes. When deployment completes, you'll see a message that your app is running

 
8) Open a browser and type:
 
http://tuto-game-bx.mybluemix.net

The result:
Yeah!!! Your are ready for the next part of this tutorial!!

Let's go then, click here.
Be blue, be mix

Monday, June 19, 2017

Convierte tu smartphone en un dispositivo IoT

Todos sabemos que un smartphone dispone de múltiples sensores como por ejemplo el acelerómetro, el giroscopio, el sensor de luz, el termómetro, el lector de huellas, etc.

Las aplicaciones clientes instaladas en los smartphones recogen los datos de los diferentes sensores para procesarlos internamente o enviarlas a un servidor IoT para analizar los datos y en algunos caso, devolver al dispositivo mensajes de vuelta

Bien, pues me he lanzado a comprobar que es posible y en menos de 30 minutos, usando un quick-starter y un tutorial (en el que está basado este artículo), voy a intentar convertir tu smartphone en un dispositivo sensor que conectado al servidor IBM IoT (Internet of Things), se usará para enviar/recibir datos y procesar/visualizar los datos del dispositivo en IBM Bluemix.

¿No os parece alucinante? utilizar un sensor de tu smartphone y procesar los datos que se obtienen... uhmm.. Imaginad cuando se le dedica tiempo a frikear esto lo que se puede hacer ;)
Bueno vamos a ello, la visión general de la arquitectura que voy a montar será la que muestra la siguiente imagen:




Es caso de uso de este post es simple, el smartphone se gira y envía la información a un servicio IoT (1) que lo procesa e envía un mensaje de vuelta (2) para que cambie el color de la pantalla del smartphone en función de la aceleración de giro. Los datos obtenidos del sensor se pueden explotar por una aplicaión cliente (3).

Para ello se usará el sensor acelerómetro, indispensable para medir la aceleración, la inclinación y la gravedad. Este sensor normalmente se usa cuando cambiamos el dispositivo de una posición vertical a horizontal y viceversa.

La comunicación entre el Smartphone y el servicio IoT se realiza mediante el protocolo MQTT (Message Queue Telemetry Transport). MQTT es un protocolo usado para la comunicación machine-to-machine (M2M) en IoT y está orientado a la comunicación de sensores debido a que consume muy poco ancho de banda. Puede ser utilizado en la mayoría de los dispositivos con pocos recursos: CPU, RAM, etc.

¿Qué se necesita?

  • Una cuenta en Bluemix, existe una versión trial de 30 días
  • Cloud Foundry CLI, interfaz de línea de comandos de Bluemix para descargar, modificar y reasignar aplicaciones y instancias de servicio de Cloud Foundry.
  • Teléfono móvil (smartphone) (Android)
Nota: Se puede usar telefónos móviles iOS, lo único que cambia es la aplicación cliente del dispositivo.

Paso 1 - Crear aplicación IoT

Este paso se describe el procedimiento para la creación de una aplicación en IoT que contiene un motor Node-RED que se usa para procesar los mensajes de de la aplicación IoT. También se crea un servicio de IoT para enviar y recibir mensajes MQTT.



1) Acceder a la cuenta de Bluemix
2) Pulsar en Catalog y en el filtro de búsqueda escribir “Internet of Things"
3) Pulsar en el Boilerplates de Internet of Things





4) Escribir el nombre de la aplicación IoT y pulsar Create

Se desplegarán y se conectarán los siguientes servicios:
  • Watson IoT Platform - Un kit de herramientas IoT que incluye administración de pasarelas, administración de dispositivos y acceso a aplicaciones. Mediante el uso de Watson IoT Platform, puede recopilar datos de dispositivos conectados y ejecutar analíticas en datos en tiempo real
  • IBM® SDK for Node.js para Bluemix® - Entorno de ejecución en el que Node-RED se ejecuta
  • IBM® Cloudant® NoSQL DB para Bluemix® - Base de datos en la que Node-RED almacena metadatos
  • Aplicación Node-RED - Una instancia de la aplicación Node-RED que incluye nodos diseñados para la plataforma Watson IoT

Paso 2 - Añadir dispositivo para enviar mensajes MQTT al servidor IoT

Este paso muestra el procedimiento para registrar y crear un tipo de dispositivo en la plataforma de Watson IoT.


1) Acceder a la consola de la aplicación IoT
2) Pulsar en el menú de IBM Bluemix en la parte superior izquierda de la pantalla
3) Seleccionar Services y después pulsar Dashboard
4) En la lista de servicios buscar el servicio IoT creado y pulsar sobre él
5) En la página inicial de la gestión del servicio pulsar Launch




6) Se muestra el panel de control del servidor IBM Internet of Things, que es un servicio independiente de Bluemix. Se asigna un ID de organización a la aplicación y se necesitará este ID más adelante al desarrollar la aplicación para dispositivos móviles.
7) Pulsar en el icono Devices





8) Pulsar en Add Devices
9) Crear un tipo de dispositivo que se llame Android y pulsar Next




10) Pulsar Next, para esta demo no es necesario información adicional del dispositivo
11) Pulsar Next
12) Pulsar Create para crear el tipo de dispositivo
13) Aparece la pantalla de añadir dispositivo. Seleccionar el tipo Android. Pulsar Next


14) Añadir el ID del dispositivo y pulsar Next
15) Dejar la información de los metadatos en blanco y pulsar Next
16) Crear una autenticación por defecto de tokens: secret123 y pulsar Next
17) Pulsar Add
18) Cerrar la ventana


Ya está listo para enviar mensajes MQTT desde un dispositivo al IBM IoT Server.

Paso 3 – Instalar y configurar la aplicación Android

Este paso muestra el procedimiento para instalar y configurar la aplicación cliente en un smartphone.

 
1) En el móvil, ir a Settings > Security. Debajo de Device Administration, activa Unknown sources. También se puede instalar .apk desde repositorios fuera del Google Play.
2) Abrir un navegador y descargar la aplicación de cliente desde la URL:
Se descarga el fichero : iot-starter_501_v2.apk
Nota: versión compilada con Android 5.0.1 y compatible con versiones superiores
3) Instalar la la aplicación iot-starter_501_v2.apk en el dispositivo móvil
4) Una vez instalada la aplicación, se ejecuta para terminar la configuración
Nota: No seguir el tutorial pulsando Skip Tutorial
5) Introducir los parámetros de configuración
  • Organization: El ID de la organización que se muestra en el servidor de IBM IoT server (cuando empieza la comunicación empieza a enviar mensajes MQTT al servidor IoT). Para este ejemplo, puflid para este tutorial
  • Device ID: ID con el cual se ha configurado el dispositivo
  • Auth Token: Clave secreta de autentificación.
6) Pulsar Activate Sensor. Ahora la aplicación empieza a recoger datos del sensor de aceleración del móvil y envía la información a el servidor IoT.
Nota: El código de la aplicación Android se puede descargar de Git:
https://github.com/ibm-watson-iot/iot-starter-for-android

Paso 4 – Verificar que los datos son enviados del móvil al servidor IoT

1) Volviendo al servidor IoT, ir a página Devices


2) Pulsar sobre el dispositivo y pulsar sobre algún evento recibido

  
Nota: Los mensajes que se envían desde el móvil están en formato JSON y contienen datos de aceleración y posición.

Paso 5 – Procesar los mensajes enviados en Node-RED

Esta sección mejorará la aplicación Bluemix IoT utilizando un flujo Node-RED para procesar mensajes desde el smartpohone y, a continuación, enviar mensajes al smartphone. El móvil reaccionará en estos mensajes cambiando el color de fondo en la aplicación.





Nota: Node-RED es una herramienta visual que facilita el procesamiento de mensajes de IoT.


1) Acceder a la consolad de la aplicación de Bluemix
2) Pulsar en el menú de IBM Bluemix en la parte superior izquierda de la pantalla
3) Pulsar Apps y después sobre el mismo menú pulsar Dashboard
4) En la lista de aplicaciones Cloud Foundry buscar la aplicación creada y pulsar el icono Open URL





Nota: La primera vez que se accede aparece un asistente de configuración de la seguridad del editor Node-RED. También se crea por defecto un flujo de trabajo con los objetos necesarios para interactuar con dispositivos IoT


5) Crear un nuevo flujo, copiar e importar desde el clipboard el siguiente código con una configuración por defecto:


[{"id":"215c6601.12d32a","type":"ibmiot in","authentication":"boundService","apiKey":"","inputType":"evt","deviceId":"","applicationId":"","deviceType":"","eventType":"accel","commandType":"","format":"json","name":"IBM IoT App In","service":"registered","allDevices":true,"allApplications":"","allDeviceTypes":true,"allEvents":"","allCommands":"","allFormats":"","x":264.1999969482422,"y":434.1999969482422,"z":"dc6a0ca6.7993b","wires":[["ce21edbb.320628","fdfdaaa2.a45678"]]},{"id":"ce21edbb.320628","type":"function","name":"calc color","func":"var accelZ = msg.payload.d.acceleration_z;\nvar r = 0.0;\nvar b = 0.0;\nvar g = 0.0;\nif (accelZ > 0) {\n\tg = Math.round(accelZ * 25);\n} else if (accelZ < 0) {\n\tr = 255.0;\n} else {\n\tr = 104;\n\tg = 109;\n\tb = 115;\n}\na = 1.0;\n\nmsg.eventOrCommandType = \"color\";\nmsg.payload = JSON.stringify({\"d\":{\"r\":r,\"b\":b,\"g\":g,\"alpha\":a}});\n\nreturn msg;","outputs":1,"noerr":0,"x":437.1999969482422,"y":430.1999969482422,"z":"dc6a0ca6.7993b","wires":[["9df37edb.5d4588"]]},{"id":"9df37edb.5d4588","type":"ibmiot out","authentication":"boundService","apiKey":"","outputType":"cmd","deviceId":"112233445566","deviceType":"Android","eventCommandType":"text","format":"json","data":"{\"d\":{\"value\":\"text\"}}","name":"IBM IoT App Out","service":"registered","x":629.1999969482422,"y":443.1999969482422,"z":"dc6a0ca6.7993b","wires":[]},{"id":"fdfdaaa2.a45678","type":"debug","name":"","active":false,"console":"false","complete":"false","x":442.1999969482422,"y":364.1999969482422,"z":"dc6a0ca6.7993b","wires":[]}]




6) Adaptar los parámetros específicos. Pulsar dos veces sobre el nodo IBM IoT App out. En la ventana emergente, introducir el ID del dispositivo y pulsar DONE
7) Pulsar Deploy para desplegar los nodos y activarlos automáticamente
8) Mover el smartphone para ver cómo cambia de color la pantalla dependiendo de la aceleración de giro.





9) En el editor Node-RED, pulsar en el rectángulo cerca del nodo msg.payload node, y pulsar el tabulador debug para activar las trazas. Los datos de las trazas enviados desde el dispositivo móvil son en formato JSON





10) Inspecciona el código del calculador del color. Pulsa dos veces sobre la función calc color
Ahora hay una comunicación bidireccional entre su smartphone y la aplicación de Bluemix.

Paso 6 - Crear una aplicación Bluemix para visualizar los datos del sensor

Este paso muestra el procedimiento para crear una aplicación auxiliar para visualizar los datos del sensor.




1) Descargar el código de la aplicación ejemplo:
  • https://github.com/ibm-watson-iot/rickshaw4iot
2) Ir al Dashboard de Bluemix
3) Crear aplicación. Pulsar Create App
4) Pulsar sobre la aplicaciones Cloud Foundry SDK for Node.js
5) Escribir el nombre de la aplicación. En este ejemplo iotvisualizerjif
6) Pulsar Create. En pocos minutos la aplicación se creará y estará en ejecución
7) Descomprimir la aplicación rickshaw4iot-0.2.0.zip
8) Editar el fichero de manifiesto manifest.yml y cambiar los parámetros host y name de la aplicación como se muestra en el ejemplo:

applications:
- disk_quota: 1024M
  host: iotvisualizerjif
  name: iotvisualizerjif
  command: node app.js
  path: .
  domain: mybluemix.net
  instances: 1
  memory: 128M

9) Desde la línea de comandos y dentro de la carpeta descomprimida del proyecto ejecutar los siguientes comandos:
 
& cf api https://api.ng.bluemix.net 

& cf login -u <your_bluemix_login_id>

cf login solo es requerido la primera vez

10) Desplegar la aplicación en Bluemix
 
& cf push

11) Realizar un Bind con la aplicación IoT creada. En el Dashboard de la aplicación Pulsar Connections y luego Connect Existing











12) Seleccionar el servicio creado en el ejemplo y pulsar Connect
13) Pulsar Restage para que la aplicación empieze a recibir mensajes del servidor IoT
14) Abrir la aplicación desde un navegador, en este ejemplo:
15) Selecciona el dispositivo a visualizar




Conclusiones

Pues funciona!!! :D
He convertido fácilmente mi smartphone en un dispositivo sensor, y lo he conectado al servidor IBM Internet of Things, para enviar y recibir datos en menos de 30 minutos.
¿Y tú? ¿lo has conseguido?



Monday, March 6, 2017

7 claves para que la nube no te impida ver el sol – Computación en la nube

A día de hoy, muchas empresas avanzan en una transformación digital, a un modelo cloud para aprovecharse de los beneficios que ofrece la computación en la nube (Cloud Computing).
Las principales prestaciones que presenta usar este tipo de computación pueden resumirse de la siguiente manera:
  • Aumentar el volumen de producción o la productividad con menos recursos
  • Reducir el CapEx (Capital Expenditures) pasando a un modelo OpEx (Operating Expenditure) como de pago a medida basado en la computación de demanda
  • Mejorar el acceso en cualquier momento, en cualquier lugar y de cualquier manera a través del acceso omnicanal
  • Implementar un desarrollo ágil a bajo coste utilizando metodologías ágiles en operaciones de desarrollo compartidas basadas en cloud
  • Aprovechar la nube para implementar en múltiples centros de datos de todo el mundo, asegurando que los servicios estén cerca de los usuarios finales, proporcionando un mejor rendimiento y una redundancia adecuada.
Hasta aquí todo el mundo lo tiene claro, pero el problema viene al tomar la decisión del modelo en la nube en el cual se debe transformar.
"Quiero transformar mi negocio y lo quiero transformar ya"
Naturalmente no es lo mismo un modelo para una empresa PYMES que ofrezca servicios a terceros que para una empresa internacional que se básicamente se dedica al sector bancario trabajando con datos sensibles para el usuario final y dependiendo del modelo de implementación de la nube ya sea en las propias instalaciones, pública, privada o comunitaria, con todas las consideraciones que se pueden aplicar en cada caso, una mala decisión en la transformación y en poco tiempo, la nube no te dejará ver el sol.

¿Qué es la computación híbrida en la nube?

La computación híbrida en la nube es un modelo que implica combinar el uso de múltiples servicios en la nube a través de diferentes modelos de implementación, en particular combinando el uso de servicios de nube públicos con servicios de nube privados.
Existen múltiples combinaciones de recursos de nube que pueden ser aprovechados en una implementación de nube híbrida. Estas combinaciones también pueden implicar una combinación de diferentes modelos de servicio en la nube, Infraestructura como servicio (IaaS), Plataforma como servicio (PaaS) y Software como servicio (SaaS).
"Por ejemplo, un despliegue de nube híbrida podría combinar un servicio de nube IaaS privado local con una aplicación SaaS alojada públicamente"
También es importante reconocer que los servicios de nube privada podrían ser alojados en locales o alojados fuera de las instalaciones en una parte dedicada del centro de datos de un proveedor de servicios en la nube.

7 consideraciones claves al usar una nube híbrida

1. Determinar el modelo de implementación de nube para aplicaciones y datos

Hay que definir el modelo correcto de implementación de aplicaciones y datos ya que es un primer paso crítico en el camino hacia el uso de la nube híbrida.
Existen cuatro opciones de implementación:
  • En las instalaciones (On Premises)
  • Nube privada alojada (Hosted private cloud)
  • Nube pública (Public cloud)
  • Combinación de lo anterior
Deben tenerse en cuenta los siguientes criterios de decisión: flexibilidad, seguridad, velocidad, automatización, coste, localidad, niveles de servicio e interdependencias del sistema.

2. Integrarse con los sistemas empresariales existentes

A medida que las empresas consideren su estrategia híbrida de computación en la nube, inevitablemente se verán desafiadas a combinar sus inversiones internas existentes en TI con sus servicios de nube recién adoptados. A medida que se implementan nuevos servicios en la nube, la necesidad de conectarlos con varias aplicaciones y sistemas locales resulta crítica.
Comprendiendo el impacto de estas conexiones se debe emplear las siguientes buenas prácticas:
  • Poner en marcha interfaces controladas por las que los componentes de los servicios en la nube pueden acceder a aplicaciones y/o datos en sistemas locales con tecnologías como la gestión de API
  • Considerar los aspectos administrativos y empresariales de la integración así como la integración funcional de los sistemas
  • Exigir que los proveedores de servicios en la nube soporten estándares para sus interfaces de servicio en la nube

3. Requisitos de conectividad

La conectividad híbrida en la nube implica más que una simple comunicación entre componentes que se ejecutan en diferentes entornos. Es sumamente importante que la conectividad cumpla con los niveles de servicio solicitados, se adhiera a las políticas de seguridad y permita la estrategia general de administración de TI.
Los componentes en la nube híbrida deben cumplir cuidadosamente los siguientes requisitos y consideraciones de conectividad:
  • Considere los requisitos de cada vínculo entre componentes que abarque dos o más servicios en la nube o sistemas locales y asegúrese de que la conectividad adecuada esté disponible para soportar dichos requisitos
  • Considere el uso de la virtualización de red si está disponible
  • Asegúrese de que las capacidades de conectividad pueden soportar resiliencia y requisitos de recuperación de desastres.

4. Desarrollar políticas de gobierno y acuerdos de servicio

Los servicios en la nube combinados para crear un entorno híbrido de computación en la nube requieren un marco de gobierno general mantenido por el cliente que tenga en cuenta varios acuerdos de servicios en la nube establecidos con los proveedores de servicios. Como resultado, los clientes híbridos de la nube deben asegurar que el uso de los servicios en la nube se rija eficazmente por:
  • Evaluar los marcos existentes de cumplimiento y gobernabilidad, identificar posibles brechas y afinar los procesos
  • Garantizar una gestión de cambios y comunicaciones completas y eficaces teniendo en cuenta el potencial de múltiples proveedores de servicios en la nube
  • Permitir el tiempo suficiente para educar y habituar los cambios en toda la organización
  • Identificar fracturas en la medición y visibilidad de la gestión

5. Evaluar y resolver los desafíos de seguridad y privacidad

La seguridad y la privacidad para la implementación híbrida de la nube implican las interfaces entre los diferentes entornos, el movimiento de aplicaciones y datos entre los entornos y el control organizado de los activos. La seguridad debe aplicarse de manera consistente en todo este sistema.
Estos son algunos pasos críticos que los clientes híbridos de la nube deben tomar para garantizar la seguridad y la privacidad de sus aplicaciones y datos:
  • Comprender las interfaces entre los componentes que se ejecutan en los servicios de nube privada, los servicios de nube pública y en las instalaciones y aplicar controles de seguridad adecuados y coherentes a cada uno de ellos
  • Evaluar la ubicación de todos los conjuntos de datos en la implementación híbrida en nube y garantizar la aplicación de controles de acceso y cifrado coherentes
  • Comprobar que los controles de seguridad establecidos para el nuevo entorno cumplen o exceden los establecidos al migrar los componentes de la aplicación entre entornos
  • Aplicar tecnologías en todos los entornos que forman parte del despliegue de nube híbrida, como un único sistema IdAM (Identity and Access Management) o un inicio de sesión único (SSO)

6. Administrar el entorno de la nube híbrida

La gestión de servicios en entornos de nube híbridos puede ser un desafío. Es posible que los proveedores de la nube no proporcionen sus propios procesos y herramientas de gestión o que los servicios de nube públicos no sean manejables a partir de las herramientas de administración de servicios tradicionales que se ejecutan en un entorno local.
Éstos son algunos pasos críticos que las organizaciones deben tomar para planificar una solución de gestión para su nube híbrida:
  • Habilitar la gestión de todo el sistema híbrido de nube, abarcando todos los entornos utilizados
  • Adaptar e integrar las herramientas existentes de gestión local o considerar nuevos servicios de gestión basados en la nube, basados en el coste y la funcionalidad
  • Buscar APIs y puntos de integración para capacidades de administración en lugar de aplicaciones de administración de funciones fijas

7. Considere un plan de copia de seguridad, archivado y recuperación de desastres

Un entorno de computación en nube híbrido requiere una planificación cuidadosa de los mecanismos de copia de seguridad, archivado de datos y recuperación de desastres.
Deben considerarse varias opciones de despliegue de nube híbrida y se recomienda a los clientes:
  • Supervise la frecuencia de copia de seguridad y archivado, ya que esto impulsará los costos del proveedor de servicios en la nube
  • Asegúrese de que existen ciertos acuerdos legales, según sea necesario, para las cargas de trabajo y componentes de la nube pública
  • Determine qué capacidad de resiliencia y respaldo se proporcionan de forma inmediata para la porción de servicios en la nube de la implementación de nube híbrida
  • Asegúrese de que la ubicación física de los proveedores en la nube sea aceptable dadas las limitaciones legales y reglamentarias para la copia de seguridad externa y el archivado de datos confidenciales, propietarios o financieros
Entendiendo estas 7 claves se tiene una visión más amplia de las mejores prácticas de implementación y la computación híbrida en la nube.
Para más información de buenas prácticas remito al estándar internacional Cloud Standards Customer Council.
"Y ya sabes, que la nube no te impida ver el sol ;)"

Thursday, January 5, 2017

“Watson, te necesito”

Hace poco pusieron en la televisión una reposición de una famosa serie que marcó mi infancia en los 80’s, “El coche fantástico” (Knight Rider).
¿Quién no ha escuchado al protagonista Michael Knight decir esa mítica frase “KITT, te necesito”, y ha visto cómo raudo y veloz aparecía un coche de la nada, saltando y acelerando para recoger al protagonista que se encontraba en peligro?


Un coche que entiende, razona, aprende e interactúa; uhmmm. Hace 30 años, este coche que se comportaba como los humanos era fantástico. Y todo gracias a KITT (Knight Industries Two Thousand), su computadora central.
De repente, dejé de ver la serie, y a mi memoria vinieron aquellas tardes en que intenté hacer un programa en BASIC con mi ZX Spectrum 48K, intentando simular un KITT. Creo que conseguí que dijera algo aleatorio! Bueno, una locura para la época.
La de tardes que habré pasado diseñando sobre papel diferentes modelos de coches inteligentes para luego recortarlos, pegarlos y jugar con ellos. Pues bien, podía construir casi de todo, menos lo más importante: a KITT.
Miré a mi hijo de 10 años y le dije: “Nico, vamos a hacer un juego sobre el coche fantástico, y vamos a crear a KITT”. Y no hay nada mejor para enseñar a un niño que jugar como un niño.


La puesta en marcha de KITT

Para ello, necesitábamos servicios que nos proporcionaran IA y una plataforma de desarrollo para ponerlo todo en marcha con el mínimo coste y esfuerzo posible. Tardamos menos de un día en realizar la base del juego usando la solución cognitiva IBM Watson para que nuestro sistema KITT pudiera ser algo parecido a un humano.

 

KITT, entiende

Lo primero que hay que hacer es que nuestro sistema KITT sea capaz de entender.
KITT debe entender los datos que le proporcionamos; por ejemplo, la mítica frase “KITT, te necesito”.
Para llevar a cabo esta tarea, se usan los siguientes servicios cognitivos:
•    Alchemy API: permite entender contenido y contexto (señales de tráfico, avisos…)
•    Watson Visual Recognition: analiza imágenes, objetos, caras.
Mola ¿verdad? Y para que ningún usuario del mundo se sienta excluido le añadimos el siguiente servicio y ya tenemos nuestro sistema multilenguaje:
•    Watson Language translator: traductor de texto

 

KITT, razona

Pero ¿cómo podemos hacer que procese todo lo que entiende? ¿En otras palabras, que pueda razonar?
KITT puede usar la lógica, pero la idea es darle instrucciones para que deduzca, y para ello debe tener un conocimiento base. De nada nos sirve razonar si no tenemos sobre qué hacerlo.
Sobre el ejemplo de la mítica frase “KITT, te necesito”, ¿qué significado puede tener para una máquina? ¿Significa “ven aquí porque te necesito” o “te necesito porque te quiero”? uhmm.
Un problema que surge aquí es que los humanos tenemos de todo menos lógica, y no todo es falso o verdadero (0 o 1).
Para solucionar este problema hay que aplicar lógica difusa, ya que permite trabajar con conceptos imprecisos de varios factores de porcentajes (de 0 a 100%), y algoritmos tales como reconocimiento de voz, entender el contexto de la frase o analizar la imagen del usuario cuando dice una palabra.
Para ayudar a nuestro KITT a razonar, le añadimos los siguientes servicios cognitivos, que pueden proveer recomendaciones personalizadas, gracias a que es capaz de entender la personalidad del usuario, su tono y emociones:
•    Watson Personality Insight: extrae y analiza un conjunto de atributos sobre la personalidad para obtener más información sobre la persona.
•    Watson Natural Language Classifier: permite crear interfaces de lenguaje natural.
•    Watson Tone Analyzer: análisis lingüístico para detectar tres tipos de tonos en un texto: emoción, tendencias sociales y estilo del lenguaje.
•    Watson Tradeoff Analytics: permite tomar una decisión basada en diferentes criterios.

 

KITT, aprende

La parte más importante de una IA es la capacidad de aprender, en otras palabras, de cambiar su comportamiento en base a nueva información.
Hay que entrenar a KITT para mejorar su sistema y que pueda ser capaz de hacer cosas para las que no se le había programado explícitamente.
La educación pasa por enviarle unos datos y su clasificación esperada, y ajustar los valores del sistema para que "absorba" ese conocimiento y pueda aplicarlo a nuevas entradas. Este patrón se utiliza en redes neuronales: se van ajustando poco a poco los pesos de sus "neuronas", hasta que sale lo que se espera.
Si la interpretación y razonamiento de la frase “KITT, te necesito” no fue la esperada – por ejemplo, el coche se paró –, hay que clasificar esta información como “no lo esperado”, con algún proceso de porcentaje de tipo “obtener y puntuar” resultado.
IBM Watson utiliza el machine learning, y para aumentar el conocimiento sobre una materia específica en aplicaciones y sistemas, aplicamos los siguientes servicios a nuestro KITT:
•    Watson Retrieve and Rank: algoritmos de aprendizaje automático.
•    Document Conversion: prepara documentación de entrada para los servicios de “retrieve and rank”.

 

KITT, interactúa

Y para terminar, a nuestro KITT lo dotamos de un “bot”. Es quizás la parte más llamativa, la que permite que KITT se comunique con nosotros y nosotros con KITT, sin tener que aprender lenguajes de programación ni miles de comandos con poco sentido.
IBM Watson dispone de los siguientes servicios para crear bots en chats, que pueden, a su vez, establecer un diálogo con el usuario:
•    Watson Dialog: combina técnicas cognitivas para ayudar a construir y entrenar a un bot.
•    Watson Speech to Text: traducción automática de voz a texto
•    Watson Text to Speech: traducción automática de texto a voz

 

Juntando todos los servicios

Ya solo queda juntar todas las piezas y empezar a desarrollar el juego del coche fantástico usando a nuestro KITT cognitivo.
Como plataforma de desarrollo utilicé IBM Bluemix que, aparte de soportar varios lenguajes de programación y servicios, además de la metodología de desarrollo DevOps, me simplifica el desarrollo y la publicación de aplicaciones en la nube. 

Aquí os dejo el enlace al juego, en fase de desarrollo, que vamos desarrollando mi hijo y yo:


La idea es que entre los dos podamos ir añadiendo durante estos meses los servicios cognitivos comentados en este artículo.
Y que me perdone la ingeniera y mecánica Bonnie de la serie; el coche no parece un Pontiac Firebird Trans Am v8, pero poco a poco seguro que lo va haciendo.

 

Inteligencia artificial en la industria automovilística

Actualmente se está librando una batalla en las empresas líderes de la industria del automovilismo en el campo de la inteligencia artificial de los coches autónomos.
HONDA presentará a principios del 2017 el modelo HONDA NeuV, un coche eléctrico basado en tecnología de IA, donde destaca un sistema llamado "emotion engine", que permitirá que el coche pueda generar artificialmente sus propias emociones.
Su rival, TOYOTA, anunció ya el año pasado la creación de una empresa de investigación y desarrollo de inteligencia artificial. La principal meta es dotar a sus coches inteligentes de tecnologías que hagan la conducción más segura.

 

El futuro

Sin duda, entramos en una era apasionante en la creación de inteligencia artificial y servicios cognitivos, que marcará un cambio tecnológico en no menos de 5 años.
Actualmente, hay creados dos servicios dentro del catálogo de servicios IoT (Internet of Thing) en IBM Bluemix enfocados en la industria automovilística:
•    Driver Behavior (IBM): analiza el comportamiento de los conductores a partir de datos de vehículos y datos contextuales.
•    Car Diagnostic API (Third Party): Ayuda a evaluar el estado de salud de un vehículo, al traducir los códigos de error OBD en un formato legible por el usuario. La base de datos incluye más de 17.000 códigos de error que se mantienen profesionalmente.

Así pues, permitid que diga la mítica frase, pero con un pequeño retoque:

“Watson, te necesito”

Thursday, December 22, 2016

IBM MobileFirst Asymmetric deployment

Hi folk,

Today I'm going to post an overview of how to make a manual installation of IBM MobileFirston on WebSphere Application Server Network Deployment (WAS ND) using an asymmetric deployment.

Asymmetric deployment with runtimes and administration services in different server or cluster 

This topology is advantageous, because it enables the runtimes to be isolated from the administration components and from other runtimes.
 
It can be used to provide performance isolation, to isolate critical applications, and to enforce Service Level Agreement (SLA)







Characteristics of this topology
  • One or several administration components can be deployed in one or several servers or clusters of the cell. Each instance of MobileFirst Operations Console communicates with one administration service and one live update service
  • One or several runtimes can be deployed in other servers or clusters of the cell
  • One MobileFirst Operations Console manages several runtimes deployed in the other servers or clusters of the cell
  • One runtime is managed by only one MobileFirst Operations Console
  • Each administration service uses its own administration database schema
  • Each live update service uses its own live update database schema
  • Each runtime uses its own runtime database schema
Topology constraints
  • The deployment manager must be running while MobileFirst Server is running
  • The deployment manager is used for the JMX communication between the runtime and the administration service
  • The administration service and the live update service must be installed on the same application server
  • The runtime can be installed on different servers than the administration service, but it must be on the same cell
  • Start Order - The runtime application must start after the administration service application. You can set the order at Startup behavior section. For example, set the Startup Order to 1 for the administration service and 2 to the runtime
You can find the entire presentation in:

http://www.slideshare.net/JorgeIglesiasFernnde1/asymmetric-deployment-mfp

Cheers!!

Friday, December 16, 2016

Clone Cordova application using MobileFirst CLI

Hi folk,

Recently a customer asked me to help them creating a process of cloning configuration from mobile Cordova applications, from one version to another, using the IBM MobileFirst™ PlatformCommand Line Interface (CLI). The idea is to be able to automate the process in its continuous integration software development.

Currently the tool offers the cloning procedure from the operations console:





But MFP command-line does not have "clone" functionality today :/, who has said fear? :)

You can transfer an application configuration from a one server to another by using command-line tools or a REST API.

So, I have created a cloning functionality using nodejs-based program and mfpdev commands with the following business logic:

1) Pull the application descriptor JSON File:

Retrieves an existing app configuration from the server. The configuration includes the contents of the application descriptor, which uniquely identifies the app to the server and other information that is specific to the app. 
The configuration files are provided as compressed files (.zip format). 

2) Unzip artifacts zip file:

The .zip files are placed in the directory appName/mobilefirst and named as follows:
appID-platform-version-artifacts.zip

where:
appID is the application name,  
platform is one of android, ios, or windows
version is the version level of your app. 
For Cordova apps, a separate .zip file is created for each target platform.

3) Add version Application-Descriptor JSON File:

The application descriptor file is a JSON file that contains the description and configuration of your application. When you run an app that connects to a MobileFirst Server instance, the app must be registered with that server and configured.

4) Zip new artifacts zip file:
The .zip files are placed in the directory appName/mobilefirst and named as follows:
appID-platform-newversion-artifacts.zip

5) Modify the version in configuracion file (config.xml)

The Cordova configuration file is a mandatory XML file that contains application metadata, and is stored in the root directory of the app. The file is automatically generated when you create a Cordova application.

Information about this file in the Apache Cordova config.xml documentation.

6) Register application

Registers your app with a MobileFirst Server.

7) Push application

This command sends the .zip file to the MobileFirst Server. The client properties file myapp1/app/src/main/assets/mfpclient.properties is modified to reflect that the server that the app is registered.

Example - Clone version 1.0.1 to 2.0.0:

I have an app registered with the following versions:



In the app directory run following command:




$ node cloneApp.js local mfp jif.example.hellocordova android 1.0.1 2.0.0

When the process is finished, the new registered version must be displayed:



The source code can be downloaded from:
https://github.com/jorgeiglesiasfernandez/CloneApp
Note: Application authenticity and web resources will not be cloned. If you import an application that includes authenticity data, and if the application itself has been recompiled since the authenticity data was generated, you must refresh the authenticity data. For more information, see Configuring the application-authenticity security check.

Cheers!

Sunday, November 20, 2016

Cloud service models and IBM Cloud offerings


The traditional on-premises core IT has the benefits such fully customizable and few limitations among many others but the time commitment to set up and deploy can be weeks and the maintenance of this type of infrastructure can be expensive and difficult depending on the level of complexity.
IBM offers three types of services in the cloud in order to solve expenses and time in the development and maintenance of core IT: Iaas, PaaS and SaaS

IBM SoftLayer Infrastructure as a Service (IaaS)

IBM SoftLayer provides self-service deployment of virtual and dedicated bare metal servers in secure data centers around the world. It provides the hosting infrastructure used by IBM Bluemix Public and IBM Bluemix Dedicated services. 

IBM Bluemix Platform as a Service (PaaS)

IBM Bluemix Platform as a Service is built on Cloud Foundry open source technology. It makes application development easier by allowing developers to focus on code and data alone. Bluemix Platform as a Service handles managing middleware, operating systems, and hosting infrastructure automatically. 


Software as a Service (SaaS) and IBM Cloud Marketplace


The Software as a Service model provides business applications on a ready-to-use and self- service model. The IBM Cloud Marketplace is a place where enterprise cloud customers can discover, learn, try and buy cloud services from IBM and Business Partners.

And this is all!
Soon a little more detail about the capabilities of IBM Bluemix PaaS.