Robo Wunderkind – Un «lego» para desarrollar robots

¡Construye, programa, juega, crea el futuro!

Hoy he leído acerca de este proyecto en Kickstarter. Robo Wunderkind (algo así como robot-niño prodigio) es un kit modular para construir robots a base de juntar bloques variados con sus sensores, sus actuadores y su lenguaje de programación.

3aca895f2fc0ccfe1939f77b6deec6fa_original

Para no repetir la información una y otra vez de todos los blogs que habrán hablado ya del proyecto, os pongo el enlace a la página del proyecto en Kickstarter, muy completa y con toda la información sobre los distintos pledges en función de la financiación. Ah, por cierto, ya está financiado (a 28 días del final de la campaña).

¡Buenos días y feliz viernes!

Cómo crear un Instalador USB para OS X El Capitan

OS X El Capitán ya está disponible para descargar e instalar de manera gratuita en todos aquellos dispositivos con OS X Yosemite así que, si tienes un trastorno obsesivo-compulsivo por las instalaciones desde 0 como yo, aquí te doy las pautas para crear tu USB de arranque para instalar «El Capitán».

osx-capitan

Lo primero y principal, entra en la App Store y descárgalo. No sigas leyendo, dale ya a descargar porque tienes para rato. Te espero en el siguiente párrafo.

De acuerdo, lo siguiente es el material necesario para crear el USB:

  1. Acceso de administrador en tu Mac. Si es tuyo, supongo que lo tendrás, pero no está de más avisar porque en una parte del proceso necesitarás ejecutar un comando con permisos de administración.
  2. Un pincho USB (obviamente). Debe ser de 8GB o superior. Además, a poder ser, USB3 porque si no la instalación va a ser muuuuuy larga. Lo sé por experiencia.
  3. El instalador de OS X El Capitán (también obvio). Ahora mismo se estará descargando y va a estar así durante un buen rato.
  4. Y ya :D.

Lo bueno: no se necesita demasiado. Lo malo: se tarda mucho en descargar esta versión de OS X.

Una vez descargado OS X El Capitán viene el primer paso esencial: NO CERRÉIS EL INSTALADOR. Cerrarlo lo borra del disco, por lo que habría que volver a descargarlo (¿genial eh?).

El segundo paso es tener preparado el disco USB para que sirva como dispositivo de arranque. Para ello hacemos los siguiente:

  1. Conectamos el USB al Mac y arrancamos la utilidad de discos. Seleccionamos el dispositivo USB (no ninguna partición) y le damos a la pestaña «Erase» (lo siento, no tengo el Mac en castellano). Hecho esto, formateamos la partición como «Mac OS Extended (Journaled)».

    Utilidad de discos. En la pantalla de Erase formateamos en Mac OS
    Utilidad de discos. En la pantalla de Erase formateamos en Mac OS Extended Journaled.
  2. Nos vamos a la pestaña «Partition» y en el apartado «Partition Layout» seleccionamos «1 Partition», es decir, queremos crear una nueva partición.

    Configuración de particiones.
    Configuración de particiones.
  3. Luego debajo, en el botón «Options», seleccionamos el esquema de particionado «GUID Partition Table». Aceptamos y le damos a aplicar los cambios y ¡enhorabuena!, ya está preparado el USB.

    Selección de esquema de particionado.
    Selección de esquema de particionado.

Si habéis seguido los pasos tal y como están aquí escritos, seguramente El Capitán siga descargándose. Armaos de paciencia y esperad, que es lo que toca. Un café en estos casos siempre viene bien, pero igual no son horas. Yo, por si acaso, me voy a preparar uno.

Una vez descargado El Capitán y con la pantalla del instalador abierta abriremos una terminal. Sí, sé que existen herramientas visuales, pero la terminal es cómoda y eficiente y no me gusta descargar aplicaciones para todo. Con la terminal abierta escribiremos el siguiente comando:

$ sudo /Applications/Install OS X El Capitan.app/Contents/Resources/createinstallmedia --volume /Volumes/Untitled --applicationpath /Applications/Install OS X El Capitan.app --nointeraction

Tardará unos minutos (pero ni de lejos lo que ha tardado la descarga). Mientras se va creando, explico un poco este comando. Lo primero, se está lanzando el programa createinstallmedia que está bajo ese directorio tan largo como administrador (de ahí el sudo) sobre el volumen que hemos creado. Si habéis seguido los pasos que he puesto, se llamará «Untitled», así que de ahí el /Volumes/Untitled. Después se indica qué es lo que se va a meter en el disco, /Applications/Install OS X El Capitan.app y que lo queremos desatendido, --nointeraction.

Una vez termine, ¡ya tenéis vuestro USB con El Capitán, desde el cual podréis realizar una instalación limpia sin necesidad de tirar de los servidores de Apple o usar como disco de recuperación en casos extraños.

Cualquier duda/pregunta/aclaración es bienvenida en los comentarios. ¡Un saludo!

Inteligencia Artificial y Soft Computing. Teoría y Aplicaciones

Hace unos días (el 25 de Abril para ser exactos) llegué a uno de los checkpoints que hay en mi ruta: la defensa de mi Proyecto Final Máster. Como ocurre en estos casos, los nervios hicieron que no todo fuese tan bien como debería, pero aún así fue mejor de lo esperado. Es un pasito más en mis estudios, lo cual me hace feliz.

El proyecto trata del Soft-Computing, una rama que pertenece a la Inteligencia Artificial, y que trata el conocimiento con una aproximación un tanto diferente a la Inteligencia Artificial clásica. En esta última, el conocimiento se suele concebir primero como abstracción, y luego se intenta representar esta abstracción (a esto se le suele llamar aproximación Top-Down del conocimiento). Las técnicas del Soft-Computing se caracterizan precisamente por representar el conocimiento de forma subsimbólica, es decir, modelando los componentes básicos del conocimiento para representar un conocimiento que «emerge» de sus interconexiones (se puede ver muy fácil si se piensa en las neuronas como componente y en el cerebro como el resultado, por eso se le suele llamar aproximación Bottom-Up).

El caso es que aquí tenéis el enlace para todos aquellos que quieran leerlo, ojearlo o criticarlo: thesis.pdf. Y en esto último me gustaría incidir. El libro del proyecto fue concebido como punto de entrada al Soft-Computing, así que si alguien lo lee, agradezco cualquier tipo de feedback.

Muchas gracias y ¡Un saludo a todos!

Robocode – Buscando el robot de combate definitivo

El vídeo que os traigo hoy va de Robocode, un juego de programación cuyo objetivo es construir robots que acaben con otros robots. Simple y sencillo. Es como una versión cojo-evolucionada del Core War, pero en lugar de vírus, luchan tanques, en lugar de ensamblador endemoniado, Java o .NET y en lugar de ocupar la memoria del oponente, es destruir su tanque.

Es decir, que se parece como un huevo a una castaña, pero no deja de ser un juego de programación :).

Los autores (o al menos uno de ellos) han puesto un enlace al paper (http://www.jonnielsen.net/RoboReportOfficial.pdf). Usan dos controladores, uno basado en una red neuronal entrenada con backtracking (el de la torreta) y otro basado en una red neuronal evolucionada (el de movimiento). La pena es que, según los resultados, sólo puede vencer a oponentes fáciles. Los mejores siguen ganando. Aún así, tiempo al tiempo. Yo confío en las máquinas :D.

Buenas noches!

Evolución de equipos de fútbol

La gran mayoría de las personas que me conocen saben que me encantan los días de fútbol porque puedes salir a la calle e ir al cine y estar prácticamente sólo. Sin embargo, cuando se trata de softbots, la cosa cambia :D.

El vídeo que os presento aquí es una simulación de una evolución de equipos de fútbol a golpe de hacer evolucionar redes neuronales.

El vídeo explica muy someramente cuáles son los parámetros de aprendizaje, pero para los que conozcan un poco del tema lo dejan bastante claro. Lo divertido viene a partir del segundo 28», donde se van presentando partidos con distintas generaciones.

Para los que tengan ganas de conocer un poco más sobre su funcionamiento, el paper se encuentra en esta dirección: http://downloads.hindawi.com/journals/jr/2010/841286.pdf. Espero no meterme en un lío. De todas formas, si tengo yo el enlace en mis bookmarks no debe ser muy complicado encontrarlo :).

Que lo disfrutéis!

Cuando dos robots se conocen

Si Turing levantase la cabeza…

El vídeo que os presento aquí es el resultado de poner a hablar dos instancias de cleverbot (www.cleverbot.com) hablando una con la otra. No tiene desperdicio:

Por cierto, me quedo con el momento epic-creepy del minuto ~2:48 (a no ser que yo me lo haya inventado y en realidad digan otra cosa)

him – Hahaha
her – What’s so funny?
him – You are
her – why am I funny?
him – Because you are
her – Why are you laughing?
him – I need blood

De las mejores declaraciones de amor de la historia. Saludos!

Instalar Jira tras nginx en un subdominio (Debian 7)

Bueno, digo debian pero bien vale cualquier distribución basada en ésta.

Hace ya algún tiempo se publicó en este blog un post largo y detallado sobre como instalar Confluence. Desde entonces la instalación ha cambiado MUCHO. De hecho, ayer instalé un Jira y un Confluence ejecutando directamente el fichero descargado (marvelous!).

La receta es la siguiente. Lo primero, vamos a suponer que poseemos un dominio (megacorp.com) y hemos apuntado el subdominio (jira.megacorp.com) a una máquina con un Debian recién instalado. Lo primero que debemos hacer es instalar un gestor de bases de datos (en nuestro caso MySQL), nginx y la máquina virtual de Java, así que como root ejecutaremos lo siguiente:

apt-get install openjdk-6-jre nginx-full mysql-server

Una vez instalados los paquetes, crearemos una base de datos para nuestro Jira con su propio usuario para que no haya problemas. Para ello, entraremos en la consola de MySQL (mysql -u root -p) y ejecutaremos los siguientes comandos:

CREATE DATABASE jira CHARACTER SET UTF8 COLLATE utf8_unicode_ci;
GRANT ALL on jira.* TO 'jira_user'@'localhost' IDENTIFIED BY 'powerpass';
FLUSH PRIVILEGES;
EXIT

Y la base de datos ya está. Ahora pasaremos a instalar Jira propiamente dicho. Para ello descargaremos la última versión (en nuestro caso la versión de 64 bits para Linux) y lo ejecutaremos, instalándolo como servicio para que, cuando se reinicie la máquina, se inicie también Jira.

$ wget http://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-6.2-x64.bin
$ chmod u+x atlassian-jira-6.2-x64.bin
$ ./atlassian-jira-6.2-x64.bin

En el proceso, lo suyo es elegir las opciones que más nos convengan. Una vez finalizado, como hemos usado MySQL como gestor de bases de datos, deberemos bajarnos el driver de MySQL (que no viene incluido por temas de licencias en el paquete de Jira). Para ello, wget te elijo a ti!

$ wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.29.tar.gz
$ tar -zxvf mysql-connector-java-5.1.29.tar.gz
$ cp mysql-connector-java-5.1.29/mysql-connector-java-5.1.29-bin.jar /opt/atlassian/jira/atlassian-jira/WEB-INF/lib/

En este momento tenemos corriendo Jira en el puerto 8080 (si no hemos cambiado nada en la instalación). Ahora, lo que queremos es ponerlo bajo nuestro subdominio. Aquí es donde entra nginx al rescate. Primero crearemos un nuevo fichero de configuración:

$ touch /etc/nginx/sites-available/jira
$ ln -s /etc/nginx/sites-available/jira /etc/nginx/sites-enabled/jira

Y en él escribiremos la siguiente configuración:

server {
	listen 80;
	server_name jira.megacorp.com;

	location / {
		proxy_set_header X-Forwarded-Host $host;
		proxy_set_header X-Forwarded-Server $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_pass http://localhost:8080/;
		proxy_redirect off;
	}
}

Sólo nos queda un último cambio, esta vez en la configuración del servidor Tomcat que viene empotrado en Jira. Para ello, abriremos el fichero server.xml, el cual se encontrará en la ruta /opt/atlassian/jira/conf/server.xml si se ha elegido el valor por defecto y cambiaremos el conector del puerto 80 para que tenga este aspecto:

<connector port="8080"
           maxThreads="150"
           minSpareThreads="25"
           connectionTimeout="20000"
           scheme="http" proxyName="jira.megacorp.com" proxyPort="80"
           enableLookups="false"
           maxHttpHeaderSize="8192"
           protocol="HTTP/1.1"
           useBodyEncodingForURI="true"
           redirectPort="8443"
           acceptCount="100"
           disableUploadTimeout="true">
</connector>

Realmente ha sido modificado únicamente con la línea scheme="http" proxyName="jira.megacorp.com" proxyPort="80". De hecho, en la propia definición del conector viene una línea vacía en el lugar donde la hemos instalado nosotros.

Para terminar, reiniciaremos Jira y nginx para que hagan efecto los cambios realizados de la siguiente forma:

$ service jira stop && service jira start
$ service nginx restart

Y arreando. Si accedemos con el navegador a la url jira.megacorp.com tendremos el menú para instalar Jira. Es un wizard fácil y bien explicado. Destacar que al seleccionar la base de datos, deberemos especificar el usuario y la contraseña que hemos usado antes (en nuestro caso jira_user< code> y powerpass) y, muy importante, la cadena useUnicode=true&characterEncoding=utf8 en la query de conexión.

Espero que os vaya bien. Cualquier duda, ya sabéis, a comentar!

Por cierto! En el post de que antes enlacé, David Bonilla me apuntó que no era necesario instalar una JDK para correr Jira o Confluence. Por eso en este caso he instalado la jre. Sin embargo, en aquel entonces la máquina donde instalaba el confluence también llevaba un Jira y un Bamboo. Este último se encargaba de la integración continua de los proyectos con los que trabajábamos, principalmente con Java, y a la hora de lanzar una tarea, o teníamos el JDK o nos fallaba. Sólo quería dejaros la nota por si acaso. Más saludos!

export PS1 con colores no respeta el salto de línea

Muy buenas a todos,

Hoy me he levantado inspirado y he querido que la línea de comandos de algunas de las máquinas con las que trabajo tengan colorines adorables del estilo [EEPGLEECYCG], lo cual no es ningún nombre de primigenio ni de nada por el estilo, es símplemente el acrónimo para la expresión Esto Es Producción, Gañán, Los Experimentos En Casa Y Con Gaseosa.

Por ello, he decidido poner en estas máquinas el siguiente esquema:

[PROD] root@goku:~#

Para lograr este prompt, he cambiado la variable de sistema PS1 por la siguiente:

$ export PS1='e[0;31m[PROD]e[m e[0;32m${debian_chroot:+($debian_chroot)}u@h:w$e[m ';

Al margen de lo que quiere decir cada cosa (si estáis interesados, os hago una descripción en otro post) resulta que esta expresión en principio correcta causaba que los saltos de línea no se respetasen, y que todo lo escrito, en el momento que llegaba a la columna 80 producía un retorno de carro sin salto de línea. Lo más gracioso es que obviaba completamente la configuración de terminal. Por muy larga que fuese la línea configurada para el terminal, en la posición 80 volvía a la posición 0 :D.

La solución (porque la razón aún no he sido capaz de encontrarla) es poner alrededor de los caracteres no imprimibles los comandos [ y ]. Aún estoy buscando el por qué de esto, pero la nueva expresión queda como sigue:

$ export PS1='[e[0;31m[PROD]e[m e[0;32m${debian_chroot:+($debian_chroot)}u@h:w$e[m] ';

Establecerlo en cada sesión es lo de menos. O bien se pone en /etc/profile para que lo tengan todos los usuarios, o bien en el .bash_profile o .bashrc del usuario al que se le quiera modificar.

Si os ayuda, me alegro. Saludos a todos!

Péndulo invertido en cuadricóptero

El péndulo invertido es un problema de la teoría de control muy fácilmente solucionable con un controlador difuso de pocas reglas.

En el problema clásico, el objetivo es mantener en vertical un palo sostenido en un carrito que se mueve en una dimensión. Sin embargo, el siguiente vídeo muestra una variación del problema en tres dimensiones y es una pasada.

Disfrutadlo mucho!!