08 diciembre 2009

Videojuegos 2009

Estos días en las webs de videojuegos están decidiendo cuáles han sido los mejores juegos del 2009 (Game of the Year o GOTY para los guays).

Yo voy a poner mi TOP10 de juegos que he jugado este año. De ellos sólo 2 han salido en 2009 y algunos tienen muchos años.
  1. Team Fortress 2
  2. Plants VS Zombies
  3. Bioshock
  4. NBA 2K10
  5. Portal
  6. Half-Life (+ extensiones)
  7. No More Heroes
  8. Half-Life 2 (+ episodios
  9. World of Goo
  10. Doom 3


Y otros juegos que he jugado y que me acuerdo ahora mismo: The Elder Scrolls IV: Oblivion, Braid, Dragon Ball Origins, Doom, Doom II, Ultimate Doom, Disaster: Day of Crisis, ...

24 noviembre 2009

Cuenta online NBA 2k10

Cómo hacerse una cuenta para jugar online al NBA 2k10. Yo buscando en la web de 2k y en mil foros y resulta que estaba dentro del juego.

Guía para hacerse un usuario de Taringa

También en descubierto que no gano ningún partido porque está puesto en el nivel de dificultad pro (y yo no soy pro).

En fin...

22 noviembre 2009

Autoruns for Windows v9.35

He estado reinstalando Windows XP y bajandome parches y actualizaciones del Windows Update. Navegando por ahí en encontrado esta aplicación de Microsoft: Autoruns para Windows v9.35. Es una especie de sustituto mejorado para el viejo msconfig aunque tiene muchísimas más cosas.

En esta captura se puede comparar con el msconfig. Sólo por permitir redimensionar la ventana ya merece la pena.



La pestaña Logon es la que nos muestra los programas que se ejecutan al inicio y que se suelen acoplar la lado del relojito. En options se le puede indicar que no muestra las aplicaciones propias de microsoft y sólo deje las de otros fabricantes (aunque Adobe consigue acoplar un programa como si fuera de Microsoft y lo que tenido que quitar luego).



Cada elemento se puede deshabilitar como en el msconfig o borrar directamente, lo cual mola bastante. Además si no sabemos qué hace alguno de los procesos, en el menú del botón derecho tiene un acceso directo para buscar en Google.



Espero que el msconfig de Windows 7 sea como este y no el viejuno...

15 noviembre 2009

Particiones



Este post es sólo para guardarme como recuerdo una captura de pantalla del pifostio de particiones que tengo. 2 instalaciones de Windows XP y 2 de linux y varias particiones con montones de basura. Ahora voy a arreglarlo un poco.

14 noviembre 2009

Red-Black Trees vs Binary Trees

He acabado de implementar la estructura red-black tree (árbol rojinegro o árbol rojo-negro). Es un árbol binario de búsqueda modificado para conseguir que siempre esté equilibrado y no ocurran los casos peores del árbol binario típico. Sólo hay que modificar la estructura del árbol para añadir un nuevo atributo a cada nodo: su color (rojo o negro). Además al insertar y borrar nodos hay que reorganizar el árbol efectuando rotaciones aprovechando los colores.

Artículo wikipedia
Artículo Mathworld

He hecho 3 tests sencillos:

  1. 30 vectores aleatorios de 10000 elementos insertados aleatoriamente

  2. 30 vectores aleatorios de 10000 elementos insertados ordenadamente

  3. 30 vectores aleatorios de 10000 elementos todos iguales



El tiempo total de los tests utilizando un árbol binario de búsqueda normal ha sido 17m40.500s. En cambio, el red-black tree que he implementado ha tardado 10.485s (sí, 10 segundos) en mi portátil.

Ejecutando sólo el test 1 que es más realista el red-black tree sigue ganando: tarda 4.040s frente a los 5.660s del árbol binario normal.

04 noviembre 2009

Crear estructuras complejas en C con malloc

Supongamos que queremos crear una estructura para almacenar matrices de cualquier tamaño en C. La estructura tiene un array bidimensional de enteros y un par de enteros indicando el tamaño horizontal y vertical de la matriz.

typedef struct {
int w, h;
int **m;
} Matrix;


La forma simple de reservar memoria para esta estructura sería:

Matrix *mat = (Matrix *) malloc(sizeof(Matrix));
mat->w = W;
mat->h = H;
mat->m = (int **) malloc(sizeof(int *)*mat->h);
for (i = 0; i < mat->h; i++)
mat->m[i] = (int *) malloc(sizeof(int)*mat->w);


Y para liberar la memoria:

for (i = 0; i < mat->h; i++)
free(mat->m[i]);
free(mat->m);
free(mat);


Otra forma mejor de reservar la memoria es hacer un malloc del tamaño total que necesitamos y luego colocar los punteros a mano.

// memoria necesaria:
// la estructura + w*h elementos + h punteros a int para almacenar
// las filas de la matriz
size_t mem_needed = sizeof(Matrix) + sizeof(int)*w*h + sizeof(int*)*h;

Matrix *mat = (Matrix *) malloc(mem_needed);

// convertir el puntero a puntero a char
char *mem = (char *) mat;
// donde empieza el array de punteros a entero
mat->m = (int **)(mem + sizeof(Matrix));
// donde empieza el array de datos
int *p = (int *) (mem + sizeof(Matrix) + sizeof(int *)*h);

int i;
for (i = 0; i < h; i++) {
mat->m[i] = p;
p += w;
}



Y para liberar la estructura nos basta con:

free(mat)


La segunda forma es más complicada de programar, necesité pasarle varias veces el valgrind hasta que conseguí que funcionara, pero en cambio tiene la ventaja que luego se libera muy fácilmente y que toda la matriz está contigua en memoria cosa que podría no ocurrir si hacemos mallocs separados para cada fila.

Es muy importante convertir la memoria reservada a (char *) para poder mover el puntero. Si a un (int *) le sumamos 1, realmente estamos moviéndonos 4 posiciones de memoria porque un int son 4 bytes.

Para estructuras más complejas es bastante difícil de conseguir implementar correctamente la segunda forma. He llegado a ver en una librería como construían de esta forma un array de 5 o 6 dimensiones cada dimensión con tamaños distintos y da un poco de miedo.

01 noviembre 2009

Doom 3

Llevo un mes jugando al Doom 3 con el PC que me compré en agosto. No pude jugar en su días porque mi ordenador no daba para másy ahora estoy aprovechando para jugar a juegos de hace 3 o 4 años.





18 octubre 2009

Libros de programación

Hoy seré breve.

Odio los libros de programación que ponen los ejemplos en pseudocódigo y encima asumiendo que los arrays empiezan en 1.

14 octubre 2009

Me cago en la Universidad de los Andes

Desde agosto vengo recibiendo emails todas las semanas de una tal Sandra Parra que trabaja en:

Coordinación de Prácticas Académicas
Centro de Trayectoria Profesional
Universidad de los Andes
3394949 Ext. 2796
ctp@uniandes.edu.co


Supuestamente estoy apuntado a un curso tallar en Bogotá sobre “Herramientas útiles para identificar y desarrollar competencias”. No sé cómo han conseguido mi email, pero cada semana me invitan a ir a seminarios y "reuniones de jefes".

Este es el último email, aunque básicamente son todos muy parecidos.


Estimado Estudiante:

Esperamos que hasta el momento haya tenido una experiencia satisfactoria en su respectivo lugar de práctica. El segundo taller de seguimiento se denomina “Herramientas útiles para identificar y desarrollar competencias”. Continuaremos con el objetivo general del ciclo de talleres: Brindar a los estudiantes herramientas útiles para orientar y aprovechar autónomamente su experiencia de práctica.

El segundo encuentro se realizará el próximo VIERNES 16 DE OCTUBRE en el horario de 7:00 A.M. a 10:00 A.M. Por favor tenga en cuenta que:

1. A esta reunión ASISTEN SOLO LOS PRACTICANTES.

2. Recuerde que debe traer su carné para ingresar sin contratiempos y un bolígrafo.

3. La reunión se hará en grupos definidos por afinidad de las carreras, SU SALON ASIGNADO ES: O103. (Es importante que tome nota y asista únicamente al salón asignado para usted)

Le agradecemos de antemano puntualidad. Con el fin de iniciar a tiempo la reunión, las puertas se cerraran a las 7:15 AM.

Si bien es una reunión de carácter obligatorio, deberá confirmar asistencia antes del MARTES 13 OCTUBRE DE 2009 vía mail (ctp@uniandes.edu.co) o al teléfono 3394949 Ext. 2093 con Sandra Parra.

Nota: Recuerde que el próximo jueves 29 de octubre es la reunión de Jefes, es por esto que agradecemos nos notifique si su Jefe o supervisor inmediato ha cambiado. De ser así les solicitamos nos envié por este medio antes del martes 13 de octubre los siguientes datos (Nombre completo de su jefe, cargo, teléfono y correo electrónico).


Les he mandado montones de email educadamente y han pasado a mí. Así que a este email les respondí esto:


Hola!

Confirmo mi asistencia. ¿Puedo llevar a un acompañante? Es que no
tengo brazos ni piernas y necesitaría a alguien que me ayudase a tomar
mis notas.

Gracias.


Si sigo recibiendo emails supongo que comenzaré a apuntar a Sandra Parra a las mismas webs que me apuntan a mí: la web de Betty la fea, durex, evax, twitter, etc.

13 octubre 2009

USACO: 2009-2010 Season Announcement

Comienza una nueva temporada en la USACO (registrarse, entrenamiento) para los que les interese las competiciones de programación.

Las competiciones de la USACO se dividen en 3 divisiones. Se comienza en la división de bronce y quedando bien en las competiciones se va ascendiendo a las divisiones plata y oro.

Copypaste del contenido de las divisiones según el mail de la USACO:
  • BRONZE: Students who can write programs that work, including ad hoc programs that don't require fancy optimized algorithms.

  • SILVER: Just below the Gold division, Silver competitors should know a number of standard computer algorithms (e.g., the flood-fill algorithm). Silver is similar to the old Orange division.

  • GOLD DIVISION: The elite level with the most difficult challenges. The lowest-level competitors in this division should be able to create a dynamic programming algorithm from scratch (similar to the old Green division).


En mi opinión personal, la división plata es mucho más difícil de lo que pone en la explicación.

Calendario de competiciones:

  • 23-26 Oct, 2009 - USACO Qualification Contest (OPTIONAL)

  • 6- 9 Nov, 2009 - USACO November Contest

  • 4- 7 Dec, 2009 - USACO December Contest

  • 8-11 Jan, 2010 - USACO January Contest

  • 5- 8 Feb, 2010 - USACO February Contest

  • 12-15 Mar, 2010 - USACO March Contest

  • 23-26 Apr, 2010 - US Open for International


Las competiciones son de 3 horas en el horario de elijamos. La competición está abierta durante 3 o 4 días y en el momento en que se acceda a los enunciados comienza a contar el tiempo.