Aprende programación






31 ago. 2009

Screencast Solo Programadores 142 - Matamarcianos con Laszlo y Eclipse


Este screencast está construido debido a una solicitud via email por una persona que nos pedía realizar algo con Laszlo. En esta ocasión podreis ver una matamarcianos bastante bueno de aspecto gráfico. De este videojuego podriamos destacar el uso de planos de scroll que dan una sensación de velocidad y perspectiva. De hecho los planos de scroll, antes de la llegada del 3D, era algo que se "vendia" como característica del videojuego (Ej: "Tiene 8 planos de scroll"). En esta ocasión estos planos los hemos construido utilizando ficheros .png por lo que hemos podido crear imagenes semitransparentes como son las nubes. También teneis hasta 5 fases diferentes que cambiarán cada 10.000 puntos.

A parte de eso, comentar que cuando me solicitaron realizar algo con Laszlo no lo habia utilizado nunca pero sentía bastante curiosidad por lo que había oido hablar de él. Según mi opinión, es uno de los lenguajes/plataformas que se ha sabido poner en la ola de las aplicaciones RIAA siendo uno de las primeras herramientas que daba todo en un entorno de servidor-lenguaje propio declarativo y además permitia interfaces espectaculares. Como desventajas a tener en cuenta son que generan flash, al menos en aquel año, pero creo que estaban trabajando en una versión javascript (o lo he soñado, no sé). Actualmente, tiene muchisima competencia y más completa, y quizás más compatible con lenguajes y estandars a los que estamos acostumbrados.

Finalmente, aquí teneis el juego que espero que os guste. Comentar que como compila a Flash encontrareis en el bin un fichero .swf y podeis jugar directamente (No hará falta montar todo el servidor. :) )

27 ago. 2009

Screencast Solo Programadores 141 - J2ME - Boxeo en el movil


Y aquí viene un screencast donde programaremos un juego de los que más me gustan. Estoy seguro que en algún momento habeis jugado al típico juego de boxeo de la Nintendo Wii u otras versiones anteriores. Es un juego cuya perspectiva es en primera persona y la estrategia es golpear al contrario pero también defenderte. En esta ocasión hemos programado un juego similar utilizando Java Micro Edition para poderlo portar a un movil.

Uno de los problemas que tienen los juegos java en moviles es que no todas las pantallas tienen la misma resolución. Por ello, hay a veces que realizar un escalado de la imagen para adaptarlo a la resolución del movil. En nuestro caso, podremos ver que todos los x,y que se calculan pasan por una función de escalado. Todos los dibujos son poligonos, no utilizaremos imagenes. En el caso de las imagenes el problema del escalado es mayor ya que en su día no existia un drawImage que permitiese un escalado. En las versiones más actuales del JME si se permite ya pero hay que tener en cuenta que no todos los moviles tienen la última versión de Java.

Hay que tener en cuenta las dos barras superiores. La roja es la vida que te queda y la azul la fuerza. La fuerza decrementa un poco si golpeais al contrario. A medida que esa vaya bajando los golpes serán menos efectivos por lo que aunque acerteis a golpearle no le quitareis casi vida al contrario. (No vayais a hacer como un compañero que se lo instaló en el movil para jugar y me dijo que no podia ganar nunca. Claramente daba golpes uno trás otro sin descansar).

Durante el descanso hay dos posiciones: poner los puños arriba o abajo. Es importante que los pongais donde penseis que os va a pegar el contrario ya que si acertais el golpe será parado y no os quitará energía. Si recibis el golpe, lo notareis pues se pone la imagen roja durante un fotograma. Y creo que nada más ... 4 y 6 golpear, 2 y 8 subir y bajar puños. Que lo disfruteis !!! (Y disfruteis el screencast "making off")

25 ago. 2009

Screencast Solo Programadores 140 - Java3D - Patos al agua

En el siguiente screencast vamos a desarrollar una pequeña aplicación con Java3D. La animación consiste en un grupo de patos que nadan en un estanque de manera circular. Durante el video podremos ver como instalar las herramientas necesarias, como diseñamos los patos y les damos movimiento.

Es una práctica muy fácil para personas que quieren conocer Java3D. Actualmente, también hay más herramientas y más potentes para Java como JOGL para el diseño 3D.


23 ago. 2009

Experimento práctico - ¡¡¡ Vamos a romper MD5 !!!


En esta ocasión me gustaría proponer un experimento para que podais participar: ¡Romper el algoritmo MD5!. Bueno ... de hecho, ya está roto. Hace ya unos años que explicaron que se encontraban colisiones. Me gustaría romperlo de una manera muy particular. Para el que no entienda de que estoy hablando, vamos con un poco de historia.

Lo primero que creo que debo explicar es:
"¿Que es MD5?".
Este es un algoritmo que permite crear un código de 128 bits a partir de un documento, texto o fichero. Las propiedades teóricas de este código es una función sin inversa, es decir a partir del código no se puede sacar el documento o texto original. Por ello se suele utilizar para guardar las claves, guardando en vez de la clave en texto plano, el código obtenido. Otra supuesta propiedad que tiene es que su clave es unica. Es decir, dos documentos no pueden generar la misma clave. Por ello, se utiliza para comprobar que cuando descargamos un documento de internet podamos verificar que todo ha llegado y no he descargado otro que alguien haya modificado con un virus o algo parecido.

Pues bién, esta última propiedad de dos documentos siempre generan claves diferentes es lo que hay en entredicho. En realidad hay un ley matemática que en resumidas cuentas dice "de donde no hay no se puede sacar". Esto significa que es muy utópico que en 128 bits seamos capaces de representar todos los documentos que podamos generar sin que se repitan. Intentar que todos los posibles documentos que ocupan megas se representen en 128 bits, incluso en 160 como SHA1, no tiene razón matemática por la limitación de la clave. Si es cierto que cuantos más bits tiene la clave, menos probabilidad, pero no es imposible.

¿De que noticia está basada el experimento?
El experimento que me gustaría proponer tiene como referencia una noticia del 2006 en el que un australiano recurrió una multa de tráfico. El caso es que la defensa alegó que la foto de la policía estaba modificada por haber cambiado la matrícula del coche. En ese momento los técnicos de la acusación ("policia") comentaron que eso era imposible porque guardaban también la clave Hash(MD5) de la imagen capturada. La parte de la defensa les pidieron que demostrarán que era imposible crear claves iguales a partir de diferentes imagenes, pero estos no supieron demostrar esa propiedad y el hombre se libró de pagar la multa. (No sé si es verídico pero esta noticia apareció en varios sitios).
http://www.geonoticias.com/noticias/software/usar-md5-para-multas-de-tr%E1fico.html

¿En que consiste el experimento?
Pues bién, me gustaría hacer eso mismo. He preparado dos imagenes del mismo coche pero uno con la matricula manipulada con el gimp y el objetivo es precisamente este, conseguir que las dos imagenes tengan el mismo MD5 sin que la imagen del coche quede alterada a la vista.



¿Y como lo podemos conseguir?
En los ficheros que podeis descargar teneis dos imagenes BMP de 24 bits con los coches. Estos ficheros almacenan la información rojo-verde-azul uno en cada byte. Un color por lo tanto se representa en ocho bits y segun sea su intensidad de color el valor del byte va incrementando.

Ej: Imaginemos que tomamos un byte rojo. Si el valor que tiene es '00000000' significa que no existe rojo en ese pixel y si el valor que tiene es '11111111' significa que tiene la tonalidad roja al máximo. Mezclando este byte con los otros dos bytes es cuando podemos crear otros colores. Ahora bién, no todos los bits tienen la misma importancia. Los bits de menos peso prácticamente son inapreciables al ojo humano, y eso es lo que vamos a aprovechar. Si tenemos el siguiente byte '11111111' y lo cambiamos por '11111110' vas a comprobar que el color es el mismo. En realidad no lo es, pero tu no lo detectarás. Incluso el segundo bit también podríamos cambiarlo '11111111' por '11111100' y seguirás viendo el mismo color.

Pues bién, he puesto a disposición para que podais descargar un algoritmo en java que hace precisamente esto. Comprueba que el MD5 de la imagen A y la B sean iguales. Si no lo es, modifica 2 bits aleatorios en la imagen de los que tienen menos peso y vuelve a comprobar si coincide el MD5 de la imagen A y B.

¿Y es posible que exista una colisión matematicamente?.
Las imagenes de estos coches tienen un tamaño de 450x300. Esto significa que hay 135000 pixeles. Cada pixel tiene 3 colores RGB y de cada color modificamos los ultimos 2 bits -> 135000 * 3 * 2=810000 bits que podemos estar cambiando. Es decir, que el número de documentos posibles que podemos generar es 2^810000 que es muy superior a 2^128 del MD5.

¿Y en cuanto tiempo se puede obtener?
Aquí es donde está la pega. Este tipo de algoritmos son lo que se denomina "por fuerza bruta". Es decir, probar cosas hasta que sale. Ahora mismo en el código hay un sleep de 50 milisegundos para que si lo poneis funcionando, podais estar haciendo más cosas y el ordenador no se quede colgado. Este valor lo podeis cambiar. Si lo dejais como está se supone que prueba unos 14.400.000 casos al día. Es decir que para comprobar todos los casos tardaría unos 2^128/((14.5 millones)*365) = 64741698424836085133823174929,941 años. (Creo que es más probable acertar con el salvapantallas de buscar vida extraterrestre). Yo en su día lo puse durante 1 semana y finalmente lo quité. Ahora lo he vuelto a intentar a ver si hay suerte :).

En todo caso, es más interesante entender como funciona el algoritmo MD5 y atacar por ahí. Así que si quereis intentarlo de otro modo, adelante!!.

Os dejo aquí el algoritmo de fuerza bruta por lo quereis probar suerte y quien quiera usar otros métodos, perfecto. Quién consiga crear el mismo MD5 le publicaremos algún tipo de noticia en su nombre y lo intentaremos promocionar por meneame y webs parecidas. Creo, aunque me puedo equivocar, que este experimento concreto no se ha hecho en el mundo, al menos hecho público, por lo que lo veo muy interesante.


20 ago. 2009

Videojuego retro en QBasic - Zona Line 2 (Clon del Tron)


A continuación vamos con un juego retro. Este es el juego propio más antiguo que aún conservo (del año 1995 aprox). El código fuente que podreis descargar está diseñado para QBasic. Este era un compilador/interprete para Basic que se regalaba con MSDos.

Es muy curioso como se valoran las cosas según experiencias anteriores. Cuando inicié con QBasic me sorprendió gratamente ya que no tenía que poner en número de la línea al principio. Esto que parece una tontería, no lo es. En el antiguo Basic era obligatorio poner un número de línea por lo que tenias que tener muy claro que es lo que iba a realizar la aplicación y en cuantas líneas lo ibas a realizar. Existían trucos como númerar las líneas de 10 en 10 para de esta forma si necesitabas poner líneas en medio tenías 9 números más. La eliminación de los números en las líneas supuso un gran avance que convertía los lenguajes de programación en algo más humano. De hecho, ese es el futuro de la programación. A medida que los lenguajes evolucionan, intentan emular más a la perspectiva humana como por ejemplo la programación orientada a objetos. Para mí, los lenguajes del futuro estarán orientados al modo de ver de las personas, e incluso, a pensar y tomar decisiones. Aquí se abre otra reflexión pero que la trataré en otro hilo ¿Como se comenten menos fallos? ¿Intentar que el programador piense y decida o que el lenguaje de programación piense y decida? Actualmente, no conozco lenguajes de programación que tengan IA y sepan decidir que hacer cuando hay un null, una situación inesperada o incluso que se comunique con el usuario final para en caso de duda de elegir opciones y aprenda (al igual de en el desarrollo ágil pero interaccionando directamente con el programa), pero darle tiempo...

Volviendo al tema del juego, este está básado en la famosa pelicula Tron en la que motos cibernéticas son dirigidas en un campo de batalla y dejan una estela en forma de muro. El objetivo del juego es conseguir que la otra moto se estrelle. Aquí teneis una espectular escena de la película :)


El juego básico, líneas que se mueven y se estrellan, es muy fácil de desarrollar. De hecho cuando faltaba el profesor en clase de programación, en 5-10 minutos programabamos uno y pasabamos la hora jugando entre varias personas :). Sin embargo, esta versión esta mejorada permitiendo elegir entre varios paises y cada uno tiene algo especial. Algunos lanzan bombas o estelas como Francia, España y URSS, otros son defensivos como Italia o Canada. Las teclas del juego son 8,4,6,2 para moverse y tecla espaciadora para lanzar la "magia" (aunque hay algunos que la propia característica la usan siempre y no utilizan el espacio como el caso de Brasil o Canada) . Comentar también que las "magias" hay que capturarlas. Podreis ver unos circulos en los que hay que pasar por encima.

Para que no os asusteis, comentaros que al principio aparece al cambiar cada mes un mensaje de que se van a borrar los Hits. Esto es solo que las puntuaciones se reinician al cambiar de mes.

Por último, como es un juego muy antiguo, seguramente os irá muy rápido por la velocidad del procesador. En aquél momento, los ordenadores tenían un botón "turbo" para poner el procesador a la mitad de la velocidad. Ahora está todo más sincronizado con el tiempo real, en vez de con la velocidad del CPU. Sin embargo, para jugar a juegos antiguos a una velocidad normal es necesario un emulador de MSDOS en procesadores antiguos. Si quereis podeis instalaros DOSBox. Os explico los pasos:
1-Descargar e instalar DOSBox.
2-En la opción del menu nueva, ir a DOSBox->Configuración->Editar configuracion.
3-Cambiar la linea cycles=auto por cycles=max. (A mí con esto me va más o menos a la misma velocidad del 486 de 66Mhz).
4-Ejecutar DOSBox en el menú.
5-Escribir "mount c rutadeldirectoriodelZL2"
6-Escribir "c:" y finalmente ejecutar el bat "ZL2"
Y con esto ya estaría.

El código fuente lo teneis en el fichero con extensión .BAS. Lo escribi hace mucho así que no seais muy críticos. Recientemente fui a leer ese código y no entendia nada :)

Y no me enrollo más ... que me ha salido un post muy largo. :)

19 ago. 2009

Screencast Solo Programadores 139 - Gráficas dinámicas con PHPLot


En esta ocasión teneis un screencast para las personas interesadas en PHP. La mayoria de las personas conoce lo fácil que es poner una imagen en un html. Sin embargo, ya menos personas sabrían crear esas imagenes de manera dinámica a partir de unos datos obtenidos de una base de datos, servicio web, fichero, etc. En este video aprenderemos como crear gráficas empresariales utilizando una herramienta llamada PHPLot.

Durante el video veremos como instalar un servidor apache y dar servicio para ficheros php y a continuación se explicará como configurar y utilizar esta librería mostrar estas gráficas dinámicas.

En su día también existian otras alternativas para PHP como JpGraph. Sin embargo ,PHPLot me gustó por lo simple que era ya que su competencia directa(JpGraph) tiene una jerarquía de clases más compleja y, como consecuencia, una línea de aprendizaje más lenta (aunque los resultados con JpGraph son mucho mejores que con PHPlot).

17 ago. 2009

Screencast Solo Programadores 138 - Aprendiendo inglés


El siguiente screencast tratará de programar una aplicación utilizando Macromedia Flash 8 Profesional. En este caso crearemos una aplicación de preguntas y respuestas sobre traducción de palabras en inglés. Las palabras se leerá de un XML todas las palabras predefinidas. A continuación mostrará la palabra en español y solicitando la traducción. En el caso de acertar se incrementará la puntuación mostrando finalmente la nota obtenida.

Al margén de la programación, también realizaremos una explicación de diseño utilizando degradados y edición de imagenes utilizando gimp. Además aprenderemos a crear un fichero .ico. y finalmente explicaremos como crear un CD autoarrancable de manera que se ejecute el fichero .exe que haya generado con Flash al introducir el CD.

Este tutorial es ideal para personas que deseen conocer el uso de Flash.



14 ago. 2009

Screencast Solo Programadores 137 - Buscando la pareja


En el siguiente screencast programaremos un juego realizado unicamente con botones. El juego consiste en esconder parejas de objetos, números, letras o lo que sea e ir descubriendolos. Para ello hay que hacer click en dos botones y descubrir lo que hay en estos. Al hacer click en dos casillas con elementos iguales estas desaparecerán. El objetivo del juego es hacer desaparecer todas las casillas antes de que se acabe el tiempo.

Desde el punto de vista técnico, es un juego desarrollado con Visual Studio 2005 utilizando lenguaje Basic. Veremos como configurar las propiedades en modo diseño y en modo ejecución, aplicar un icono y finalmente generar un exe. Este tutorial estará orientado a personas que acaban de iniciar y quieren comprobar como funciona VS.NET

13 ago. 2009

Comunicando podcast 113 - Distribuciones Linux


Ya hace algunas semanas que se publicó ... pero sigue estando el número más reciente. Hace poco nuestro amigo Nacho López del podcast de Linux Hispano y un servidor iniciamos una sección en el podcast de comunicando. La verdad es que es un honor que Jose Antonio Gelado nos haya dejado llevar a cabo esta sección ya que "Comunicando podcast" es quizá el podcast de más prestigio de habla española por ser el pionero y del que aprendí trucos como la importancia de nombrar la fecha al principio del podcast y otras cosas.

La sección tratará de software libre y en esta primera entrega hemos hablado precisamente de Linux. No entramos mucho en profundidad ya que lo que hicimos es repasar las distribuciones y algunas denominaciones para personas que no saben por donde empezar. En este número quién realmente "corta el bacalao" es Nacho ya que mi nivel es más bién de usuario.

Aquí teneis el link de la noticia y el audio del podcast.

11 ago. 2009

Videojuego en java - Break ball 3D


Es curioso como una misma cosa puede tener valor diferente según la persona que lo desee. Para mí este juego tiene un gran valor sentimental pues fue mi primer artículo en la revista "Solo programadores" alla por el año 2003. En este conocí a Carlos Laparra, redactor-técnico de la revista de entonces, y según mi punto de vista, un gran profesional y una gran persona.

Mi gran sorpresa fue que no solamente se publicó el artículo, sino que fue el tema de la portada de ese més. En aquella época de novedades profesionales para mí, estube con una sonrisa de oreja a oreja durante varias semanas enseñando la revista a todos mis conocidos cercanos.


Sobre el juego, este consiste en un clon del Pang que permite jugar en 3D, es decir el jugador podrá avanzar hacia el fondo de la pantalla. Cuando lo finalicé y empecé a jugar en serio comprobé que estaba complicado disparar a la bola y entonces hice una modificación para que pulsando el botón derecho del ratón se convirtiese a 2D (Curioso no!). Tiene 10 fases diferentes aunque yo no he logrado pasar de la 5º o 6º en 2D y de la 3º en 3D. También puedes utilizar cuatro tipo de armas disparando a las cajas que van apareciendo en la parte superior. El lenguaje utilizado es java y es un applet que se ejecuta en un html.


Volviendo al tema de la revista, ahora mismo no sé si dispondrán en stock esta ya que hace 6 años de esto. Pero si teneis la ocasión de comprar los números 108 y 109, en estos explico cosas sobre desarrollo de juegos como detección de colisiones, doblebuffering, etc. Además si alguna vez nos encontramos en un futuro en algún evento de javaHispano ... os puedo poner una dedicatoria (aunque mi firma no vale nada. Ja ja ja)

Aquí os dejo el juego y el código fuente para que os entretengais un poco. Anticipar que está todo en el mismo java (en aquella época aun no me tomaba en serio lo de organizar los proyectos debidamente).


7 ago. 2009

Screencast Solo Programadores 136 - Conversor de divisas


Aquí teneis un nuevo screencast publicado en el número 136 de la revista "Solo Programadores". En esta ocasión será una aplicación bastante sencilla en la que crearemos un conversor de divisas. La aplicación se dividirá en dos paneles JPanel: un teclado digital donde nosotros podremos escribir un importe y una tabla de conversiones que se podrá configurar. En dicha tabla tendremos los respectivos botones para añadir y borrar filas, ejecutar el factor de conversión, realizar la operación inversa y guardar/cargar la tabla en un fichero del disco duro.

La aplicación está desarrollada en java utilizando componentes Swing y aprenderemos a añadir componentes compuestos en la paleta, utilizar un JTable usando un DefaultTableModel y utilizar persistencia de los datos mostrando un cuadro de selección de ficheros. También podreis ver los layouts que se utilizaban (GridLayout, BorderLayout) antes que creasen Matisse actualmente llamado Swing GUI Builder. La aplicación es bastante sencilla y está más orientado a personas que están iniciando con Swing.


4 ago. 2009

Videojuego en java - Columns Four Players

Algunos videojuegos que se irán publicando en formato screencast surgieron antes de iniciar la sección en "Solo Programadores". Todo inició cuando un día me puse en contacto con la editorial RA-MA y les propuse hacer un libro de videojuegos. Recordaba un viejo libro que consistia en 20 juegos para Amstrad que se basaba unicamente en 20 codigos fuentes en lenguaje basic y la tarea consistía en escribir en el ordenador lo que habia en el libro exactamente. A esta editorial le propuse crear un libro parecido con juegos en java y en principio la editorial estaba de acuerdo.

Sin embargo, a medida que hacia los primeros capítulos, fui deduciendo que eran de muy dificil compresión. Quizá, los tiempos hayan cambiado y con lo que antes disfrutabamos escribiendo y trasteando, ahora lo difrutamos descargandolo. Por ello, al final no se acabó el libro quedando bastantes juegos huerfanitos sin una salida al público. Creí mejor que si se publicaban en formato video se entenderían más y sería más comodo para el que desee revisarlo.

Hubo algún juego que el código era tan grande que no era posible implementarlo en un video por la cantidad de cosas que tenía. El juego que dejo público en este post es uno de ellos. Este juego era un clon del Columns en el que jugabas en una pista contra 3 jugadores más. La gracia del juego está en que cuando realizas un combo ganas una pieza gris que puedes lanzar a tus adversarios utilizando los números (2, 3 o 4 según quien te caiga peor). Los movimientos de las fichas se realizan utilizando las teclas cursores.

Cuando lo finalicé, volví a crear una versión 2 en la que añadí degradados y efectos de explosión. No seguí evolucionandolo ya que, al menos en mi ordenador empezaba a ir un poco lento. Esta versión 2 es el juego que podreis descargar a continuación. Espero que os guste.