Comprobar el estado de una pila sin un voltímetro

Este es un rápido truco para comprobar el estado de una pila (batería) alcalina, no nos sirve en el caso de baterías del tipo Ión-litio. Es posible que os preguntéis qué tiene que ver esto con Linux o con el mundo del Open Source, pues directamente nada, fue algo que encontré a través de YouTube y, teniendo en cuenta la cantidad de aparatitos que tenemos en casa, he considerado compartirlo aquí en Linux Hispano.

alcalina_linux_hispano

El funcionamiento es simple, dejamos caer una pila sobre una mesa, si rebota y se mantiene en pie está en buen estado y sigue teniendo carga, en caso contrario podremos deshacernos de ella (siempre reciclando) o cargarla en caso de ser recargable. read more

Leer más » 6 Comentarios

Indicador de carga del sistema en Ubuntu 12.04

Siempre me ha gustado saber gráficamente la carga del sistema: carga de la CPU, cantidad de memoria direccionada, espacio de intercambio en uso, carga media del sistema, cantidad y volumen de las entradas y salidas en los discos… en las versiones de Ubuntu anteriores a Unity, era relativamente simple poner las gráficas en la barra superior del “Indicador de carga del sistema”, en Ubuntu 12.04 no es tan inmediato.

Lo primero que tenemos que hacer es instalarlo, para ello hacemos lo siguiente desde la consola:

sudo add-apt-repository ppa:indicator-multiload/stable-daily
sudo apt-get update
sudo apt-get install indicator-multiload

Aceptamos añadir el nuevo repositorio y tras instalar el programa ya podemos lanzarlo. Para ello desde el buscador ejecutamos “Indicador de carga del sistema” y ya lo tendremos arriba en la barra.

Indicador de carga del sistema en Ubuntu

Leer más » 2 Comentarios

Curso programación de videojuegos con SDL – Cargando imágenes con SDL

Ya hemos visto cómo cargar una ventana simple con SDL y ponerle título. No está mal para comenzar, pero estaréis deseando hacer algo más. Lo siguiente que haremos será cargar una imagen en pantalla operación que se repite multitud de veces en cualquier juego a la hora de cargar tanto fondos, como personajes.

Para carga una imagen haremos lo siguiente:

  1. Declaramos un puntero a una variable del tipo SDL_Surface: SDL_Surface *jugador;
  2. Declaramos una variable del tipo SDL_Rect:SDL_Rect posicion;
  3. Cargamos el mapa de bits: jugador=SDL_LoadBMP(“avion.bmp”);
  4. Asignamos la posición, mediante sus coordenadas X e Y:
    posicion.x=320;
    posicion.y=400;
  5. Acoplamos la imágen al “screen”: SDL_BlitSurface(jugador, NULL, screen, &posicion);
  • jugador: superficie (SDL_Surface) que queremos insertar o de orígen.
  • NULL: indica que queremos insertar toda la imagen.
  • screen: superficie dónde se va a insertar.
  • posicion: la posición dónde se colocará.

Ya tenemos la imagen cargada. El problema de cargarla de esta manera es que no tenemos transparencias y tendríamos la imagen nuestra, avión sobre fondo blanco, apareciendo sobre el fondo, azul (imitando al mar), por lo que alrededor del avión quedaría un recuadro blanco que sin duda quedaría muy mal. Para eliminar este fondo blanco y hacer que SDL lo cargue transparente hacemos lo siguiente:

  1. Definimos una máscara con el color RGB del color a hacer transparente. En este caso el blanco, RGB(255,255,255): #define MASK 255, 255, 255
  2. Hacemos transparentes los píxeles blancos: SDL_SetColorKey (jugador, SDL_SRCCOLORKEY, SDL_MapRGB (jugador->format, MASK));
  • jugador: la superficie en la que aplicar el efecto.
  • SDL_SRCCOLORKEY: Indicar hacer transparencia.
  • SDL_MapRGB jugador->format: formato de la imagen
  • SDL_MapRGB MASK: máscara, en realidad son tres parámetros, (r,g,b).

De esta manera conseguimos un resultado así:

Veamos el código al completo:

#include <stdio.h> #include <stdlib.h> #include <SDL.h> #define MASK 255, 255, 255 int main() { SDL_Surface *screen; SDL_Surface *fondo; SDL_Surface *jugador; SDL_Event event; int terminar=0; SDL_Rect posicion; int i, j; if (SDL_Init(SDL_INIT_VIDEO) < 0) { printf("No se pudo inicializar SDL: %s\n", SDL_GetError()); exit(1); } fondo = SDL_LoadBMP("fondo.bmp"); jugador = SDL_LoadBMP("avion.bmp"); SDL_SetColorKey (jugador, SDL_SRCCOLORKEY, SDL_MapRGB (jugador->format, MASK)); screen = SDL_SetVideoMode( 640, 480, 16, SDL_HWSURFACE ); if( screen == NULL ) { printf( "Error al entrar a modo grafico: %s\n", SDL_GetError() ); SDL_Quit(); return -1; } SDL_WM_SetCaption( "Moviendo nuestro avion", " Moviendo nuestro avion" ); for (i=0; i<10; i++) for (j=0; j<10; j++) { posicion.x=64*i; posicion.y=48*j; SDL_BlitSurface(fondo, NULL, screen, &posicion); } posicion.x=320; posicion.y=400; SDL_BlitSurface(jugador, NULL, screen, &posicion); SDL_Flip(screen); while(terminar == 0) { while ( SDL_PollEvent(&event) ) { if ( event.type == SDL_KEYUP ) terminar = 1; } } SDL_Quit(); return 0; } read more

Leer más » 13 Comentarios