Tumiki Fighters y el lenguaje de programación D

Estas vacaciones mi hermano, al que le gusta mucho jugar encontró en una web japonesa el Tumiki Fighters. Uno de los juegos más originales que he visto en los últimos años (Últimamente solo se preocupan por crear gráficos impactantes). Es un juego de naves pero podemos ir cogiendo los trozos de las naves enemigas para ir aumentando nuestro poder. Es como una mezcla de juego de naves y el Tetris por muy raro que pueda sonar. Funciona con los Cursores y la tecla Z para disparar.

Los jugones ya tardáis en bajaros el juego y superar mis 105.200 puntos y los 111.300 puntos de mi hermano. Y para los programadores va dedicada la nota técnica que sigue.

El juego es libre y está programado en un lenguaje de programación que había oído hablar muy poco de él. Se trata del lenguaje D,e intenta conjuntar lo bueno de Java y C++ eliminando los males de ambos (Se supone que C# debería haber cumplido esta mision). Parece que promete bastante viendo la comparativa con otros lenguajes similares. Aquí teneis la web desde donde os podéis bajar el compilador tanto para plataformas Unix como Windows y aquí está la referencia completa del lenguaje. Para los valientes queda la tarea de compilar el juego para que funcione en Linux.

Lógica Difusa – Fuzzy Logic

El post es un poco duro pero si leéis todo el artículo seguro que aprendéis cosas nuevas.

Hasta el siglo XX la lógica clásica se trabajaba con dos valores: Verdadero (1) o Falso (0). Pero durante el último siglo se comenzaron a crear nuevas lógicas que incorporaban más valores de certeza, por ejemplo la lógica de Lukasiewicz incorpora un nuevo valor, el de Medio Verdadero o Medio Falso según se vea. De esta forma ya tenemos tres valores (Estas lógicas se suelen llamar trivalentes) : Verdadero (1), Medio Verdadero (0.5) o Falso (0). Lo primera primera idea que nos viene a la cabeza es la seguir creando nuevos valores de verdad como vemos en la imagen donde ya tenemos 5 valores de verdad. Por ejemplo si una cosa sabemos casi seguro que es verdadera le asignaríamos el valor de verdad 0.75.

Si extendemos la idea a infinitos valores entre el 0 y el 1 hemos descubierto la Lógica Difusa. ¿Y para que coño sirve esta paranoia mental? Eso mismo pensaba la comunidad científica a mediados del siglo pasado, nadie apostaba un duro por la la Lógica Difursa. Pero llegaron los japoneses (Años 70) y le dieron utilidades prácticas que se usan hoy en día en todo el mundo. La primera aplicación práctica que le dieron fue la de frenar electrónicamente y con suavidad el Shinkansen (Tren bala) japonés.

Para frenar un coche normalmente vamos soltando el acelerador suavemente mientras frenamos suavemente calculando nosotros intuitivamente los que tardaremos en frenar etc, pero no solemos apretar el freno a fondo para frenar. Para hacer un programa que frenara un coche o un tren de forma automática lo primero que podríamos hacer sería: if(quieroParar) frenar(); . Esto haría que se frenara a lo bestia. Una mejora sería if(quieroParar & Velocidad_Alta) frenar_hasta_la_mitad(); else if(quieroParar & !VelocidadAlta) frenar_a_tope(). Si siguieramos introduciendo ifs hasta el infinito creando nuevos valores de Velocidad (Al igual que hacíamos al principio del artículo con los valores de Verdadero,MedioVerdadero, Falso etc) conseguiríamos un sistema fuzzy pero sería una chapuza. El ejemplo anterior es simplemente para que veais que frenar suavemente un tren de forma programada no es tan sencillo como podamos pensar a primera vista.

Veamos como hay que proceder para implementar un buen sistema fuzzy. Tener en cuenta que a partir de ahora trabajamos con números reales, es decir, entre el 100 y el 75 hay más valores, etc…


El eje vertical indica el valor de verdad de cada velocidad. El eje horizontal la velocidad.

En vez de explicar este esquema detenidamente, lo vamos a ver con un ejemplo práctico. Imaginaros que el tren viaja a 77km/h, operaríamos de la siguiente forma:

Buscamos en el eje horizontal la velocidad a la que vamos (77) y trazamos una vertical marcando las intersecciones con los triángulos. A partir de las intersecciones tomamos su valor de verdad mirando el eje vertical. En este caso tenemos dos intersecciones, la primera intersecta con el triángulo de Velocidad Media a una altura de 0.20 (Lo vemos en el eje vertical), la segunda intersección corta con el triángulo de Velocidad Alta a una altura de 0.45. Por lo tanto la consideración del sistema es que si vamos a 77 Km/h nuestra velocidad es 0.2 Media y 0.45 Alta. Es decir, hemos conseguido que el sistema tenga una estimación ‘difusa’ de la velocidad actual. Probad a sustituir otros valores de velocidad y veréis como lo que se obtiene tiene bastante sentido, si ponemos por ejemplo 98km/h saldrá un valor de 0.90 Alta etc.

Veis como hemos conseguido que el sistema pueda saber en cada momento una consideración sobre la velocidad que llevamos. A partir de los valores obtenidos se puede tomar ya una decisión sobre cuanto hay que pulsar el freno (Para explicar esto necesitaría unos cuantos posts ya que habría que crear otro esquema como el anterior para los valores del freno y combinarlo todo). Lo importante se que os quedéis con la idea de que al tener muchos valores entre Verdadero(Velocidad Alta) y Falso (Velocidad Lenta) podemos conseguir frenar de forma suave.

Si quisieramos tener un sistema más preciso (que frenara más suavemente) podríamos crear más triángulos que indicarna Velocidad Muy Alta, Velocidad Muy baja etc. Veamos un ejemplo para el diseño de un sistema de aire acondicionado. Con un aire acondicionado si queremos ahorrar energía y que los cambios de temperatura no sean muy bruscos se puede usar un sistema fuzzy para regular de forma automática su funcionamiento. Si programamos el aire acondicionado con if(temperatura>18) enfriar(); else calentar(); gastaremos mucha energía ya que estaremos continuamente pasando a más de 18 grados y después a menos de 18 grados, necesitamos un sistema fuzzy 😉 Veamos como sería el esquema fuzzy de un sistema de aire acondicionado:


Supongo que con este esquema ya habréis pillado la idea, o quizás os he liado más.

Finalmente os muestro algunas aplicaciones prácticas además de las ya comentadas. Entre paréntesis pongo una pregunta para que veáis el porqué se usa un sistema fuzzy en estros aparatos.

Hoy en día los sistemas de lógica difusa están en las camaras de fotos para calcular si llega mucha o poca luz al diafragma (¿Poca, bastante, mucha luz?), en robots para que se muevan con suavidad (¿Velocidad del brazo Alta, Baja?), en sistemas de piloto automático y ontrol de aviones (¿Altura del avión Baja, Alta, Muy Alta?) o por ejemplo el sistema que acaba de sacar Toyota para aparcar automáticamente el coche (¿Cerca, Lejos, Muy Cerca, Muy Lejos del bordillo?.

Después de este artículo tan duro si algo no está bien explicado, hay alguna inconsistencia o no os habéis enterado de nada avisad.

Cooperative Linux

Interesante iniciativa para crear algo parecido a VMWare pero en su versión de código libre. Para quien no conozca VMWare, se trata de una máquina virtual que es capaz de ejecutar Linux desde Windows y viceversa. La gente de Colinux está intentando hacer algo similar, todavía está en una fase de desarrollo muy temprana pero promete mucho.

Me voy a Japón 1 año!!!

Me han dado una beca Vulcanus y me voy un año a Japón. 4 meses de curso intensivo de japonés y 8 meses trabajando en Asahi Kasei, una empresa subsidiaria de Mitsubishi. Así que este blog seguramente pase a llamarse Diario de un Geek en Japón o algo así ¬_¬, donde contaré mis aventuras tecnológicas por el lejano oriente.

El edificio de la foto es donde se supone que curraré, y el mapa indica la localización de la prefectura de Kanagawa donde estaré viviendo durante 1 año.

Ya estoy repasando japonés, y aprendiendo kanjis a para recordar lo que aprendí el año pasado yendo a clases. Aunque cuanto más lo estudio me doy cuenta de lo realmente difícil que es el japonés, sin duda alguna yo diría que es la lengua más complicada que existe. Ganbatte!!!

Equipo de fúbtol robótico

Impresionantes los vídeos que he encontrado en una web de la universidad de Osaka donde se ven robots humanoides manejado pelotas con una agilidad increíble. Fijaros como se coordinan todas las articulaciones del robot para mantener el equilibrio, para conseguirlo seguramente lleven un sistema fuzzy que se encarga de mantener la estabilidad del sistema. Explicaremos lo que es un sistema fuzzy más adelante 🙂

¿Que chica de Love Hina eres?

Este ha sido mi resultado después de hacer uno de esos tests chorras que se encuentra uno por Internet. Solo para seguidores de Love Hina, una serie realmente genial.


You’re responsible, sweet, gentle and lovable! You have a loving heart, a
great respect for all creatures (human, great and small), and the ability to
see the thing that makes each individual special. However, you tend to
overlook the things that make you special, and thus, putting you in a
position to be pushed around by others. Take some time everyday to reflect
on your qualities, and see that you don’t have to please everyone and still
be loved for who you are. Which Love Hina Girl Are You?

Vía Pjorge