2011
02.13
Últimamente le dedico mucho tiempo a la programación en ensamblador, y necesitaba un método sencillo para comprobar el código de salida de mis programas. Podría haber escrito unas pocas líneas para mostrar el código en pantalla justo antes de finalizar, pero es más sencillo escribir lo siguiente al finalizar la ejecución:
2010
05.26
Llevo mucho tiempo utilizando sistemas GNU/Linux, y eso suele significar que a veces me veo obligado a descargar el código fuente de algún programa si quiero utilizarlo. Siempre me ha llamado la atención el hecho de que no parece haber un acuerdo sobre qué formato de archivos utilizar, y por lo tanto me ha entrado la curiosidad de saber qué compresor funciona mejor.
Para estas pruebas he seleccionado los tres compresores más comunes en GNU/Linux, a saber:
- bzip2 (.bz2)
- gzip (.gz)
- zip (.zip)
Y he hecho lo siguiente:
- Comprimir y descomprimir el código fuente del kernel de Linux.
- Comprimir y descomprimir mi carpeta de fotos.
- Comprimir y descomprimir varios ficheros de sonido en formato wav.
Vamos con los datos de la primera prueba:
|
Tiempo de empaquetado y compresión |
Ratio de compresión |
Tiempo de descompresión y desempaquetado |
| bzip2 |
3m 44,507s |
17,00% |
42,306s |
| gzip |
2m 47,167s |
22,02% |
29,413s |
| zip |
2m 15,670s |
26,94% |
39,020s |
En la segunda prueba las fotos se han añadido todas previamente a un fichero tar, y por lo tanto la prueba solo contempla el tiempo de compresión (en la descompresión, para seguir el mismo criterio, tampoco se desempaqueta nada):
|
Tiempo de compresión |
Ratio de compresión |
Tiempo de descompresión |
| bzip2 |
17m 10,388s |
94,34% |
8m 26,888s |
| gzip |
05m 34,552s |
95,51% |
3m 21,306s |
| zip |
06m 49,620s |
95,51% |
4m 31,091s |
Finalmente la tercera prueba es quizá la menos realista (los ficheros wav los comprimo a MP3 o a algún formato sin pérdida para poder escucharlos sin que se coman todo mi disco duro) pero aquí quedan los resultados:
|
Tiempo de empaquetado y compresión |
Ratio de compresión |
Tiempo de descompresión y desempaquetado |
| bzip2 |
11m 35,831s |
84,53% |
4m 57,234s |
| gzip |
05m 49,619s |
88,60% |
2m 03,705s |
| zip |
03m 47,146s |
88,60% |
2m 00,012s |
No entraré a valorar cuál de los tres programas realiza mejor su tarea, porque a la comparativa le faltan datos y es mejorable en su elaboración, así que me limito a dejar aquí los datos obtenidos por si alguien les encuentra utilidad.
2010
02.26
Modificando la primera práctica de la asignatura, se pide mostrar una serie de figuras y colores por pantalla.

001
glClearColor (1.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (0.0f, 1.0f, 0.0f);
glBegin (GL_POLYGON);
glVertex2f (-0.5f, -0.5f);
glVertex2f (-0.5f, 0.5f);
glVertex2f (0.5f, 0.5f);
glVertex2f (0.5f, -0.5f);
glEnd();
glFlush();

002
glClearColor (1.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (0.0f, 1.0f, 0.0f);
glBegin (GL_POLYGON);
glVertex2f (-0.5f, -0.5f);
glVertex2f (-0.5f, 0.5f);
glVertex2f (0.5f, 0.5f);
glVertex2f (0.5f, -0.5f);
glEnd();
glColor3f (0.0f, 0.0f, 1.0f);
glBegin (GL_POLYGON);
glVertex2f (0.0f, -0.5f);
glVertex2f (0.5f, 0.0f);
glVertex2f (0.0f, 0.5f);
glVertex2f (-0.5f, 0.0f);
glEnd();
glFlush();

003
glClearColor (1.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (0.0f, 0.0f, 1.0f);
glBegin (GL_POLYGON);
glVertex2f (0.0f, -0.5f);
glVertex2f (0.5f, 0.0f);
glVertex2f (0.0f, 0.5f);
glVertex2f (-0.5f, 0.0f);
glEnd ();
glColor3f (0.0f, 0.0f, 0.0f);
glBegin (GL_POLYGON);
glVertex2f (-0.5f, 0.5f);
glVertex2f (0.0f, 0.5f);
glVertex2f (-0.5f, 0.0f);
glEnd ();
glColor3f (1.0f, 1.0f, 0.0f);
glBegin (GL_POLYGON);
glVertex2f (0.0f, 0.5f);
glVertex2f (0.5f, 0.5f);
glVertex2f (0.5f, 0.0f);
glEnd ();
glColor3f (1.0f, 1.0f, 1.0f);
glBegin (GL_POLYGON);
glVertex2f (0.5f, 0.0f);
glVertex2f (0.5f, -0.5f);
glVertex2f (0.0f, -0.5f);
glEnd ();
glColor3f (0.0f, 1.0f, 0.0f);
glBegin (GL_POLYGON);
glVertex2f (0.0f, -0.5f);
glVertex2f (-0.5f, -0.5f);
glVertex2f (-0.5f, 0.0f);
glEnd ();
glFlush();

004
glClearColor (1.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (0.0f, 0.0f, 0.0f);
glBegin (GL_POLYGON);
glVertex2f (-0.5f, 0.5f);
glVertex2f (0.0f, 0.5f);
glVertex2f (-0.5f, 0.0f);
glEnd ();
glColor3f (1.0f, 1.0f, 0.0f);
glBegin (GL_POLYGON);
glVertex2f (0.0f, 0.5f);
glVertex2f (0.5f, 0.5f);
glVertex2f (0.5f, 0.0f);
glEnd ();
glColor3f (1.0f, 1.0f, 1.0f);
glBegin (GL_POLYGON);
glVertex2f (0.5f, 0.0f);
glVertex2f (0.5f, -0.5f);
glVertex2f (0.0f, -0.5f);
glEnd ();
glColor3f (0.0f, 1.0f, 0.0f);
glBegin (GL_POLYGON);
glVertex2f (0.0f, -0.5f);
glVertex2f (-0.5f, -0.5f);
glVertex2f (-0.5f, 0.0f);
glEnd ();
glBegin (GL_POLYGON);
glColor3f (0.0f, 1.0f, 0.0f);
glVertex2f (0.5f, 0.0f);
glColor3f (1.0f, 1.0f, 1.0f);
glVertex2f (0.0f, 0.5f);
glColor3f (1.0f, 1.0f, 0.0f);
glVertex2f (-0.5f, 0.0f);
glColor3f (0.0f, 0.0f, 0.0f);
glVertex2f (0.0f, -0.5f);
glEnd ();
glFlush();

005
int i;
glClearColor (1.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT);
for (i = 5; i > 0; i--)
{
if (i % 2 == 0)
glColor3f (0.0f, 1.0f, 0.0f);
else
glColor3f (0.0f, 0.0f, 0.0f);
glBegin (GL_POLYGON);
glVertex2f (-0.5f, -0.5f);
glVertex2f (-0.5f, (i - (5 - i))/10.0f);
glVertex2f ((i - (5 - i))/10.0f, (i - (5 - i))/10.0f);
glVertex2f ((i - (5 - i))/10.0f, -0.5f);
glEnd();
}
glFlush();

006
int i;
glClearColor (1.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT);
for (i = 5; i > 0; i--)
{
if (i % 2 == 0)
glColor3f (0.0f, 1.0f, 0.0f);
else
glColor3f (0.0f, 0.0f, 1.0f);
glBegin (GL_POLYGON);
glVertex2f (-0.5f - ((5 - i) * 0.025f),
-0.5f - ((5 - i) * 0.025f));
glVertex2f (-0.5f - ((5 - i) * 0.025f),
(i - (5 - i))/10.0f);
glVertex2f ((i - (5 - i))/10.0f,
(i - (5 - i))/10.0f);
glVertex2f ((i - (5 - i))/10.0f,
-0.5f - ((5 - i) * 0.025f));
glEnd();
}
glFlush();
2010
02.13
Con el material disponible en las páginas oficiales del videojuego he elaborado tres fondos de pantalla para mis dispositivos. No son gran cosa pero aquí los dejo.

Wallpapers de Bayonetta