Habi Hablóg
Declaro:
XML válidoXHTML válido800x600 +
RSS válidoCSS válidoNavegador digno
  Blog   Archivo   Contacto   Administración  

Acerca de

Matemático, informático, aficionado a la electrónica, friki... y otras cosas que no vienen a cuento ni pasan los filtros de palabras.

¿Queríais un blog? Ahí va.

Red antisocial

¡Me van a volver loca! 2.0
La Fragata Portuguesa

Z
¡Me van a volver loca!

Últimos posts

El expediente X que nadie pidió
eNigma
La cuadratura del píxel
Portando desde Spectrum
Inexorable

Últimos comentarios

Habi
NoSupoResolverLaFuncion
Edu
Habi
EnriqueGG

Calendario

No hay fechas.

Categorías

Chorradas
Paranoias
Posts lúcidos
Tecnoesoterismo
Yuyus

Cenas de Abj

Abj debe 7 cenas.

Frase célebre

Hernanibus dice: 3) cansado de cohones, aunque buen ejercicio de lengua

Cianhidrosis

Habi - 31/07/2009 0:30:33 - Posts lúcidos

O cómo convertirse en un plastidecor gigante:

Cantad conmigo:

3


Cerdo nuestro

Habi - 26/05/2009 23:59:21 - Chorradas

En principio era el Cerdo.

 Y dijo: sea la luz; y fue la luz.

Entonces dijo el Cerdo: Hagamos a la Vaca a nuestra imagen, conforme a nuestra semejanza.

 

Amén.

2


The 7th thief

Habi - 09/05/2009 1:23:21 - Posts lúcidos

Volviendo atrás en el tiempo nos encontramos a Habi jugando a un juego en CD-ROM de los primeritos. De cuando no había casi nada en CD y encima no se podían grabar. Ese juego era "The 7th guest", publicado por Virgin (Trilobyte).

Es una historia de miedo (para mayores de 15 años, según la caja), la cual actúa como hilo conductor entre puzle y puzle, que es de lo que realmente va el juego. Está hecho con una mezcla de 3D prerenderizados y videos con actores de verdad, todo en dos CDs con una calidad muy buena para la época (nada de MPEG todavía) y una música muy correcta en onda / pistas de audio.

Los puzles son lo que uno cabría esperar: juegos de palabras, combinatoria, y algunos clásicos como los del ajedrez (caballos, alfiles, 8 reinas, etc). Con esta excepción:

Este juego de aquí se juega contra un adversario (AI), no es un solitario como el resto. Las reglas son simples:

  1. Cada uno en su turno elige una ameba de esas de su color, la cual puede hacer dos cosas: o se reproduce a una casilla adyacente o bien “salta” dos casillas de distancia.
  2. Una vez efectuado el paso anterior, las amebas contrarias que estén tocando a la de la nueva posición se convierten a su color.
  3. Se repite 1 y 2 hasta que no queden casillas libres. Gana quien más amebas de su color tenga.

Y no es fácil, juega bastante bien. De todos los puzles de ese juego, este me pareció siempre el mejor.

Pues bien. Hoy haciendo el tonto por el [archivo de World Of Spectrum], me he encontrado con esto:

Juego no publicado, cuyos autores hicieron para Virgin (Mastertronic) en su día. Y alternativamente para Amstrad CPC:

Y ya tirando de la madeja de esta cadena de fusilamientos descubrimos que a este juego se le llama Ataxx, en honor al primer clon del Infection. Para más detalles, la [página de la Wikipedia al respecto] y esta otra sobre la [versión para Amiga], en la cual descubrimos entre otras cosas que "Binary Magic" era el seudónimo de Craig Galley, el creador original del juego, el cual aparece por nombre en la versión Amiga:

Y aún más: si leéis la página de Spot (DOS) en este último sitio, hallaréis que quien estuvo detrás de esto fue Graeme Devine, quien estuvo en Mastertronic y luego en Trilobyte, Virgin mediante.

De las cosas que se entera uno.

6


Aventura

Habi - 29/04/2009 22:10:55 - Chorradas

Cuando uno se pone a mirar programas por dentro de vez en cuando uno se encuentra cosas. A veces son mensajes del tipo "No deberías estar leyendo esto", otras veces insultos, en algunas ocasiones intentos de ofuscación, cuelgue o incluso formateo del disco duro.

Otras veces uno se encuentra cosas simpáticas, como rutinas de debugeo que mandan mensajes a ventanas inexistentes, escriben la memoria de video monocroma o los mandan vía puerto serie.

Y otras veces lo curioso son las propias tripas, el funcionamiento del programa.

Hay un juego que me gusta, el Seiklus. Tengo por costumbre terminármelo en una horilla de vez en cuando. Pero en esta ocasión algo fue mal.
Podría haber sido por el Vista, por la arquitectura x64, por los nuevos DX, por los drivers de video... pero no, fue por la chapuza que es ese programa llamado Game Maker con el cual está hecho que no me funcionó del todo bien. Marcos negros alrededor de algunos de los sprites, y en cierto punto se me quedó colgado.

Me fastidió bastante la situación, así que me puse a hacer algo. Los ejecutables de ese programa son un pequeño runtime con el archivo del propio juego pegado (aunque encriptado). Es decir, una vez extraído, puede cargarse de nuevo en el Game Maker y tener acceso a todo el juego. Pantallas, personajes, scripts... todo.

Me bajé una versión 7, lo importé, y me puse a parchearlo, pues está hecho para una versión anterior (la 5): rehice la función draw_text_sprite, corregí las transiciones, las funciones de texto, las de viewport... y voila, un Seiklus compilado con la última versión que (medio-) funciona bien.

Mi descubrimiento, en la línea anterior del post, es que su creador ha definido sprites para objetos (personajes) que se encuentra en cada pantalla para recibir eventos. Como veis en la imagen, esos de la luna nunca aparecen en el juego. El de la corona está presente para coger las teclas durante el juego.
Junto con eso, notas internas para acordarse de cosas, un modo con trucos, fases de animación no usadas, repetidas para enlentecer (ya le vale) y una programación francamente mala. Tampoco es que el Game Maker de para mucho más, pero aún así.

Y con esto me despido, pues voy a jugarme por fin mi merecida partida.

0


Conversión funcional

Habi - 24/04/2009 13:06:17 - Tecnoesoterismo

A veces ocurre que es preferible expresar una determinada propiedad como condición sobre una expresión en vez de una sucesión de sentencias.

Veamos un ejemplo simple. Queremos comprobar que un cierto número X se encuentre entre otros dos cualesquiera A y B.

La forma normal de hacerlo sería ver cuál de los dos números A y B es el mínimo (y por tanto cuál el máximo, pudiendo ser iguales). A continuación se comprueba que X>=Min(A, B) y que X<=Max(A, B).

Sin embargo, esto puede expresarse con una simple fórmula y sin averiguar siquiera quién es el mínimo o el máximo. X está entre A y B si y solamente si (A-X)*(B-X)<=0. Esto bien puede ir como condición de un IF, al contrario que una sucesión de sentencias (en la mayoría de lenguajes imperativos).

Sea F(X)=(A-X)*(B-X). Es obvio que F(A)=F(B)=0. Y que para todo X entre medias, es mayor que uno y menor que el otro (+*- o -*+), luego el signo es siempre negativo. En el caso que sea mayor o menor que ambos, siempre será positivo (+*+ y -*- siempre es +).

Así pues tenemos una expresión booleana aplicable directamente en un IF, si estamos conformes con el coste de la multiplicación (respecto al de la llamada a una función, comparaciones e intercambio) y el resultado no desborda en rango. Si desborda, se usa Signo(A-X)*Signo(B-X) y arreglado.

Una función por el estilo más útil es Signo(A-X)+Signo(B-X), la cual nos devuelve 5 valores según el número sea menor que el mínimo, mayor que el máximo, el mínimo, el máximo o algo intermedio. Esto se deja como ejercicio para el lector.

Aplicado al caso anterior, X está entre A y B si y solamente si Abs(Signo(A-X)+Signo(B-X))<=1, lo cual es obvio si has hecho el ejercicio anterior.


Empecé a practicar este arte en mis tiempos con el Spectrum y su BASIC. Por aquel entonces el BASIC no tenía sutilezas como construcciones WHILE, REPEAT, ENDs para el IF y mucho menos procedimientos y funciones. Ni siquiera había etiquetas, pues cada línea iba numerada.

Y en concreto este dialecto no tenía ni un triste ELSE, mucho menos algo como un ON GOTO ni nada parecido. Sin embargo, tanto el GOTO como el GOSUB esperaban una expresión numérica. Así pues podía hacer por ejemplo un GOSUB 5000+500*A y saltaba a la subrutina adecuada, a partir de 5000 cada 500 lineas.

Se pueden ahorrar también de esta manera instrucciones IF, sabiendo que los operadores relacionales evalúan en {0, 1}. Es válido por tanto GOTO 1234*(A=9)+5678*(A=16), un LET A=27*(A AND 1)-42*(B=13) y cualquier expresión numérica que queráis, incluyendo incluso funciones definidas con DEF FN, etc.

El colmo de lo bizarro era generar en tiempo de ejecución una cadena con la expresión a evaluar y saltar a ella con GOTO VAL(A$), pues VAL convierte de cadena a número... pero esperando igualmente una expresión numérica en formato de cadena.

Ah, que tiempos cuando los lenguajes se parecían al ensamblador quisieran o no.

2


Radiollavero

Habi - 07/04/2009 15:10:48 - Chorradas

Radioluminiscencia: Fenómeno por el cual un material produce luminiscencia al ser bombardeado por radiación ionizante, por ejemplo partículas beta.

Espintariscopio: Instrumento para observar desintegraciones nucleares individuales; la imagen se genera por la interacción de radiación ionizante sobre una capa de fósforo.

Tritio: Isótopo radioactivo del hidrógeno, cuyo núcleo contiene un protón y dos neutrones.

Llavero: Utensilio en que se llevan las llaves.


^___^

5


Nigromancia

Habi - 25/02/2009 17:52:21 - Posts lúcidos

Cuando creé este blog hice que sólo pudiesen entrar quienes adivinasen un pequeño jeroglífico e hiciesen cierta operación con la palabra resultante; luego relajé mis criterios y lo abrí al público.

Ahora os propongo lo mismo para entender este post, sólo que sin jeroglífico. Y si por una pista alguien me preguntare, yo le respondiere: inerme zote.

5


Más microondas

Habi - 01/02/2009 20:47:51 - Tecnoesoterismo

Encuentra las diferencias entre:

Y:

Bien. Este es, o mejor dicho era, el microondas que los antiguos propietarios de mi actual piso se dejaron. Medio oxidado, lleno de mierda, sin bandeja, requemado y con un plato para suplir la falta de bandeja (con un borde metálico que causaba unas descargas de la leche, y que por otro lado explica lo quemado y lo oxidado).

No obstante, probándolo bajo circunstancias normales, el micro funciona, y bien. Así que un montón de componentes funcionales para mi colección:

Ahora es cuando debo hacer una advertencia: nunca, Nunca, NUNCA, ***NUNCA*** te pongas a trastear dentro de un microondas sin haber descargado el condensador de alto voltaje. Es esa especie de cilindro de metal aplastado, con dos conectores cubiertos por PVC negro, en el centro de la foto. Aunque algunos como este tienen dentro una resistencia para auto-descargarse, lleva algún tiempo. Salvo que te guste jugar a la ruleta rusa, hazme caso.

Además he conseguido un transformador, diodos e inductores A.V., un sistema de ventilación que reciclaré como extractor de humos, un temporizador / selector con su timbre, sensores de temperatura, una bombilla, motores, relé, interruptores, sensores de temperatura, ... y el magnetrón, por supuesto.

Ya veremos si lo dejo tal cual para algo indecente o lo destripo para quedarme con los imanes toroidales. En cualquier caso, los microondas son una mina de componentes caros.

5


Experimentos (IV)

Habi - 31/01/2009 0:53:12 - Tecnoesoterismo

Hace tiempo solía escuchar música en un lugar de internet de cuyo nombre si quiero acordarme: Pandora.

Ya no lo hago, pues restringieron su uso únicamente para gente de EEUU (debido a las restricciones legales de la música). Se puede entrar usando un proxy estadounidense, pero no es lo mismo.

En cualquier caso, es un lugar en el que te van poniendo música similar a la que escuchas, y tienes la opción de puntuar si te gusta o no la nueva que te sugiere. De esa forma, vas creando un perfil de cada cadena de radio definida de las varias que puedes tener, y vas descubriendo nuevos grupos, etc.

El otro día me acordé de eso, y me acordé de que tengo bastante música sin clasificar en el disco duro. Así que pensé hacerme algo similar a eso, sólo que un poco más... friki.

Así que empecé a programar. Primero le hice al programa el que fuese capaz de extraer audio digital de cualquier medio, usando para tal fin DirectShow; ya se trate de una entrada de línea o micrófono, sintonizadora, CD, ..., archivo mp3, wav, ogg, wma, ..., avi, mpg, wmv, flv, ... En general, cualquier cosa para la que se tengan codecs. Personalmente, tengo codecs que renderizan hasta archivos mod, s3m, it, ...

Para medir cuánto se parecía una canción a otra, pensé hacer un análisis de frecuencias. Para evitar meternos con números complejos, pasé de transformadas de Fourier clásicas e implementé una DCT (discreta de cosenos, que es siempre real).

Divido la canción por segundos y transformo; en otra dimensión, se ponen esas transformadas, lo que nos da una matriz bidimensional. A continuación se escala para todas las canciones por igual, y además los valores se transforman logarítmicamente y reescalan también para estar en las mismas condiciones de energía.

Aquí tenemos un par de ejemplos:

 

El primero pertenece a la canción "Within Temptation - Angels.mp3". Como bien se puede ver, aparecen unas franjas verticales de energía decreciente por bandas. Esto es debido a la compresión mp3, que enmascara rangos de frecuencias según sea su respuesta al oído. El caso extremo es en la derecha del todo, donde ha suprimido todas las frecuencias altas (que el oído ya no oye).

El segundo proviene de una pista de un CD, extraído directamente: "Mozart - Symphonie N°25 in g-Moll - KV 183 Allegro con brio.wav" (sí, también escucho música clásica). Aquí el decrecimiento de los coeficientes de frecuencias es gradual, y no se anulan las altas. También, como se puede ver, es menos monótono (en el tiempo) y más rico (en las frecuencias).

¿Es correcto escalar en el tiempo para poder comparar más fácilmente? Ya os contaré los resultados. De momento, ahora estoy con la última parte; pensaba hacer una matriz de pesos donde cada valor ponderase la diferencia de esa componente, definiendo el error como la suma de todos éstos. Y ajustar estos valores según lo haga de bien o mal (lo cual es equivalente a una red neural de una sola capa).

¿Alguna idea constructiva?

0


Concurso piramidal

Habi - 30/01/2009 21:32:24 - Posts lúcidos

¡Me han invitado a un concurso!

Lo organiza Araque [http://www.araquebelagua.com/2009/01/15/concurso-el-fuego/], y el premio es nada menos que un ejemplar de "El fuego" de Katherine Neville, una secuela de su libro anterior "El ocho", firmada por la propia autora.

Yanara [http://nosoloenlaces.blogspot.com/2009/01/el-fuego-de-katherine-neville.html] ha tenido a bien informarme de su existencia e invitarme; y he decidido participar.

Así pues, mis candidatos son:

Zarith -> http://zloca.blogspot.com/

Levtos -> http://fragataportuguesa.blogspot.com/

Tina -> http://tinaymag.spaces.live.com/

¡Suerte para todos! Y para mí, también.

2


Reglas del 10:
10 últimos   10 después   10 antes   10 primeros