tag:blogger.com,1999:blog-26009953317853332922024-03-19T19:18:21.954+01:00Seguridad, desarrollo e innovación tecnológicaBlog dedicado a la seguridad de la información, el desarrollo software y todo lo relacionado con la innovación tecnológica en general.David Albelahttp://www.blogger.com/profile/11862647367232161076noreply@blogger.comBlogger12125tag:blogger.com,1999:blog-2600995331785333292.post-84342811574605914742018-01-04T14:52:00.002+01:002018-01-04T14:52:24.791+01:00Ethereum y la descentralización con Dapps<br />
<br />
Ethereum es una tecnología basada en Blockchain que nació en 2014 y a mediados de 2015 comenzó su lanzamiento con el un IPO inicial. Su diferencia principal a Bitcoin es que Ethereum es turing-completa, es decir, permite crear aplicaciones a través de su lenguaje de transacciones.<br />
<br />
Ethereum es la primera criptomoneda que ha hecho un cambio de paradigma fundamental en lo que la tecnología Blockchain puede hacer. No es sólo una moneda. Es un ordenador programable accesible desde cualquier parte del mundo descentralizado y que puede hacer cualquier aplicación. Ethereum es un sistema que podría construir cualquier número de monedas alternativas, por ejemplo, se puede reconstruir Bitcoin en Ethereum; sin embargo no se podría reconstruir Ethereum en Bitcoin. Es fundamentalmente más potente, como comparar una calculadora con un ordenador. <br />
<br />
<br />
Sus creadores definen las unidades como el <i>fuel </i>para la creación de estas aplicaciones. Sus posibilidades se extienden desde realizar pagos, al alquiler y creación de contratos digitales a poder realizar nuevas oportunidades de negocio como micro-mecenazgo y aplicaciones móviles o web con los datos descentralizados.<br />
<br />
Un ejemplo son las aplicaciones Dapps que están comenzando a crearse. Los desarrolladores no necesitan realizar el desarrollo de un Backend en un servidor central donde guarda los datos del cliente. En su lugar, se ahorran los costes de esto y se puede crear aplicaciones centrándose tan solo en el usuario, es decir, la aplicación móvil o web. Por ejemplo, un desarrollador podría crear un juego para <i>smartphones </i>basado en un modelo de negocio <i>freemium </i>y que los usuarios sean ellos quienes se encarguen de realizar los pagos a través de Ethereum. Este sistema descentralizado se encargaría de gestionar los datos y enviar los pagos a la cartera del desarrollador así como añadir el contenido adicional en la aplicación. Actualmente ya existen proyecto que se pueden encontrar en web como http://dapps.ethercasts.com/<br />
<br />
Otra aplicación muy interesante asociada a Ethereum es la creación de DAOs o Decentralized Anonymous Organizacións. Esto permite que un grupo de personas creen asociaciones aportando el <i>fuel </i>necesario<i> </i>en forma de ether (unidad de esta criptomoneda). Para realizar los gastos en forma de ether de esta comunidad necesitaría de la firma digigal de cada uno de los miembros. Esto es muy similar a como funciona Bitcoin con el sistema de multifirma, donde puedes generar las n-de-m claves, es decir, para enviar bitcoins requiere de la firma de n claves de m totales con las que se generó la dirección. Por ejemplo, si tenemos una multifirma 2-de-3, necesitamos firmar al menos con 2 claves privadas de las 3 claves públicas con las que se generó la dirección. En el caso de Ethereum las posibilidades aumentan, puedes decidir hasta cuantas cantidades pueden enviar unos y cuantas otros, limitar el envío de, por ejemplo, un departamento del DAO al mes o decidir para enviar a unos tienen que firmar todos pero a otros solo se requiere firmar por unas personas determinadas.<br />
<br />
<br />
<b>Homestead</b> <br />
<br />
El pasado 29 de febrero de 2016 el equipo de Ethereum publicaba la próxima primera versión estable, llamada Homestead, anunciando que salían del estado beta en los próximos días (hard-fork a partir del bloque 1500000). En su web https://ethereum.org/ se puede acceder a la descarga de la aplicación.<br />
<br />
<br />
<b>Metropolis</b><br />
<br />
<span class="" id="result_box" lang="es"><span class="">Metropolis es la tercera etapa de Ethereum en un proceso separado de 4 etapas y hay muchas características interesantes que vienen cuando se implementa.</span> <span class="">Estos son algunos de los principales que tendrán muchas repercusiones.</span><br /><br /> <span>Zk-Snarks: Privacidad con la prueba de conocimiento cero del protocolo Zerocash ideado por ZCash.</span><br /> <span class="">Prueba de implementación temprana de Stake.</span> La migración de Prueba de Trabajo a Prueba de Participación llevada a cabo por Vlad Zamfir.<br /> <span>Flexibilidad y solidez de los contratos inteligentes.</span><br /> <span>Abstracción de cuenta.</span></span>David Albelahttp://www.blogger.com/profile/11862647367232161076noreply@blogger.com0tag:blogger.com,1999:blog-2600995331785333292.post-2038194918340960682016-09-22T21:40:00.002+02:002016-09-23T00:01:39.738+02:00Introducción a MicroserviciosPara construir aplicaciones orientadas a servicio, los más habitual es crear una aplicación <b>monolítica</b>,
bajo la esquema clásico <i>Model-View-Controller</i>, con un único contenedor que incluye tanto la lógica de negocio como la interfaz de usuario.<br />
<br />
Cuando estas aplicaciones crecen y abarcan un gran conjunto de diferentes componentes, módulos y pruebas previas al despliegue; aumentan en proporción al crecimiento de la aplicación (aumento en los tiempos de pruebas, conflictos y revisión de código) en detrimento del tiempo de producción para desplegar y actualizar nuevas versiones en producción. Como solución a estos problemas surgen nuevos patrones de arquitectura como el mencionado aquí. Pero, ¿qué son las aplicaciones basadas en <b>Microservicios</b>?<br />
<br />
Una arquitectura basada en <a href="http://microservices.io/" target="_blank">microservices</a> divide el <em>front-end</em> y el <em>back-end</em>, por lo que es más fácil de distribuir, basado en los principios <a href="http://www.reactivemanifesto.org/es" target="_blank">Reactivos</a> para la construcción de un servicio aislado escalable, resistente a fallos y que se combina con otros servicios para formar un todo.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img alt="Ejemplo arquitectura microservicios con JHipster" height="258" src="https://jhipster.github.io/images/microservices_architecture_1.png" style="margin-left: auto; margin-right: auto;" width="400" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Ejemplo de aplicación en arquitectura de Microservicios con JHipster.</td></tr>
</tbody></table>
Los microservicios son, en definitiva, una extensión de la arquitectura orientada a servicios para contruír sistemas distribuidos de software.
La idea nace de mano del Doctor Peter Rodgers en 2005 introduciendo el término <i>Micro-Web-Services</i> en la presentación de la conferencia <a href="https://www.cloudcomputingexpo.com/">Cloud Computing Expo</a>. Más tarde, Adrian Cockcroft en Netflix los describiría como "Arquitecturas Orientadas a Servicio de grano fino" y; James Lewis y Martin Fowler terminan por nombrar a este término como <a href="http://martinfowler.com/articles/microservices.html">Microservicios</a>:<br />
<blockquote>
<i>La "Arquitectura Microservicio" ha surgido en los últimos años para describir una forma particular de
diseñar aplicaciones de software como suites de servicios con despliegue independiente.</i><br />
<i>Si bien no existe una definición precisa de este estilo arquitectónico,
hay ciertas características comunes en torno a la capacidad de negocio, el despliegue automatizado, la inteligencia
en los puntos de control y el control descentralizado del lenguaje de programación y los datos.</i></blockquote>
Una aplicación con microservicios se basa en que la versión monolítica debe ser separada en proyectos <b>completamente independientes</b> y que estos se comuniquen entre sí, a través de servicios web, donde cada uno realizará su propia lógica de negocio.
Una aplicación a modo de <b>pasarela</b> <b>orquesta</b> estos microservicios para proveerlos al cliente a través de una interfaz de usuario o <em>front-end</em>.
Cuando se requiera <i>refactorizar</i> código o actualizar la versión de uno de estos microservicios, al ser completamente independientes se pueden lanzar las pruebas y asegurar la calidad. En caso de éxito en las pruebas, puede resultar sencillo desplegar la nueva versión del microservicio en producción sin afectar al resto.<br />
<br />
Ver <a href="https://www.youtube.com/watch?v=57UK46qfBLY">Microservices at Netflix Scale: Principles, Tradeoffs & Lessons Learned</a> por Ruslan Meshenberg en GOTO 2016:<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/57UK46qfBLY/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/57UK46qfBLY?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
Los microservicios contemplan las siguientes características y ventajas:<br />
<ul>
<li>Facilitan el reemplazo de cada uno de los servicios, sin tener que eliminar todo el conjunto de la aplicación.</li>
<li>Los servicios se <b>organizan</b> <b>por</b> <b>capacidades</b>, por ejemplo interfaz de usuario, logística, facturación, etc.</li>
<li>Los servicios se pueden implementar con diferentes lenguajes de programación, bases de datos, hardware y entornos de software.</li>
<li>La arquitectura es simétrica y no jerárquica.</li>
<li>Se presta a un proceso de desarrollo de software de entrega continua.
Un cambio de una pequeña parte de la aplicación sólo requiere uno o un número pequeño de servicios a ser reconstruidos y desplegados.</li>
<li>Obliga a crear una estructura modular.</li>
</ul>
Como desventajas destacan:<br />
<ul>
<li>Los servicios constituyen barreras para la información. Se crearán varias fuentes de datos, que requieren comunicarse entre ellas y realizar varias copias, <i>snapshots</i> y recuperaciones.</li>
<li>La arquitectura introduce una complejidad adicional y nuevos problemas que resolver, como la <b>latencia de la red</b>, formatos de mensaje, equilibrio de carga y tolerancia a fallos.</li>
<li>Las pruebas y el despliegue son más complicados.</li>
<li>Entre las llamadas de los microservicios hay un mayor coste en términos de latencia de la red
y el tiempo de procesamiento de los mensajes que en las llamadas en una aplicación monolítica.</li>
<li>Mover responsabilidades entre los microservicios es más difícil.
Puede implicar la comunicación entre los diferentes equipos, refactorizar código de una funcionalidad en otro lenguaje
o tener que hacerlo encajar en una infraestructura diferente.</li>
</ul>
Desde el 2015 el término <i>microservices</i> es bastante <i>hype</i>, ¿quién no desearía migrar su aplicación monolítica a microservicios?
Si algún lector está pensando en hacerlo, recomiendo el leer el artículo de Arun Gupta <a href="http://blog.arungupta.me/monolithic-microservices-refactoring-javaee-applications/" target="_blank">Monolithic to Microservices Refactoring for Java EE Applications</a>
y ver el siguiente que presenta en la conferencia <a href="https://www.devoxx.com/" target="_blank">Devoxx</a> de 2015 "<i>Refactor your Java EE application using Microservices and Containers"</i>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/iJVW7v8O9BU/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/iJVW7v8O9BU?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
<br />
Fuentes:<br />
<ul>
<li><a href="http://jhipster.github.io/microservices-architecture/">http://jhipster.github.io/microservices-architecture/</a></li>
<li><a href="https://en.wikipedia.org/wiki/Microservices">https://en.wikipedia.org/wiki/Microservices</a></li>
<li><a href="http://www.codingthearchitecture.com/2014/05/01/where_is_the_complexity.html">http://www.codingthearchitecture.com/2014/05/01/where_is_the_complexity.html</a></li>
<li><a href="http://martinfowler.com/articles/microservices.html">http://martinfowler.com/articles/microservices.html</a></li>
<li><a href="http://blog.arungupta.me/monolithic-microservices-refactoring-javaee-applications/">http://blog.arungupta.me/monolithic-microservices-refactoring-javaee-applications/</a></li>
</ul>
David Albelahttp://www.blogger.com/profile/11862647367232161076noreply@blogger.com0tag:blogger.com,1999:blog-2600995331785333292.post-47633686040557929042015-09-11T03:41:00.000+02:002015-09-18T00:54:08.108+02:00RevealJs, HTML5 ideal para presentaciones <div style="color: #222222; font-family: arial, sans-serif; font-size: small;">
<br /></div>
<div style="color: #222222; font-family: arial, sans-serif; font-size: small;">
Hace unos meses he estado leyendo acerca de los presentadores en MarkDown y HTML5. Entre los que más podrían destacar, aunque distintos, RevealJs, Impress y RemarkJs. RevalsJs tiene una versión online en Slides.com (gratuita para proyectos públicos). Impress está basado en el editor de presentaciones online Prezi.com. RemarkJs es un proyecto que destaca por su sencilled.<br />
<br /></div>
<div style="color: #222222; font-family: arial, sans-serif; font-size: small;">
</div>
<div style="color: #222222; font-family: arial, sans-serif; font-size: small;">
Esta tarde he subido una plantilla para <a href="http://lab.hakim.se/reveal-js/#/" target="_blank">RevealsJs</a> mi cuenta de <a href="https://github.com/dalbelap/reveal.js-angularjs-json-data" rel="nofollow" target="_blank">GitHub</a>. Es una modificación del fork original el cual incluye soporte para AngularJs, carga de las pantallas a partir de datos en json y una barra de menús en la parte superior. Aún necesita una serie de mejoras pero como idea base funciona perfectamente.</div>
<div style="color: #222222; font-family: arial, sans-serif; font-size: small;">
<br /></div>
<div style="color: #222222; font-family: arial, sans-serif; font-size: small;">
Otra opción mucho más elegante, es crear los proyecto mediante generadores de código. Yeoman es un famoso ecosistema de autogeneradores para múltiples aplicaciones y frameworks, algunos muy interesantes como <a href="https://jhipster.github.io/" target="_blank">JHipster</a> (Spring Boot + AngularJs), generadores de AngularJs, React, Backbone y para RevealJs.<br />
<div>
</div>
<br />
Esto es lo que hace el autogenerador de Yeoman <a href="https://github.com/slara/generator-reveal" target="_blank">generator-reveal</a>, creado por Sebastian Lara Menares, permitiendo crear una presentación en HTML5 en apenas unos minutos mediante línea de comando. Creando un proyecto mucho más limpio, simple y mejor organizado.</div>
<div style="color: #222222; font-family: arial, sans-serif; font-size: small;">
<br /></div>
<div style="color: #222222; font-family: arial, sans-serif; font-size: small;">
Para instalar Yeoman y el autogenerador de RevealJs, es tan simple como seguir los pasos que describo a continuación (debereis tener instalado <a href="https://nodejs.org/en/" target="_blank">NodeJs</a> con la ruta del PATH hacia la ruta de ejecutables de Node para poder ejecutar "<i>npm</i>"):</div>
<div style="color: #222222; font-family: arial, sans-serif; font-size: small;">
<br /></div>
<div>
<div style="color: #222222; font-family: arial, sans-serif; font-size: small;">
<code>
$ npm -g install yeoman generator-reveal bower grunt-cli<br />
$ mkdir generator-reveal-presentation && cd $_<br />
$ yo reveal<br />
This includes the amazing Reveal.js Framework<br />
and a Gruntfile for your presentation pleasure.<br />
<br />
? What are you going to talk about? Title<br />
? What version should we put in the package.json file? 0.0.0<br />
? Do you want to use Sass to create a custom theme? Yes/No<br />
? What Reveal.js theme would you like to use? simple<br />
? Do you want to deploy your presentation to Github Pages? This requires an empty Github repository. Yes/No<br />
<br />
$ yo reveal:slide "Introduction" [--markdown] [--attributes] [--notes]<br />
$ yo reveal:slide "Targets" [--markdown] [--attributes] [--notes]<br />
$ yo reveal:slide "Demo with video cats" [--markdown] [--attributes] [--notes]<br />
$ yo reveal:slide "Greetings" [--markdown] [--attributes] [--notes]<br />
# Markdow crea el slide como lenguaje de MarkDown<br />
# attributes añade atributos opcionales para el slide: background, otros.<br />
#note añade notas para mostar ayuda en la ventana del ponente.<br />
<br />
# Editar primer slide<br />
$ vi slides/index.md<br />
<br />
### Is Evil Corp real?<br />
##### Fsociety<br />
>##### from: Mr. Robot<br />
>##### by: Christian Bale<br />
<br />
note:<br />
From the terminal, pop in:<br />
<br />
```yo reveal:slide "Slide Title"```<br />
<br />
Available options:<br />
<br />
```--markdown --attributes --notes```<br />
<br />
# Editar último slide<br />
$ vi slides/index.json<br />
{<br />
"filename": "greetings.md",<br />
"attr": {<br />
"data-background": "img/questions.jpg"<br />
}<br />
}<br />
<br />
# Ejecutar gestor de tareas<br />
$ grunt serve<br />
</code></div>
</div>
<br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">A continuación se describen algunos consejos para la creación de presentación con <i>generator-reveal</i>.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>Atributos en Diapositivas</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b><br /></b></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Abrir Slides/list.json y añadir el atributo <i>attr </i>con la lista de los atributos que se quieran añadir a una diapositiva. Por ejemplo con la imagen de fondo y clase centrado:</span><br />
<code>
{<br />
"filename": "index.md",<br />
"attr": {<br />
"data-background": "resources/background.png",<br />
"data-background-size": "1024px",<br />
"class": "center"<br />
}<br />
},<br />
</code><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>Diapositivas Verticales</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b><br /></b></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Para añadir diapositivas verticales a una diapositiva horizontal, tan solo es necesario sustituir el documento JSON por un array de documentos:</span><br />
<code>
[<br />
{<br />
"filename": "introduction.md"<br />
},<br />
{<br />
"filename": "introduction/introduction1.md",<br />
"attr": {<br />
"data-background": "resources/background.png",<br />
"data-background-size": "1024px",<br />
"data-transition": "none"<br />
}<br />
},<br />
{<br />
"filename": "introduction/introduction2.md",<br />
"attr": {<br />
"data-background": "resources/background.png",<br />
"data-background-size": "1024px",<br />
"data-transition": "none"<br />
}<br />
},<br />
{<br />
"filename": "introduction/introduction3.md",<br />
"attr": {<br />
"data-background": "resources/background.png",<br />
"data-background-size": "1024px",<br />
"data-transition": "none"<br />
}<br />
}<br />
],<br />
</code>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>MarkDown</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b><br /></b></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Las diapositivas pueden ser creadas en formato <a href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet" target="_blank">Markdown</a> (extensión .md) facilitando bastante la creación de las presentaciones. Con el editor <a href="https://github.com/atom" target="_blank">Atom</a> de Github se puede ver una previsualización de los resultados de una página en Markdown pulsando la combinación de teclas <i>Control</i>, <i>Shift</i> y M o en el menú <i>Packages</i> -> <i>Markdown Preview</i> -> <i>Toggle Preview.</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i><br /></i></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu71VHRVos071NMJysR9bgj37waU2n6gp0Q6xkvlf3sHMfo2_KWFSbv71m1WPcSGTz-rkhJXy7tYTSikAhThlxSpawP5YkcbfmI7AhAqLQwR72rtZwGCMYDMGfVipsEFDbX2VO8IwaXJoH/s1600/reveal_atom_preview_markdown.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu71VHRVos071NMJysR9bgj37waU2n6gp0Q6xkvlf3sHMfo2_KWFSbv71m1WPcSGTz-rkhJXy7tYTSikAhThlxSpawP5YkcbfmI7AhAqLQwR72rtZwGCMYDMGfVipsEFDbX2VO8IwaXJoH/s400/reveal_atom_preview_markdown.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Previsualización de MarkDown con editor Atom.</td></tr>
</tbody></table>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>MarkDown con Fragments</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b><br /></b></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Para ir mostrando líneas de texto poco a poco en una diapositiva se usa la clase <i>fragments. </i>La forma de añadirlo en Markdown se añade con el comentario de HTML <i>.element.</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i><br /></i></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>Imágenes en MarkDown</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b><br /></b></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Agregar imágenes con MarkDown es muy sencillo, con [!Nombre de imagen] se añade el texto para el atributo <i>alt</i>. RevealJs añade la imagen con un borde grueso de color negro. Se puede eliminar añadiendo el estilo "<i>border:0px;</i>". Por defecto, esto deja un marcado de sombreado para los bordes de la imagen. Esta sombra también se puede eliminar con "<i>box-shadow: 0 0 0 rgba(0, 0, 0, 0);</i>". La imagen se ajusta automáticamente al 95% del total del tamaño de la diapositiva. También se puede alinear junto con un texto con el atributo CSS "<i>vertial-align</i>", con opciones como <i>baseline</i>, <i>bottom</i>, <i>top</i> o<i> middle</i>. A continuación se muestra un ejemplo:</span><br />
<code>
## ![Cassandra](resources/logo_cassandra.png )<!-- .element: style="border:0px; box-shadow: 0 0 0 rgba(0, 0, 0, 0); vertical-align: middle;" --> Apache Cassandra<br />
</code><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>Personalizando RevealJS</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b><br /></b></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Para cambiar las propiedades de RevealJs se deben utilizar las plantillas dentro del directorio <i>templates</i>. No se debe modificar directamente index.html, porque en cuanto se ejecute <i>grunt </i>los cambios serán sobreescritos por el fichero de la plantilla.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">En <i>_index.html</i> está la configuración de RevealJs. Para añadir otras opciones como mostar paginación o añadir movimiento con la rueda del ratón:</span><br />
<code>
Reveal.initialize({<br />
controls: true,<br />
progress: true,<br />
history: true,<br />
center: false,<br />
slideNumber : true,<br />
fragments: true,<br />
mouseWheel: true,<br />
hideAddressBar: true,<br /> transition: 'slide', // none/fade/slide/convex/concave/zoom</code><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>Código en MarkDown</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b><br /></b></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">RevealJs incluye sintaxis de código con <a href="https://highlightjs.org/" target="_blank">highlighting</a> y es posible crear elementos de código para cada lenguaje.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Para incluir código en MarkDown tan solo es necesario añadir 3 comillas simples invertidas ```, al inicio y al final. También se puede indicar en qué <a href="https://support.codebasehq.com/articles/tips-tricks/syntax-highlighting-in-markdown" target="_blank">lenguaje</a> está escrito el código.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>Dos columnas por Diapositiva</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b><br /></b></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">A veces resulta interesante poder dividir la diapositiva en 3 o más columnas. Las columnas se pueden añidir con nuevas propiedades CSS: <i>moz-column-count</i> y <i>-webkit-column-count</i> para navegadores Mozilla y Webkit respectivamente. En<i> template/_index.html</i> añadir:</span><br />
<code>
<style><br />
.multicolumn > ul, .multicolumn > ol {<br />
-moz-column-count: 2;<br />
-moz-column-gap: 50%;<br />
-webkit-column-count: 2;<br />
-webkit-column-gap: 50%;<br />
column-count: 3;<br />
column-gap: 50%;<br />
}<br />
</style><br />
</code>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">e indicar en la configuración de la diapositiva, en <i>Slides/list.json</i>, el nombre de la clase <i>multicolumn.</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i><br /></i></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioCrYbByNqq6GMTqCC1OVZdboGsBHOO7eNFVTViOfuOHmwToUzidI0tabkPUJ3sUWYP51ANnp-_DDpQt-_79eLuP9_ACkYTRDzpvOZL_MxcjSb-p6pGlkKJfAE5EQxDZvfOOGTK2QD424u/s1600/reveal_two_columns_slide.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioCrYbByNqq6GMTqCC1OVZdboGsBHOO7eNFVTViOfuOHmwToUzidI0tabkPUJ3sUWYP51ANnp-_DDpQt-_79eLuP9_ACkYTRDzpvOZL_MxcjSb-p6pGlkKJfAE5EQxDZvfOOGTK2QD424u/s400/reveal_two_columns_slide.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Resultado diapositiva con doble columna</td></tr>
</tbody></table>
<br />
<b>Notas para presentaciones</b><br />
<br />
Se pueden añadir notas de ponente en cada diapositiva para ayudar en las presentaciones. Para ello, en cada diapositiva se añade la etiqueta aside con la clase notes. Para diapositivas en MarkDown es mucho más simple, basta con añadir <i>note:</i> al final:<br />
<br />
Pulsando la tecla <b>s</b>, RevealJs abre una nueva ventana del navegador, un temporizador de tiempo (reiniciable pulsando sobre él) y las notas añadidas.<br />
<br />
<b>Conversión a pdf</b><br />
<br />
La presentación de RevealJs se puede convertir a pdf. Lo único que hay que hacer es añadir el parámetro "?print-pdf" a la url.<br />
<br />
Cuidado con los cambios en la hoja de estilos. Por ejemplo, el estilo de doble columna no estará optimizado para impresiones en pdf.<br />
<br />
<b>Desplegar en Github</b><br />
<b><br /></b>
Con Generator-Reveal, se puede configurar fácilmente para que despliegue una página de presentación usando github. Lo que se realiza de forma automática es subir crear la complilación de archivos en <i>dist</i>, crear la rama gh-pages en dist para subir posteriormente el contenido al repositorio del usuario de Github. Esto crea finalmente una página con la presentación desplegada en https://[usaario].github.io/[nombre-repositorio].<br />
Primero, es necesario crear el repositorio en Github y a continuación ejecutar los comandos de linea:<br />
<code>$ grunt dist<br />
$ git init<br />
$ git add .<br />
$ git commit -m 'First commit'<br />
$ git remote add origin remote repository URL<br />
$ grunt deploy<br />
</code><br />
<br />
Para desplegar, debe estar configurado en Reveal la cuenta y el repositorio del usuario (seleccionado durante la creación del código con Yeoman). Sin embargo, los datos del repositorio puden ser reconfigurados posteriormente en los ficheros <i>.yo-rc.json</i> y <i>Gruntfile.coffee:</i><br />
<code>
$ vim .yo-rc.json<br />
"deployToGithubPages": true,<br />
"githubUsername": "user-github",<br />
"githubRepository": "repository-name"<br />
}<br />
}<br />
<br />
$ vim Gruntfile.coffee<br />
buildcontrol:<br />
<br />
options:<br />
dir: 'dist'<br />
commit: true<br />
push: true<br />
message: 'Built from %sourceCommit% on branch %sourceBranch%'<br />
pages:<br />
options:<br />
remote: 'git@github.com:user-github/repository-name'<br />
branch: 'gh-pages'<br />
...<br />
grunt.registerTask 'deploy',<br />
'Deploy to Github Pages', [<br />
'dist'<br />
'buildcontrol'<br />
]<br />
</code>
<br />
<br />
Finalmente, en <a href="https://github.com/dalbelap/revealjs-muei-tfm" target="_blank">este enlace</a> se muestra el código y resultado de una presentación creada con RevealJs y Generator-Reveal.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2600995331785333292.post-12770024254154619772014-11-08T21:45:00.004+01:002014-11-09T17:20:07.678+01:00OSHWDem 2014 evento de hardware libre en A CoruñaHoy se ha celebrado en A Coruña la tercera edición de la feria tecnológica <a href="http://oshwdem.org/">OSHWDem</a> organizado por <a href="http://bricolabs.cc/web/">Bricolabs</a> junto con la ayuda de varios <a href="http://oshwdem.org/amigos/">colaboradores</a>.<br />
<br />
Este año el evento se realizó en las instalación del museo del hombre <a href="http://mc2coruna.org/domus/">Domus</a>. Durante el día de ayer los chicos de Bricolabs y de forma totalmente gratuíta se dedicaron a dar una serie <a href="http://oshwdem.org/talleres/">talleres </a>para la Impresión 3D o creación de robots siguelíneas, incluso regalando el material con el que te fabricabas el robot.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://oshwdem.org/wp-content/uploads/2014/09/cabecera_oswhi1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://oshwdem.org/wp-content/uploads/2014/09/cabecera_oswhi1.png" height="100" width="400" /></a></div>
<br />
<br />
Hoy, desde la 10:00 hasta media tarde se organizó este genial evento <i>Maker Movement</i> para promover el hardware libre y la creación de todo tipo de hardware y software como las impresoras 3D o drones.<br />
<br />
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. <br />
<br />
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.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYWLrvGcDjtOSp-A0WUGP1H3uWnmqK6WdHR7T7t5oxeU8QjYFkaSSqPBs6v8sBbLBc0v_YUcjlgpQT-rIhKDTYAHcUE_V5j7fHJZU6AnmBvYR6d0NKuxM__P0ZME2Irl2QwXFX4CeD1AQN/s1600/IMG_20141108_105129.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYWLrvGcDjtOSp-A0WUGP1H3uWnmqK6WdHR7T7t5oxeU8QjYFkaSSqPBs6v8sBbLBc0v_YUcjlgpQT-rIhKDTYAHcUE_V5j7fHJZU6AnmBvYR6d0NKuxM__P0ZME2Irl2QwXFX4CeD1AQN/s1600/IMG_20141108_105129.jpg" height="300" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Wheelie creado por @TCRobotics</td></tr>
</tbody></table>
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 <a href="http://diydrones.com/profiles/blogs/the-open-lidar-project-hack">Open Lidar</a>, un proyecto que aprovecha el componente de la aspiradora inteligente de Neato Robotics.<br />
<br />
Daniel, otro de los organizadores, nos enseñaba algunos de los drones realizados en BricoLabs y otros productos comerciales.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_EfVtIYsrXZYLjWnHd8rD6ulex2P5LnF04bM3msvvJkXNGbqKAt2todsjcOGqx6AbzNoV0-tMyPqytVvTzeTEreSr5AbdtEWFhT1oLCdDCHFoR1WcaP4t1a5IOtwDiTWWzbLqwnPG4iyn/s1600/IMG_20141108_111928.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_EfVtIYsrXZYLjWnHd8rD6ulex2P5LnF04bM3msvvJkXNGbqKAt2todsjcOGqx6AbzNoV0-tMyPqytVvTzeTEreSr5AbdtEWFhT1oLCdDCHFoR1WcaP4t1a5IOtwDiTWWzbLqwnPG4iyn/s1600/IMG_20141108_111928.jpg" height="240" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Quadcóptero con señal GPS</td></tr>
</tbody></table>
Otros de los productos que BricoLabs nos presentaba era una mano mecánica hecha con impresión 3D y sensores atmosféricos con Arduino.<br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCA-tdArqc_qnHn4czk7HC3-Q5monmjV4wg2ubA80oiW0yF4km9Pvo_cUcsoV0PBaZJA4TX1ajUQ2qVtOVJpoy18p-TAric8_uLZ5W9ZIsgn38jg5Dad1g9Dneadc-3VwGpQsZ4tjI84uY/s1600/vlcsnap-2014-11-08-21h40m29s159.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCA-tdArqc_qnHn4czk7HC3-Q5monmjV4wg2ubA80oiW0yF4km9Pvo_cUcsoV0PBaZJA4TX1ajUQ2qVtOVJpoy18p-TAric8_uLZ5W9ZIsgn38jg5Dad1g9Dneadc-3VwGpQsZ4tjI84uY/s1600/vlcsnap-2014-11-08-21h40m29s159.png" height="180" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Mano mecánica con microArduino e impresión 3D.</td></tr>
</tbody></table>
<br />
<br />
Entre otros <i>stands </i>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.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3u05twz93A7sQZMH7pHWnVEGC26lEU7Aax9GL04Xew0MrJ3dqERVjkc2X8b2dvISfosNYJHC1F97YLypI19-qlIB0pwWrzy-QnTbiNFKFYNNYxuAC0rMl2Vutt6RGUQPTFO15DcoRPnu5/s1600/IMG_20141108_104547.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3u05twz93A7sQZMH7pHWnVEGC26lEU7Aax9GL04Xew0MrJ3dqERVjkc2X8b2dvISfosNYJHC1F97YLypI19-qlIB0pwWrzy-QnTbiNFKFYNNYxuAC0rMl2Vutt6RGUQPTFO15DcoRPnu5/s1600/IMG_20141108_104547.jpg" height="240" width="320" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDhQXIRRD7qEDHgE6zdnkCpt66VSDSQcwoXzXfDVeD4awBnEx5vzJv8uV5ukAuCUHmvrWhz-UFtZSvWJLZBO8gqNaCyKZW8zVchytl6s-vj8YD1ZoBgUwNODFk4aMvHsKQ0Kq7UqEHnTWF/s1600/IMG_20141108_132429.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDhQXIRRD7qEDHgE6zdnkCpt66VSDSQcwoXzXfDVeD4awBnEx5vzJv8uV5ukAuCUHmvrWhz-UFtZSvWJLZBO8gqNaCyKZW8zVchytl6s-vj8YD1ZoBgUwNODFk4aMvHsKQ0Kq7UqEHnTWF/s1600/IMG_20141108_132429.jpg" height="240" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlfW2ks-mM4hAFSLIiSfgKHkKuKgTx1Ct_rTkdvUkDcjU5KaeEHJ74VVPxJo4UQM79XgMy4DQyVRAwa3-TKO5baWhn2DJcK0yQK4oaRR-eVYSQUlc2vS-RruXOvmTXRsx0TxeoXHvZt6Ms/s1600/IMG_20141108_132415.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlfW2ks-mM4hAFSLIiSfgKHkKuKgTx1Ct_rTkdvUkDcjU5KaeEHJ74VVPxJo4UQM79XgMy4DQyVRAwa3-TKO5baWhn2DJcK0yQK4oaRR-eVYSQUlc2vS-RruXOvmTXRsx0TxeoXHvZt6Ms/s1600/IMG_20141108_132415.jpg" height="320" width="240" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKinPVcyxZXs0Cx1clT2yOgdFJb_tYWFa9BEFh9ugmAgeVYVnmoXooVzNyE7RAmQZ7PO4ElM7AAsSk1q9r1oPzjkZEILr2g5Gr-i58e5IrihBia7WcE9Fs0or4lYT9G3Z4FXw0m7r95WKX/s1600/IMG_20141108_132511.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKinPVcyxZXs0Cx1clT2yOgdFJb_tYWFa9BEFh9ugmAgeVYVnmoXooVzNyE7RAmQZ7PO4ElM7AAsSk1q9r1oPzjkZEILr2g5Gr-i58e5IrihBia7WcE9Fs0or4lYT9G3Z4FXw0m7r95WKX/s1600/IMG_20141108_132511.jpg" height="240" width="320" /></a></div>
<br />
<br />
@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 "<a href="https://twitter.com/elmadno/status/531118778806181888/photo/1">comed tortugas</a>" 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 <a href="http://www.raspberrypi.org/">RaspberryPi</a>.<br />
<br />
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.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilVZ2N0bYszg8kyqvKMkNY5swGz-dlmlTUx89KNZz13exKYX4CO7vw9m2MPhV0qLHY-_zgMlwPpXxuSKc7YAb93aMxkfjRQVYzp8nobU4V0uQQ0WGbs0low_tdgtprVw7cdMuPEkzuwwdY/s1600/IMG_20141108_111727.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilVZ2N0bYszg8kyqvKMkNY5swGz-dlmlTUx89KNZz13exKYX4CO7vw9m2MPhV0qLHY-_zgMlwPpXxuSKc7YAb93aMxkfjRQVYzp8nobU4V0uQQ0WGbs0low_tdgtprVw7cdMuPEkzuwwdY/s1600/IMG_20141108_111727.jpg" height="300" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Invernadero domótico.</td></tr>
</tbody></table>
@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 <a href="https://github.com/xoan?tab=repositories">Xoan</a>, uno de los chicos de Bricolabs que estuvo en los talleres de impresión 3D.<br />
<br />
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 <a href="http://thehypercubes.com/" target="_blank">thehypercubes.com</a><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfLqQdid5unpcmJtZFenbuT0g2bjxt7HJ07CTLXQc8e0hzrBVY_Q46puSL8Ndkw8c0E9glNvi4Imv2BJIIW8Q-HDmJE3cOWJS-OOtbXkveWja-ryK6EH4j8WbiwFcQJLTX6gUcAvQeFzzl/s1600/IMG_20141108_120014.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfLqQdid5unpcmJtZFenbuT0g2bjxt7HJ07CTLXQc8e0hzrBVY_Q46puSL8Ndkw8c0E9glNvi4Imv2BJIIW8Q-HDmJE3cOWJS-OOtbXkveWja-ryK6EH4j8WbiwFcQJLTX6gUcAvQeFzzl/s1600/IMG_20141108_120014.jpg" height="300" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Make Your Own Music en <a href="http://thehypercubes.com/" target="_blank">thehypercubes.com</a></td></tr>
</tbody></table>
Cada uno de los cubos tiene unos imanes <i>anti-dummies</i> 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.<br />
<br />
<a href="http://enxine.com/">Enxine</a> 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 <a href="https://ninjablocks.com/">Ninjablocks</a> para el Internet de las Cosas o IoT.<br />
<br />
La empresa <a href="https://twitter.com/FlinqIngenieria">Flinq</a> 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 <a href="http://openenergymonitor.org/emon/">OpenEnergyMonitor</a> 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 <a href="https://www.odoo.com/es_ES/">Odoo</a> 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.<br />
<br />
<div dir="ltr">
<a href="http://bricogeek.com/">BricoGeek</a>, 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.</div>
<div dir="ltr">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjC4lPaHSyFuzbUCZGaU76U3bnOQjvty11CZx3qCdaYubxlrXfe5EQZT_K4gdf1NZSrrFozBly8OAOR7eMnbcQ1lWIAnRLy5vIFGhfQ4zL_qTAc626_A9G9l61ySdn1dWIQTEc_K51SBsC8/s1600/IMG_20141108_121549.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjC4lPaHSyFuzbUCZGaU76U3bnOQjvty11CZx3qCdaYubxlrXfe5EQZT_K4gdf1NZSrrFozBly8OAOR7eMnbcQ1lWIAnRLy5vIFGhfQ4zL_qTAc626_A9G9l61ySdn1dWIQTEc_K51SBsC8/s1600/IMG_20141108_121549.jpg" height="300" width="400" /></a></div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
Entre otros de los asistentes estaban la tienda de impresión 3D <a href="http://www.galiprint3d.com/">GaliPrint3D</a>, </div>
<div dir="ltr">
<a href="http://www.codemonsters.es/">Codemonsters </a>para la enseñanza de programación a niños de cualquier edad mediante lenguajes como <a href="http://scratch.mit.edu/">Scratch </a>, <a href="http://duinobox.com.es/" target="_blank">Duinobox</a>, Ecogarden y la creación de biodiesel reciclando aceites a través de filtros de Luigui <span class="st">Pirelli</span>.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtnatoc7XsU5PBWpspqDYyTaxjP0d0j_FL1Gh-91zqF1Tu51HVUYXqjD_k6dfvsboEpZDWxjG3DugV7oHLlh3UyAwIuBAxFYF464zuNuLujwlpFGBy9CH0OCIhP6BF_WOv3d-UJ39kwB5P/s1600/IMG_20141108_133312.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtnatoc7XsU5PBWpspqDYyTaxjP0d0j_FL1Gh-91zqF1Tu51HVUYXqjD_k6dfvsboEpZDWxjG3DugV7oHLlh3UyAwIuBAxFYF464zuNuLujwlpFGBy9CH0OCIhP6BF_WOv3d-UJ39kwB5P/s1600/IMG_20141108_133312.jpg" height="240" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Creación de biodiesel por Luigui Pirelli</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSORfS4CIgaxwgT32EMywpCeodUFJJnJxzA5OV_P7n7Opt4Th9NdL2aMT-ARSXE3hKxpnIfqYzA1jp9b5Wvr6BSrCk4d28t5kwKbHeBbongQFBwqEjSi1Bb5wEBM5kEeFv4HA6sol50oaJ/s1600/IMG_20141108_132405.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSORfS4CIgaxwgT32EMywpCeodUFJJnJxzA5OV_P7n7Opt4Th9NdL2aMT-ARSXE3hKxpnIfqYzA1jp9b5Wvr6BSrCk4d28t5kwKbHeBbongQFBwqEjSi1Bb5wEBM5kEeFv4HA6sol50oaJ/s1600/IMG_20141108_132405.jpg" height="320" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Varios modelos de impresoras 3D</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNO76CYNcg-5Ue3QreZ0N1ZGkaqo6Jl6w3YpcEu6sCwZ2vSoYS3oo9arxuNGMi_go1lLZmQB73PmZ9GNzqQI-y-_-oDiJgrUeZkgmL4SBNeAMJNheO_Ayeec3CaGgpTu9p5o89U2or7HwC/s1600/IMG_20141108_132549.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNO76CYNcg-5Ue3QreZ0N1ZGkaqo6Jl6w3YpcEu6sCwZ2vSoYS3oo9arxuNGMi_go1lLZmQB73PmZ9GNzqQI-y-_-oDiJgrUeZkgmL4SBNeAMJNheO_Ayeec3CaGgpTu9p5o89U2or7HwC/s1600/IMG_20141108_132549.jpg" height="320" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Impresora 3D Dragon</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbIVvdrvC6t-lwoP5stBrX_SG054Uj-_qjJ9BRMf2mHxTniGQmFoySB9cXNOqyRsrFbF-krysR-nOI5omyMFRY3K4KNDvUBmGCxtAv8nlaljIDux-fWbvj4VUAr9OhIx4O-Ch5-3orFBKc/s1600/IMG_20141108_132951.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbIVvdrvC6t-lwoP5stBrX_SG054Uj-_qjJ9BRMf2mHxTniGQmFoySB9cXNOqyRsrFbF-krysR-nOI5omyMFRY3K4KNDvUBmGCxtAv8nlaljIDux-fWbvj4VUAr9OhIx4O-Ch5-3orFBKc/s1600/IMG_20141108_132951.jpg" height="320" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Modelo plegable FoldaRap</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifezO_pNZ36_onj6kdLNdrBUGDRY4ic0rZgPm5RaPc_IxCnOsHavqpzvrdgjBJ1t1c1VARTyDWnoD-VAxVq_yhdTjJ412-LzZFzwNWS-xJoIQRgviTeY8t_eOKXD02hdBbs1KEPHSXOONq/s1600/IMG_20141108_132938.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifezO_pNZ36_onj6kdLNdrBUGDRY4ic0rZgPm5RaPc_IxCnOsHavqpzvrdgjBJ1t1c1VARTyDWnoD-VAxVq_yhdTjJ412-LzZFzwNWS-xJoIQRgviTeY8t_eOKXD02hdBbs1KEPHSXOONq/s1600/IMG_20141108_132938.jpg" height="240" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Varias piezas impresas</td></tr>
</tbody></table>
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ0OusVabWwBU1zH7fSM4eoTBZSnERPXQBdIzuAgD8uF_vmS7pgKHzkT7F0Ax2dgkCBzpdJ9zsd4tQUkmBVR7Nv1zyltU8nvShCUEDfqA57qKBZbThJ1e5Sx1Q3qGLMFT-lxjJzVWZ6O83/s1600/IMG_20141108_133125.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ0OusVabWwBU1zH7fSM4eoTBZSnERPXQBdIzuAgD8uF_vmS7pgKHzkT7F0Ax2dgkCBzpdJ9zsd4tQUkmBVR7Nv1zyltU8nvShCUEDfqA57qKBZbThJ1e5Sx1Q3qGLMFT-lxjJzVWZ6O83/s1600/IMG_20141108_133125.jpg" height="320" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Luchador de Sumo <i>Turrabot </i>creado por el niño ganador del consurso siguelíneas del año anterior</td></tr>
</tbody></table>
</div>
<div dir="ltr">
</div>
<div dir="ltr">
</div>
<div dir="ltr">
Aquí teneis algunos vídeos del evento:<br />
</div>
<center>
<div align="center" dir="ltr">
<iframe allowfullscreen="" frameborder="0" height="344" src="https://www.youtube.com/embed/videoseries?list=PLCZNMqhwXu1vq-2Ozzs1xWRAsxxz98VhP" width="425"></iframe>
</div>
</center>
<div dir="ltr">
<br /></div>
Podeis ver más información y fotografías del evento desde su <a href="https://twitter.com/OSHWDem">twitter oficial</a>.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2600995331785333292.post-61702646685611989762014-08-13T14:26:00.000+02:002016-03-08T18:29:31.050+01:00El protocolo de Bitcoin, mercado, minado y otras criptomonedasEl <a href="https://bitcoin.org/es/">Bitcoin</a> es una moneda virtual descentralizada y un protocolo basado en los principios de la <a href="http://es.wikipedia.org/wiki/Criptograf%C3%ADa_asim%C3%A9trica">criptografía asimétrica</a>. 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 <a href="https://github.com/bitcoin/bitcoin">código fuente</a> disponible para todo el mundo.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://upload.wikimedia.org/wikipedia/commons/6/68/CriptografiaAsimetrica.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://upload.wikimedia.org/wikipedia/commons/6/68/CriptografiaAsimetrica.png" height="95" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Ejemplo de cifrado de mensaje con cifrado asimétrico. Fuente <a href="http://es.wikipedia.org/wiki/Criptograf%C3%ADa_asim%C3%A9trica">Wikipedia</a>.</td></tr>
</tbody></table>
<br />
<br />
Desde la página oficial se puede <a href="https://bitcoin.org/es/como-empezar">obtener información</a> para empezar a usar el Bitcoin y crear un monedero virtual con el que recibir y enviar <s>dinero</s> transacciones.<br />
<br />
El proyecto comenzó en 2008 cuando un usuario bajo el pseudónimo de <a href="http://en.wikipedia.org/wiki/Satoshi_Nakamoto">Satoshi Nakamoto</a> publicó en una <s>revista</s> lista de correo de criptografía de <a href="http://www.metzdowd.com/mailman/listinfo/cryptography">metzdowd.com</a> el <a href="https://bitcoin.org/bitcoin.pdf">paper</a> 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 <a href="http://p2pfoundation.ning.com/forum/topics/bitcoin-open-source">p2pfundation</a>.<br />
<br />
<b>Actualización (15/08/2014)</b>: Desde <a href="http://www.metzdowd.com/pipermail/cryptography/2008-October/014810.html">metzdowd</a> se puede acceder a la primera publicación en 2008 del paper y a la publicación de la primera versión del <a href="http://www.metzdowd.com/pipermail/cryptography/2009-January/014994.html">cliente</a> de Bitcoin en 2009. Fuente: <a href="http://www.coindesk.com/information/who-is-satoshi-nakamoto/">coindesk.com</a><span id="goog_1362517583"></span><a href="https://www.blogger.com/"></a><span id="goog_1362517584"></span>.<br />
<br />
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 <a href="http://blockchain.info/">blockchain.info</a> se pueden consultar todas las transacciones que se están realizando en tiempo real.<br />
<br />
<b>Funcionamiento básico</b> <br />
<br />
Todas las transacción de bitcoins son públicas y se transmiten a través de una red descentralizada <a href="http://en.wikipedia.org/wiki/Peer-to-peer">P2P</a> donde los clientes actúan a la vez de servidores o nodos.<br />
<br />
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.<br />
<br />
En el <a href="https://bitcoin.org/bitcoin.pdf">White Paper</a> oficial se explica el funcionamiento técnico con mayor detalle. <br />
<br />
<b>Generación de bloques</b> <br />
<br />
Un <a href="https://en.bitcoin.it/wiki/Block">bloque</a> se genera cada 10 minutos y tiene una estructura y una cabecera establecidas donde se indica:<br />
<ul>
<li>Magic no: El valor de "número mágico" <i>0xD9B4BEF9</i>, valor <span class="" id="result_box" lang="es"><span class="hps">poco probable</span> de <span class="hps">que se produzca en la tabla ASCII en</span> <span class="hps">los datos normales con el siguiente bloque.</span> </span></li>
<li>Blocksize: Tamaño de bloque.</li>
<li><b>Cabecera de bloque:</b></li>
<ul>
<li><b>Version</b>: versión del bloque</li>
<li><b>hashPrevBlock</b>: El hash del bloque previo (SHA256)</li>
<li><b>hashMerkleRoot</b>: El hash inicial raíz basado en todas las transacciones del bloque, cambia cuando se añade una nueva transacción. </li>
<li><b>Time</b>: timestamp en 4 bytes.</li>
<li><b>Bits</b>: indica la dificultad del bloque</li>
<li><b>Nonce</b>: 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.</li>
</ul>
<li>Contador de transacciones </li>
<li>Lista de las transacciones incluidas en el bloque.</li>
</ul>
<br />
Para generar un bloque se realiza una prueba de trabajo <a href="http://en.wikipedia.org/wiki/Proof-of-work_system">Proof of Work</a> o PoW. Un sistema <span class="" id="result_box" lang="es"><span class="hps">de prueba de</span> <span class="hps">trabajo</span><span class="hps"> PoW</span><span class="atn"> </span>es <span class="hps">una medida</span></span><span class="" id="result_box" lang="es"><span class="hps"> </span><span class="hps">para disuadir</span> <span class="hps">ataques de denegación de</span> <span class="hps">servicio o </span><span class="hps">correo no deseado</span> <span class="hps">en una red</span> que<span class="hps"> requiere</span> <span class="hps">un trabajo</span> <span class="hps">del</span> <span class="hps">solicitante del servicio</span><span class=""> (normalmente </span><span class="hps">tiempo de procesamiento</span> con un <span class="hps">ordenador</span><span class="">).</span></span><br />
<br />
<span class="" id="result_box" lang="es"><span class="">Existen varios algoritmos de PoW. Bitcoin utiliza el algoritmo HashCash, creado por <a href="http://www.cypherspace.org/adam/">Adam Back</a> en 1997. </span></span><br />
<span class="" id="result_box" lang="es"><span class=""> </span></span><span class="" id="result_box" lang="es"><span class=""><br />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.</span></span><br />
<span class="" id="result_box" lang="es"><span class=""><br />Este algoritmo está siendo utilizado por sistemas de seguridad como <a href="http://wiki.apache.org/spamassassin/AvoidingFpsForSenders?action=highlight&value=hashcash">Spamassassin</a> para evitar el envío de correo no deseado en agentes de correo electrónico o MTAs. </span></span><br />
<br />
<span class="" id="result_box" lang="es"><span class="">En el <a href="http://www.hashcash.org/papers/proof-work.pdf">White paper de hashcash</a> se pueden leer con profundidad los detalles técnicos.</span></span><br />
<span class="" id="result_box" lang="es"><span class=""><br /></span></span>
<span class="" id="result_box" lang="es"><span class=""><b>Minería</b></span></span><br />
<br />
El cálculo de la <a href="https://en.bitcoin.it/wiki/Block_chain">cadena de bloques</a> se llama <b>minería</b>.<b> </b>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 <b>21 millones</b> 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.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP7E2uENKfnlZ6hdJ5AU7b-LPjuwqAzEVli7G3VwmaWmdCe0xxN_mYjQDiqL3WIvnSLeHx5bGsisiYbJvyHbElavOzeg2x1TL6DsuAx4GBgxDwWiBrXuM-nx7nQMcIXf16w3qVBvYiaVGC/s1600/red_bitcoin.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="315" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP7E2uENKfnlZ6hdJ5AU7b-LPjuwqAzEVli7G3VwmaWmdCe0xxN_mYjQDiqL3WIvnSLeHx5bGsisiYbJvyHbElavOzeg2x1TL6DsuAx4GBgxDwWiBrXuM-nx7nQMcIXf16w3qVBvYiaVGC/s1600/red_bitcoin.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Esquema protocolo de Bitcoin. Fuente<br />
libro <a href="http://shop.oreilly.com/product/0636920032281.do">Mastering Bitcoin</a> de Andreas M. Antonopoulos, editorial O'Reilly<br />
Atlas.</td></tr>
</tbody></table>
<br />
<br />
En un principio se podía realizar minería con el monedero oficial en lo que se denomina <b>Solo Mining</b>. Pero cuantos más mineros haya y mayor su potencia de minado o hashrate, más aumenta la <b>dificultad</b> para que un minero encuentre un bloque válido. Esta <a href="https://en.bitcoin.it/wiki/Difficulty">dificultad</a> se actualiza cada 2016 bloques (sobre dos semanas).<br />
<br />
A día de hoy la única forma viable de minar bitcoins es en agrupación o <a href="https://en.bitcoin.it/wiki/Mining_Pool">Mining Pool</a> y utilizando <a href="http://en.wikipedia.org/wiki/Application-specific_integrated_circuit">hardware ASIC</a>.<br />
<br />
<span class="" id="result_box" lang="es"><span class=""><b>Actualización (15/08/2014)</b>: En <a href="http://www.coindesk.com/information/how-bitcoin-mining-works/">coindesk</a> se puede leer con mejor detalle como se genera un bloque y como los mineros aseguran la confianza de la cadena de bloques.</span></span> <br />
<br />
<b>Cartera</b> <br />
<br />
Para enviar y recibir bitcoins se utiliza una cartera electrónica de bitcoins. Una cartera tiene dos elementos principales:<br />
<ul>
<li>Clave pública: La dirección del receptor cuyo emisor debe conocer para poder enviarle monedas.</li>
</ul>
<ul>
<li>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.</li>
</ul>
El código fuente de la cartera oficial está disponible en <a href="https://github.com/bitcoin/bitcoin">github</a>. Desde la página oficial <a href="https://bitcoin.org/es/elige-tu-monedero">oficial</a> se pueden descargar varias carteras no oficial, la versión core u oficial se instala en el equipo local y requiere la <s>descarga</s> sincronización de la cadena de bloques.<br />
<br />
Hay otras carteras que no necesitan descargar toda la cadena de bloques e incluso hay carteras para dispositivos móviles como en <a href="https://play.google.com/store/apps/details?id=de.schildbach.wallet">Android</a>.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://bitcoin.org/img/screenshots/bitcoinwalletandroid.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://bitcoin.org/img/screenshots/bitcoinwalletandroid.png" width="228" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Bitcoin Wallet para Android.</td></tr>
</tbody></table>
<br />
En <a href="http://blockchain.info/">Blockchain.info</a> 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 <a href="https://blockchain.info/wallet/android-app">Android</a>. <br />
<br />
<a href="http://coinbase.com/">Coinbase</a> también ofrece un servicio de cartera online.<br />
<br />
Se recomienda siempre <a href="https://bitcoin.org/en/secure-your-wallet"><b>cifrar el monedero</b></a> (la clave privada contenida en un fichero de la cartera) con una contraseña.<br />
<br />
<b>Exchanges</b><br />
<br />
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 <a href="https://www.bitstamp.net/">Bitstamp</a>, en Rusia <a href="https://btc-e.com/">BTC-e,</a> en China existen muchos sitios de intercabmio donde <a href="https://www.okcoin.cn/">Okcoin</a> tiene el mayor volumen
de intercambio de bitcoins del mundo.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhezZXeRgfSLoZbaXC8jilsZvARJlaXZgW39t4UVwUtycFgDHE7a6z9n_JpcXJ4Hd23eIlqEQ5HrPAMz2VSybRqDeaUFIZvopis6BK8xlkbcr_5semMKYaBFmIxjGv0R8dxuUsCik4Rlus6/s1600/exchanges_bitcoin.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhezZXeRgfSLoZbaXC8jilsZvARJlaXZgW39t4UVwUtycFgDHE7a6z9n_JpcXJ4Hd23eIlqEQ5HrPAMz2VSybRqDeaUFIZvopis6BK8xlkbcr_5semMKYaBFmIxjGv0R8dxuUsCik4Rlus6/s1600/exchanges_bitcoin.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Principales Exchanges por volumen de bitcoins. Fuente <a href="http://www.fxcm.com/bitcoin/#bitcoin-story">The Story of Bitcoin</a>.</td></tr>
</tbody></table>
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.<br />
<br />
Estos sitios suelen ofrecen una API a través de un servicio web REST que automatizan los intercambios. En <a href="https://github.com/3lm4dn0/scripts-trading-BTC-LTC">github</a> tenéis disponible un script de ejemplo para realizar el intercambio de Bitcoin por otras monedas virtuales a través de 3 sitios web.<br />
<br />
Otros sitios web como Localbitcoins permite realizar compras o ventas directas a través de intermediarios.<br />
<br />
<b>Cajeros automáticos</b> <br />
<br />
Una alternativa cada vez más presente son los <a href="http://elbitcoin.org/tag/cajero-automatico/">cajeros automáticos de bitcoin</a>. Hay varios modelos y se usan para facilitar los pagos con bitcoins en tiendas cercanas. Su uso es muy sencillo a través de <a href="http://en.wikipedia.org/wiki/QR_code">códigos QR</a> y dispositivos móviles.<br />
<br />
Canadá es el país con más cajeros de Bitcoin en el mundo y <a href="http://www.cryptocoinsnews.com/es/noticias-sobre-bitcoin/llega-el-primer-cajero-automatico-de-bitcoin-espana/2014/02/17">en España</a> ya hay varios cajeros instalados. En <a href="http://www.coindesk.com/bitcoin-atm-map/">coindesk</a> hay una sección para localizar cajeros y fabricantes de ATMs para Bitcoin en un mapa de Google Maps.<br />
<br />
<b>Mercado</b> <br />
<br />
El Bitcoin ofrece muchas posibilidades como forma de pago. Desde que la pizzería <a href="http://www.coindesk.com/bitcoin-pizza-day-celebrating-pizza-bought-10000-btc/">Papa Johns</a> 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.<br />
<br />
Una solución ágil y simple para el comercio electrónico es <a href="https://bitpay.com/">Bitpay</a>, 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 <a href="http://newsbtc.com/2014/05/27/bitpay-processing-one-million-per-day-bitcoin-payments/">millón de dólares al día</a>.<br />
<br />
La plataforma de intercambio o exchange de bitcoins <a href="https://www.coinbase.com/">Coinbase</a> 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 <a href="https://www.humblebundle.com/">Humblebundle</a> pueden ser adquiridos en bitcoins a través de esta plataforma y <a href="http://www.overstock.com/">Overstock</a>, 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.<br />
<br />
<a href="http://www.virgin.com/richard-branson/bitcoins-in-space">Virgin</a> también acepta el pago en esta criptomoneda para sus vuelos espaciales y <a href="http://www.dell.com/learn/us/en/uscorp1/campaigns/bitcoin-marketing">Dell</a> ya acepta bitcoins como forma de pago para la compra de sus productos hardware.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://media.coindesk.com/2014/03/Winklevoss-Virgin-Galactic-300x185.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://media.coindesk.com/2014/03/Winklevoss-Virgin-Galactic-300x185.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Los hermanos Winklevoss adquieren billetes de Virgin con Bitcoins. Fuente <a href="http://www.coindesk.com/winklevoss-twins-buy-virgin-galactic-tickets-bitcoin/">Coindesk</a>.</td></tr>
</tbody></table>
<br />
<b>Otras criptomonedas</b> <br />
<br />
Con el Bitcoin le siguen otros proyectos de monedas virtuales. <a href="https://litecoin.org/">Litecoin</a> fue lanzada en 2011 por <a href="http://blog.coinbase.com/post/56906034176/welcome-charlie-lee-creator-of-litecoin-to-the-team">Charles Lee</a>, ex-empleado de Google y actualmente trabajando en Coinbase. <a href="http://dogecoin.com/">Dogecoin</a> es una moneda basada en el <a href="http://en.wikipedia.org/wiki/Doge_%28meme%29">meme de Doge</a> que empezó a finales de 2013 parodiando al Bitcoin por el aumento de interés mediático tras romper la barrera de los <a href="http://rt.com/news/bitcoin-value-thousand-dollars-392/">1,000$</a>.<br />
<br />
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 <a href="http://www.reddit.com/r/dogecoin/comments/1zhg1l/doge4water_raising_%C3%B040000000_for_clean_water/">doge4water</a> y <a href="http://doge4kids.org/">doge4kids</a> o eventos deportivos como la <a href="http://www.nascar.com/en_us/news-media/articles/2014/5/22/josh-wise-dogecoin-sponsorship-talladega-sprint-fan-vote.html">Nascar</a> (piloto Josh Wise) o el equipo de <a href="http://www.theguardian.com/technology/2014/jan/20/jamaican-bobsled-team-raises-dogecoin-winter-olympics">bobsleigh Jamaicano</a>.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAZ4LXAa2pKOowWbIKAUumeoDJHv7uTT7ViSo7nkWcNRbqDYaGRcBCQ3fa4xHrRFB3cUR8eK10aYkHPLqpiyF5Afnti18d8knXudmR6BTUy7nNSzgmSxudodzRVC9-LzqAU0zka09pN9NC/s1600/1398679697465.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAZ4LXAa2pKOowWbIKAUumeoDJHv7uTT7ViSo7nkWcNRbqDYaGRcBCQ3fa4xHrRFB3cUR8eK10aYkHPLqpiyF5Afnti18d8knXudmR6BTUy7nNSzgmSxudodzRVC9-LzqAU0zka09pN9NC/s1600/1398679697465.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Dogecoin ha financiado múltiples proyectos solidarios y eventos deportivos como la Nascar. Fuente <a href="http://www.reddit.com/r/dogecoin">Reddit</a>.</td></tr>
</tbody></table>
<br />
Existen infinidad de monedas virtuales y cada día surgen nuevas altcoins, cada una con implementaciones diferentes y nuevas ideas como <a href="http://spaincoin.org/en/">SpainCoin</a> 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 <a href="https://vertcoin.org/">Vertcoin</a> (y con posibilidad de envío anónimo) o X11 de <a href="http://www.darkcoin.io/">Darkcoin</a> (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.<br />
<br />
En el foro de bitcointalk se publican cada día nuevas <a href="https://bitcointalk.org/index.php?board=67.0">altcoins</a> y en <a href="http://www.coindesk.com/need-altcoins-can-get/">coindesk</a> se puede leer un artículo interesante comparando las altcoins con los inicios de los ordenadores para casa y los microcomputadores.<br />
<br />
Mientras Dogecoin acaba de anunciar su fork a <a href="http://www.reddit.com/r/dogecoin/comments/2ci90m/dogecoin_to_enable_auxpow_soon_all_infos_inside/">AuxPoW</a> 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.<br />
<br />
<b>Minar Bitcoin o monedas Scrypt</b><br />
<br />
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 <a href="https://bitcoinwisdom.com/bitcoin/difficulty">dificultad para Septiembre</a>,
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. <br />
<br />
Hace poco se publicó en el <a href="http://www.thecoinsman.com/2014/08/bitcoin/inside-chinese-bitcoin-mine/">blog the Thecoinsman</a>
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 <a href="http://bitell.sinaapp.com/t/2117">KnCMiner</a> tiene su propio centro de datos profesional.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://newsbtc.com/wp-content/uploads/2014/04/KNCMINER-DC-001.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://newsbtc.com/wp-content/uploads/2014/04/KNCMINER-DC-001.jpg" height="213" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Centro de datos de minado de KnCMiner. Fuente foro <a href="https://bitcointalk.org/index.php?topic=735577.msg8310251#msg8310251">bitcointalk</a>.</td></tr>
</tbody></table>
<br />
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.<br />
<br />
En <a href="http://www.rigwarz.com/#scrypt">rigwarz</a> hay una lista de mineros y sus fabricantes tanto para SHA-256 (bitcoin) como Scrypt. <br />
<br />
En <a href="https://bitcoinwisdom.com/bitcoin/calculator">BitcoinWisdom</a> 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.<br />
<br />
<b>Minar monedas alternativas</b><br />
<br />
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.<br />
<br />
Si eres algo mañoso puedes montarte tu propio rig con varias gráficas para minar altcoins. Aunque la entrada es algo antigua, en <a href="http://www.cryptobadger.com/build-your-own-litecoin-mining-rig/">CryptoBadger</a> hay un buen tutorial de como montar y configurar un rig minero.<br />
<br />
Algo no muy complicado y muy recomendable es hacer <a href="http://www.cryptobadger.com/2013/10/undervolting-in-linux-via-modified-bios/">undervolt</a> en las tarjetas gráficas para reducir el consumo eléctrico (en Windows se puede hacer con los drivers).<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ1kWggbcvwn2Ii4zsCaHGCyIEwURb0yEz77aaOrUA9bEJ_VfwMIFC05_SxDwrCXigjruHyqmXFqB__bkck2jFou94re1ViQxwbCVikCYDuisARip0s3JoanxIMhC5bhrN-UHdfd_QZmrP/s1600/rig.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ1kWggbcvwn2Ii4zsCaHGCyIEwURb0yEz77aaOrUA9bEJ_VfwMIFC05_SxDwrCXigjruHyqmXFqB__bkck2jFou94re1ViQxwbCVikCYDuisARip0s3JoanxIMhC5bhrN-UHdfd_QZmrP/s1600/rig.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Rig con 3 gráficas ATI 7950 y fuente de 850w.</td></tr>
</tbody></table>
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 <a href="http://pcgal.net/">pcgal</a> 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.<br />
<br />
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.<br />
<br />
<b>Software minero</b> <br />
<br />
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.<br />
<br />
Para las tarjetas gráficas ATI están todas las versiones basadas en el Cgminer de Con Kolivas como <a href="https://github.com/sgminer-dev/sgminer">Sgminer</a> (Scrypt), <a href="https://github.com/Bufius/vertminer-gpu">Vertminer</a> (Scrypt-N), Sph-sgminer y todas las mejoras de optimización para diferentes algoritmos como el <a href="https://github.com/djm34/sph-sgminer_x11mod">Sph-Sgminer_x11mod</a> (X11, X13, Nist5 entre otros).<br />
<br />
Para tarjetas gráficas Nvidia están disponibles CudaMiner y <a href="https://github.com/cbuchner1/ccminer">ccMiner</a>.<br />
<br />
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.<br />
<br />
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.<br />
<br />
El usuario Bee adaptó el original BAMT (versión basada en Debian x86) creando <a href="https://litecointalk.org/index.php?topic=2924.0">Litecoin BAMT</a>. 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.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv0aivDOn7V7hKk1O_y71XreKh3mVCV4lmjx3aiXY3vOXGHlz79mJ0fEkn1y_rTngfG5Wwd_u2u4V9J7AJLCJLlJGiLklLsAnuDf_uh_2DRkZdBiv7hFakPLZK-PewswZRXXhK-sjBzVME/s1600/bamt.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv0aivDOn7V7hKk1O_y71XreKh3mVCV4lmjx3aiXY3vOXGHlz79mJ0fEkn1y_rTngfG5Wwd_u2u4V9J7AJLCJLlJGiLklLsAnuDf_uh_2DRkZdBiv7hFakPLZK-PewswZRXXhK-sjBzVME/s1600/bamt.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Panel de monitorización de Bamt 1.6, minando x11 con 3 gráficas.</td></tr>
</tbody></table>
<br />
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 <a href="http://www.getpimp.org/">PiMP</a>. Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-2600995331785333292.post-11443245559201857172014-07-24T21:44:00.001+02:002014-07-24T21:55:57.461+02:00 Realidad Virtual de cartón con tu smartphone (Parte II)<br />
Hace unas semanas publiqué la entrada <a href="http://seguridadydesarrolloeinnovacion.blogspot.com.es/2014/07/realidad-virtual-de-carton-con-tu.html">Realidad Virtual de cartón con tu smartphone</a> sobre el <a href="http://g.co/cardboard">Google Cardboard</a>, 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.<br />
<br />
Tan pronto como fue publicado algunas empresas empezaron a fabricar y vender kits con todos los componentes necesarios. <a href="http://www.dodocase.com/products/google-cardboard-vr-goggle-toolkit">Dodocase</a> fue la primera en anunciar un kit y actualmente está disponible para envíos a España en unas 4 o 6 semanas.<br />
<br />
El pasado fin de semana compré un kit disponible en <a href="http://www.amazon.es/CARDBOARD%C2%AE-Cardboard-Complete-Kit-Google-Specification/dp/B00LM2SPZC/">Amazon</a>
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.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMIQA7p77X2yLKfJJap_0N-Auvxr54KEM-PfsNefOnbxmhVLRRc9jWvcx8dCer-HZ9KOxC9B1UGOSh6AcrLksM1KqC1dNQE1A-7LEzRlHyA8Vy94w56aBjcy416NHQj51K-6edtWRDwLEh/s1600/cardboard_desmontada.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMIQA7p77X2yLKfJJap_0N-Auvxr54KEM-PfsNefOnbxmhVLRRc9jWvcx8dCer-HZ9KOxC9B1UGOSh6AcrLksM1KqC1dNQE1A-7LEzRlHyA8Vy94w56aBjcy416NHQj51K-6edtWRDwLEh/s1600/cardboard_desmontada.jpg" height="240" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Kit Cardboard Google sin NFC.</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPOQrU1jbwMkud2C0ib_FULBbVvcHufd3nNsn6I8TYen_qXSgFdKJqy81EmdGMz9gVSmzCaM2bJq1UyVZZwi2d0seERmTiqY1tU_X43FyUnNy9SKjWq7z4s22yUq-hniknHHVBn4HMlMr-/s1600/cardboard_montada.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPOQrU1jbwMkud2C0ib_FULBbVvcHufd3nNsn6I8TYen_qXSgFdKJqy81EmdGMz9gVSmzCaM2bJq1UyVZZwi2d0seERmTiqY1tU_X43FyUnNy9SKjWq7z4s22yUq-hniknHHVBn4HMlMr-/s1600/cardboard_montada.jpg" height="240" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">El montaje del Kit es muy sencillo.</td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
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.<br />
<br />
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.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-u1-PNATp8GE5iMYbjpo-ieSurYXeb0mhtDYK1dGWMNiYBRpykFduKu5C35kjVD1MwJsBuFVSxCWTegansTucGge0V722K7tYGcCy7ydLWxus18QxDS4AC3PBBCt1wH56XCI2bJhS3upf/s1600/menu.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-u1-PNATp8GE5iMYbjpo-ieSurYXeb0mhtDYK1dGWMNiYBRpykFduKu5C35kjVD1MwJsBuFVSxCWTegansTucGge0V722K7tYGcCy7ydLWxus18QxDS4AC3PBBCt1wH56XCI2bJhS3upf/s1600/menu.png" height="192" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Menú de la demo Cardboard.</td></tr>
</tbody></table>
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.<br />
<br />
El mejor resultado de sensación en 3D que he visto ha sido con la demo de Windy Day, un corto animado de <a href="http://googlespotlightstories.com/"><span class="st">Spotlight Stories</span></a>.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj07wChWu_ew3MmlDGl1cDFQPgm5IwfZ4WqUkrtok_3ItqVhPMAzw5NPrzr7VuChloe1ds_dErFF6qfsvNUpiPjjsblCBa7UMObbS55CJ1r2Ia_bmvejbu10RRPTQdjs2S7puVBA7VPZfx_/s1600/windy_day.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj07wChWu_ew3MmlDGl1cDFQPgm5IwfZ4WqUkrtok_3ItqVhPMAzw5NPrzr7VuChloe1ds_dErFF6qfsvNUpiPjjsblCBa7UMObbS55CJ1r2Ia_bmvejbu10RRPTQdjs2S7puVBA7VPZfx_/s1600/windy_day.png" height="192" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Windy Day de Spotlight Stories.</td></tr>
</tbody></table>
<br />
<br />
En Google Earth podemos viajar través del globo terráqueo dando la sensación de volar sobre montañas o rascacielos. <br />
<br />
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 <a href="https://support.google.com/nexus/answer/2839084">Photo Sphere</a>.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL3mT7F0kK993vkyfrTiDs-xf7EPXo77jsxcbWFCxxTtPWl72tezP0Tk_FZjrp5SdRrXRtBjA7flS7RKOXJHsaUdqYAjMncsVslnfFYkNSRyM6QYuf89jfK2BB1kmunPRjW4WNk5xy9VMF/s1600/photosphere.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL3mT7F0kK993vkyfrTiDs-xf7EPXo77jsxcbWFCxxTtPWl72tezP0Tk_FZjrp5SdRrXRtBjA7flS7RKOXJHsaUdqYAjMncsVslnfFYkNSRyM6QYuf89jfK2BB1kmunPRjW4WNk5xy9VMF/s1600/photosphere.png" height="192" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Foto de la Torre de Hércules con la cámara Photo Sphere de Nexus.</td></tr>
</tbody></table>
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.<br />
<br />
<b>Chrome Experiments</b><br />
<br />
Desde el navegador de Chrome instalado en el dispositivo móvil se puede acceder a <a href="http://vr.chromeexperiments.com/">Chrome Experiments</a>, 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.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgESJJmrqSNMGytFGuARDqScuC8dS8DAwlpxHvUwWp7P0Ai7sTPJemNgv_J1ZM10bLS7fZcXjx1hor9mrtmD1EEB4o9esN7VoGyaCI4M69yw9oT2qBeNJDO2WpQ3BI-qSzi4fad5qIV2ALJ/s1600/chrome_extensions.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgESJJmrqSNMGytFGuARDqScuC8dS8DAwlpxHvUwWp7P0Ai7sTPJemNgv_J1ZM10bLS7fZcXjx1hor9mrtmD1EEB4o9esN7VoGyaCI4M69yw9oT2qBeNJDO2WpQ3BI-qSzi4fad5qIV2ALJ/s1600/chrome_extensions.png" height="320" width="192" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Acceso a la url de chrome extensions desde el navegador del dispositivo.</td></tr>
</tbody></table>
Una vez habilitado aparece un menú con varias opciones que se escogen pulsando con el imán.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiUxU3Sv8Tp8Gb6ybPq-_AV1jgRQNQ5iecO05CCFhkGlHp9slQBXbZr27J1aikDAGcM_pgqNnDY258ZG4WNU23J0AL4WPuZl1VGHgNdRpsIlvTBDJWN4Q-zg0oUR5xCcKhnpcY49YQltgQ/s1600/chrome_menu.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiUxU3Sv8Tp8Gb6ybPq-_AV1jgRQNQ5iecO05CCFhkGlHp9slQBXbZr27J1aikDAGcM_pgqNnDY258ZG4WNU23J0AL4WPuZl1VGHgNdRpsIlvTBDJWN4Q-zg0oUR5xCcKhnpcY49YQltgQ/s1600/chrome_menu.png" height="192" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Menú de Chrome Experimentes.</td></tr>
</tbody></table>
Una de las opciones es la demo realizada con <a href="http://threejs.org/">Tree.js</a> 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.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZEK3hOg6cxZLcOWeu8VKyUVptCQBTfI4x4Jg9Pe5VGe1iKSgmkPtnxh2cGU3ARgVDV0KM0PqYjavYwdoe0B7dwkBuAx_nHE85nRCh166s5g-ZFvfY5cTnaTpqdwYIMruBy5C2F8ZUzpFw/s1600/montanarusa.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZEK3hOg6cxZLcOWeu8VKyUVptCQBTfI4x4Jg9Pe5VGe1iKSgmkPtnxh2cGU3ARgVDV0KM0PqYjavYwdoe0B7dwkBuAx_nHE85nRCh166s5g-ZFvfY5cTnaTpqdwYIMruBy5C2F8ZUzpFw/s1600/montanarusa.png" height="192" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Demo de montaña rusa.</td></tr>
</tbody></table>
Otras de las opciones del menú son vídeos en 360 grados por <a href="http://airpano.com/">Airpano</a>. Se puede ver cualquier parte del vídeo girando la cabeza.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifOFQGIwK_MoY7AKMzTY5Gd12kxEG4cHE6-rTy-JwmCdU7iXK3GKsjxN1i5xmKyIiaCaWPq-cSPDg3zz55bco-fZwmXqAzYVOLLNMKvrKYPnb8KYBzlM2bdrGHkjTAUDKRhkuawwENAFVW/s1600/video_beard_kamchakta.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifOFQGIwK_MoY7AKMzTY5Gd12kxEG4cHE6-rTy-JwmCdU7iXK3GKsjxN1i5xmKyIiaCaWPq-cSPDg3zz55bco-fZwmXqAzYVOLLNMKvrKYPnb8KYBzlM2bdrGHkjTAUDKRhkuawwENAFVW/s1600/video_beard_kamchakta.png" height="192" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Vídeo de osos en Kamchatka de <a href="http://www.airpano.com/360Degree-VirtualTour.php?3D=Kamchatka-Bears-Kurilskoe-Lake">Airpano</a>.</td></tr>
</tbody></table>
<br />
<br />
<b>Demo Treasure Hunt</b> <br />
<br />
Para probar la demo de <a href="https://github.com/googlesamples/cardboard/">Treasure Hunt</a> con la nueva versión SDK para Android que ya incluye la API Level 20, es necesario cambiar la configuración de Gradle, en <i>CardboardSample/build.gradle</i>, para que no dé un error de compilación <br />
<ul>
<li>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:<br />
<code>
buildToolsVersion '19.1.0'<br />
</code><br />
</li>
<li>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:<br />
<code>
compile 'com.android.support:support-v4:19.1.0'</code></li>
</ul>
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.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiydLoi3yrBxHw2DW9N7z1DSgJGExLnEarmWMRbK6glrJwu0CivRiBjS2cpDb5GTlCkuG_28w9sRoCN7dwvYqjjeZpxFyKDDQFVPpkYlX9IvWqjdd953UEIqcz-LAv4TN-IICNr1lMhxgTw/s1600/treasure_hunt.png" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiydLoi3yrBxHw2DW9N7z1DSgJGExLnEarmWMRbK6glrJwu0CivRiBjS2cpDb5GTlCkuG_28w9sRoCN7dwvYqjjeZpxFyKDDQFVPpkYlX9IvWqjdd953UEIqcz-LAv4TN-IICNr1lMhxgTw/s1600/treasure_hunt.png" height="192" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Captura de Treasure Hunt.</td></tr>
</tbody></table>
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2600995331785333292.post-28696165861476585412014-07-08T02:50:00.001+02:002014-07-19T16:26:13.711+02:00Realidad Virtual de cartón con tu smartphoneMientras se espera la llegada del headset de realidad virtual <a href="http://es.wikipedia.org/wiki/Oculus_Rift" target="_blank">Oculus Rift</a> en 2015, Google presentó a finales de Junio el <a href="http://g.co/cardboard" target="_blank">Cardboard</a>, una prueba de concepto de realidad virtual para smartphones Android hechas con cartón.<br />
<br />
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.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlCSeAotueq21qKixrw3R7qiZ05VJ-Q31u2ItoJB08LhRuSAD6bZNBtfJjzaK96jJY1g5l7Trk3c-RIkGsr1OQ7OQdKU4ALG8Ruk3Ssw0kHWekjz8ejzfATGgfqinds6Me1BI2kcn7VLcR/s1600/cardboard_collage.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlCSeAotueq21qKixrw3R7qiZ05VJ-Q31u2ItoJB08LhRuSAD6bZNBtfJjzaK96jJY1g5l7Trk3c-RIkGsr1OQ7OQdKU4ALG8Ruk3Ssw0kHWekjz8ejzfATGgfqinds6Me1BI2kcn7VLcR/s1600/cardboard_collage.png" height="240" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Cardboad de Google</td></tr>
</tbody></table>
<br />
<br />
Además, está disponible para Android una demo con aplicaciones diferentes para usar con el Cardboard como ver las fotografías realizadas en <a href="https://www.google.com/maps/views/view/103107454823296844157/gphoto/6012156708182653474" target="_blank">photo sphere</a>, ver los canales de youtube, realizar la visita a un museo o ver las calles con street channel en formato estereoscópico.<br />
<br />
<b>Funcionamiento</b><br />
<br />
Cardboard utiliza 3 componentes: Un par de lentes ópticas biconvexas, dos imanes y una etiqueta <a href="http://en.wikipedia.org/wiki/Near_field_communication">NFC</a>, esta última opcional.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1jHiZ6Ths-AfOmQRGGx8IZfe3P30S2V_t-N3_rm6C7pWYPOl7e7WMU9fCF8e3Emex143UUv0tWJEIraQjq9LnSjptYU7DYqf172rcg-LhMgGLHkae6KDqQ1k-uGvbA_ha9k25exVI1hBB/s1600/lens.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1jHiZ6Ths-AfOmQRGGx8IZfe3P30S2V_t-N3_rm6C7pWYPOl7e7WMU9fCF8e3Emex143UUv0tWJEIraQjq9LnSjptYU7DYqf172rcg-LhMgGLHkae6KDqQ1k-uGvbA_ha9k25exVI1hBB/s1600/lens.png" height="145" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Efecto de la las lentes en el Cardboard. Fuente <a href="https://www.youtube.com/watch?v=DFog2gMnm44">Google I/O 2014 - Cardboard: VR for Android</a></td></tr>
</tbody></table>
<br />
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
La etiqueta de NFC, con la url <i>cardboard://v.1.0.0, </i>sirve para que cuando se coloque el smartphone cerca, en el Cardboard, le indique a la aplicaciones que se muestren en modo de RV.<i><br /></i><br />
<br />
Finalmente, el smartphone facilita el hardware y los sensores como el acelerómetro y el giroscopio.<br />
<br />
<b>Montaje</b><br />
<br />
Para crear el Cardboard se puede imprimir el pdf de la <a href="https://gweb-cardboard.appspot.com/downloads/cardboard_design_v1.0.zip">plantilla</a>. 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.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP2_8Z8uOJcxakIaCHI9yAqUot8zEd4PFiujN3ke-Q0i1zZioS092miQdIk-JqNZO_HNXhxvuE-DxVbsixWNS_FmQSQHHe1XEo3dkIAr2ovgpmY2Epod4_quHcVFJ99uVVwz85o8DEwNrP/s1600/IMG_20140707_230625-resize.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP2_8Z8uOJcxakIaCHI9yAqUot8zEd4PFiujN3ke-Q0i1zZioS092miQdIk-JqNZO_HNXhxvuE-DxVbsixWNS_FmQSQHHe1XEo3dkIAr2ovgpmY2Epod4_quHcVFJ99uVVwz85o8DEwNrP/s1600/IMG_20140707_230625-resize.jpg" height="240" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Plantilla de Cardboard recortada.</td></tr>
</tbody></table>
<br />
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.<br />
<br />
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.<br />
<br />
El cartón debe ser fino para que resulte cómodo de recortar.<br />
<br />
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.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzfVrfGcrn8ahuim8yJV6i6M0dQkTeHSgOO1pEpcPphzzC3Qtg1KNMbZlgMGUnqCWr6eFnE9PohQgi_zKZLlp_2n4KTbsUO7T-PxcShUic_fgP4nAe8nP6eSZ03yBSAxvF0gYukuGeUfB7/s1600/IMG_20140707_234541-resize.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzfVrfGcrn8ahuim8yJV6i6M0dQkTeHSgOO1pEpcPphzzC3Qtg1KNMbZlgMGUnqCWr6eFnE9PohQgi_zKZLlp_2n4KTbsUO7T-PxcShUic_fgP4nAe8nP6eSZ03yBSAxvF0gYukuGeUfB7/s1600/IMG_20140707_234541-resize.jpg" height="240" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Cardboard hecho a partir de la plantilla en pdf con una caja de zapatos.</td></tr>
</tbody></table>
<br />
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.<br />
<br />
Con un acabado más profesional, hecho con una cortadora láser, en <a href="http://www.dodocase.com/products/google-cardboard-vr-goggle-toolkit">Dodocase</a> se puede obtener el kit completo por unos 25$, ó 20$ sin etiqueta NFC, disponible para envíos a España.<br />
<br />
<b>Desarrollo </b><br />
<br />
En el vídeo de la conferencia de <a href="https://www.youtube.com/watch?v=DFog2gMnm44" target="_blank">Google I/O 2014 - Cardboard: VR for Android</a> 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 <a href="http://threejs.org/">Three.js</a>.<br />
<br />
En la página de desarrollo de google hay un <a href="https://developers.google.com/cardboard/get-started">tutorial</a> de desarrollo para la Cardboard con la demostración del juego <a href="https://github.com/googlesamples/cardboard/"><i>Treasure Hunt</i></a> disponible en GitHub.<br />
<br />
<b>Durovis Dive</b><br />
<br />
En mayo de 2013 Stefan Welker presentó la <a href="http://www.durovis.com/opendive-howto.html">Durovis OpenDive</a>, 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.<br />
<br />
Actualmente se puede adquirir una versión comercial, el headset de RV <a href="https://www.durovis.com/dive.html">Durovis Dive</a> por unos<b> 60€ </b>en la página oficial de la compañía. También tiene disponible un <a href="https://www.durovis.com/sdk.html" target="_blank">plugin</a> para <a href="http://unity3d.com/">Unity3D</a> 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 <a href="https://www.durovis.com/getstarted.html">lista de juegos</a> con soporte para el headset de RV y la sala de juegos <a href="https://play.google.com/store/apps/details?id=com.divegames.launcher">Dive Launcher</a> para Android.<br />
<br />
<b>Actualización (19/07/2014)</b>: El proyecto de ejemplo para el cardboard, Treasure Hunter, es un proyecto de <a href="http://www.gradle.org/">Gradle</a>. Para compilarlo se puede utilizar <a href="http://developer.android.com/sdk/installing/studio.html">Android Studio</a>, <a href="http://stackoverflow.com/questions/18328730/how-to-create-a-release-signed-apk-file-using-gradle">adaptando</a> el proyecto a Eclipse con el <a href="http://estiloasertivo.blogspot.com.es/2013/03/tutorial-howto-install-and-configure.html">plugin Grandle IDE</a>.<br />
<br />
Desde un terminal se puede compilar ejecutando desde el directorio del proyecto Cardboard el script <i>./gradlew</i>.<br />
<br />
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 <i>sdk/extras/android/</i><i>m2repository</i>. <br />
<br />
Con ./grandlew se compila el proyecto.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRK9XUN4vgZlF5OCB-IWa3qzrXI5-Fjp9UJHiEGo66yR0jy3ClwAGNEvcsDnQoERehcNlVXfCQ5nuzx6cx6ix4iRIqa3YrYVBuV3yQlOml17RubrCanZlzwvcaFFBihZ65aSqkayO-HmY2/s1600/gradle_build.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRK9XUN4vgZlF5OCB-IWa3qzrXI5-Fjp9UJHiEGo66yR0jy3ClwAGNEvcsDnQoERehcNlVXfCQ5nuzx6cx6ix4iRIqa3YrYVBuV3yQlOml17RubrCanZlzwvcaFFBihZ65aSqkayO-HmY2/s1600/gradle_build.png" height="121" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Ejecutando ./grandlew desde una terminal GNU/Linux.</td></tr>
</tbody></table>
El proyecto está configurado para compilar en la versión SDK Android 19.0.3. Será necesarios instalarlo desde el Android SDK Manager en <i>sdk/tools/android</i>. En la sección de paquetes seleccionar e instalar <i>Android SDK Build-tools 19.0.3</i>.<br />
<br />
Para indicar que utiliza support-v4 19, editar el fichero de configuración de Gradle <i>CardboardSample/build.gradle</i> y cambiar la línea de dependencias <i>compile</i> <i>'com.android.support:support-v4:+'</i> por <i>compile 'com.android.support:support-v4:19.0.1'</i>.<br />
<br />
Con<i> ./gradlew assembleRelease</i> se empaqueta el apk.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW8nwQDERA7mLucZ2KOru_rwG8m_BaToNDerk8l5jooO4zVyX4xH0Ufx9oQOeQjBSrQFXiaJu7OCafztbzjTsrZIh3svZtQxKWxzt5fap2-F5tjbjKx7ObQspxH9vegJxgvBMR-3X188Ij/s1600/gradle_assemble.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW8nwQDERA7mLucZ2KOru_rwG8m_BaToNDerk8l5jooO4zVyX4xH0Ufx9oQOeQjBSrQFXiaJu7OCafztbzjTsrZIh3svZtQxKWxzt5fap2-F5tjbjKx7ObQspxH9vegJxgvBMR-3X188Ij/s1600/gradle_assemble.png" height="290" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Compilando con <i>./gradlew assembleRelease </i>desde terminal de GNU/Linux.</td></tr>
</tbody></table>
El apk se encuentra en la ruta<i> cardboar/CardboardSample/build/apk/CardboardSample-release-unsigned.apk</i>.<br />
<br />
En el blog de <a href="http://alincode.wordpress.com/2014/06/30/explorations-with-cardboard-and-android-studio/">Alexander Lin</a> hay un tutorial de como integrar el proyecto y ejecutarlo con Android Studio.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2600995331785333292.post-6725741866804278352014-06-27T01:06:00.000+02:002014-06-27T01:10:35.868+02:00Grails "Groovy on Rails" para un desarrollo web fácil en Java<a href="https://grails.org/learn" target="_blank">Grails</a> es un framework para desarrollo fácil de aplicaciones web en Java desarrollado sobre el lenguaje <a href="http://es.wikipedia.org/wiki/Groovy_(lenguaje_de_programaci%C3%B3n)" target="_blank">Groovy</a>. Fue adquirido por Spring en 2008 y es conocido como "<i><b>Groovy on Rails</b></i>" ya que incluye un sistema creación de proyectos con <i>scaffolding</i> o andamiaje siguiendo la idea del framework <a href="http://rubyonrails.org/" target="_blank">Ruby on Rails</a> en el que muchos otros frameworks han seguido su ejemplo como Symfony, Yii, CakePHP o Code Igniter.<br />
<br />
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 <a href="http://es.wikipedia.org/wiki/Plain_Old_Java_Object" target="_blank">POJO</a> 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.<br />
<br />
<b>Instalación</b><br />
<br />
Para la <a href="http://grails.org/doc/latest/guide/gettingStarted.html#requirements" target="_blank">instalación</a> es necesario descargar Grails y crear las variables de entorno de <i>JAVA_HOME</i>, <i>GRAILS_HOME</i> y añadirlas a la variable <i>PATH</i>. También es posible realizar la instalación de forma automática con herramientas como <a href="http://gvmtool.net/" target="_blank">Gvmtool</a>.<br />
<br />
Incluir la variable de entorno<i> JAVA_HOME</i>.<br />
<br />
<code>~$ export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64<br />
~$ export PATH="$PATH:$JAVA_HOME/bin"</code><br />
No olvidar añadir en el .bashrc del usuario las dos líneas para que quede persistente.<br />
<br />
Descargar y descomprimir la última versión de Grails.<br />
<br />
<code>~$ wget http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/grails-2.4.2.zip<br />
~$ unzip grails-2.4.2.zip </code><br />
Incluir la variable de entorno <i>GRAILS_HOME</i> con la ruta completa a la ubicación de Grails.<br />
<br />
<code>~$ export GRAILS_HOME=/home/<i>user</i>/grails-2.4.2<br />
~$ export PATH="$PATH:$GRAILS_HOME/bin" </code>
<br />
Comprobar que Grails funciona en línea de comandos<br />
<br />
<code> ~$ grails -version </code><br />
<br />
<b>Creación de un proyecto</b><br />
<br />
<code>~$ grails create-app MyFirstProject </code>
<br />
Acceder al shell de Grails del proyecto creado<br />
<br />
<code>~$ cd MyFirstProject<br />
~$ grails
grails> help </code><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTEI5Q5EltVAD5Zo-BEDBrB2rw5DQF28TSQTF25kDAR-8MuJ8-XKxlgyelnnFFJw1ldRDvTehwbDbuokKAXLuKRZkprbY9b7zR0j7XUMstG9L0W4GmM-S3ZpC8aBMLyUktZgGgbLKo5xyD/s1600/grails.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTEI5Q5EltVAD5Zo-BEDBrB2rw5DQF28TSQTF25kDAR-8MuJ8-XKxlgyelnnFFJw1ldRDvTehwbDbuokKAXLuKRZkprbY9b7zR0j7XUMstG9L0W4GmM-S3ZpC8aBMLyUktZgGgbLKo5xyD/s1600/grails.png" height="72" width="400" /></a></div>
<br />
El shell de Grails incluye funcionalidades de tabulación para autocompletado.<br />
<br />
<b>Crear un ejemplo de hola mundo</b><br />
<br />
Desde el proyecto se puede acceder a los datos del mismo y crear los elementos MVC fácilmente con el script de Grails.<br />
<br />
<code>grails> create-controller hello </code><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRmeDhHAaH2cSiNUD4sSIfqDw1b0LDqdjGORQsAqEXCiJCHkzVhT-88bScSgyaNbf49sHErcy0WDgQ0wCoxTKBJSAajLLLCZoRpCgUYgdTYnJB_oy0S_VBn0vgxiYXvBc8vLvYaAfS3qYp/s1600/grails-create-controller.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRmeDhHAaH2cSiNUD4sSIfqDw1b0LDqdjGORQsAqEXCiJCHkzVhT-88bScSgyaNbf49sHErcy0WDgQ0wCoxTKBJSAajLLLCZoRpCgUYgdTYnJB_oy0S_VBn0vgxiYXvBc8vLvYaAfS3qYp/s1600/grails-create-controller.png" height="92" width="400" /></a></div>
<br />
Esto creará el fichero <i>grails-app/controllers/myfirstproject/HelloController.groovy</i><br />
<br />
<b>Ejecutar la aplicación</b><br />
<br />
Para ejecutar la aplicación el comando <i>run-app</i> lanza por defecto la aplicación en el puerto <b>8080</b>.<br />
<br />
<code>grails> run-app </code><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOF64QAKyadWCdGMgcKZgwQ2mhSOOqXezohyFQiGDVNPjKG5j-xMICXWbV24bsE4j4Tw_BiMyAYX_xJgazdpMwP7Y84QSiQIOW6j5a6gDHRAJHppzKfrMjgy6t9L7Q-CsUw24RECxDG9c_/s1600/grails-run-app.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOF64QAKyadWCdGMgcKZgwQ2mhSOOqXezohyFQiGDVNPjKG5j-xMICXWbV24bsE4j4Tw_BiMyAYX_xJgazdpMwP7Y84QSiQIOW6j5a6gDHRAJHppzKfrMjgy6t9L7Q-CsUw24RECxDG9c_/s1600/grails-run-app.png" height="57" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVbhgDASJanTDJGrmz_rsU6l6kaw_xj4J_gI7gWnppwanjqZWDRuaTymov5DINTv2T_PCGePE9rO7XNOrTlkDbIDqhacbcmv5JfnDxfOeXNNLhITSkapn_1j7n9g7w5q67mxts0_KQx0FD/s1600/grails-navigator.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVbhgDASJanTDJGrmz_rsU6l6kaw_xj4J_gI7gWnppwanjqZWDRuaTymov5DINTv2T_PCGePE9rO7XNOrTlkDbIDqhacbcmv5JfnDxfOeXNNLhITSkapn_1j7n9g7w5q67mxts0_KQx0FD/s1600/grails-navigator.png" height="117" width="400" /></a></div>
<br />
Con el parámetro <i>-Dserver.port</i> se puede indicar otro puerto.<br />
<br />
<code>grails> run-app -Dserver.port=9090 </code><br />
<br />
Para parar la aplicación se ejecuta el comando stop-app en el shell de Grails.<br />
<br />
<code>grails> stop-app </code><br />
<br />
<b>Testing</b><br />
<br />
Los comandos que empiezan con<i> create-*</i> en Grails crean automáticamente pruebas unitarias y de integridad en las ubicaciones <i>test/unit</i> y <i>test/integration</i>.<br />
<br />
Para ejecutar las pruebas ejecutar el siguiente comando.<br />
<br />
<code> grails> test-app</code><br />
<br />
<b>Generar una aplicación</b><br />
<br />
Grails permite crear aplicaciones base rápidamente con la característica de scaffolding o andamiaje, generando el controlador y vistas <a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete" target="_blank">CRUD</a> a partir de un esqueleto predefinido.<br />
<br />
Para ello está el comando <i>generate-all</i> generando un controlador y las vistas asociadas.<br />
<br />
Primero es necesario crear una entidad llamada <i>Artifact</i> en Grails.<br />
<br />
<code> grails> create-domain-class user</code><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5hCf3F1dH96JfQ8gSZCZDi_ElyvvEVFzfEUBLq5y2esbRuHQXvJvZnAQ6Ogwar75lUVz1oEnMsqQ6yfZhDP5vRXsvPheiL1SjEjLhydcdig7EUIFDjutvhXF-9jvrpwEEe8pItq2jDuvp/s1600/grails-create-domain.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5hCf3F1dH96JfQ8gSZCZDi_ElyvvEVFzfEUBLq5y2esbRuHQXvJvZnAQ6Ogwar75lUVz1oEnMsqQ6yfZhDP5vRXsvPheiL1SjEjLhydcdig7EUIFDjutvhXF-9jvrpwEEe8pItq2jDuvp/s1600/grails-create-domain.png" height="56" width="400" /></a></div>
<br />
El comando crea automáticamente la clase en <i>grails-app/domain/myfirstproject/User.groovy</i>. Se debe editar para indicar los atributos de la entidad, por ejemplo nombre y fecha de nacimiento.<br />
<br />
<code>
package myfirstproject<br />
<br />
class User {<br /> static constraints = {}<br /> String name<br /> Date birthDate<br />
}<br />
</code>
<br />
<br />
Con el comando <i>generate-all User</i> se crea automáticamente el controlador, las pruebas de unidad y la vista de la entidad User.<br />
<br />
<code>~$ grails generate-all User<br />
| Finished generation for domain class myfirstproject.User </code><br />
<br />
Por último se ejecuta la aplicación con el comando <i>grails run-app</i> desde la línea de comandos.<br />
<br />
<code>
~$ grails run-app </code><br />
<br />
En la url <i>http://localhost:8080/MyFirstProject/user/</i> se accede a la lista de la entidad User con las vistas CRUD, i18n y el estilo por defecto de Grails.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPSARhJdmX5I4nxd99O3TbUs46ChI3jIbv_7wCOoWo8aJK1ArJAUmapO_3TQvKJzo_awBO4rgTYUL33H2NFXUKVT6Xeuzho-96Rrl85Y2K7fEdPdAR3dqD6fC4ZLxiv2RPVqDJUgwW1MN0/s1600/grails-create.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPSARhJdmX5I4nxd99O3TbUs46ChI3jIbv_7wCOoWo8aJK1ArJAUmapO_3TQvKJzo_awBO4rgTYUL33H2NFXUKVT6Xeuzho-96Rrl85Y2K7fEdPdAR3dqD6fC4ZLxiv2RPVqDJUgwW1MN0/s1600/grails-create.png" height="250" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Vista <i>Create</i> de <i>User</i>.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZI5B_ypoX7hv3nex75864p_vyhroEQpnD4amux8vPjCo5WPWfkKai2qLrF5O0ipGSxQhQoQoD78KhTSSzXbDr-DRzk8zpT6KR3FUxZW7vde8p_hAbbyPMdvdvXpWtDk-qWktukRVWhEED/s1600/grails-list.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZI5B_ypoX7hv3nex75864p_vyhroEQpnD4amux8vPjCo5WPWfkKai2qLrF5O0ipGSxQhQoQoD78KhTSSzXbDr-DRzk8zpT6KR3FUxZW7vde8p_hAbbyPMdvdvXpWtDk-qWktukRVWhEED/s1600/grails-list.png" height="250" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Vista listado con el usuario creado.</td></tr>
</tbody></table>
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2600995331785333292.post-63853336864393834992014-06-26T02:15:00.002+02:002018-03-01T10:26:54.600+01:00Reversing sencillo en AndroidRealizar ingeniería inversa en Java es relativamente sencillo. El código fuente se pre-compila en el pseudocódigo <a href="http://en.wikipedia.org/wiki/Java_bytecode">Java Bytecode</a> preparado para ser interpretado por la máquina virtual de Java ó JVM.<br />
<br />
El formato <a href="http://en.wikipedia.org/wiki/APK_%28file_format%29" target="_blank">Apk</a> (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 <i>classes.dex</i>, los recursos en la ubicación <i>res</i>, los recursos compilados en <i>resources.arsc </i>y el fichero<i> AndroidManifest.xml</i>.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBVyki7xhxCTSkGh5melbtKikokcByfwg1wI50QOCVqJ0I0SlPhnRCfNW-tU5mAUryPqtnA0dH0B1-cQZgnb0M7vRn5xMmu8_5h0q5Ge66blPZXmPbprKcZCdvxXzaLfaLqf7BKmbj9udD/s1600/apk.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBVyki7xhxCTSkGh5melbtKikokcByfwg1wI50QOCVqJ0I0SlPhnRCfNW-tU5mAUryPqtnA0dH0B1-cQZgnb0M7vRn5xMmu8_5h0q5Ge66blPZXmPbprKcZCdvxXzaLfaLqf7BKmbj9udD/s1600/apk.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Archivo apk abierto como un compresor zip.</td></tr>
</tbody></table>
<br />
<br />
Los ficheros <i>xml</i> contenidos en el apk se encuentran en formato <a href="http://en.wikipedia.org/wiki/Binary_XML" target="_blank">XML binario</a> y por lo tanto no serán legibles si se abren directamente. Por otra parte, el fichero <i>classes.dex</i> es el código compilado en formato <a href="http://en.wikipedia.org/wiki/Dalvik_%28software%29" target="_blank">Dex</a> (Dalvik EXecutable) e interpretado por la máquina virtual Dalvik en Android.<br />
<br />
Existen múltiples herramientas para realizar ingeniería inversa de los fichero .dex y hacer legibles los xml.<br />
<br />
<a href="http://code.google.com/p/xml-apk-parser/" target="_blank">XML-Apk-parser</a> es un parser escrito en Java que permite convertir los XML binarios a XML en formato texto.<br />
<br />
<a href="https://github.com/iBotPeaches/Apktool/releases" target="_blank">android-apktool</a> 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 <a href="http://code.google.com/p/smali/" target="_blank">smali</a>.<br />
<br />
Para decodificar el contenido apk solo es necesario ejecutar desde un terminal la siguiente línea:<br />
<br />
<code>~$: java -jar apktool.jar decode file.apk path_destination</code><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlujKpcy_KWSAeMkIOZtKIo-is4IqVbMvopHcoqqVb9Rx346OCrVw0UxzdvLFMfh4KVwSLsGewvWj9aO5kYlK2akVNERLVOIbjPJxog8yEpMkEiNVCWijtViYWbhVnWHGZgrNIO3lB1IqZ/s1600/apktool.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlujKpcy_KWSAeMkIOZtKIo-is4IqVbMvopHcoqqVb9Rx346OCrVw0UxzdvLFMfh4KVwSLsGewvWj9aO5kYlK2akVNERLVOIbjPJxog8yEpMkEiNVCWijtViYWbhVnWHGZgrNIO3lB1IqZ/s1600/apktool.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Ejemplo decodificando apk con apktool.</td></tr>
</tbody></table>
El resultado obtenido no siempre es igual al original. Por ejemplo, los identificadores de elementos de <i>Layout</i> no incluyen el símbolo "+".<br />
<br />
El código compilado en <i>classes.dex</i> también se puede decodificar. <a href="http://code.google.com/p/dex2jar/" target="_blank">dex2jar</a> traduce un fichero en formato Dex a formato <a href="http://en.wikipedia.org/wiki/JAR_%28file_format%29" target="_blank">Jar</a> (Java ARchive). Una obtenido el fichero Jar se puede decompilar el código con <a href="http://jd.benow.ca/#jd-gui" target="_blank">JD-GUI</a>.<br />
<br />
Otra opción también válida y mucho más cómoda es decompilar directamente el fichero Dex con <a href="https://github.com/skylot/jadx" target="_blank">Jadx</a>.<br />
<br />
Su instalación es bastante sencilla:<br />
<br />
<code>
~$: sudo apt-get install git<br />
~$: git clone https://github.com/skylot/jadx.git<br />
~$: cd jadx<br />
~$: ./gradlew dist<br />
</code><br />
<br />
Se puede abrir un fichero <i>dex</i> directamente con la interfaz gráfica de Jadx:<br />
<br />
<code>~$: ./jadx/build/jadx/bin/jadx-gui classes.dex &</code>
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-Z8rMbHElFKniDXoIR8X6w0Em0yfLzs50-41TUaP09g2q8Df6528JNMEF9ptq7tWK1iBrByzkTS7Y4EXCGeHR1PDJUnDkghPP6Uhz7NTOeXjdkeEC7a9F2c2HShgiX6ntgWLNEOsUuOWH/s1600/jadx.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-Z8rMbHElFKniDXoIR8X6w0Em0yfLzs50-41TUaP09g2q8Df6528JNMEF9ptq7tWK1iBrByzkTS7Y4EXCGeHR1PDJUnDkghPP6Uhz7NTOeXjdkeEC7a9F2c2HShgiX6ntgWLNEOsUuOWH/s1600/jadx.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Desensamblando el código de classes.dex con Jadx-GUI.</td></tr>
</tbody></table>
<br />
<a href="http://www.radare.org/" target="_blank">Radare2</a> ó <i>r2</i> es un conjunto de herramientas y scripts en línea de comandos para realizar desensamblado con soporte para múltiples arquitecturas como el <a href="http://en.wikipedia.org/wiki/Motorola_68000" target="_blank">Motorola 68000</a>, Mips, i386, x86-64, dalvik entre otros y soporte de varios formatos de ficheros como el <i>dex</i>.<br />
<br />
En el blog de Sebastián Guerrero hay un <a href="http://blog.seguesec.com/2013/04/keep-calm-and-use-r2-to-reverse-falcon-pro/" target="_blank">artículo</a> muy interesante sobre el uso de <i>r2</i> con aplicaciones Android.<br />
<br />
Recordad que el objetivo de esta entrada no es fomentar la piratería de aplicaciones ni tirar abajo el duro trabajo de los desarrolladores.<br />
<br />
Para evitar que nuestras aplicaciones puedan ser interpretadas fácilmente hay herramientas como <a href="http://proguard.sourceforge.net/" target="_blank">ProGuard</a> que permiten ofuscar el código fuente.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2600995331785333292.post-27313179803750906272014-06-22T14:33:00.002+02:002014-06-22T14:33:57.599+02:00Creación de un clúster de Hadoop con ClouderaApache Hadoop es un framework para soluciones Big Data creado por <a href="http://www.linkedin.com/in/cutting" target="_blank">Doug Cutting</a> y utilizado por organizaciones como <a href="https://developer.yahoo.com/hadoop/" target="_blank">Yahoo</a>, <a href="http://aws.amazon.com/es/elasticmapreduce/" target="_blank">Amazon</a>, <a href="http://azure.microsoft.com/en-us/services/hdinsight/" target="_blank">Microsoft</a> o <a href="https://cloud.google.com/solutions/hadoop/" target="_blank">Google</a>.<br />
<br />
Hadoop incluye un sistema de ficheros distribuido llamado HDFS (Hadoop Distributed File System) y un motor de trabajos en batch MapReduce. El framework está escrito en Java y los trabajos MapReduce pueden ser lanzados vía Streaming a través de cualquier lenguaje. La principal ventaja es que es un sistema escalable que utiliza hardware básico, commodity hardware, con alta disponibilidad y redundancia de datos, por defecto replica 3 bloques de datos.<br />
<br />
Está orientado grandes volúmenes de datos, donde cada fichero es dividido en bloques de 64 o 128 Megas. Cada nodo de datos almacena bloques distintos y permite ejecutar trabajos en forma de batch, ya sean Map o Reduce, sobre esos datos. Al dividir el fichero en bloques, la lectura y trabajo sobre los datos se realizan mucho más rápido y con una programación bastante sencilla aplicando el concepto MapReduce.<br />
<br />
Hadoop además incluye multitud de aplicaciones que facilitan mucho diferentes tareas: Flume, Sqoop, Hive, Pig, Mahout o HBase, etc. HBase es una base de datos NoSQL que permite almacenar en HDFS datos más pequeños en tablas.<br />
<br />
<a href="http://www.cloudera.com/content/cloudera/en/home.html" target="_blank">Cloudera</a> es una organización que facilita soporte y servicios sobre Apache Hadoop además de ofrecer cursos y certificaciones. El producto de software libre CDH, Cloudera Distribution Hadoop, incluye los paquetes de Hadoop compilados para varias versiones de GNU/Linux como Red Hat o Debian. A principios de año 2014 la consultora de IT Gartner ha incluido a Cloudera en su <a href="http://www.gartner.com/technology/reprints.do?id=1-1ROSS0X&ct=140310&st=sb" target="_blank">cuadrante mágico</a> dentro del nicho de mercado.<br />
<br />
Aquí os dejo un trabajo sobre Hadoop y todos sus elementos y aplicaciones donde además se explican los pasos para la instalación en modo nodo pseudo-distribuido y creación de un clúster de Hadoop con 4 nodos y alta disponibilidad para la versión CDH 4.5.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="613" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/35937284?startSlide=4" style="border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;" width="574"> </iframe> <br />
<div style="margin-bottom: 5px;">
<b> <a href="https://www.slideshare.net/3lmd4n0/manual-hadoop" target="_blank" title="Administración de Apache Hadoop a través de Cloudera">Administración de Apache Hadoop a través de Cloudera</a></b></div>
<br />
Para la configuración del clúster se han utilizado máquinas virtuales a partir de la imagen que Cloudera ofrece en su <a href="http://www.cloudera.com/content/dev-center/en/home/developer-admin-resources/quickstart-vm.html" target="_blank">sitio web</a>.
<br />
Además, incluyo la memoria adicional para realizar pruebas con las herramientas de Hadoop y para lanzar trabajos MapReduce. En el caso práctico planteado se trata de un trabajo para obtener traducciones más similares en textos en dos idiomas distintos por el número de palabras coincidentes. En <a href="https://github.com/3lm4dn0/Java-examples/tree/master/hadoop/mapreduce-translator" target="_blank">github</a> está disponible el ejemplo del proyecto para Eclipse y Maven. Sqoop facilita la importación de tablas de una base de datos en MySQL hacia HDFS. Por último, herramientas como Hive, Pig e Impala permiten lanzar consultas contra el clúster, como trabajos MapReduce, de forma rápida y sencilla.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="613" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/35938555?startSlide=4" style="border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;" width="574"> </iframe> <br />
<div style="margin-bottom: 5px;">
<b> <a href="https://www.slideshare.net/3lmd4n0/map-reduce-35938555" target="_blank" title="Herramientas y ejemplos de trabajos MapReduce con Apache Hadoop">Herramientas y ejemplos de trabajos MapReduce con Apache Hadoop</a> </b></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2600995331785333292.post-77630534513812165092014-06-22T13:53:00.003+02:002014-06-22T17:01:25.357+02:00Seguridad en AndroidCada vez surgen más problemas de seguridad en los dispositivos móviles. En los sistemas Android no iba a ser menos y hay muchos motivos de interés en encontrar y explotar los problemas de seguridad:<br>
<ul>
<li>El aumento de usuarios con un smarthphone Android.</li>
<li>Almacenamiento de todo tipo de información personal, desde fotografías hasta datos bancarios.</li>
<li>La capacidad de los dispositivos es equivalente a la de un ordenador de hace unos cuantos años.</li>
<li>La mayoría de estos dispositivos está conectado a internet la mayor parte del tiempo desde redes 3G, 4G o Wifi.</li>
<li>La facilidad de localizar geográficamente un dispositivo gracias a los servicios de posicionamiento de <a href="https://developer.android.com/google/play-services/location.html" target="_blank">Google Play Services</a>.</li>
<li>Permisos de acceso a los que, a veces, el usuario no presta atención.</li>
</ul>
La nueva actualización de Android 4.4.3 permite que las aplicaciones instaladas con actualizaciones automáticas habilitadas <a href="http://rootear.com/android/cambios-play-store-rogue-app" target="_blank">cambien sus permisos sin notificar al usuario</a>. Por otra parte, se ha descubierto el primer móvil, de marca china, que incluía <a href="http://www.europapress.es/portaltic/software/noticia-data-descubre-smartphone-android-malware-fabrica-20140617115515.html" target="_blank">malware de fábrica</a> para espiar al usuario.<br>
<br>
Hace poco hice un trabajo en el que se abordan varios de los problemas de seguridad que fueron apareciendo en versiones Android, principales vulnerabilidades como <a href="https://bluebox.com/technical/uncovering-android-master-key-that-makes-99-of-devices-vulnerable/" target="_blank">Master Key,</a> las aplicaciones malware más conocidas y hacia donde están evolucionando, como aplicaciones que incluyen <a href="http://www.elotrolado.net/hilo_aplicaciones-disponibles-en-google-play-minan-divisas-digitales-sin-avisar-al-usuario_1995384" target="_blank">software de minado de criptomonedas oculto</a>.<br>
<br>
También incluyo algunos trabajos de varios expertos en seguridad como el estudio para la creación de un Rootkit, aprovechando el <a href="http://en.wikipedia.org/wiki/Loadable_kernel_module" target="_blank">LKM</a> habilitado, de <a href="http://blog.seguesec.com/blog-2/" target="_blank">Sebastián Guerrero</a> o los trabajos de <a href="http://www.seguridadofensiva.com/" target="_blank">Jaime Sánchez</a> sobre los problemas de seguridad en mensajería instantánea. Artículos de Alejandro Ramos del blog de <a href="http://www.securitybydefault.com/" target="_blank">SecurityByDefault</a> para recuperar mensajes de WhatsApp y el artículo sobre el fraude de <a href="http://www.elladodelmal.com/2014/01/la-estafa-de-la-linterna-molona-que.html" target="_blank">la Linterna Molona por Chema Alonso</a>. Por último incluye una introducción breve sobre los problemas de espionaje actuales en móviles y una la solución, o no, propuesta por <a href="http://blog.pepelux.org/" target="_blank">José Luis Verdeguer</a> y <a href="http://linuxmaniac.torreviejawireless.org/" target="_blank">Víctor Seva</a> con <a href="http://securecall.org/" target="_blank">SecureCall</a>.<br>
<br>
<iframe allowfullscreen="" frameborder="0" height="613" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/35988941" style="border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;" width="574"> </iframe> <br>
<div style="margin-bottom: 5px;">
<b> <a href="https://www.slideshare.net/3lmd4n0/seguridad-en-android" target="_blank" title="Seguridad en Android">Seguridad en Android</a> </b></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2600995331785333292.post-36615373480003147892014-06-22T12:12:00.000+02:002014-06-22T12:19:18.526+02:00Herramientas y Técnicas de Inyección SQLHace poco realicé un trabajo optativo sobre las diferentes herramientas y técnicas de inyección SQL.<br />
<br />
Un ataque de inyección SQL consiste en la inyección de una sentencia SQL no autorizada y ligeramente adaptada a través de un canal de entrada de datos desde el cliente para obtener un resultado distinto al original de la aplicación, por ejemplo desde el parámetro de url donde se indica el identificador de un producto.<br />
<br />
Es un problema de seguridad muy grave cuyo origen está en la implementación del modelo con acceso a la base de datos y la ausencia de validación en los parámetros de entrada enviados desde el cliente. Existen distintas técnicas de inyección en función del canal del ataque, de si podemos ver los resultados o si la consulta enviada nos devuelve un mensaje que indique si ha tenido éxito o no.<br />
<br />
Los ataques de inyección están clasificados en primera posición en el <a href="https://www.owasp.org/index.php/Top_10_2013-Top_10">Top 10 de OWASP</a>, documento centrado en las principales vulnerabilidades de aplicaciones web. La <a href="https://www.owasp.org/index.php/Main_Page" target="_blank">fundación OWASP</a>, acrónimo en inglés de "Proyecto Abierto de Seguridad en Aplicaciones Web", es un organismo que apoya, gestiona y divulga documentación y metodologías para la seguridad de la información.<br />
<br />
El motivo de que los ataques de inyección estén en el Top 10 de OWASP es que suelen ser la causa de fuga de información importante. Permiten realizar OS fingerprinting para conocer el sistema operativo o la versión del gestor de bases de datos, obtener esquemas de la base de datos, conocer el usuario utilizado en la conexión e incluso acceder a las tablas de una base de datos y obtener sus registros, por ejemplo la tabla de usuarios de la aplicación con todas sus contraseñas (normalmente <a href="http://es.wikipedia.org/wiki/Hash" target="_blank">hasheadas</a> y con <a href="http://en.wikipedia.org/wiki/Salt_%28cryptography%29" target="_blank">salt</a>). Un ataque de inyección SQL podría incluso realizar un ataque de denegación de servicio.<br />
<br />
Existen herramientas que automatizan todo el proceso de inyección SQL, detectando y probando diferentes técnicas de ataque. La mayoría están escritos en algún lenguaje de scripting como Pyton o Perl y son fáciles de instalar, algunas herramientas de inyección SQL interesantes son <a href="http://sqlmap.org/">SQLMap</a>, <a href="http://themole.sourceforge.net/">TheMole</a> o <a href="http://sqlninja.sourceforge.net/">SQLNinja</a>, este último para ataques contra SQL Server.<br />
<br />
Por último, no se debe olvidar que las bases de <a href="https://www.owasp.org/index.php/Testing_for_NoSQL_injection" target="_blank">datos NoSQL</a> también pueden ser susceptibles de ataques de inyección SQL, aunque no de la misma forma.<br />
<br />
A continuación os dejo la memoria del trabajo práctico explicando las diferentes técnicas de inyección SQL y la instalación y uso de varias de las herramientas para automatizar el proceso del ataque. Para realizar las pruebas he utilizado la aplicación de <a href="http://sechow.com/bricks/index.html">OWASP Bricks</a> en un sistema GNU/Linux Debian con Apache Web Server, PHP y MySQL.<br />
<br />
Espero que os guste el trabajo y sirva para entender el funcionamiento básico de un ataque de inyección SQL.<br />
<br />
<iframe src="//www.slideshare.net/slideshow/embed_code/35987551?startSlide=5" width="574" height="613" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px 1px 0; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/3lmd4n0/herramientas-y-tcnicas-de-inyecin-sql" title="Herramientas y Técnicas de Inyeción SQL" target="_blank">Herramientas y Técnicas de Inyeción SQL</a> </strong></div>Unknownnoreply@blogger.com0