Category Archives: Opinión

Experimentación Ondas Cerebrales

6 Dic , 2017,
Jose Nunez
, , , , ,
No Comments

Recientemente tuvimos la oportunidad de experimentar un poco con un sensor de ondas cerebrales (Emotiv Insight) que nos ha servido de introducción al fascinante mundo de los BCI (Brain-Computer Interface)

El proyecto que nos trajo a este punto trata de desarrollar formas de comunicación adicionales para personas con algunas dificultades físicas para comunicarse, incluyendo peronas con dificultades para el habla, la escucha o diversos niveles de parálisis cerebral.

En este artículo quiero condensar un poco una propuesta para una metodología de experimentación que nos permita capturar datos de este tipo de dispositivos y que sirvan de insumo para crear modelos de aprendizaje de máquinas que a su vez nos lleven a desarrollar modelos de interpretación de las ondas y por ende los deseos o necesidades de las personas.

Metodología de Experimentación

  1. Definir un repositorio para la documentación oficial de cada experimento y para los resultados de los experimentos.
  2. Definir personas y roles: facilitador, sujeto de experimentación, observadores.
  3. Definir objetivos y metas del experimento
  4. Definir características de los sujetos de experimentación.
  5. Definir un ambiente controlado para minimizar los estímulos no esperados y el ruido
  6. Establecer un guión o protocolo de pasos, tiempos y clases para el experimento,
    1. Definir tareas a realizar: preparación, arranque, ejecución, finalización y cierre.
    2. Identificar estímulos Intencionales: preparación, arranque, ejecución, finalización, cierre
    3. Identificar estímulos no intencionales: derivados, ruido aceptable, ruido no aceptable (invalidación temprana del experimento)
  7. El resultado de cada experimento será un archivo con la información sensada y la pre-clasificación de los diferentes eventos o estímulos ocurridos detectados por el observador. Este archivo se usará para generar modelos de aprendizaje de máquinas que nos permitan estudiar y entender los fenómenos documentados en cada experimento.

Como siempre, sus comentarios para enriquecer esta metodología serán de gran valor para nosotros.


Haga clic acá para una plantilla de ejemplo


Algunas Referencias Interesantes:

Realizando un Proyecto SCRUM exitoso en 7 pasos

27 Nov , 2017,
Jose Nunez
, , ,
No Comments

Continuando con nuestra serie sobre SCRUM les presentamos 7 pasos para un proyecto SCRUM exitoso.

Pueden ver nuestro artículo anterior que resume varios conceptos importantes de SCRUM.

También pueden ver acá que nuestra plantilla scrum incluye detalles de cada ceremonia SCRUM.

Paso 1Identifique una persona que esté dispuesta a llevar a cabo el rol de SCRUM master, una persona que lleve el rol de Dueño de Producto e identifique a su equipo de ejecución.


Paso 2 – El dueño de producto crea un backlog inicial que describa el producto en unidades de trabajo (historias de usuario). Para esto normalmente se requiere el trabajo conjunto entre el dueño de producto y el equipo de ejecución donde el scrum master facilita el proceso, principalmente orientando donde sea necesario al dueño de producto para que las historias de usuario tengan una buena descripción, criterio de aceptación y estimación superficial.


Paso 3 – Se realiza una ceremonia oficial de Planeamiento del Producto donde todo el equipo (dueño de producto, equipo de ejecución, scrum master) revisan el backlog, las estimaciones superficiales, agregando criterios técnicos y aclarando dudas sobre cada historia de usuario. Esta ceremonia es organizada y facilitada por el scrum master. El resultado de esta ceremonia es una estimación general del tamaño del proyecto.


Paso 4 – Se organiza el calendario del siguiente trimestre en iteraciones de dos semanas cada una (aproximadamente entre cinco a seis iteraciones en total). Para esto el scrum master organiza las siguientes ceremonias en el calendario del equipo:

  • Poda del backlog cada dos semanas. Acá se identifican dudas y se hace una estimación final del esfuerzo de cada historia de usuario.
  • Planeamiento de Iteraciones al inicio de cada iteración (cada dos semanas), incluyendo Cierre de Iteración, Retrospectiva y Planeamiento.
  • Actualizaciones Diarias (15 minutos a la misma hora)
  • Planeamiento incremental del producto al final del trimestre. El scrum master tiene la responsabilidad de asegurarse que cada ceremonia se ejecute y tenga el resultado esperado. Para esto cuenta con la colaboración indispensable de todo el equipo, especialmente del dueño del producto.

Paso 5 – Durante la ceremonia de poda del backlog, el equipo de ejecución junto con el dueño de producto identifican dudas en cada historia de usuario y hacen una estimación final del esfuerzo requerido para cada iteración medido en puntos (1,2,3,5,8,13). Se realiza el esfuerzo de dividir las historias de usuario más grandes (> 5 puntos) en historias de usuario más pequeñas alcanzables en una iteración. Se identifican también historias de usuario de investigación donde se requiera aprender cómo realizar alguna tarea o diseñar algo. Las historias de usuario que tengan las aclaraciones necesarias y la estimación final en puntos se denominan “historias podadas”. Esto es importante porque en una iteración solamente se pueden asumir historias podadas.


Paso 6 – En el planeamiento de iteración se identifican la disponibilidad de cada miembro del equipo para la iteración, incluyendo ausencias programadas (vacaciones, permisos, capacitaciones), la cantidad de horas que cada miembro del equipo (en especial el equipo de ejecución) tiene disponibles para realizar tareas de la iteración y se realiza la estimación detallada de cada historia de usuario que se vaya a adoptar en la iteración en términos de tareas y horas estimadas para cada tarea.Al final del planeamiento se tendrá:

  • Una lista de miembros del equipo de ejecución y horas disponibles para la iteración y días de ausencia programada.
  • Una lista de historias adoptadas (compromiso de la iteración) con el detalle de tareas y estimación de las horas que tomaría cada tarea y cual miembro del equipo está a cargo de cada tarea. La sumatoria de las horas estimadas para cada tarea por miembro de equipo se llama “asignación” (allocation) y no debe superar las horas disponibles para los miembros de equipo encargado. Con la cantidad de asignación entre la cantidad de horas disponibles por encargado calculamos el porcentaje de asignación que nos permite ver si un miembro de equipo tiene una signación muy baja (< 85%) o muy alta (>100%)

Paso 7 – El equipo de ejecución adquiere un compromiso por cada iteración. Durante las ceremonias de actualización diaria se actualizan las métricas de ejecución ( horas pendientes, puntos aceptados ) para calcular el gráfico de burndown y se aclaran dudas, se identifican dificultades que requieran ayuda de otros miembros del equipo. Durante todo este proceso el scrum master realiza una labor de facilitador y también da seguimiento a las necesidades de ayuda.

Durante la iteración se ejecuta el compromiso del equipo, se removen obstáculos y se monitorea la ejecución dentro del marco de la ceremonia de actualización diaria.

Al final de la iteración se realiza un cierre que involucra:

  • Una sesión retrospectiva (qué cosas debemos seguir haciendo, qué cosas debemos dejar de hacer y qué cosas debemos empezar a hacer) especialmente con miras a mejorar el % compromiso entregado.
  • Una demostración de las historias de usuario aceptadas por el dueño de producto como terminadas.
  • Y el reacomodo de historias de usuario que no se hayan terminado (compromiso fallido) hacia la siguiente iteración.

Y… en resumen:

Neural Compute Stick Movidius

20 Nov , 2017,
Rebeca Rodriguez Tencio
,
No Comments

En los últimos años se escuchado el término de “machine learning” y los procesos que han existido para el análisis de los datos normalmente han sido ejecutados a través de la nube, sin embargo el Neural Compute Stick Movidius INTEL viene a ofrecer una alternativa adicional al proceso a través de un procesamiento local.

El Movidius Neural Compute Stick es el primer kit de aprendizaje basado en USB, que permite acelerar el entrenamiento de AI (Inteligencia Artificial), con una capacidad de procesamiento de una red neuronal.

El dispositivo utiliza una VPU (Vision Processing Unit) Myriad 2 personalizada que ofrece una potencia de 100 GFLOPs con un consumo de 1 vatio y 4GB de memoria LPDDR3, sin embargo una de las características que más me llamo la atención es el “multi-stick”, lo que permite utilizar varias unidades del Movidius Neural Compute Stick para que trabajen en forma conjunta (Si se conectaran 4 Movidius, tendríamos 400 GFLOPS de potencia, lo que es increíble para un USB que tiene un precio $79).

Caracteristicas relevantes:

  • Compilar: Movidius convierte automáticamente una red neuronal convolucional (CNN) basada en Caffe y ya entrenada en una red neuronal integrada y optimizada para operar directamente en la VPU Myriad 2 de Movidius.
  • Ajustar: Permite realizar ajustes efectivos para obtener un rendimiento óptimo con datos reales y con un consumo ultra bajo. Los scripts de validación permiten comparar la precisión de los modelos optimizados en el dispositivo con la de los modelos originales.
  • Acelerar: El Movidius Neural Compute es el único capaz de actuar como un acelerador periférico de redes neuronales añadiendo la capacidad de aprendizaje profundo a las actuales plataformas informáticas para mejorar el rendimiento y la eficiencia.

Conceptos relacionados:

  • VPU (Vision Processing Unit): Es un tipo de acelerador diseñado para procesamiento de argumentos gráficos, como redes neuronales profundas, estimación de pose, detección de profundidad 3D, entre otros.
  • CPU Risc (Reduced Instruction Set Computer): No se trata de usar pocas instrucciones, si no de simplificar la carga de datos de memoria sin realizar operaciones sobre ellos.

NOTA: La siguiente imagen es con fines ilustrativos, únicamente para conocer el Neural Compute Stick por dentro, no intente esto en casa!

Computación Cuántica – La Desconcertante Guerra de las Álgebras

11 Nov , 2017,
Jose Nunez
No Comments

La física cuántica ( o mecánica cuántica ) no deja de ser un tema fascinante y a la vez desconcertante. Esto porque las cosas en el mundo subatómico se rigen por reglas completamente diferentes a las que estamos acostumbrados; y nuestro entendimiento de los fenómenos físicos se ha limitado históricamente a la física clásica donde cada cosa tiene un estado deterministico que se puede observar, medir y controlar de manera más o menos estable.

A este desconocimiento masivo debemos agregar la gran cantidad de esoterismo que encuentra uno en la “literatura” común sobre mecánica cuántica y sobre cómo esta explicaría la forma de realizar cosas como viajar en el tiempo, la tele-transportación de materia, la telepatía y otras tonterías de ese corte.

Sobre este “andamiaje” teórico es que el ser humano se encuentra de frente con un tema todavía más profundo: la computación cuántica. Es decir, la computación que se basa en los fenómenos o leyes de la mecánica cuántica.

Tengo mis reservas sobre el tema. Por momentos me resulta fascinante, y por momentos irritante. Pero bueno, nada que no haya enfrentado antes con muchos otros temas de esta experiencia humana.

Un dato que me resulta importante de aclarar es que en realidad el ser humano ha estado manipulando las cosas a nivel sub-atómico desde hace rato. Cada vez que un microprocesador procesa unos y ceros en realidad está procesando flujos de electrones (partículas sub-atómicas); haciendo que fluyan en mayor o menor intensidad por diferentes materiales y dispositivos (transistores, resistencias, diodos, etc.)

El punto medular de la computación cuántica radica en una álgebra distinta. Mientras la computación moderna está basada en el álgebra booleana 2 que podríamos definir como una simplificación determinística de las matemáticas que permite representar prácticamente cualquier cosa por medio de unos y ceros; la computación cuántica necesita una álgebra distinta porque se basa en modelos probabilísticos y no determinísticos. Es decir, mientras el estado de un bit es definitivamente uno o cero, el estado de un qubit se considera superpuesto (uno y cero a la vez) y hasta que es medido y adquiere uno de los dos estados, “abandonando” el anterior. Estamos hablando de la Lógica cuántica 3.

Entonces en gran medida la computación cuántica se centra en el debate entre modelos deterministicos y probabilísticos 4 y de cómo sacar mejor provecho de cada uno.

En mi próximo aporte quiero abordar otro aspecto de este tema: La coherencia y decoherencia.

Finalizo con esta frase que probablemente escribiría Edwin Shrödinger en su lecho de muerte:

“cada vez que alguien usa el Gato de Schrödinger
para afirmar cualquier cosa metafísica,
espiritual, o sobre universos paralelos,
el pobre gato se revuelca en su tumba.”

______

1: https://web.archive.org/web/20161104151733/http://computadoras.about.com/od/tipos-de-pc/fl/iquestQueacute-es-la-computacioacuten-cuaacutentica.htm
2: https://es.wikipedia.org/wiki/%C3%81lgebra_de_Boole
3: https://es.wikipedia.org/wiki/Lógica_cuántica
4: http://tornado.sfsu.edu/geosciences/classes/m698/Determinism/determinism.html
5: https://es.wikipedia.org/wiki/Gato_de_Schr%C3%B6dinger

Algunas buenas prácticas para programar

26 Jul , 2017,
Jose Nunez
, , , , , , ,
No Comments

Lineamientos Generales para todos los lenguajes

  1. Los métodos y variables privadas comienzan con minúscula y se escriben en formato “camelCase”
  2. Los métodos, variables y propeidades públicas comienzan con mayúscula y se escriben igual en formato “Camel Case”
  3. Las constantes se escriben usando todas las letras en mayúscula y separándo palabras con “guión bajo”. Ej.: MI_CONSTANTE
  4. Haga declaración explícita de las variables locales
  5. Evite el uso de variables globales
  6. Las declaraciones de variables se agrupan al principio de clases y métodos. En ocasiones es adecuado declarar una variable pública justo antes de la declaración de un método que use esa variable de manera exclusiva o prioritaria.
  7. Está bien declarar variables que se usan exclusivamente en bucles iterativos (for-loops) en la declaración de dichos bucles.
  8. Inicialice las variables que declara, y escriba su lógica de manera que pueda procesar valores “undefined/falsy/null”
  9. Evite el uso de raya baja o guiones en los nombres de métodos o variables. En casos excepcionales se puede usar raya baja para describir alguna situacion consistente a lo largo del proyecto. Por ejemplo es mejor escribir  var blueColor que  var blue_Color. Pero podría ser adecuado escribir  function testControllerInit_SuccessCase()
  10. Como convención de nombramiento, use verbos para los métodos y sustativos para las propiedades.
  11. Evite el uso de valores literales “hard0-coded” en diversos lugares. Hágalos reusables en constantes.
  12. Los operadores lucen mejor con espacios al rededor. Por ejemplo es mejor escribir  var x = 10 + 10;  que  var x=10+10;
  13. La indentación es primordial. Muchos editores de código traen herramientas para indentar adecuadamente el código.
    Good tools for code auto-format are Netbeans, Atom and Visual Studio Code.
  14. Utilice las herramientas de análisis estático de códigopara encontrar variables no utilizadas, métodos demasiado largos y errores de sintaxis. NetBeans provee herramientas muy útiles para lenguajes como JS, CSS, PHP, TypeScript, C++ y HTML.
  15. Mantenga las líneas de código de una longitud menor a 80 caracteres.
  16. Mantenga los métodos de una longitud menor a 30 lines
  17. Mantenga las anidaciones a menos de 3 niveles
  18. No deje código comentado. Escriba comentarios para encontrar código legado en su lugar.
  19. Evite comentarios innecesarios y reiterativos como /*This function creates a user*/ para una función llamada “CreateUser(args)”
  20. Aproveche las facilidades de los ambientes de desarrollo para generar documentación a partir de comentarios estructurados. Especialmente para los Web API’s y las API’s en general.

JavaScript

  1. Nunca declare objetos de tipo Number, String or Boolean
  2. No use “new Object()“. Use var x = {} en su lugar.
  3. Recuerde que JS tiene un mecanismo automático de conversión de tipos
  4. Use === en vez de  == siempre que se pueda.
    1. En ocasiones es apropiado usar  == cuando el tipo de los objetos no se ocnoce de manera predecible/estable. Sin embargo la situación de manejar objetos de tipo desconocido o impredecible debe ser evitada también.
  5. Ponga atención a los parámetros que adoptan una “definición” undefined cuando no se proveen en una llamada a una función y actúe consecuentemente.
  6. Termine los bloques “switch” con “defaults
  7. Nunca use eval()
  8. Use nombres de variable significativos comocuentaor valorPrevio en lugar de  c or vp
  9. Es apropiado utilizar funciones anónimas cuando estas serán llamadas solamente desde un mismo lugar. En caso contrario es necesario extraer las funciones con un nombre apropiado en el entorno (scope) correcto.
  10. No deje sentencias de tipo “debugging” tales como console.log en el código del ambiente productivo.
  11. En JavaScript, iniciar una declaración de bloque con una llave “{” en la misma línea de la declaración es correcto:var constants = {
       COLOR_RED: "#FF0000",
       COLOR_GREEN: "#00FF00",
       COLOR_BLUE: "#0000FF"
    };
  12. Referencias:
    1. https://www.w3schools.com/js/js_best_practices.asp
    2. https://www.w3schools.com/js/js_mistakes.asp
    3. https://www.w3schools.com/js/js_performance.asp

HTML

  1. Utilice etiquetas en minúscula de manera consistente. Use <div> en lugar de  <DIV>
  2. Asegúrese de cerrar todas las etiquetas HTML de manera apropiada. Por ejemplo,  <div> debe cerrar con una etiqueta  de cierre </div> mientras que <hr> luce mejor si se cierra de manera individual <hr />
  3. Utilice minúsculas para los nombres de atributo. Also, use camelCase format for ID’s of DOM elements. I.e.: <div id="myDiv">...</div>
  4. Utilice guiones para separar palabras en los nombres de las clases CSS: <div id="myDiv" class="jumbotron-alternative">...</div>
  5. Use comillas dobles para declarar los valores de atributos HTML: I.e.:<div id="myDiv" class="jumbotron-alternative">...</div>
  6. Use las etiquetas <table> apropiadamente para elementos tabulares no para generar estilos o layout.
  7. No agregue espacios entre los nombres de atributos, símbolo de igualdad y los valores de atributos.
    This is good<link rel="stylesheet" href="styles.css">
    This is bad: <link rel = "stylesheet" href = "styles.css">
  8. Utilice indentación apropiadamente, especialmente con elementos jerárquicos como listas, tablas, entradas de selección.
  9. Evite usar espacios en blanco, líneas en blanco o indentación innecesaria.
  10. Use comentarios de manera apropiada:
    Good for short comments:     <!-- This is a comment -->
    Good for longer comments:
    <!-- 
      This is a long comment example. This is a long comment example.
      This is a long comment example. This is a long comment example.
    -->
  11. Las definiciones de estilo van en un archivo separado, no en el código HTML. Nunca use estilos “en-línea”
  12. Coloque las referencias a archivos JavaScript al final del código HTML
  13. Valide su código HTML por medio de análisis estático. Netbeans tiene muy buenas herramientas de análisis estático para HTML.
  14. Utilice nombres con significado para variables y reglas de estilo/clases.
  15. Referencias:
    1. https://www.w3schools.com/html/html5_syntax.asp

CSS / SCSS

  1. Los estilos van en archivos separados del código HTML.
  2. Es apropiado escribir reglas cortas CSS en una sola linea.
  3. Las reglas más largas (que involucran multiples configuraciones) deben hacerse en modo multi-línea.
  4. Nótese que CSS suporta comentarios
  5. Referencias:
    1. https://code.tutsplus.com/tutorials/30-css-best-practices-for-beginners–net-6741

AngularJS Specific

  1. Organice las carpetas y archivos en una estructura basada en componentes.
  2. Remueva las dependencias no usadas en los controladores. Netbeans tiene buenas herramientas de análisis de código para detectar código no utilizado.
  3. Es apropiado usar funciones anónimas en controladores si estas serán llamadas desde un solo lugar. De lo contrario, es mejor agregar una función no-anónima y hacer las llamadas respectivas por medio de dicha función.
  4. Se recomienda usar notación de arreglo al instanciar controladores.
  5. Mantenga la lógica de presentación fuera de los controladores. Los controladores manipulan e modelo de datos y las vistas son quienes reaccionan a los cambios realizados en esos modelos. Los controladores no deben realizar llamadas de tipo document.getElementByID para encontrar elementos del DOM en una vista.
  6. Referencias:
    1. https://dzone.com/articles/angularjs-coding-best
    2. https://www.upwork.com/hiring/development/angularjs-best-practices/

C# and .Net

  1. Haga uso extensivo y prudente del registro de eventos de manera que se pueda habilitar solución expedita de problemas en ambientes productivos.
  2. WIP

SQL Server

  1. Tenga cuidado del acople y la cohesión al desarrollar Procedimientos Almacenados.
  2. Use Procedimientos Almacenados y/o vistas cuando esto mejore de manera significativa los procesos de acceso a datos. Especialmente consultas de múltiples tablas.
  3. WIP

TypeScript

  1. Una buena referencia a TypeScript: https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines

Prototipos de Software con Computadoras Virtuales c9.io

11 Jun , 2017,
Jose Nunez
, , , ,
No Comments

Este es un post realmente corto.

Cuando uno está experimentando o desarrollando con tecnologías de software para cosas como desarrollo web y de aplicaciones móviles, sistemas como NodeJS o Python, visión computarizada, etc… usualmente requerimos instalar en nuestros computadores una cantidad importante de bibliotecas y paquetes para realizar pruebas con dichas tecnologías.

C9.io es un servicio comercial de máquinas virtuales en la web.

La verdad me ha parecido muy sencillo y completo.

https://c9.io

Todo es cuestión de crear una cuenta de usuario, ojalá enlazada con nuestra cuenta de usuario de github.com (si la tuvieramos) y vualá, podemos crear nuevas máquinas virtuales, clonar las existentes, y operarlas para instalar y desinstalar cosas a nuestro antojo casi ilimitado.

Una cuenta gratuita nos permitirá generar nuevas máquinas virtuales con ciertas limitaciones de capacidad de procesador, memoria RAM (512MB) y almacenamiento (2GB) que por lo general son suficientes para realizar pruebas de concepto o experimentación.

En próximas entregas estaré discutiendo un poco cómo realizar pruebas en C9.io para desarrollo de apps en ionic, nodejs, python-opencv entre otros.

El Tiny Tile con tecnología Intel

31 Mar , 2017,
Rebeca Rodriguez Tencio
, ,
No Comments

Hoy quiero presentarles nuestra primera impresión del TinyTILE de Element14. Se trata de una versión miniatura de la famosa placa Arduino/Genuino 101 (https://costaricamakers.com/?p=580), mide aproximadamente 35x26mm y de igual manera está basada en Intel Curie y es compatible con el software de Arduino. El TinyTILE tiene un costo de $39.00 al momento de escribir este tutorial y lo pueden conseguir en: la tienda de Element14

El tinyTILE posee 32bits, con una SRAM de 80kB y una memoria flash de 384kB, tiene instalado un sensor DSP (Procesador Digital de Señales ) de baja potencia, además de la opción BLE para el bluetooth, tiene los sensores del acelerómetro y giroscopio con 6 grados de libertad, posee un botón de “master reset” y un led que indica el estado de la alimentación (on\off), con una salida de voltaje de 3.3V.

Acá les dejo una guía muy sencilla de como iniciar y aprender más acerca del TinyTILE:

  1. Es importante tener instalado el software con el cual queremos empezar a experimentar con el tinyTILE, puede ser el muy conocido ARDUINO IDE (https://www.arduino.cc/en/Main/Software) o Intel Curie Open Developer Kit (https://software.intel.com/en-us/node/674972#). En este caso para el tutorial usaremos el software de Arduino.
  2. Hay que instalar las bibliotecas de Intel Curie y seleccionar la placa que es de tipo Arduino/Genuino 101

101

Nota: Es importante revisar que en el Administrador de Dispositivos, tenga el puerto correcto y haya detectado la placa utilizada.

101 error

 

devicemanager

EJERCICIOS:

En este caso se pueden utilizar los mismos ejercicios de práctica realizados por Jose Núñez en el blog de aprendizaje Arduino 101 (https://costaricamakers.com/?p=580 ) los ejercicios funcionan a la perfección con el TinyTILE de Intel.

En el caso que ya hayan realizado los ejercicios y quieran probar con algo diferente, pueden intentar con estos recursos adicionales:

TinyTILE – Getting Started Guide: https://www.element14.com/community/servlet/JiveServlet/previewBody/84364-102-1-362023/tinytile-GettingStartedGuide.pdf

TinyTILE – Pin Mapping: https://www.element14.com/community/servlet/JiveServlet/previewBody/84365-102-1-362024/tinytile-Pin-Mapping.pdf

Una Introducción a la tecnología de Realidad Aumentada (AR)

9 Mar , 2017,
Luis Diego Jimenez Sanchez
, ,
No Comments

El 6 de Julio del 2016 salió Pokemon GO, uno de los actuales juegos pioneros en el mundo de la realidad aumentada y un despertar al mundo del interés sobre AR.  Quizás hayan escuchado sobre realidad virtual y realidad aumentada, así que, que las diferencia?  Realidad virtual, o conocido por sus siglas en inglés como VR, es la aplicación de un entorno o ambiente digital o virtual, que detecta diferentes caracteristicas de tiempo real del usuario y reacciona de manera que este siente que es real.  Realidad aumentada, es la ampliación de imágenes reales mediante el uso de algún dispositivo, de manera que agrega imágenes virtuales a lo que el usuario está observando.

Para empezar la investigación y aprendizaje de la realidad aumentada, un área totalmente desconocida para mí, el plan era iniciar con los Google Glass debido a su fama como empresa, esto antes de darme cuenta que el proyecto había sido descontinuado desde el 2015.  A partir de aquí, lo único que quedaba era iniciar búsqueda de  los productos que hay en el mercado.  Son 5 los que más me llamaron la atención, esto según los siguientes parámetros; precio, quien los produce y a que mercado se dirige el producto y como empezar a usarlos.   Después de investigar en internet por dispositivos de la naturaleza de AR, construí una lista de los dispositivos que mejor se acomodan a mi necesidad de entender el funcionamiento y alcance de estos.  Los dispositivos son los siguientes:

VUZIX M3000 Smart Glasses:

               Producido por la empresa VUZIX, la cual se dedica a la fabricación de lentes de VR y AR, los lentes M3000 tienen fecha de lanzamiento este verano de 2017, con precio que ronda los 900$.  Este producto tiene las capacidades de un teléfono inteligente con capacidad de conectarse a redes WIFI, basada en Android y se puede considerar una mini computadora.  Los M3000 se pueden personalizar, son más dirigidas a empresas de manera que se usen para entrenamientos, registros de procedimiento y data, y otros aspectos de la industria.  A continuación un link con demo de estos Smart glasses, https://www.youtube.com/watch?v=y6SGlOLVpg8.

VUZIX M3000

Imagen 1. VIZUX M3000 Smart Glasses

Microsoft HoloLens:

               El kit de desarrollo de HoloLens se puede encontrar por unos $3000 en la página,  https://www.microsoft.com/microsoft-hololens/en-us/buy.  Producido por los gigantes en la industria, Microsoft, tiene versiones comerciales desarrolladas para casos específicas.  Un ejemplo es para Case Western Reserve University tiene un programa de Anatomía Humana con el uso de hologramas.  Otras empresas que utilizan HoloLens para mejorar aspectos en su performance son Lowes, Volkswagen y Airbus.  Para el interés de desarrollar, el kit viene con su SDK respectivo, hay versión de SDK en Unity Engine donde se pueden crear objetos, escenas y usar comandos para reconocimientos de gestos.

hololens

Imagen 2. Microsoft HoloLens

Sony SmartEye Glass:

               Sony SmartEye Glass, no se puede comprar directamente en Costa Rica ni America Central, sino que es por pedido especial en Estados Unidos y algunos otros países en Europa.  El precio en la siguiente página es de $900.  Al igual que los otros lentes de realidad aumentada, estos también son Developer Kits por lo cual se permite al usuario darle el uso según las capacidades de lo que podas desarrollar.  Sony es la empresa que las produce y una diferencia de las demás es que esta trae un control cableado a los lentes, es pequeño por lo cual no produce incomodidad en el usuario.

sony smarteye glass

Imagen 3. Sony SmartEye Glass

Lenovo Phab Pro 2:

               Este teléfono, Lenovo Phab Pro 2 vale alrededor de $499.99 si se compra directamente de la página de Lenovo.  A mi opinión, no es un kit de desarrollo ni nada por el estilo.  Está destinado más hacia el uso de apps que incluyan AR, juegos por ejemplo ya se encuentran en el mercado.  La aplicación más interesante que encontré es roOomy Reality, esta permite mostrarle al usuario como se vería una nueva pieza de mueblería en algún determinado cuarto de su hogar.  Parece arropar la idea de la realidad aumentada al facilitar una tarea de la vida real mediante el uso de imágenes digitales.

lenovo phab pro 2

Imagen 4. Lenovo Phab Pro 2 celular

Intel RealSense:

              Aunque Real Sense no es una tecnología directamente relacionada con realidad aumentada en lo referente a proyeccion de elementos visuales a la vista del usuario, si permiten un acercamiento a esta mediante la comprensión experimental de las librerías y tecnologías adyacentes tales como captura, análisis y manipulación de imágenes y video.  Real Sense es un producto de un concepto tecnológico denominado “Perceptual Computing” que tiene que ver como los dispositivos computacionales pueden percibir mensajes del usuario diferentes al teclado/mouse tales como los gestos que vas a experimentar. Augmented Reality tiene que ver más con anteponer contenido a las imágenes que se le presentan al usuario; sin embargo en efecto las tecnologías y conceptos se traslapan.

La tecnología Intel RealSense, ofrece varios dispositivos y kits de desarollo, en precios que van desde los $99 para una cámara R200 hasta los $349 para un kit de desarrollo con cámara R200 y sistema computacional UP Board.

real sense

Imagen 5. Intel RealSense camera F200

Las cámaras, cuentan con la capacidad para hacer escaneos en 3D, reconocimiento facial y puede generar imágenes basándose en distancias de cuerpos u objetos de las cámaras.  Los SDK, kits de desarrollo de software, de Intel, en mi opinión es la mejor opción para empezar a trabajar con realidad aumentada y en siguiente mis razones:

  • Precio: es el producto más accesible, siendo el de $349 el kit más costoso. A pesar de que no se pueden comparar estos productos directamente debido a que sus objetivos y alcances son muy distintos, si los puedo comparar al tratarse de un primer acercamiento a esta tecnología.
  • Aplicación del hardware:  Para efectos de aprendizaje, tales como los mios, en el cual es necesario entender el alcance de registrar data a partir de entradas por camara, me parece mejor opcion usar el RealSense debido a las librerias que trae como reconocimiento facial o de gestos.

Mi primer experimento será con Intel RealSense, probablemente algún carro o robot al que pueda darle direcciones con gestos de mis manos.

EL ARTE TEXTIL EN FUSIÓN CON LA TECNOLOGÍA

7 Mar , 2017,
Rebeca Rodriguez Tencio
,
No Comments

Electrotextil es el nombre que se le da a la idea “mágica” de combinar la industria textil con la electrónica, creando un nuevo concepto de diseño que no solo es “fashion”, sino un impulso a la innovación.

Las prendas o accesorios que normalmente se utilizan no contienen elementos electrónicos, sin embargo dentro de 10 años es factible que cada tipo de ropa o accesorio tenga incorporado distintos componentes con funciones tecnológicas que contribuyan a la comodidad, salud y bienestar de los usuarios.

Actualmente los e-textiles presentan varios retos fundamentales para el progreso en el uso de esta tecnología, ya que un textil electrónico debe ser flexible, discreto, lavable y estéticamente aceptable, lo que provoca un desafío en la construcción del diseño y conectividad confiable.

Acá les comparto unos enlaces muy interesantes donde pueden sacar ideas para empezar a involucrase en el mundo wearable:

Espero sus comentarios acerca del tema :o). En el próximo artículo vamos a empezar a experimentar y crear un proyecto con diferentes componentes wearables paso a paso.

SimpleCV Hello World ++ en otros 5 minutos (Linux MINT 18)

4 Mar , 2017,
Jose Nunez
, , , , , ,
No Comments

Siguiendo nuestra serie sobre SimpleCV y como una motivación personal para aprender Python. Acá les presento un par de scripts basados en el ejemplo “Hello World” de SimpleCV.

El primero toma constantemente  una foto de una cámara y la “binariza”; es decir, la convierte cada pixel de la foto en negro o blanco dependiendo de su “posición estadística” respecto de los demás pixeles y muestra el resultado en pantalla.

El segundo toma la fotografía original, sin ser “binarizada” y la muestra en pantalla.

Al correr los scripts de manera simultánea podemos apreciar de mejor manera este filtro de binarización de la imagen.


PASO 1 – simplecv_helloworld.py

Usando un editor de texto como “xed” copiamos el siguiente programa y guardamos el archivo como “simplecv_helloworld.py”

from SimpleCV import Camera
# Initialize the camera
cam = Camera()
# Loop to continuously get images
while True:
    # Get Image from camera
    img = cam.getImage()
    img.save('/home/toruk-makto/imageport.jpg')
    # Make image black and white
    img = img.binarize()
    # Draw the text "Hello World" on image
    img.drawText("Hello World!")
    # Show the image
    img.show()

PASO 2 – simplecv_helloworld2.py

De nuevo, mediante el editor de texto copiamos el siguiente programa y guardamos el archivo como “simplecv_helloworld2.py”

from SimpleCV import Image

# Loop to continuously get images
while True:
    # Get Image from camera
    try:
        img = Image('/home/toruk-makto/imageport.jpg')
        # Draw the text "Hello World" on image
        img.drawText("Hello World!")
        # Show the image
        img.show()
    except:
        print "skip!"

PASO 3 – Ejecutar ambos scripts

En una terminal ejecutemos los siguientes dos commandos:



python simplecv_helloworld.py &

python simplecv_helloworld2.py &


Vemos como se muestran ambas imágenes “en tiempo real”

Para detener los scripts podemos digitar el comando fg(que trae el comando al “foreground de ejecución”) y luego usar las teclas CTRL C; o ejecutamos el comando sudo kill #### donde “####” corresponde al número del proceso que queremos detener; o simplemente cerramos la terminal.