viernes, 29 de enero de 2016

Hardware para IoT

Implementar un sistema de Internet de las cosas requiere un componente hardware fuertemente integrado en entorno físico, capaz de interactuar con éste, percibir su estado y transmitir información sobre el mismo; y un componente software adecuado para gestionar la información generada y actuar sobre el hardware anteriormente mencionado. 

En este artículo hablaremos de algunos de los mejores sistemas que hay hoy en día en el mercado capaces de cubrir las necesidades hardware de nuestro entorno interactivo.
 
Las placas de desarrollo Hardware y Software surgieron apenas hace unos años con un objetivo puramente académico, para fomentar y facilitar el aprendizaje de programación por parte de los niños. Sin embargo, más allá de éste propósito, la realidad es que desarrolladores por todo el mundo emplean esta tecnología para construir sistemas interactivos de gran calidad. El motivo es la sencillez de instalación y desarrollo que presentan estos dispositivos, así como su gran potencial, capacidad y eficacia a la hora de realizar su labor. Éstas características, junto a su reducido precio, los convierten en dispositivos idóneos para crear objetos y ambientes digitalizados, no solo por parte de desarrolladores, sino cualquier persona interesada en este apasionante campo y que no necesariamente disponga de los conocimientos y herramientas que antes hubieran sido imprescindibles.

Por otro lado, estos sistemas necesitan componentes que transformen los estímulos que reciben en información útil. Existe una gran variedad de periféricos compatibles con estas placas capaces de suministrarles la información que requieran para llevar a cabo su objetivo.
A continuación mostramos algunas de las tecnologías más utilizadas en este campo. Estos dispositivos son ideales para interactuar con plataformas de IoT como Play por sus capacidades comunicativas, las cuales permiten, fácilmente, utilizar servicios REST y MQTT entre otros para enviar información en formato JSON.


Arduino
El primero de los pesos pesados en cuanto a ordenadores de placa reducida es el Arduino. Es el dispositivo más barato y sencillo de implementar a la hora de desarrollar un entorno de Internet de las Cosas. Por otro lado, es la alternativa básica, con todo lo que ello conlleva. Dispone de un hardware menos potente que sus competidores y algunas limitaciones en cuanto al software y el sistema operativo.Sin embargo, estas limitaciones no tienen por qué ser un problema. Hay ocasiones en las que no necesitamos un sistema con especificaciones más atractivas, como la Raspberry PI. Por ejemplo, Arduino sería una solución perfecta para instalar un medidor de temperatura y humedad y compartir esta información con un servidor o a una plataforma de IoT como Play. Sin embargo, se quedaría corto si necesitáramos más capacidad computacional para, por ejemplo, interactuar con el medio. Aun así, dispone de una sencilla interfaz de desarrollo que se defiende bien a la hora de hacer tareas sencillas.

Raspberry PI
El segundo dominador del mercado de estas placas de desarrollo es Raspberry PI. Es un pequeño ordenador capaz de alojar un sistema operativo y con mejor prestaciones que Arduino. Su precio superior (aunque no mucho), hace que debamos considerar el uso de este dispositivo o de un Arduino en función de las necesidades software que tenga nuestro sistema.

Raspberry PI sería ideal para instalar un entorno domótico en un hogar, gestionando información de distintos sensores e interactuando con elementos de la vivienda. Estos sensores podrían estar conectados directamente en la Raspberry PI o a alguna placa auxiliar que hiciera de intermediario (por ejemplo, un Arduino).

Con el éxito de estas tecnologías, han surgido empresas y productos alternativos que ofrecen variedad para escoger el dispositivo más adecuado para nuestro sistema de Internet de las Cosas.

Libelium Waspmote
Waspmote es un dispositivo similar a Arduino (el entorno de desarrollo es muy parecido, llegando a poder portar el código de uno a otro realizando muy pocos cambios en él) desarrollado por una empresa española. Está enfocado a crear redes de sensores de bajo consumo en un ámbito más profesional que las tecnologías nombradas anteriormente. La mayor desventaja que encontramos de este dispositivo es su elevado coste.

 BeagleBone
Podemos considerar la BeagleBone como una alternativa a Raspberry PI más orientada al Hardware, ya que dispone de un número mayor de pines de entrada y salida, y dispone de una conexión 5VDC como fuente de alimentación alternativa a la micro USB común en ambas placas. Por otro lado, dispone de menos memoria RAM y de un solo puerto USB.

Esta sería una buena plataforma de desarrollo para proyectos con un gran número de dispositivos auxiliares (como sensores), mientras que la Raspberry Pi está más orientada a las capacidades del software.

Finalmente, existe una gran variedad de periféricos y sensores compatibles con ésta tecnología. Hay infinidad de fabricantes, modelos y dispositivos en todos los rangos de precios, lo que nos da un amplio abanico de posibilidades para encontrar los elementos que mejor se adapten a nuestro sistema. Por servir de ejemplo, podemos encontrar sensores de temperatura, humedad, luminosidad, movimiento, gas, lluvia, co2, caudal de agua, infrarrojos, vibración…El abaratamiento de los costes y la simplificación de estas tecnologías están favoreciendo en gran medida la extensión del Internet de las Cosas, ya que es un campo tecnológico al alcance de cualquiera con pocos requisitos en cuanto a presupuesto y conocimientos para su implementación. Si a todo esto, le sumamos una plataforma IoT potente y de uso sencillo como Play, se eliminan, casi totalmente, cualquier problemática a la hora de desarrollar esta tecnología.

Autor: Angel Luis Gonzalez

lunes, 25 de enero de 2016

Data Driven Document


El paso más importante en un análisis de datos es la exploración de estos. En esta fase se localizan errores, se comprueban los supuestos y se eligen los modelos predictivos apropiados dependiendo de los datos. Este proceso de análisis exploratorio de datos se puede realizar mediante visualización.

Existen varias herramientas de uso general y orientado a la web que facilitan la visualización y manipulación de los datos pero nos vamos a centrar en la librería D3.js, ya que es una de las más potentes.

D3.js (Data –Driven Documents) es una librería de JavaScript creada por Mike Bostock en 2011. Utilizada para manipular y representar grandes cantidades de datos en distintos formatos (JSON, CSV, GeoJSON, etc …) en gráficas estáticas o interactivas usando el DOM (Document Object Model) y gráficas SVG (Scalable Vector Graphics) que se podrán generar dinamicamente ya que son capaces de responder a cambios en los datos y actualizarse facilmente. 

D3.js no es un marco monolítico que pretenda ofrecer todas las funciones imaginables, si no que resuelve la manipulación eficiente de los documentos sobre la base de datos. Evitando la representación propia y ofreciendo una extraordinaria flexibilidad, la exposición de todas las capacidades de los estándares web de los que hace uso como HTML, SVG y CSS, por lo que se visualiza correctamente en navegadores modernos. Con una sobrecarga mínima, ya que es extremadamente rápido en el apoyo a grandes conjuntos de datos y comportamientos dinámicos de interacción y animación. El estilo funcional de esta librera permite la reutilización de código a través de una variada colección de componentes y plugins.


La evolución y maduranción de D3 tiene que ver con la existencia de una buena documentación, además de la amplia comunidad con numerosos tutoriales y la gran variedad de ejemplos prácticos disponibles. El sitio oficial de esta librería es d3js.org, donde se puede encontrar abundante información sobre como se implementa, como se usa y tambien ejemplos de gráficos que podemos realizar.

D3 tiene una sintaxis limpia, fácil de aprender por ello no es de extrañar que medios como The New York Times lo utilicen para desarrollar sus visualizaciones interactivas. Pero puede resultar un tanto extraña de inicio si no se tienen conocimientos previos de JavaScript, HTML5, DOM, SVG y CSS3.

Autor: Gala Bernal

viernes, 22 de enero de 2016

Desarrollo de Aplicaciones Híbridas Móviles con Ionic Framework



Ionic es un framework open source para el desarrollo de aplicaciones híbridas que permite crear aplicaciones multiplataforma utilizando HTML5 optimizado para móvil, CSS3, componentes JavaScript, gestos y herramientas para la construcción de aplicaciones altamente interactivas. Construido con Sass y optimizado para AngularJS permite asegurar aplicaciones robustas, rápidas y escalables.

Las aplicaciones son híbridas, ¿Qué quiere decir eso? Que puedes desarrollar una misma aplicación y ejecutarla en Android, iOS y Windows Phone sin tener que desarrollarla en el correspondiente lenguaje nativo de cada plataforma.

Una de las características de Ionic Framework es que está construido para ser rápido debido a la mínima manipulación del DOM, sin utilizar jQuery y con aceleraciones de transiciones por hardware.

Ionic es una capa que trabaja por encima de Cordova y que nos permite crear aplicaciones muy atrayentes gracias al uso de AngularJS y Sass empaquetado como una aplicación móvil nativa. AngularJS es un framework de JavaScript que puede ser agregado a una página HTML a través de una etiqueta <script>. Extiende atributos HTML con las Directivas y se une a los datos HTML por medio de expresiones.
 
Ionic Framework al trabajar como una capa superior de Cordova aprovecha todos los plugins de este. Gracias a eso tenemos actualmente una inmensa cantidad de plugins con los que se pueden trabajar y aprovechar todas las capacidades del móvil mediante la inclusión de estos. Se pueden incluir por ejemplo plugins para acceder a la información de hardware y software, compartir textos e imágenes, lectura de códigos QR, GPS, cámara, beacons, etc… 



Con Ionic Framework es posible crear una aplicación de una forma sencilla por disponer de una potente interfaz de línea de comando (CLI). Utilizando pocos comandos se crea una aplicación y se compila para la plataforma deseada, así como ejecutarla en un emulador o ejecutarla directamente en un móvil.

Al empezar el desarrollo de una aplicación utilizando Ionic a través de su CLI es posible crear un proyecto en blanco o ya con alguna estructura por defecto dependiendo de los comandos que se ejecuten. Este Framework dispone de una web, en la cual se puede encontrar buena documentación y componentes CSS que pueden aprovecharse en el desarrollo de aplicaciones móviles. Además existe Ionic Creator, herramienta de diseño simple para la creación rápida de prototipos de Ionic, así como la posibilidad de reutilizar componentes ya desarrollados para Ionic framework en codepen.

En resumen, Ionic framework tiene muchas ventajas en su utilización para el desarrollo de una aplicación multiplataforma siendo utilizada por alguien que tenga conocimientos sobre desarrollo web, es decir, HTML, CSS y AngularJS, por lo que no debería suponer una gran dificultad la creación de aplicaciones en este framework. Además su rendimiento y la documentación disponible nos posibilitan el desarrollo de aplicaciones rápidas y atractivas sin ser necesario tener conocimientos de múltiples lenguajes nativos.

En nuestro proyecto Bond hemos usado Ionic Framework para la creación de la aplicación móvil. Bond es una plataforma que hace uso de la inteligencia artificial y combina la información contextual del usuario con la gestión de contenidos obtenidos tanto de redes sociales como de datos corporativos, permitiendo proponer al usuario la acción más apropiada en cada momento según sus necesidades. La decisión de usar Ionic Framework en nuestro proyecto fue debido a las ventajas ya mencionadas en el artículo: por ser un framework que permite crear una aplicación multiplataforma aplicando los conocimientos previamente adquiridos de HTML, CSS y AngularJS; por posibilitar acceder a través de los plugins de cordova a varias funcionalidades nativas aprovechando así las capacidades del móvil y por garantizar que la aplicación sea robusta, rápida y escalable.

Autor: Tiago Coelho. 

Protocolos IoT


El "internet de las cosas" necesita protocolos estándar. Esta es una afirmación en la que parece que todos estamos de acuerdo, pero el tiempo pasa y no acaba de alzarse ninguno claramente sobre los demás. De hecho, continúan saliendo nuevos protocolos.

Quizá lo que no tenga sentido sea la obsesión por encontrar a uno todopoderoso en el que confiar ciegamente y la respuesta pase por elegir el que más se ajuste a las necesidades a las que nos enfrentemos en cada ocasión.

Vamos a hablar sobre los protocolos más presentes en todas las discusiones sobre este tema.

MQTT

Actualmente estándar abierto, es un protocolo de mensajería tipo publicación/suscripción muy ligero y pensado para dispositivos alimentados con baterías ya que tiene un reducido consumo de energía.

Está diseñado para redes de comunicación poco fiables y es interesante comentar que posee tres modos de funcionamiento o “calidad de servicio” (QoS) .

  • QoS0 (At most once): El modo menos fiable pero también el más rápido. La publicación se envía pero no se recibe confirmación.
  • QoS1 (At least once): Se asegura que el mensaje es entregado al menos una vez, pero pueden recibirse duplicados.
  • QoS2 (Exactly once): El modo más fiable y que más ancho de banda consume. Se controlan los duplicados para garantizar que el mensaje es entregado una única vez.

A pesar de sus características, MQTT puede suponer un problema para algunos dispositivos muy restrictivos, por el hecho de ir sobre TCP y de manejar nombres de topics largos. Esto se soluciona con la variante MQTT-SN que utiliza UDP y soporta indexación de nombres de topics.

REST

HTTP y REST es muy útil para la mayoría de servicios y aplicaciones web, gateways y dispositivos. Es ampliamente utilizado y sencillo de implementar lo que facilita y acelera el desarrollo de muchos servicios en el internet de las cosas.

Se puede utilizar de una forma muy simple, por ejemplo, para el intercambio de documentos JSON entre cualquier plataforma y tiene la ventaja de que un gran número de aplicaciones ya están desarrolladas utilizando esta tecnología.

CoAP

Constrained Application Protocol, CoAP, está diseñado para trasladar el modelo HTTP a dispositivos y redes restrictivas.

Es UDP y los paquetes son mucho más pequeños, pero mantiene la misma arquitectura cliente/servidor y soporta las operaciones GET, PUT, POST y DELETE. Además extiende el modelo de request añadiendo la función “observe” que permite al cliente seguir recibiendo cambios de un recurso solicitado al servidor.

De manera similar al MQTT, en CoAP se puede controlar la QoS marcando los mensajes como “confirmable” o “nonconfirmable” lo que indica si el receptor debe devolver un “ack” o no.

Otras características interesantes de CoAP son que soporta negociación de contenido (Content-Type) y que proporciona un mecanismo de descubrimiento de recursos.

Otros protocolos de los que también se suele hablar son ZeroMQ, XMPP, LWM2M, STOMP y AMQP.

Nuestra solución IoT, Play, posee un diseño modular basado en gateways que permite ampliar gradualmente el número de protocolos compatibles. Actualmente implementamos MQTT, REST, CoAP, STOMP, ZeroMQ, OpenWire y AMQP.

Como se puede observar, cada protocolo tiene sus pros y sus contras. Si tuviéramos que recomendar alguno, nosotros hemos tenido buena experiencia con REST y MQTT.

Autor: Roger Guizan

¿Scrum o Kanban?

En estos más de dos años trabajando en desarrollo de soluciones de I+D hemos probado diferentes metodologías, algunas las hemos desechado y otras las hemos adaptado, siempre con el objetivo de ser más productivos.

De las metodologías que conocíamos y tras un estudio muy ligero, descartamos las siguientes:

  • Dynamic Systems Development Method (DSDM): Metodología ágil más veterana y la que más se aproxima a los métodos tradicionales, su implantación incluso permitiría alcanzar un nivel 2 de madurez según CMMI.
Descartada por veterana, ¡Hacemos innovación!
  • Extreme Programming (XP): La metodología ágil más radical y popular. XP se centra en el ciclo de vida del desarrollo de software.
Muy centrada en desarrollo, necesitábamos más gestión.
  • Agile Modeling: Metodología para el modelado y la generación de documentación que se encuentra alineado con los principios del desarrollo ágil y que puede ser utilizado como substituto del UML estándar.
Documentación??? No gracias, solo la justa.
  • Feature Driven Development (FCC): Metodología de desarrollo de software orientada a la generación de valor para el cliente.
Excelente metodología, pero no teníamos clientes con los que validar.

Llegados a este punto… ¿Scrum o Kanban? Pues comenzamos con Scrum.


Scrum es una metodología muy conocida con lo que fue fácil comenzar. Teníamos que empezar a trabajar en iteraciones, crear equipos multifuncionales, nombrar un Product Owner y un Scrum Master, así como, fijar reuniones de planificación, decidir la duración de nuestros Sprints, juntarnos todos los días para hacer actualizaciones de estado y crear demos para el final de cada Sprint. Los beneficios de la metodología Scrum son indudables. Pero a los pocos Sprints nos dimos cuenta de que no nos funcionaba, o al menos no como nosotros necesitábamos.

  • Trabajo en equipo: éramos muy pocos (4) y realmente cada miembro del equipo tenía sus propias tareas (desarrollo, interfaz, sistemas, pruebas, etc.) y se encargaba de decidir el alcance de su propio módulo. No necesitábamos un Product Owner.
  • Sprints: No teníamos entregas, si acaso demos y cada miembro del equipo sabía autogestionarse. No necesitábamos un Scrum Master.
  • Dailys: Cada miembro del equipo tenía su propia tarea, con lo que la coordinación entre miembros del equipo no era crítica y además gran parte del grupo tele-trabajaba. No necesitábamos vernos todos los días.

¡Necesitábamos una metodología que se adaptara mejor a lo que hacemos!!

Migramos a Kanban


¿Qué es Kanban? ¿en qué consiste? Hay dos objetivos que rigen este método productivo: por un lado, lograr un producto de calidad, al obligar a cada fase del proyecto a finalizar su tarea correctamente, y acabar con el caos, saturación o cuello de botella que puede darse en una fase del proyecto en condiciones normales en las que prima la rapidez por encima de la calidad del producto.

Cuatro son las reglas o principios básicos de Kanban para conseguir estos propósitos:

  1. Empieza con lo que haces ahora: Kanban es un método de producción, no un sistema que te dice cómo hacer tu trabajo.
  2. Acepta el cambio: todos los miembros del equipo tienen que estar dispuestos a aplicar cambios constantes para mejorar sus rutinas de trabajo, siempre y cuando se haga poco a poco y con sentido común.
  3. Respeta el proceso en curso, los roles y responsabilidades de cada uno: es imprescindible que cada miembro del equipo sepa qué tiene que hacer y cuáles son sus funciones. Para que el método Kanban funcione esto tiene que estar claro. No se trata de que todos hagan todo, sino que cada cual sepa qué hacer en el momento adecuado.
  4. Liderazgo en todos los niveles: Tener iniciativa y gestionar correctamente tu tarea es otro elemento básico a tener en cuenta.

Y cinco son los elementos que deben darse en un sistema productivo que aplique bien el método Kanban.

Panel Kanban del proyecto Play

  1. Visualizar el flujo de trabajo: Parece algo básico pero no siempre vemos realmente las fases por las que pasa un proyecto ni qué personas trabajan en qué. El método Kanban recomienda usar un panel con tarjetas que definan cada tarea dividiéndola en columnas que indican cada fase del proyecto.
  2. Limitar el trabajo en curso: Hacer muchas cosas pero dejarlas todas a medias no sirve de nada. Si empiezas algo terminalo antes de empezar otra cosa, ése es un principio básico del método Kanban.
  3. Gestión del flujo: Además de visualizar el flujo de trabajo hay que controlar su funcionamiento, ver en todo momento si las piezas están funcionando o si alguien tiene problemas y solucionarlos.
  4. Dejar claras las reglas del proceso: Para aplicar bien un método hay que entenderlo.
  5. Mejora en equipo: Uno de los pilares del método Kanban es la mejora constante. En este sentido, la mejora debe ser acordada en equipo, aportando la experiencia de todos los miembros del equipo.

En resumen, no hay una metodología mejor que otra, se trata de encontrar la metodología que mejor se adapta a tu proyecto y a tu equipo.


Autor: Luis Roldán

Crear-Medir-Aprender

En un momento como el actual, en el que todo cambia tan deprisa y en el que asistimos a importantes transformaciones en los proyectos, las metodologías y las tecnologías con las que desarrollábamos soluciones ya no funcionan.
 
Desde este blog os contaremos nuestra experiencia en el desarrollo de soluciones con las metodologías y tecnologías más innovadoras.
 
Esperamos que os sea útil y ameno.