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

Zarith dice: no, pero me puedo tragar una linterna si es necesario

Últimos hackeos

Habi - 18/10/2006 17:20:00 - Tecnoesoterismo

Se ha vuelto demasiado simple (será por el IDA, que es la caña para código muerto). No mencionaré el Cube Media Player porque hablé de él hace poco en su propio post.

Así que diré que hace algún tiempo encontré en The Underdogs el Knight Time. Es un juego antiguo y raro, de Titus. Uno de los dos primeros juegos para PC que tuve y el primero con gráficos decentes (aunque mi ordenador era XT tenía SVGA).

El juego eran dos discos de 5 1/4; por lo incómodo de cambiar entre ellos y de su propio tamaño, puse ambos en uno de 3 1/2, pero como estaba protegido siempre miraban al principio en la unidad de 5 1/4 para buscar la protección.

Por aquel entonces no fui capaz de desprotegerlo. Usaba trucos como desviar las interrupciones 1 y 3 y las usaba para sus propias rutinas, con lo que no había nada que hacer con el Debug o el D86 (que nadie diga nada del Soft-Ice, eso es para 386 mínimo). Tampoco funcionaban los desprotectores de la época, sería que tenía una versión distinta, en cualquier caso era la que estaba en Underdogs.

Con más años de experiencia, mejores herramientas y un morbo rozando lo frikiesco (o un frikismo rozando lo morboso, según se mire) lo abrí. Y fue relativamente simple, pues una vez hacía todas las comprobaciones de protección la decisión de si había o no protección se tomaba en un solo punto. Cambié el salto condicional y funcionó, menos de 15 minutos. Además determiné que estaba programado con un compilador de C raro (ni MSC ni TC o BC) con rutinas en Asm. Localicé las de teclado, gráficas, joystick, etc.

Otro ejemplo, el Marranos en Guerra, juego antiguo que no instala en núcleos de NT, pero que me gusta; después de engañar al instalador para que lo instalase en XP el juego funciona, pero al salir inutiliza el teclado y el ratón en las ventanas que hubiese abiertas antes que él, incluyendo el escritorio.

Menos de dos minutos (el record hasta ahora): veo en importaciones EnableWindow y EnumerateWindows, hago referencias cruzadas y veo que desde la misma función, la cual se encarga de quitar o devolver input a todas las ventanas menos ella misma (supongo que para no molestar, pues casca el juego si sale de pantalla completa). Parcheo el salto condicional de esa función para minimizar los cambios (sólo cambian 6 bits en un byte) y el juego va perfecto. Se ve que al final no la llama por alguna razón (casque silencioso).

El último ha sido un juego de DOS que adquirí hace poco en su versión registrada y que me encantaba de crío, el Moraff’s World. Volví a jugar a él y todo iba bien, hasta que fui a enfrentarme con el enemigo especial del nivel 16. No aparecía por ninguna parte, y en el mapa me decía que fuera al este cuando estaba ya en el borde este de la mazmorra.

Este caso fue bastante más complejo, pues he estado dos días con el IDA. He localizado como va todo el tema gráfico, la magia, la forma de las estructuras de datos usadas en el programa, los enemigos, el mapa,... hasta que al final he visto como es el formato de los juegos grabados, a imagen y semejanza de las estructuras en memoria.

Así que en el juego grabado en ese nivel, archivo 40.dun (4 por el personaje, 0 porque es el nivel por defecto; los 1-7 son las mazmorras en sí mismas, 32 niveles por cada uno), y saltando los 3 primeros bytes se encuentran los descriptores de enemigos de ese nivel, 6 bytes por cada uno, siendo el primero el del enemigo que buscaba, ese Shadow Dragon King. Y en efecto, el primer byte, la coordenada X era 88 cuando la mazmorra tenía 78 como máximo; parcheé a 76, y al cargar estaba a dos casillas al oeste de mí, así que pude enfrentarme, vencerle y obtener la bonificación +25 para mi Long Sword.

Además descubrí analizando todo el juego ¡que se pueden hacer trampas! Si se pulsa Alt.gr. + 1 te da 10 de vida por la patilla, si lo dejas pulsado no para de subir, aun por encima de la vida máxima del personaje.

1


Peñazo post

Habi - 17/10/2006 12:34:00 - Tecnoesoterismo

¡Atención! Este post contiene material de teoría de compiladores explícito. Si no se considera preparado, no lo lea (o sí, y suelte algunas de estas frases en sus reuniones de amigos y quede como un... friki).

Hoy voy a hablar del lenguaje ese que inventé y el cual tengo a medio implementar.

Lo primero que tengo que decir es que el código está organizado lógicamente en espacios de nombres anidados. El código fuente viene en archivos, los cuales no tienen necesariamente una correspondencia con esos espacios de nombres. Cada módulo puede tener varios (obligatoriamente debe contener al menos uno), y un mismo módulo puede estar definido en varios archivos (basta con usar el mismo nombre del espacio de nombres, el contenido se mezcla).

El compilador incluye también un intérprete pues, bajo ciertas condiciones, una función puede ser marcada para ser ejecutada en tiempo de compilación, y de esa manera generar código para ser compilado utilizando la potencia expresiva del propio lenguaje, y haciendo obsoleto el concepto de procesador de macros.

Cualquier convención de llamada de funciones, uso de registros, inclusión inline, y en general directivas de compilación no se pondrán como pragmas de preprocesadores, casos especiales de comentarios o palabras reservadas del lenguaje. Sencillamente serán etiquetas con valores dentro del propio código, como si las propias funciones fueran objetos en un lenguaje de objetos sin herencia.

El lenguaje es en sí mismo imperativo, pero con notación funcional y considerando como funciones todos los elementos sintácticos (lo cual es MUY útil en el caso de los IF para el tema de asignaciones). Permite anidar funciones, y tiene orientación a objetos con herencia simple e interfaces (ortogonales entre sí, claro). El nivel semántico queda definido por el sangrado (libre) del código, así no se necesitan delimitadores sintácticos a la { } o palabras reservadas del tipo Begin - End.

Tiene un sistema de tipos estricto y fuerte, con

La sintaxis a nivel externo es muy simple y matemática:

NameSpace Fulanito

Suma: Integer * Integer -> Integer
Suma(x, y)=
    Resultado: Integer
    Resultado = x + y
    Return Resultado

Por ejemplo; para desambiguar una variable que contenga una función de una declaración de función, hacemos un tipo único agrupado: (Integer * Integer -> Integer) en vez de la declaración de Suma. De igual manera, (Integer * Integer) -> Integer nos define una función que sólo tiene un parámetro, una tupla de dos valores enteros.

La compilación se hace en dos pasadas, pues se pueden usar variables y funciones definidas fuera de orden; el compilador mantiene todo en su base de datos de memoria, eliminando la necesidad de código objeto. Las librerías estáticas se enlazan en su forma de código intermedio, para así poder aplicar optimizaciones avanzadas al programa en conjunto (y de nuevo, no requerir código objeto propiamente dicho, sino una base de datos de espacios de nombres nativa al compilador).

De acuerdo, esto usa bastante memoria y enlentece el compilado, pero genera aplicaciones mucho más eficientes.

Finalmente, después de hacer las optimizaciones buenas, se traduce a la plataforma y se hacen las típicas optimizaciones de registros y mirilla típicas de la plataforma y a correr.

Si alguien ha entendido algo, ¿algún comentario?

3


Recuerdos

Habi - 08/10/2006 20:06:00 - Posts lúcidos

No diré el como, cuando, dónde o por qué. Sencillamente, fui a ducharme en casa ajena.

Aquel fue el Baño de Elección, pues cada 10 segundos había que hacer una elección. La primera, por donde entrar en la bañera, pues entre los 200 botes, velas, incienso, cacharro de música con CD New Age y un travesaño de madera en el centro con las esponjas la cosa estaba un poco complicada.

La siguiente, las esponjas; había para elegir una esponja recubierta como de esparto, una natural, un guante también de esparto y la típica artificial de colores vivos, con la carita de un conejito.

El gel fue más o menos fácil de localizar, no así el champú. Después de descubrir 2 mascarillas para el pelo, un tubo de gel verde con arenilla (exfoliante), de descartar los geles y jabones porque tenían "aceites esenciales" y cosas peores, y las esencias de cosas, encontré un bote verde que ponía "Fructis - para pelo teñido" o algo así.

En cuanto me lo di supe que la había cagado: 1) no hacía espuma 2) dejaba el pelo aceitoso. Después de leer y releer el bote vi en letra pequeña la palabra "acondicionador".

De todo pasó por mi mente, incluso lavarme con el jabón líquido de manos del lavabo (que por cierto, olía mucho mejor que todo lo demás, de esos de leche y miel); finalmente pude encontrar los champús de verdad (y ninguno Fructis) y salir de aquel trance (no sin antes quitar los pelos de la esponja del conejito; ¿por qué atraen tanto a los pelos las esponjas sintéticas esas?). Otra cosa memorable es encontrar cepillos planos, redondos, pinchos para el pelo, peinetas de esas que no se para qué valen... pero ningún peine.

¡Una postguerra con jabón lagarto os daba yo!


No debí haber dicho eso del jabón lagarto, ahora tendré que contar esto y cambiar el nombre al post.

Esto fue en cuarto de EGB, nos encargaron en trabajos manuales (antes le llamaban "formación pretecnológica", y ahora vaya usted a saber) tallar con un cuchillito cutre alguna cosa en una pastilla de jabón lagarto. Teníamos un mes, para trabajar en casa, y al final las mejores irían a la exposición del cole, con cosas de todos los cursos.

Y yo, que soy vago por naturaleza, como que me dio por saco. Empecé a cortarle las esquinas para que no pareciese un rectángulo (no sabía decir por aquel entonces paralelepípedo ortoédrico) y cuando tenía recortadas dos lo vi claro: sería un pez, sólo había que recortar un poco por detrás para la cola, sacarle un ojo y boca, y limar los lados para que no pusiese lo del jabón lagarto.

Con el trozo de la boca (otro rectángulo) y el del ojo me di cuenta de que si los mojabas (sí, los chupé) se pegaban entre sí, y que parecía una pipa; se la puse al pez en la boca y lo bauticé como "pez con pipa". Total: una tarde.

Allí llevé la mierda esa con trabajo cuasi-nulo y no se porqué pero le encantó a la seño Ángela. ¿Sería ese el principio de mi surrealismo? En cualquier caso, el pez fue el representante de su clase, y estuvo varios meses de exposición. Que pena que no diesen premios :/.

17


Laberinto, silencio, duda.

Habi - 06/10/2006 22:47:00 - Yuyus

Tengo un sistema operativo distinto de el del resto de las personas, lo se.

No entiendo a la gente más o menos normal y la gente más o menos normal no me entiende. Ya que el hardware parece ser el mismo y compatible, el problema debe estar por tanto en el software.

Supongo que es lo que tiene ser matemático, informático, friki en general y surrealista empedernido; y cuando por fin encuentro una definición axiomática escrita compatible al 98% con mi paradigma resulta que soy satanista.

En fin, haré prukogi 10 veces como penitencia.

Asumo mi posición y mi lugar. Es y será lo mejor.
Pereza, vagancia, desidia. Es una enfermedad.
Podría hacerme trampas y saltarme los dos pasos que me quedan. ¿Lo intentaré?
"Estoy en las tinieblas. No... las tinieblas están en mí".

Corre por el bosque, los rayos del sol le tocan... ¡J!

Por él todo corazón... bota.

¡Gabapapitch!

Me preocupo más en como está programado el blog que en el contenido del mismo.
¿A que molan estos postits?

6


iPod pastelón

Habi - 04/10/2006 11:06:00 - Tecnoesoterismo

Este es el logo cutrefalsoHace algún tiempo, el cuñado de mi jefe se fue de viaje a China. Y de allí trajo unos “iPods de 8 GB, que no los han sacado todavía aquí, y muy baratos”. En este caso no hablamos de un tocomocho sino de una estampita, los chinos le engañaron como idems.

Quizás de frente pueda engañar, si obviamos los mandos cutrillos, la inscripción de arriba y el material que se pringa con mirarlo. Por detrás, a pesar de tener serigrafiado el logo de Apple, tiene graves fallos ortográficos, literalmente: “Designsd by Appls in Callfomia Asssmbisd in China”. El manual de instrucciones es peor, no sólo ha pasado por un cutretranslator peor que el de la AltraSound, sino que ha sido OCReado (si no, no me explico estas faltas y errores).

El CD de drivers es un CDr, pone “MP4 driver” y… ¡está virgen! (como a mi me gustan). Unos cascos Cutres con C mayúscula y una caja con la inscripción “MP4” (nada de Apple) con una foto de otro reproductor blanco completan tan maravilloso pack.

¿Cómo es que lo tengo yo? Compró varios, al módico precio de 70€ cada uno, y uno de ellos fue para las hijas de mi jefe. Aparte de que saltó un virus en cuanto se enchufó el cable USB, al meter canciones se les “multiplicaban”. Lo cual es normal: estaba trampeado para parecer de 8 GB, pero en realidad es bastante menor. Al formatear va bien, pero el sistema de archivos se sobrescribe cíclicamente en cuanto se meten cosas. La corrupción está asegurada. Como mi jefe iba a tirarlo, le dije que me lo diese para aprovechar la pantalla (128x128x65K).

En efecto, es una falsificación total. El cacharro dice que su FW es SC85051f, ACT_V3.5.25. He mirado por Internet y hay gente a la que también se los han vendido como un modelo de Sony. Por el USB el FW se identifica como 3.5.37, y nos da la primera pista: Wilson Co. Ltd. Por dentro, el chip de memoria es de 128 MB (se puede sustituir directamente por uno de hasta 2 GB, aunque es de montaje y con patillas pequeñas). El FW estaba modificado para mostrar un logo mal hecho del iPod al arrancar, y tenía quitada la opción de radio FM (lógico, pues no tiene ese chip aunque sí todos los de soporte; viene en DIP, sería fácil de ponérselo).

Estos nuevos reproductores “MP4” son cacharritos de bajo coste y muchas prestaciones muy comunes en china, hasta tienen un estándar conocido como S1MP3 para reproductores de música, y MP4 para los de nueva generación (videos en AMV, fotos JPG, etc).

El cerebro de todo esto es un ATJ2085P. Es un chip que tiene su DSP de 24 bits, su DMA, sus puertos IO… y un núcleo de Z80 a 60Mhz. Un Z80 a 60Mhz (el del Spectrum va a 3,5 cuando la ULA lo permite), con 128 MB de memoria y una pantalla 128x128x65K. ¡Diox, es como para correrse de gusto!

Después de un susto pequeño con un firmware y de otro grande con otro, lo tengo como debía ser original, aunque sin chip de radio. Posiblemente se lo ponga. Lo de la flash de 2 GB lo pensaré, porque no es fácil.

Aunque sea un timo de lo peor, estoy enamorado de la maquinita. Tiene de casi todo (MP3, WMA, WAV, ACT, AMV, MTV, JPEG, GIF, graba audio, tiene agenda, trae juegos, vale de disco, tiene sistema de protección / encriptado…) y además puedo hacer mis programas y flashearlos. ¡La caña de Españ… de China! Dejaré un par de fotos en la galería.

0


Vicio

Habi - 02/10/2006 12:13:00 - Posts lúcidos

Hoy voy a hablar de los juegos de PC que me han gustado. Lo haré por orden temporal relativo a mí, por supuesto.

Mis dos primeros juegos fueron el Green Beret (del que pasé) y el Knight Time (de Titus, que buena compañía), el cual me gustó bastante, a pesar de ser de habilidad.

Otros buenos que vinieron en breve fueron el Immortal, Titus the Fox (que pique con mi sobrina M), el Jabato (la única conversacional en PC, el resto fueron todas en Spectrum), y el Simcity.

Por esa época el F-29 retaliator, Another World, Budokan y Lemmings. Me gustaba mucho uno cutroso, el Moraff’s World.

Y entonces conocí el amor, las aventuras gráficas: mi primera fue el Loom, seguida del Monkey Island y el Larry I (semiconversacional). Lo pasé particularmente bien con el Maniac Mansion. También jugué a otros, como el Metal Mutant, el Battle Chess y otro curioso, el Exterminator.

Después vino la época dorada, los CD-MIX. Worms, El día del tentáculo, Baku-baku animal, Afterlife, Tie fighter (remasterizado), Master of Orion 3, Heroes of Might And Magic 2 (pique con mi sobrina L) y 3, el Magic the Gathering computerizado y *EL* juego por excelencia: el Dungeon Keeper.

En breve vinieron el Theme Hospital, Marranos en Guerra, Vampire – Redemtion, StarCraft y más recientemente el Vampire – Bloodlines y el NeverWinter Nights.

Esta es mi lista, creo que no me dejo ninguno de los que realmente me gustaron. ¿Alguien tiene algo que declarar?

2


6 6 6 6

Habi - 26/09/2006 19:41:00 - Paranoias

Nuestra historia comienza hace algún tiempo, cuando a tres amigos que se hablaban bastante por Internet pero poco en persona les asaltó una paranoia: podría morir alguno, y podrían pasar días, semanas, e incluso meses sin que ninguno de los otros se enterase. Sencillamente pensarían que no se conectaba por algo, o que no coincidían.

Así que uno de ellos, el más friki informáticamente hablando y al que llamaremos X0, decidió crear una pequeña aplicación on-line con la que se permitiese dar fe de vida. Era una página Web dentro de su propio blog en la que se podía dar fe mediante un código propio a cada persona, y a la vez se veía cuándo cada uno de ellos dio fe por última vez y cuánto tiempo hacía que lo hizo.

Y los tres vieron que esto era bueno. Así pasaron las mañanas, tardes y noches de los primeros días.

Pero con el tiempo, se fueron descuidando. Incluso la paranoica X1, que en un principio daba fe 57 veces por hora como media, se empezó a descuidar.

Ocurrió que a los 6 días, 6 horas, 6 minutos y 6 segundos de no dar fe por parte de X0 fue publicado un post extraño en su blog. Quien primero lo leyó fue la asustadiza X1, la cual, alarmada, fue a comprobar la página de fe de vida. 
Y allí tenía X0 en su entrada 6 días, 6 horas, 6 minutos y 6 segundos; pulsó el botón de recargar varias veces, porque le dio muy mal fario, pero la misma entrada seguía ahí una y otra vez. El contador de X0 se había detenido.

Aunque estaba asustada, no hizo nada para comprobar si a X0 le pasó algo. Esperó durante interminables minutos hasta que por fin se conectó X2, y le contó lo sucedido. "No puede ser nada, si ayer hablamos con él por el Messenger", dijo X2. Dos días después, tras no ver durante todo ese tiempo a X0 por Internet, X1 y X2 decidieron ponerse en contacto con él, pero su móvil estaba apagado y nadie cogía el teléfono de su casa. Así que decidieron ir los dos personalmente a su casa el fin de semana, y quedaron el sábado. Pero con todo este lío, el trabajo y otras cosas, X2 se olvidó de actualizar su fe de vida durante 6 días, 6 horas, 6 minutos y 6 segundos.

El sábado, X1 espero hora y media antes de darse cuenta de que X2 no iba a ir; y también tenía apagado su móvil. A la vuelta a su casa, se dio cuenta de que el contador de X2 también se había parado en 6 días, 6 horas, 6 minutos y 6 segundos. "No puedo ir a la policía ni a nadie, no me creerían. Y si han desaparecido, yo sería la sospechosa" pensó X1 cargada de razón. Finalmente se armó de valor y fue a las casas de sus amigos.

Allí no había ni rastro. Los buzones tenían otros nombres, los vecinos no los conocían, y en sus casas no vivía nadie desde hacía mucho tiempo. Como si nunca hubiesen existido. Tampoco estaban en las listas de personas desaparecidas, guías de teléfonos o bases de datos a las que tenía acceso.

Por un lado, la mente de X1 deseaba dejar pasar 6 días, 6 horas, 6 minutos y 6 segundos sin dar fe para ver que sucedía, pero esa idea le aterraba por otro lado. Así que decidió dar fe tan a menudo como pudiese. Sí, eso haría, y no le pasaría nada.

Pero la siguiente vez que fue a darle al botón, algo pasó: no se actualizaba la página. Tampoco decía que el código personal estuviese mal puesto o que hubiese ocurrido un error. Sencillamente, el tiempo corría, inexorablemente. Y cada vez le quedaba menos tiempo. Pulsó otra vez, y otra, y otra... en distintos momentos del día, en distintos días... pero nada.

Y así, el reloj de la cuenta llegó a 6 días, 6 horas, 6 minutos y 6 segundos.

3


-

Habi - 21/09/2006 23:51:00 - Yuyus

Blanco. Vacío. Nada.

Un circulo de aire rancio y putrefacción.

Así. Lo merecen. Sea pues mi voluntad. 13.

Y la muerte vino. "¡No les mates todavía!", le dije. Me miró, entendí su oscuridad.

Que agonicen, mi niña. Muerte para todos.

Incluso para mí.

0


Tas podrío

Habi - 20/09/2006 17:57:00 - Chorradas

Blog.Worm

0


Pretérito

Habi - 19/09/2006 13:43:00 - Yuyus

Invoqué a las 721 de los 80, y todas ellas vinieron a mí; y sus voces ajadas me devolvieron a mi infancia.

Libro de escolaridad. Todo encaja.

Imágenes yuxtapuestas de estados mentales en olvido.

Sólo P pudo devolverme al presente, con sus consejos sabios y necios a partes iguales (y por ello, efectivos).

Ahora se lo que he perdido y lo que he ganado.

0


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