sábado, 8 de noviembre de 2014

OSHWDem 2014 evento de hardware libre en A Coruña

Hoy se ha celebrado en A Coruña la tercera edición de la feria tecnológica OSHWDem organizado por Bricolabs junto con la ayuda de varios colaboradores.

Este año el evento se realizó en las instalación del museo del hombre Domus. Durante el día de ayer los chicos de Bricolabs y de forma totalmente gratuíta se dedicaron a dar una serie talleres para la Impresión 3D o creación de robots siguelíneas, incluso regalando el material con el que te fabricabas el robot.



Hoy, desde la 10:00 hasta media tarde se organizó este genial evento Maker Movement para promover el hardware libre y la creación de todo tipo de hardware y software como las impresoras 3D o drones.

Como siempre, no podían faltar los regalos a los más madrugadores, sorteos y concursos como el siguelíneas y la competición de sumo entre robots.

Con visitas de gurús de la impresión 3D en España como es @Obijuan_cube o @TCRobotics, uno de los organizadores, con la presentación de su Wheelie.
Wheelie creado por @TCRobotics
El dron incluye una señal GPS, indicando la ruta desde google maps a través de una aplicación Android es posible dirigir el vehículo por zonas de difícil acceso. Además, tiene dos cámaras, frontal y trasera, junto con unas gafas con pantalla (parte izquierda de la imagen) para seguir la exploración. Pero lo más interesante es el radar láser que incluye Wheelie basado en Open Lidar, un proyecto que aprovecha el componente de la aspiradora inteligente de Neato Robotics.

Daniel, otro de los organizadores, nos enseñaba algunos de los drones realizados en BricoLabs y otros productos comerciales.
Quadcóptero con señal GPS
Otros de los productos que BricoLabs nos presentaba era una mano mecánica hecha con impresión 3D y sensores atmosféricos con Arduino.


Mano mecánica con microArduino e impresión 3D.


Entre otros stands teníamos además de drones e impresoras 3D varios aparatos hardware y muchas ideas innovadoras con desarrollo hardware y software libre tanto de organizadores del propio evento o nuevas empresas relacionadas con open hardware como un grupo de gente que presentaba sus trabajos y proyectos personales.




@Jerberrypi esta vez nos tenía preparado un comedero domótico para tortugas mediante el cual solo tenímos que twittear cualquier mensaje con el contenido "comed tortugas" para darles de comer. Además, no podía faltar la webcam para monitorizarlas desde cualquier sitio con conexión. Todo gestionado a través de una RaspberryPi.

Alex y sus amigos de instituto nos presentaba un invernadero con un Arduino y varios sensores para gestionar el autoregado, luminosidad y temperatura mediante el uso de ventiladores y un secador. Además de varios de los robots que usarían para los concursos. Uno de ellos era una Roomba tuneada con sensores de proximidad.

Invernadero domótico.
@escornabot es un robot basado a partir de un proyecto comercial creado para que fuese hardware libre y culquiera pudiera imprimirlo y montarlo en casa. Teneis los diseños publicados en el github de Xoan, uno de los chicos de Bricolabs que estuvo en los talleres de impresión 3D.

Mateo nos presenta sus cubos para crear música electrónica o chipmusic a partir de componentes hardware que podemos encontrar en cualquier tienda de electrónica. El proyecto está disponible en thehypercubes.com

Make Your Own Music en thehypercubes.com
Cada uno de los cubos tiene unos imanes anti-dummies preparados para conectar varios cubos y poder crear música. Dentro del cubo y entre sus componentes están unos leds de colores que identifican la función principal del cubo, desde el verde para orquestar la sintonía con todos los cubos al azul y rojo para controlar el volumen y crear distorsión. Incluso, algunos cubos carecen de potenciómetro e incluyen un sensor para modificar el sonido colocando nuestros dedos. El material de los cubos y la protoboard pueden ser creados con impresión 3D y en un futuro se busca poder reducir el tamaño de los cubos a más de la mitad.

Enxine nos presentan un prototipo que integra varias placas de hardware libre para poder realizar mediciones en tiempo real del consumo de nuestros aparados de casa. Incluyendo comunicación RFC con distintos aparatos como Ninjablocks para el Internet de las Cosas o IoT.

La empresa Flinq para la innovación tecnológica y eficiencia energética nos presenta un gestor de medición de consumos mediante el uso de hardwarea y software libre. Entre las aplicaciones que utilizan se encuentran emonTx de OpenEnergyMonitor para conectar a cualquier aparato electrico y medir a través de una RaspberryPi el consumo para la búsqueda de tarifas más óptimas en una empresa y otras soluciones de gestión de recursos de las empresas con el openERP Odoo que nada tiene que envidiar a productos comerciales el cual incluye características como gesticón de clientes al estilo kanban, facturación, gráficos de Gantt, una API para conectar tus aplicaciones a medida e incluso algunas características de análisis de datos para Inteligencia de Negocio o BI.

BricoGeek, uno de los colaboradores del evento, nos trajo diverso material de hardware libre e incluso un mandos arcade con el juego de Street fighter II para echar unas partidas.


Entre otros de los asistentes estaban la tienda de impresión 3D GaliPrint3D,
Codemonsters para la enseñanza de programación a niños de cualquier edad mediante lenguajes como Scratch , Duinobox, Ecogarden y la creación de biodiesel reciclando aceites a través de filtros de Luigui Pirelli.

Creación de biodiesel por Luigui Pirelli
Varios modelos de impresoras 3D

Impresora 3D Dragon

Modelo plegable FoldaRap
Varias piezas impresas

Luchador de Sumo Turrabot creado por el niño ganador del consurso siguelíneas del año anterior
Aquí teneis algunos vídeos del evento:

Podeis ver más información y fotografías del evento desde su twitter oficial.

miércoles, 13 de agosto de 2014

El protocolo de Bitcoin, mercado, minado y otras criptomonedas

El Bitcoin es una moneda virtual descentralizada y un protocolo basado en los principios de la criptografía asimétrica. Funciona en una red punto a punto que es mantenida por todos sus usuarios y su implementación está publicada bajo licencia de software libre con el código fuente disponible para todo el mundo.

Ejemplo de cifrado de mensaje con cifrado asimétrico. Fuente Wikipedia.


Desde la página oficial se puede obtener información para empezar a usar el Bitcoin y crear un monedero virtual con el que recibir y enviar dinero transacciones.

El proyecto comenzó en 2008 cuando un usuario bajo el pseudónimo de Satoshi Nakamoto publicó en una revista lista de correo de criptografía de metzdowd.com el paper como un sistema descentralizado P2P de dinero electrónico. El 11 de Febrero de 2009 publicaría la primera versión del cliente de Bitcoin en el foro de p2pfundation.

Actualización (15/08/2014): Desde metzdowd se puede acceder a la primera publicación en 2008 del paper y a la publicación de la primera versión del cliente de Bitcoin en 2009. Fuente: coindesk.com.

El cliente de Bitcoin o cartera se sincroniza con la red descargando todas las transacciones registradas. Es decir, que todos los pagos en Bitcoin son públicos. En sitios como blockchain.info se pueden consultar todas las transacciones que se están realizando en tiempo real.

Funcionamiento básico

Todas las transacción de bitcoins son públicas y se transmiten a través de una red descentralizada P2P donde los clientes actúan a la vez de servidores o nodos.

Cuando un cliente envía bitcoins a otro, la transacción se añade a un bloque que se propaga por la red. Toda transacción se confirma cuando es incluida en un bloque y a partir de ese bloque se sigue confirmando con los siguientes bloques. Cuantas más confirmaciones tenga una transacción se reduce la posibilidad de que ésta sea revertida. Por este motivo se suele solicitar al menos 3 confirmaciones o más para dar como válida una transacción.

En el White Paper oficial se explica el funcionamiento técnico con mayor detalle.

Generación de bloques

Un bloque se genera cada 10 minutos y tiene una estructura y una cabecera establecidas donde se indica:
  • Magic no: El valor de "número mágico" 0xD9B4BEF9, valor poco probable de que se produzca en la tabla ASCII en los datos normales con el siguiente bloque.
  • Blocksize: Tamaño de bloque.
  • Cabecera de bloque:
    • Version: versión del bloque
    • hashPrevBlock: El hash del bloque previo (SHA256)
    • hashMerkleRoot: El hash inicial raíz basado en todas las transacciones del bloque, cambia cuando se añade una nueva transacción.
    • Time: timestamp en 4 bytes.
    • Bits: indica la dificultad del bloque
    • Nonce: comienza en 0 y se incrementa en cada hash hasta que se desborda. Cuando lo hace, varía el valor de hash Merkle Root y asegura que sea casi imposible que dos personas generen el mismo valor de hash del bloque.
  • Contador de transacciones
  • Lista de las transacciones incluidas en el bloque.

Para generar un bloque se realiza una prueba de trabajo Proof of Work o PoW. Un sistema de prueba de trabajo PoW es una medida para disuadir ataques de denegación de servicio o correo no deseado en una red que requiere un trabajo del solicitante del servicio (normalmente tiempo de procesamiento con un ordenador).

Existen varios algoritmos de PoW. Bitcoin utiliza el algoritmo HashCash, creado por Adam Back en 1997.
 
Un Hashcash constituye un trabajo de prueba o PoW del que se tiene una cantidad parametrizable de trabajo para calcular y enviar. El receptor, o cualquiera ya que el trabajo enviado es público, pueden verificar el hashcash recibido de manera eficiente.


Este algoritmo está siendo utilizado por sistemas de seguridad como Spamassassin para evitar el envío de correo no deseado en agentes de correo electrónico o MTAs. 


En el White paper de hashcash se pueden leer con profundidad los detalles técnicos.

Minería

El cálculo de la cadena de bloques se llama minería. Un minero recibe una compensación en monedas cada vez que encuentra un bloque. Esta recompensa disminuye cada cierto número de bloques. Solo hay 21 millones de bitscoins, pero los bloques se siguen generando indefinidamente siempre que haya transacciones. Cada transacción emitida tiene un porcentaje muy pequeño de comisión que es repartido entre todos los mineros de la red.

Esquema protocolo de Bitcoin. Fuente
libro Mastering Bitcoin de Andreas M. Antonopoulos, editorial O'Reilly
Atlas.


En un principio se podía realizar minería con el monedero oficial en lo que se denomina Solo Mining. Pero cuantos más mineros haya y mayor su potencia de minado o hashrate, más aumenta la dificultad para que un minero encuentre un bloque válido. Esta dificultad se actualiza cada 2016 bloques (sobre dos semanas).

A día de hoy la única forma viable de minar bitcoins es en agrupación o Mining Pool y utilizando hardware ASIC.

Actualización (15/08/2014): En coindesk se puede leer con mejor detalle como se genera un bloque y como los mineros aseguran la confianza de la cadena de bloques.

Cartera

Para enviar y recibir bitcoins se utiliza una cartera electrónica de bitcoins. Una cartera tiene dos elementos principales:
  • Clave pública: La dirección del receptor cuyo emisor debe conocer para poder enviarle monedas.
  • Clave privada: Solo conocida por el dueño de la cartera para poder enviar sus monedas a otras direcciones. La clave privada se almacena en un fichero. Normalmente una aplicación cartera nos da la opción de cifrar el fichero que contiene la clave privada con una contraseña.
El código fuente de la cartera oficial está disponible en github. Desde la página oficial oficial se pueden descargar varias carteras no oficial, la versión core u oficial se instala en el equipo local y requiere la descarga sincronización de la cadena de bloques.

Hay otras carteras que no necesitan descargar toda la cadena de bloques e incluso hay carteras para dispositivos móviles como en Android.

Bitcoin Wallet para Android.

En Blockchain.info además de poder consultar en tiempo real todas las transacciones tiene disponible una cartera online que se puede crear con un simple registro. Hace unos meses publicaron una versión para Android.

Coinbase también ofrece un servicio de cartera online.

Se recomienda siempre cifrar el monedero (la clave privada contenida en un fichero de la cartera) con una contraseña.

Exchanges

La forma más fácil de adquirir bitcoins es comprarlos. Existen multitud de sitios web para el intercambio de bitcoins. En Europa están Bitstamp, en Rusia BTC-e, en China existen muchos sitios de intercabmio donde Okcoin tiene el mayor volumen de intercambio de bitcoins del mundo.

Principales Exchanges por volumen de bitcoins. Fuente The Story of Bitcoin.
Funcionan como un mercado de valores donde los usuarios realizan órdenes de compra y venta dando al Bitcoin un valor en función de la oferta y la demanda.

Estos sitios suelen ofrecen una API a través de un servicio web REST que automatizan los intercambios. En github tenéis disponible un script de ejemplo para realizar el intercambio de Bitcoin por otras monedas virtuales a través de 3 sitios web.

Otros sitios web como Localbitcoins permite realizar compras o ventas directas a través de intermediarios.

Cajeros automáticos

Una alternativa cada vez más presente son los cajeros automáticos de bitcoin. Hay varios modelos y se usan para facilitar los pagos con bitcoins en tiendas cercanas. Su uso es muy sencillo a través de códigos QR y dispositivos móviles.

Canadá es el país con más cajeros de Bitcoin en el mundo y en España ya hay varios cajeros instalados. En coindesk hay una sección para localizar cajeros y fabricantes de ATMs para Bitcoin en un mapa de Google Maps.

Mercado

El Bitcoin ofrece muchas posibilidades como forma de pago. Desde que la pizzería Papa Johns vendió la primera pizza en Bitcoins por 10 mil bitcoins, en el valor de 2010, actualmente multitud de comercios aceptan Bitcoin como medio de pago. La razón es la posibilidad de realizar transacciones, y microtransancciones, de forma directa e instantánea además de la baja comisión frente a otros sistemas de pago electrónicos como la tarjeta de crédito o Paypal.

Una solución ágil y simple para el comercio electrónico es Bitpay, conocido como el Paypal de Bitcoin. Permite aceptar el Bitcoin en tu comercio como medio de pago y recibir los ingresos en euros. Tal es el éxito de esta plataforma que ya está siendo utilizado en muchos sitios web y ha llegado a procesar un millón de dólares al día.

La plataforma de intercambio o exchange de bitcoins Coinbase ofrece una cartera de bitcoins online y un sistema de pago a través de su plataforma que puede ser incluida en cualquier comercio. Los packs de videojuegos de Humblebundle pueden ser adquiridos en bitcoins a través de esta plataforma y Overstock, una cadena de venta online de productos en stock de Estados Unidos, acepta Bitcoin como medio de pago aumentando consigo el número de ventas en más de un millón de dólares en dos meses.

Virgin también acepta el pago en esta criptomoneda para sus vuelos espaciales y Dell ya acepta bitcoins como forma de pago para la compra de sus productos hardware.

Los hermanos Winklevoss adquieren billetes de Virgin con Bitcoins. Fuente Coindesk.

Otras criptomonedas

Con el Bitcoin le siguen otros proyectos de monedas virtuales. Litecoin fue lanzada en 2011 por Charles Lee, ex-empleado de Google y actualmente trabajando en Coinbase. Dogecoin es una moneda basada en el meme de Doge que empezó a finales de 2013 parodiando al Bitcoin por el aumento de interés mediático tras romper la barrera de los 1,000$.

En menos de un mes Dogecoin superó en número de transacciones al Bitcoin. Obtuvo mucha fama en redes sociales como Reddit donde muchos usuarios empezaron a conocer el funcionamiento de las criptomonedas y a minar varias monedas al día con ordenadores sencillos (cuando la recompensa inicial era de 500 mil doges/bloque). A partir de aquí se financiaron varios proyectos solidarios como doge4water y doge4kids o eventos deportivos como la Nascar (piloto Josh Wise) o el equipo de bobsleigh Jamaicano.

Dogecoin ha financiado múltiples proyectos solidarios y eventos deportivos como la Nascar. Fuente Reddit.

Existen infinidad de monedas virtuales y cada día surgen nuevas altcoins, cada una con implementaciones diferentes y nuevas ideas como SpainCoin con el 50% preminado para repartir entre los ciudadanos españoles que lo soliciten. Otras implementaciones incluyen nuevos algoritmos de cálculo de bloque como Scrtypt-N de Vertcoin (y con posibilidad de envío anónimo) o X11 de Darkcoin (completamente anónimo), implementaciones AuxPoW para compartir el hashrate con otras monedas, cálculos de dificultad variables, transacciones anónimas o stealth address e incluso chats descentralizados como en Talkcoin.

En el foro de bitcointalk se publican cada día nuevas altcoins y en coindesk se puede leer un artículo interesante comparando las altcoins con los inicios de los ordenadores para casa y los microcomputadores.

Mientras Dogecoin acaba de anunciar su fork a AuxPoW para poder minar junto con Litecoin, cada vez hay más desarrollo e innovación entre algunas de las criptomonedas. Aunque esto no signifique una alta demanda actual de monedas (con aumento de su valor) podría significar una buena inversión de cara al futuro.

Minar Bitcoin o monedas Scrypt

Para minar Bitcoin es necesario utilizar el hardware ASIC más potente, donde cada día hay más competencia y el hardware queda rápidamente obsoleto e inútil. Teniendo en cuenta la estimación de subida de dificultad para Septiembre, esto implica importantes inversiones. Cuidado con el dudoso ROI de los servicios CloudMining y los retrasos de entregas de hardware, aduanas, instalación, etc. Podría decirse que el principal beneficiario en la minería de bitcoins hoy en día son los fabricantes de ASICs.

Hace poco se publicó en el blog the Thecoinsman la curiosa visita a un centro de minado de Bitcoins en China con más de 500 TH/s, unos 14 BTC/día con la dificultad actual. Mientras, en Europa el fabricantes sueco de ASICs KnCMiner tiene su propio centro de datos profesional.

Centro de datos de minado de KnCMiner. Fuente foro bitcointalk.

También sale rentable minar otras monedas con algoritmos diferentes. Hasta el primer cuarto de 2014 era posible minar con tarjetas gráficas monedas con el algoritmo Scrypt como Litecoin o Dogecoin (que superó los 200 satoshis en Enero). Pero con la llegada de ASICs para Scrypt es necesario plantearse la opción de adquirir un minero ASIC Scrypt si queremos minarlas y obtener beneficios.

En rigwarz hay una lista de mineros y sus fabricantes tanto para SHA-256 (bitcoin) como Scrypt.

En BitcoinWisdom se puede calcular el retorno de inversión indicando el precio del hardware, consumo eléctrico y previsión del aumento de dificultad. En muchos casos resulta más económico comprar monedas directamente antes que minar.

Minar monedas alternativas

Aún es rentable minar usando tarjetas gráficas monedas con algoritmos por ahora resistentes a hardware ASIC como Scrypt-N, Quark, X11, Keccak, NIST5, o X13.

Si eres algo mañoso puedes montarte tu propio rig con varias gráficas para minar altcoins. Aunque la entrada es algo antigua, en CryptoBadger hay un buen tutorial de como montar y configurar un rig minero.

Algo no muy complicado y muy recomendable es hacer undervolt en las tarjetas gráficas para reducir el consumo eléctrico (en Windows se puede hacer con los drivers).

Rig con 3 gráficas ATI 7950 y fuente de 850w.
También se aconseja separar las gráficas del resto de circuitos utilizando extensores de PCIe, utilizar fuentes eficientes con certificados 80plus y montarlo en estructuras abiertas y aisladas para una buena la ventilación. En tiendas como pcgal se pueden adquirir extensores PCIe y otros materiales de minería desde España y sin tener que esperar semanas a que lleguen desde China o Hong Kong.

Los algoritmos como el X11, X13 o NIST5 tienen la ventaja de que las gráficas consumen bastante menos, entorno a un 40% menos frente a Scrypt y Scrypt-N, generando menos calor.

Software minero

Para minar una criptomoneda es necesario utilizar el software que calcule los posibles bloques en el algoritmo específico de la moneda. Además, el software debe estar adaptado al hardware que se va a utilizar.

Para las tarjetas gráficas ATI están todas las versiones basadas en el Cgminer de Con Kolivas como Sgminer (Scrypt), Vertminer (Scrypt-N), Sph-sgminer y todas las mejoras de optimización para diferentes algoritmos como el Sph-Sgminer_x11mod (X11, X13, Nist5 entre otros).

Para tarjetas gráficas Nvidia están disponibles CudaMiner y ccMiner.

Aunque Nvidia obtiene un rendimiento menor en los algoritmos Scrypt y Scrypt-N, las versiones de múltiples algoritmos como X11 o X13 tienen un rendimiento similar al obtenido con gráficas ATI.

La forma más sencilla para la instalación del software minero es recurrir a  distribuciones de GNU/Linux, autoarrancables desde USB y con todo lo necesario para minar.

El usuario Bee adaptó el original BAMT (versión basada en Debian x86) creando Litecoin BAMT. Incluye los últimos drivers de ATI, Sgminer y diferentes versiones para varios algoritmos, acceso de escritorio remoto y un sistema de monitorización a través de un panel web.

Panel de monitorización de Bamt 1.6, minando x11 con 3 gráficas.

Otra distribución que incluye soporte para 64 bits con versiones para ATI, Nvidia e incluso RaspberryPi (para utilizar con hardware ASIC a través de USB) es PiMP.

jueves, 24 de julio de 2014

Realidad Virtual de cartón con tu smartphone (Parte II)


Hace unas semanas publiqué la entrada Realidad Virtual de cartón con tu smartphone sobre el Google Cardboard, una prueba de concepto de headset de realidad virtual para construir uno mismo con una caja de cartón, un par de lentes, dos imanes y otros componentes.

Tan pronto como fue publicado algunas empresas empezaron a fabricar y vender kits con todos los componentes necesarios. Dodocase fue la primera en anunciar un kit y actualmente está disponible para envíos a España en unas 4 o 6 semanas.

El pasado fin de semana compré un kit disponible en Amazon por unos 20€ (sin pegatina NFC) el cual recibí ayer por la tarde. Aunque no deja de ser un simple cartón, tiene mejor acabado al ser cortado por láser y con los pliegues preparados para un montaje rápido y sencillo. Además, incluye el componente más importante, el par de lentes biconvexas con las medidas necesarias.

Kit Cardboard Google sin NFC.
El montaje del Kit es muy sencillo.


La visión con las lentes del kit es relativamente buena. La imagen se ve muy bien en la parte central, sin embargo alrededor se nota algo difuminado, en especial se notan los textos. Otra aspecto a destacar es que en función de la resolución del móvil se notarán en mayor o menor medida los píxeles.

Las letras en el menú de la demo Cardboard que aparecen en la parte inferior no se ven con claridad. Me imagino que se debe a la calidad de la lente o bien a que la posición del móvil está algo más baja de lo normal.

Menú de la demo Cardboard.
La función de la goma elástica es sujetar el móvil para que no se deslice fuera de las ranuras, pero al inclinar la pantalla para salir al menú el móvil se ha salido en algún momento.

El mejor resultado de sensación en 3D que he visto ha sido con la demo de Windy Day, un corto animado de Spotlight Stories.

Windy Day de Spotlight Stories.


En Google Earth podemos viajar través del globo terráqueo dando la sensación de volar sobre montañas o rascacielos.

Desde el menú de Cardboard también se puede acceder a las fotografías del móvil realizadas con la función de la cámara Photo Sphere.

Foto de la Torre de Hércules con la cámara Photo Sphere de Nexus.
Una demostración similar es la visita guiada al palacio de Versalles, con varias imágenes en 360 grados con el audio de un guía que nos presenta cada una de las salas del palacio.

Chrome Experiments

Desde el navegador de Chrome instalado en el dispositivo móvil se puede acceder a Chrome Experiments, una demostración para visualizar aplicaciones en HTML5. Al acceder a la url en el móvil nos pide aumentar el volumen y girar la pantalla para activar el móvil de visualización para la Cardboard.

Acceso a la url de chrome extensions desde el navegador del dispositivo.
Una vez habilitado aparece un menú con varias opciones que se escogen pulsando con el imán.

Menú de Chrome Experimentes.
Una de las opciones es la demo realizada con Tree.js vista en el vídeo de Google I/O Cardboard. La demo de la montaña rusa virtual me ha gustado bastante, dando la mayor sensación tridimensional completa con movimiento y sonido que varía en función de la proximidad a otros objetos del escenario.

Demo de montaña rusa.
Otras de las opciones del menú son vídeos en 360 grados por Airpano. Se puede ver cualquier parte del vídeo girando la cabeza.

Vídeo de osos en Kamchatka de Airpano.


Demo Treasure Hunt

Para probar la demo de Treasure Hunt con la nueva versión SDK para Android que ya incluye la API Level 20, es necesario cambiar la configuración de Gradle, en CardboardSample/build.gradle, para que no dé un error de compilación
  • Modificar la versión de buildToolsVersion por la última versión de la API Level 19 instalada en el SDK, en mi caso es la 19.1.0:
    buildToolsVersion '19.1.0'

  • Cambiar la última versión disponible para la librería support-v4, indicada con el símbolo más, por la versión 19.1.0:
    compile 'com.android.support:support-v4:19.1.0'
Tras compilar y ejecutar la demo vemos un escenario 3D donde el usuario tiene que buscar un cubo de colores y pulsar el imán cuando lo encuentre para que cambie de posición.

Captura de Treasure Hunt.

lunes, 7 de julio de 2014

Realidad Virtual de cartón con tu smartphone

Mientras se espera la llegada del headset de realidad virtual Oculus Rift en 2015, Google presentó a finales de Junio el Cardboard, una prueba de concepto de realidad virtual para smartphones Android hechas con cartón.

En el sitio web se puede encontrar un ejemplo del resultado del headset de RV junto con un manual de como construirlo en casa a partir de una plantilla en pdf y con la lista de materiales necesarios.

Cardboad de Google


Además, está disponible para Android una demo con aplicaciones diferentes para usar con el Cardboard como ver las fotografías realizadas en photo sphere, ver los canales de youtube, realizar la visita a un museo o ver las calles con street channel en formato estereoscópico.

Funcionamiento

Cardboard utiliza 3 componentes: Un par de lentes ópticas biconvexas, dos imanes y una etiqueta NFC, esta última opcional.

Efecto de la las lentes en el Cardboard. Fuente Google I/O 2014 - Cardboard: VR for Android


Para poder tener una visión inmersa en RV es necesario utilizar lentes ópticas. Google recomienda que sean de 45mm de distancia focal (F/L) biconvexas y de 25mm de diámetro.

Las lentes hacen que nuestra visión se centre en cada una de las mitades de la pantalla, haciendo que nuestro cerebro interprete de forma estereoscópica. Las aplicaciones se encargan de renderizar las dos imágenes ajustadas para la distorsión recibida por la lente.

Los imanes realizan la función de un botón de acción. Ya que la pantalla queda inaccesible, el movimiento de uno de los imanes ejerce un campo magnético que activa el sensor del magnetómetro, incluido en la mayoría de smartphones actuales.

La etiqueta de NFC, con la url cardboard://v.1.0.0, sirve para que cuando se coloque el smartphone cerca, en el Cardboard, le indique a la aplicaciones que se muestren en modo de RV.


Finalmente, el smartphone facilita el hardware y los sensores como el acelerómetro y el giroscopio.

Montaje

Para crear el Cardboard se puede imprimir el pdf de la plantilla. Hay que imprimirla en formato vertical o apaisado y activar en las propiedades de impresión el auto centrado de la imagen, ya que la plantilla ocupa casi toda la página de A4 y podría no salir alguna línea cercana a los bordes.

Plantilla de Cardboard recortada.

Luego pegar la plantilla impresa sobre un cartón, uniendo las partes 1 y 2 con fondo blanco sobre las partes 1 y 2 con fondo negro.

Para recortar utilicé un cúter y una regla con algo debajo para no marcar la mesa. Hay algunas partes centrales que resulta algo complicado recortar, pero que con paciencia se puede hacer usando el cúter a modo de punzón.

El cartón debe ser fino para que resulte cómodo de recortar.

Una vez recortadas todas las partes hay que ensamblarlas. El proceso es muy simple, incluso hay vídeos en youtube que explican los pasos necesarios.

Cardboard hecho a partir de la plantilla en pdf con una caja de zapatos.

Una vez montado todavía faltaría añadir el velcro para la sujeción del smarthphone en la parte delantera, la etiqueta NFC, los imanes y las lentes. Pero es un ejemplo de como podría ser y lo fácil que es hacerse un headset de RV en casa.

Con un acabado más profesional, hecho con una cortadora láser, en Dodocase se puede obtener el kit completo por unos 25$, ó 20$ sin etiqueta NFC, disponible para envíos a España.

Desarrollo

En el vídeo de la conferencia de Google I/O 2014 - Cardboard: VR for Android se puede ver la explicación en detalle del funcionamiento del Cardboard así como el desarrollo de aplicaciones tanto para Android como Html5 con frameworks webGL como Three.js.

En la página de desarrollo de google hay un tutorial de desarrollo para la Cardboard con la demostración del juego Treasure Hunt disponible en GitHub.

Durovis Dive

En mayo de 2013 Stefan Welker presentó la Durovis OpenDive, un headset de realidad virtual creado desde una impresora 3D para acoplarle un smarthphone. Adaptó el juego de Quake 2 a partir del port para Android para que detectase de los movimientos de la cabeza del jugador utilizando los sensores del smarthphone.

Actualmente se puede adquirir una versión comercial, el headset de RV Durovis Dive por unos 60€ en la página oficial de la compañía. También tiene disponible un plugin para Unity3D compatible con Android y iOS, además del código fuente del port de Quake 2 adaptado y los drivers para jugar con un mando por Bluetooth. También han publicado una lista de smarthphones compatibles, Android y iOS, una lista de juegos con soporte para el headset de RV y la sala de juegos Dive Launcher para Android.

Actualización (19/07/2014): El proyecto de ejemplo para el cardboard, Treasure Hunter, es un proyecto de Gradle. Para compilarlo se puede utilizar Android Studio, adaptando el proyecto a Eclipse con el plugin Grandle IDE.

Desde un terminal se puede compilar ejecutando desde el directorio del proyecto Cardboard el script ./gradlew.

Requiere tener configurada la variable de entorno ANDROID_HOME apuntando a la ruta donde está el SDK, requiere la librería support-v4.jar la cual ya está en el SDK incluído en Android Studio en la ruta sdk/extras/android/m2repository.

Con ./grandlew se compila el proyecto.

Ejecutando ./grandlew desde una terminal GNU/Linux.
El proyecto está configurado para compilar en la versión SDK Android 19.0.3. Será necesarios instalarlo desde el Android SDK Manager en sdk/tools/android. En la sección de paquetes seleccionar e instalar Android SDK Build-tools 19.0.3.

Para indicar que utiliza support-v4 19, editar el fichero de configuración de Gradle CardboardSample/build.gradle y cambiar la línea de dependencias compile 'com.android.support:support-v4:+' por compile 'com.android.support:support-v4:19.0.1'.

Con ./gradlew assembleRelease se empaqueta el apk.

Compilando con ./gradlew assembleRelease desde terminal de GNU/Linux.
 El apk se encuentra en la ruta cardboar/CardboardSample/build/apk/CardboardSample-release-unsigned.apk.

En el blog de Alexander Lin hay un tutorial de como integrar el proyecto y ejecutarlo con Android Studio.

jueves, 26 de junio de 2014

Grails "Groovy on Rails" para un desarrollo web fácil en Java

Grails es un framework para desarrollo fácil de aplicaciones web en Java desarrollado sobre el lenguaje Groovy. Fue adquirido por Spring en 2008 y  es conocido como "Groovy on Rails" ya que incluye un sistema creación de proyectos con scaffolding o andamiaje siguiendo la idea del framework Ruby on Rails en el que muchos otros frameworks han seguido su ejemplo como Symfony, Yii, CakePHP o Code Igniter.

En este caso, Grails permite la creación de un proyecto inicial con un andamiaje predefinido y de forma muy rápida usando tecnología POJO con Hibernate y Spring. Otra funcionalidad destacable es el potencial de métodos dinámicos para búsquedas en entindades persistentes. Incluye también el framework de Javascript jQuery para la creación de los elementos de la vista.

Instalación

Para la instalación es necesario descargar Grails y crear las variables de entorno de JAVA_HOME, GRAILS_HOME y añadirlas a la variable PATH. También es posible realizar la instalación de forma automática con herramientas como Gvmtool.

Incluir la variable de entorno JAVA_HOME.

~$ export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
~$ export PATH="$PATH:$JAVA_HOME/bin"

No olvidar añadir en el .bashrc del usuario las dos líneas para que quede persistente.

Descargar y descomprimir la última versión de Grails.

~$ wget http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/grails-2.4.2.zip
~$ unzip grails-2.4.2.zip 

Incluir la variable de entorno GRAILS_HOME con la ruta completa a la ubicación de Grails.

~$ export GRAILS_HOME=/home/user/grails-2.4.2
~$ export PATH="$PATH:$GRAILS_HOME/bin" 

Comprobar que Grails funciona en línea de comandos

 ~$ grails -version 

Creación de un proyecto

~$ grails create-app MyFirstProject 
Acceder al shell de Grails del proyecto creado

~$ cd MyFirstProject
~$ grails grails> help 



El shell de Grails incluye funcionalidades de tabulación para autocompletado.

Crear un ejemplo de hola mundo

Desde el proyecto se puede acceder a los datos del mismo y crear los elementos MVC fácilmente con el script de Grails.

grails> create-controller hello 


Esto creará el fichero grails-app/controllers/myfirstproject/HelloController.groovy

Ejecutar la aplicación

Para ejecutar la aplicación el comando run-app lanza por defecto la aplicación en el puerto 8080.

grails> run-app 



Con el parámetro -Dserver.port se puede indicar otro puerto.

grails> run-app -Dserver.port=9090 

Para parar la aplicación se ejecuta el comando stop-app en el shell de Grails.

grails> stop-app 

Testing

Los comandos que empiezan con create-* en Grails crean automáticamente pruebas unitarias y de integridad en las ubicaciones test/unit y test/integration.

Para ejecutar las pruebas ejecutar el siguiente comando.

 grails> test-app

Generar una aplicación

Grails permite crear aplicaciones base rápidamente con la característica de scaffolding o andamiaje, generando el controlador y vistas CRUD a partir de un esqueleto predefinido.

Para ello está el comando generate-all generando un controlador y las vistas asociadas.

Primero es necesario crear una entidad llamada Artifact en Grails.

 grails> create-domain-class user


El comando crea automáticamente la clase en grails-app/domain/myfirstproject/User.groovy. Se debe editar para indicar los atributos de la entidad, por ejemplo nombre y fecha de nacimiento.

package myfirstproject

class User {
  static constraints = {}
  String name
  Date birthDate
}


Con el comando generate-all User se crea automáticamente el controlador, las pruebas de unidad y la vista de la entidad User.

~$ grails generate-all User
| Finished generation for domain class myfirstproject.User 


Por último se ejecuta la aplicación con el comando grails run-app desde la línea de comandos.

~$ grails run-app

En la url http://localhost:8080/MyFirstProject/user/ se accede a la lista de la entidad User con las vistas CRUD, i18n y el estilo por defecto de Grails.

Vista Create de User.

Vista listado con el usuario creado.

miércoles, 25 de junio de 2014

Reversing sencillo en Android

Realizar ingeniería inversa en Java es relativamente sencillo. El código fuente se pre-compila en el pseudocódigo Java Bytecode preparado para ser interpretado por la máquina virtual de Java ó JVM.

El formato Apk (Aplication PacKage file) de Android es un contenedor, en un formato zip, para la instalación de aplicaciones. Contiene ficheros como el contenedor de ejecutables classes.dex, los recursos en la ubicación res, los recursos compilados en resources.arsc y el fichero AndroidManifest.xml.

Archivo apk abierto como un compresor zip.


Los ficheros xml contenidos en el apk se encuentran en formato XML binario y por lo tanto no serán legibles si se abren directamente. Por otra parte, el fichero classes.dex es el código compilado en formato Dex (Dalvik EXecutable) e interpretado por la máquina virtual Dalvik en Android.

Existen múltiples herramientas para realizar ingeniería inversa de los fichero .dex y hacer legibles los xml.

XML-Apk-parser es un parser escrito en Java que permite convertir los XML binarios a XML en formato texto.

android-apktool es una herramienta escrita en Java y de software libre que decodifica los recursos a su formato original. Incluye además capacidad de depuración de código con smali.

Para decodificar el contenido apk solo es necesario ejecutar desde un terminal la siguiente línea:

~$: java -jar apktool.jar decode file.apk path_destination

Ejemplo decodificando apk con apktool.
El resultado obtenido no siempre es igual al original. Por ejemplo, los identificadores de elementos de Layout no incluyen el símbolo "+".

El código compilado en classes.dex también se puede decodificar. dex2jar traduce un fichero en formato Dex a formato Jar (Java ARchive). Una obtenido el fichero Jar se puede decompilar el código con JD-GUI.

Otra opción también válida y mucho más cómoda es decompilar directamente el fichero Dex con Jadx.

Su instalación es bastante sencilla:

~$: sudo apt-get install git
~$: git clone https://github.com/skylot/jadx.git
~$: cd jadx
~$: ./gradlew dist


Se puede abrir un fichero dex directamente con la interfaz gráfica de Jadx:

~$: ./jadx/build/jadx/bin/jadx-gui classes.dex &

Desensamblando el código de classes.dex con Jadx-GUI.

Radare2 ó r2 es un conjunto de herramientas y scripts en línea de comandos para realizar desensamblado con soporte para múltiples arquitecturas como el Motorola 68000, Mips, i386, x86-64, dalvik entre otros y soporte de varios formatos de ficheros como el dex.

En el blog de Sebastián Guerrero hay un artículo muy interesante sobre el uso de r2 con aplicaciones Android.

Recordad que el objetivo de esta entrada no es fomentar la piratería de aplicaciones ni tirar abajo el duro trabajo de los desarrolladores.

Para evitar que nuestras aplicaciones puedan ser interpretadas fácilmente hay herramientas como ProGuard que permiten ofuscar el código fuente.