Un poco de FI-WARE

A lo mejor habéis oído hablar de la Plataforma FI-WARE, y a lo mejor habéis llegado a su Wiki y os habéis visto abrumados por sus kilométricos HTMLs de presentación de la Plataforma.

Si es vuestro caso a lo mejor este post os ayuda!!

FI-WARE es una plataforma pensada para simplificar la creación de aplicaciones colaborativas.

La Plataforma FI-CORE comprende un conjunto de habilitadores tecnológicos genéricos (GE: Generic Enablers) de uso general y común a varias “áreas de uso” actuales y futuros. La Plataforma FI-CORE también proporciona interfaces abiertas para el desarrollo de aplicaciones.

Un GE FI-WARE es un elemento funcional de FI-WARE, cualquier implementación de un GE se forma con un conjunto de componentes que da una funcionalidad y provee unas APIs.

Puede haber múltiples implementaciones compatibles de un determinado GE

Por ejemplo el Sistema Data/Context Management comprende:

  • Un conjunto de GEs que permiten el procesamiento y almacenamiento de datos de fuentes dispares, cada uno especializado en la recolección de datos de una fuente específica (por ejemplo, los datos de “cosas” conectadas, los datos facilitados por el usuario, los datos exportados por aplicaciones , etc)
  • Una serie de GEs relacionados con el procesamiento de los datos almacenados, lo que permite la generación / inferencia de nuevos datos valiosos que las aplicaciones pueden estar interesados en consumir.
  • Un GE que soporta una API bien definida que permite el desarrollo de aplicaciones Future Internet Applications capaces de suscribirse a los datos que les interesa en tiempo real.

Por otro lado tenemos que:

  • Un Producto compatible con la plataforma FI-WARE implementará totalmente o en parte un FI-WARE GE o una composición concreta de Ges FI-WARE
  • Una Instancia FI-WARE es el resultado de la integración de una serie de productos FI-WARE-compliant y, por lo general una serie de productos complementarios (por ejemplo, los sistemas de apoyo de facturación).

La Arquitectura FI-WARE se representa así:

La Arquitectura FIWARE se organiza en un conjunto de sistemas (capítulos) que actúan como agrupadores de GEs:

Data/Context Management System

Es un conjunto de GE que soportan:

  • Acceso a la información de Contexto (incluído profile de usuario y preferencias) para simplificar el desarrollo de aplicaciones
  • Almacenamiento de datos (grandes volúmenes)
  • Procesamiento, correlación y distribución de (grandes volúmenes de) eventos
  • Procesamiento de contenido multimedia
  • Ofrecer APIs estándar para estas funcionalidades

https://forge.fi-ware.eu/plugins/mediawiki/wiki/fiware/index.php/Data/Context_Management

Los Enablers que componen este módulo son:

  • Publish/Subscribe Broker GE que permite a las aplicaciones intercambiar eventos siguiendo patron P-S
  • Complex Event Processing GE que permite el procesamiento de streams en tiempo real
  • BigData Analysis GE: quer permite realizer análisis Map-Reduce de grandes volúmenes de datos
  • Multimedia Analysis Generation GE, que es capaz de extraer meta-información (conocimiento) de forma automatic y semiautomática para el análisis de contenido multimedia
  • Unstructured data analysis GE, que permite la extracción de metadatos en el análisis de información sin estructurar
  • Meta-data pre-processing GE, que facilita la generación de objetos desde diversos formatos de metadata
  • Location GE, que prove información geolocalizada desde los dispositivos
  • Query Broker GE, que ofrece mecanisms de query uniformes en diferentes repositorios
  • Semantic Annotation GE,que permite enriquecer información con meta-data para ser explotada por aplicaciones
  • Semantic ApplicationSupport GE, que prove soporte para trabajar con aplicaciones semánticas:

Internet of Things (IoT) Services Enablement System

https://forge.fi-ware.eu/plugins/mediawiki/wiki/fiware/index.php/Internet_of_Things_(IoT)_Services_Enablement

Ofrece:

  • Acceso uniforme al “Internet of Things”:
  • Identificación única de las “cosas”
  • Modelo estándar de información
  • APIs estándar de gestión
  •  APIs estándar para recuperar datos

Implementado como una capa común que media con los diferentes tipos de sensor y de redes de dispositivos

Este módulo se divide en 4 componentes, cada uno con sus GEs como se ve en la figura:

  • IoT Communications: con 3 GEs

  • IoT Resources Management: con 2 GEs

  • IoT Data handling: con 4 GEs

  • IoT Process Automation con 3 GEs:

Applications/Services Ecosystem and Delivery Framework

https://forge.fi-ware.eu/plugins/mediawiki/wiki/fiware/index.php/Applications/Services_Ecosystem_and_Delivery_Framework

  • Permite a las aplicaciones linkar con “cosas” y sus contenidos para ser accesibles por usuarios finales desde cualquier dispositivos
  • Permite crear aplicaciones Mash-Up
  • Incorpora capacidades de Services MarketPlace y de publicación por diferentes canales (Facebook, AppStores,…)

Se organiza en components, cada uno con sus GEs

Business Framework con los GEs:

  • Repositoy
  • Registry
  • MarketPalce and Store
  • Business Elements and Models Provisioning System
  • Revenue Settlement and Sharing System
  • SLA Management

Composición y Mashup: con estos GEs:

  • Mashup execution engine
  • Service orchestration engine
  • Service composition engine
  • Application mashup editor
  • Dataflow-oriented service composition editor
  • Event- and constraint-based composition editor

Mediación:

  • Data Mediation
  • Protocol Mediation
  • Process Mediation

Acceso Multi-canal y Multi-dispositivos

  • • Acceso Multi-canal y Multi-dispositivos

Security System

Confianza y Seguridad:

  • Abarca desde la infraestructura hasta la capa de aplicación
  • GE para identidad, autenticación y autorización
  • Gestión de la privacidad del usuario

Operaciones

  • Apoyo a la Gestión del Ciclo de Vida
  • Fin de contabilidad uso del usuario
  • Contabilidad de uso de la plataforma
  • Compatibilidad con Analytics

Los GEs que lo componen son:

  • Identity Management GE:
  • Privacy GE
  • Data Handling GE

Cloud hosting

https://forge.fi-ware.eu/plugins/mediawiki/wiki/fiware/index.php/Cloud_Hosting

Permite a proveedores almacenar sus aplicaciones en una infraestructura Cloud consiguiendo que los recursos se asignen dinámicamente conforme a la demanda para cumplir requisitos de negocio y SLAs.

Soporta:

  • Provisionamiento IaaS y PaaS
  • La infraestructura Cloud linkada puede ser federada con otra instancia o nubes tenernas.
  • Soporta provisión de recursos IaaS-oriented y PaaS-oriented

Este Sistema se compone de estos GEs:

  • IaaS Data Center Resource Management: este GE prove capacidades de hosting VM y controla todo lo necesario para cada VM individual incluyendo memoria, red, almacenamiento, provisionamiento,…
  • IaaS Cloud-Edge Resource Management : este GE permite al desarrollador diseñar y desplegar las aplicaciones
  • IaaS Service Management este GE ofrece hosting de servicios compuestos, usa el GE IaaS Resource Management GE para gestionar VMs individuales. Permite comunicar con otras nubes.
  • PaaS Management este GE prove hosting de contenedores de aplicaciones como Web Container, instancias de base de datos,…
  • Object Storage este GE prove capacidades de almacenamiento y recuperación de objetos con metadatos
  • Monitoring este GE es el responsible de recolectar métricas y el uso de datos de varios recursos en la nbe.
  • CMDB este GE es responsible de almacenar la configuración operacional del entorno Cloug
  • Data Warehouse este GE almacenar los datos históricos de las diferentes métricas
  • Metering & Accounting este GE es responsible de colectar y procesar los datos de uso y monetización del Cloud (vía una Billing System externo)

Interface to Networks and Devices (I2ND)

https://forge.fi-ware.eu/plugins/mediawiki/wiki/fiware/index.php/Interface_to_Networks_and_Devices_(I2ND)

Contiene:

  • Interfaces que envuelven el acceso a los facilitadores de red que se publican a los programadores de aplicaciones (materializando iniciativas como JIL, BONDI, GSMA OneAPI)
  • Interfaces necesarias para el desarrollo de los componentes de la plataforma:
  • Interfaces para el control de calidad de servicio (QoS) y la asignación de los recursos de red
  • Gateway de comunicaciones

A nivel de GEs:

  • Connected Device Interfacing (CDI): es el GE que permite explotar las características y capacidades de los dispositivos conectados .
  • Cloud Edge (CE): es el GE encargado de interconectar los Proxies Cloud con FI-WARE.
  • Network Information & Control (NetIC): es el GE que prove acceso homogéneo a dispositivos heterogéneos.
  • Service, Capability, Connectivity and Control (S3C): es el GE que da acceso a características legacy de dispositivos y de redes.

Java en un Raspberry PI, desde cero

Resumimos cómo configurar un Raspberri PI para poder trabajar con java desde el momento en el que lo sacamos de la caja.
Contamos con un Raspberry Pi B 512K de memoria, ya nos hemos aproximado varias veces a micro placas:

https://unpocodejava.wordpress.com/?s=raspberry+pi

Y tenemos un avance de los esfuerzos por tener una distribución de Java en un Pi:

https://unpocodejava.wordpress.com/2012/05/30/java-corriendo-intentando-correr-sobre-raspberry-pi/
https://unpocodejava.wordpress.com/2012/08/14/corriendo-tomcat-7-en-un-raspberry-pi/

El objetivo es dar un “paso a paso” sencillo de opciones probadas, que nos permitan empezar a trabajar cuanto antes.

 

Escribir última versión del SO en la Targeta SD


Primero hay que elegir una imagen de sistema operativo que descargaremos de internet. En la web encontramos dos sistemas recomendados:

Descomprimimos la imagen del zip descargado (por ejemplo la imagen de Raspbian llamada 2013-05-25-wheezy-raspbian.img) y pasamos al siguiente paso.

Necesitamos un Lector de tarjetas

Una tarjeta SD(o microSD con adaptador) de 4 GB o mas.

Y utilizamos un software gratuito que permita escribir la imagen descargada anteriormente sobre la tarjeta. Uno que da buen resultados testeado en Windows7:

http://sourceforge.net/projects/win32diskimager/


 

Arranque y Configuración


Insertamos la tarjeta en la bahía correspondiente, enchufamos el cable HDMI a un monitor (o televisor), el adaptador mini-usb a la toma de corriente (5V), un cable Ethernet a la red, ratón y teclado usb2.0

Cuando lo conectamos a la corriente el Pi arranca e interactúa con los los dispositivos de entrada y salida muy satisfactoriamente. La primera vez mostrará automáticamente el menú de configuración:

Podemos volver al mismo menú más adelante cuando queramos mediante la orden >sudo raspi-config

  • expand_rootfs: Expande el espacio de la tarjeta SD
  • overscan: Para evitar que el Pi solo use una parte de la televisión.
  • configure_keyboard: Elegir compatible de una Lista de teclados.
  • change_pass: para cambiar la password del Usuario de sistema. La password por defecto es

    usuario: pi
    password: raspberry

  • change_locale: locale por defecto del sistema operativo.
  • change_timezone: franja horaria.
  • memory_split: balancea la memoria entre graficos y procesador.
  • Si planeamos instalar Java con opciones graficas (JavaFx) es recommendable aunmentar la memoria grafica a 128K.
  • ssh: Permite la comunicacion con un servidor ssh.
  • boot_behaviour: Si queremos arrancar por defecto en un escritorio con ventanas o en una consola.
  • update: intenta descargar la ultima version del raspi-config, necesario estar conectado a internet (como se comenta mas adelante)

Si todo ha ido bien, al reiniciar y tras logarnos encontraremos una pantalla semejante a esta:

En el escritorio contamos con el LXTerminal, una consola de comandos:

>sudo raspi-config

>sudo reboot

>sudo halt

Menu de configuraciones

Reiniciar el PI

Apagar el sistema

 

Configurar una red con router DHCP


Si hemos conectado el cable de red correctamente al router y al PI, los LEDs de la red deberían parpadear.

Si el router ofrece un servicio DHCP, no es necesario realizar más configuraciones. El Pi habrá recibido una ip que podemos consultar con:

>ifconfig

 

Configuracion WIFI

Es necesario un adaptador WIFI que soporte el chipset RTL8192cu. Ambas distribuciones Raspbian y Occidentalis son compatibles.

Lo conectamos a un puerto usb (y nos quedamos con un solo puerto, ahora seria recomendable tener un hub usb para ampliarlos). Si tenemos un SO Raspbian, para la configuracion podemos optar por una aplicación grafica:

Doble click en el icono del escritorio para lanzar el menu:

Hacemos click en el botón “scan” y aparecerán las redes al alcance.

Seleccionamos nuestra red local y se abre el menu:

Introducimos la clave wifi en el campo PSK y pulsamos “add”. La red y la ip apareceran configuradas en la pantalla principal.

Alternativamente se puede configurar el fichero:

>sudo nano /etc/network/interfaces

Busca las líneas de abajo y reemplaza el nombre ssid y password de la wifi (manteniendo las comillas):

wpa-ssid “ssid”
wpa-psk “password”

Despues reiniciar el sistema.

>sudo reboot

 

Usar SSH


Si tenemos el servicio ssh activado (en raspi-config) acceder desde un PC mediante ssh con putty es tan sencillo como escribir la IP:

Si al conectarnos encontramos un error connection reset by peer, podria haber un problema con las claves SSH. Se pueden resetear las claves mediante los siguientes comandos:

>sudo rm /etc/ssh/ssh_host_*

>sudo dpkg-reconfigure openssh-server

Borrar las viejas claves

Regenerarlas

 

Escritorio Remoto VNC


Instalaremos una versión ligera del famoso escritorio remoto tightvncserver. Trabajando en modo “terminal remota” ahorraremos la necesidad de los interfaces (teclado, raton, monitor) en el pi.

Para instalar el servidor escribimos en la consola:

>sudo apt-get update
>sudo apt-get install tightvncserver

Para arrancar el servidor escribir el comando:

>vncserver :puerto

en “puerto” escribimos el numero de puerto libre que nos apetezca. Por ejemplo:

>vncserver :1 -geometry 1440×900
(el parámetro geometry define el tamaño en pixels de la pantalla)

La primera vez nos pedirá una password (máximo 8 caracteres):

>raspberry

Aqui vemos el servicio en accion:

 

Configuracion Cliente VNC

Primero descargaremos en nuestro PC una versión de cliente VNC desdehttp://www.realvnc.com/

La pantalla de conexión no es como la siguiente:

Escribimos la ip:puerto del servicio vnc del Pi y pulsamos “connect”. La primera vez dara un aviso (por no tener el certificado) y pasara a la ventana de autenticación:

Y sin más problemas accederemos al escritorio.

 

Configurar el Servicio al arrancar el PI

Acceder al directorio

>cd /home/pi/.config

y crear un nuevo directorio

>mkdir autostart
>cd autostart

crear un nuevo fichero:

>nano tightvnc.desktopt

con el contenido:

[Desktop Entry]
Type=Application
Name=TightVNC
Exec=vncserver :1
StartupNotify=false

 

Transferir Ficheros sftp


Para transferir ficheros entre nuestro PC y el Pi valdrá cualquier aplicación que haga transferencias sftp. La aplicación winscp es gratuita y funciona correctamente http://winscp.net/download/winscp515setup.exe

La transferencia es sencilla e intuitiva, con ventanas tipo total comander:

 

El Conector GPIO


Aunque no es el propósito de este tutorial “primeros pasos”, conviene recordar por su importancia del conector GPIO (General Pourpose Input Output) que conecta el PI a dispositivos externos.


Podemos encontrar un buen tutorial de introducción al conector:
http://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup?view=all

Tutoriales GPIO phyton
http://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup?view=all

Como escribir en los puertos GPIO desde Java
https://blogs.oracle.com/hinkmond/entry/rpi_and_java_embedded_gpio3

 

JDK 8 (con JavaFX) para ARM


No es imprescindible, pero para poder hacer descargas http cómodamente recomendamos el chromium:

>sudo apt-get install chromium-browser

 

Recordar que desde el raspi-config balanceamos la memoria video-cpu a 128 para los graficos. Menos memoria causará fallos de memoria VRAM en JavaFX.

Es recomendable elegir en el raspi-config no arrancar el desktop, para ganar recursos adicionales.

Del fichero de configuración:

>sudo vi /boot/config.txt

Descomentar las lineas:

framebuffer_width=1280
framebuffer_height=720

Llegó el momento de descargar la distribucion de Java8 para procesador ARM desde http://jdk8.java.net/fxarmpreview

Descomprimimos la descarga en el direcotrio opt:

>sudo tar zxvf /home/pi/Downloads/jdk-8-ea-b36e-linux-arm-hflt-29_nov_2012.tar.gz -C /opt

Borramos el descargado

>rm /home/pi/Downloads/jdk-8-ea-b36e-linux-arm-hflt-29_nov_2012.tar.gz

Y listo. Aseguramos que java se ejecuta correctamente.

>sudo /opt/jdj1.8.0/bin/java –versión

 

Ejecutar un ejemplo Java


Podemos probar que la maquina virtual esta correctamente instalada con un ejemplo mínimo

>cd /home/pi

Editamos un fichero de código fuente:

>nano HelloPi.java

Compilamos a un class

>/opt/jdk1.8.0/bin/javac *.java

Y ejecutamos

>/opt/jdk1.8.0/bin/java HelloPi

 

Referencias


Tutorials de Adafruit:
http://learn.adafruit.com/category/learn-raspberry-pi

Impresionante herramienta para la corrección de imágenes desenfocadas o movidas

SmartDeblur es una aplicación que permite hacer una corrección casi mágica de imágenes desenfocadas o movidas.

SmartDeblur es capaz de corregir desenfoques y distorsión por movimiento a la hora de tomar una foto.

Los ejemplos que muestran son impresionantes, alguien se cree que de aquí:

Se puede llegar a aquí?

SmartDeblur es software libre (GPL v3), está implementada en C++ usando varias técnicas (Wiener, Tikhonov, Total Variation prior) y soluciona estos defectos: Out of Focus blur (with kernel deep tuning), Motion blur y Gaussian blur.

Existen versiones para Windows y para Mac.

Encuesta sobre uso de Open Source en organizaciones

es una subsidiaria de Progress Software. La component unacomunidad de expertos en opensource que proven software, soporte, formación y consultoría sobre proyectos Apache como ServiceMix, ActiveMQ, Camel y CXF.

En 2011 realizaron una encuesta entre su comunidad y las organizaciones con las que colaboran (que incluyen industrias de todo tipo) sobre el uso de software Open Source en las organizaciones.

Un resumen de la encuesta:

Qué ha motivado la decisión de desplegar open source:

En qué se ha beneficiado la organización del despliegue de Open Source:

Cuál es el porcentaje de proyectos en el que planea usar Open Source:

Las conclusiones principales que salen de la encuesta son:

· La mayoría de las empresas están considerando el software Open Source para sus proyectos IT

· La flexibilidad es el beneficio principal al adaptar open source

· El despliegue conlleva ahorros de costes como ventajas tecnológicas.

Podéis descargaros la encuesta completa aquí.

RedHat: la primera empresa Open Source en conseguir 1 billón de dólares de ingresos para 2012

 Este pasado Miércoles, se publicó los ingresos fiscales previstos por RedHat en 2012, y asciende al billón de dólares.

Podéis leer la noticia en http://www.wired.com/wiredenterprise/2012/03/red-hat/

dompdf: HTML to PDF converter

Dompdf, se trata de una librería de código abierto con la que poder transformar páginas de HTML a PDF.

Para su funcionamiento es necesario PHP 5, pero sus ejemplos me parecen espectaculares

http://pxd.me/dompdf/www/examples.php#samples

El código lo podemos encontrar aquí: http://code.google.com/p/dompdf/

IDE Python: Ninja-IDE

A pesar de lo “radical” de su logo Ninja IDE es un IDE para trabajar con Python muy interesante. También soporta plugins.

Podéis descargarlo para Windows desde aquí.