20th


20th

El kernel Linux cumple 20 años

Leer más » 8 Comentarios

Configurar de forma básica servicio NTP en Windows Server 2008

Lo sé, este blog se llama Linux Hispano y esta entrada no es la más apropiada aquí, pero tengo excusa, soy entre otras cosas, administrador de sistemas y algunos de los equipos que mantengo ejecutan Windows Server 2008.

La virtualización tiene enormes ventajas pero también tiene sus inconvenientes. Uno de los más frecuentes a la vez que importantes que he encontrado (aunque pueda parecer lo contrario), es los problemas de hora. Debido al modelo de ejecución de las máquinas virtuales, es muy frecuentes que éstas soporten problemas de puntualidad en la hora mostrada. read more

Leer más » 2 Comentarios

Lo mejor de mi RSS del 22 al 28 de agosto

Leer más » 1 Comentario

Curso programación de videojuegos con SDL – Mejorando aspectos gráficos

Habréis podido observar que los aviones parpadean al moverse por la pantalla. Esto se produce porque dibujamos directamente sobre la pantalla, es decir sobre lo que hemos llamado screen, de manera que dibujamos antes unos objetos y luego otros. Este problema es bien sencillo de solucionar con SDL gracias a la llamada técnica del doble búfer que nos ofrece. Mediante esta técnica dibujaremos sobre un búfer en el que una vez dibujados todos lo necesario, pasaremos a dibujar sobre el screen, de esta manera eliminaremos el parpadeo que creaba la técnica anterior. read more

Leer más » 2 Comentarios

Eliminar Google+

Estaba ya un poco cansado de esta red. Me intrigó bastante al principio, pero luego me di cuenta de que no era más que otro Facebook o Tuenti, algo que no me aporta nada.

Créanme, prefiero continuar con mi cuenta de Twitter y la de LinkedIn, mucho menos intrusivas y más profesionales.

Bien, para proceder con la eliminación de nuestra cuenta en Google Plus, nos dirigimos a la barra superior (una vez logueados) a nuestra dirección de mail y accedemos a Account Settings (sí, prefiero tenerlo todo en inglés). read more

Leer más » 4 Comentarios

Modificar el inicio de una lista ordenada en HTML

Siempre que usamos listas ordenadas en HTML (ordered lists definidas por el tag: <ol>), tenemos una serie de elementos ordenados por número (o por letra en función del CSS). Por ejemplo:

  1. Primer elemento
  2. Segundo elemento
  3. Tercer elemento

Si por cualquier razón queremos empezar por un elemento diferente a uno (por ejemplo porque queramos continuar la lista anterior en otro punto del documento HTML), tenemos el atributo “start“, veamos un ejemplo de su uso: read more

Leer más » 3 Comentarios

Tux Info 40: ¿Por qué Android es el número uno?

Jorge Cacho, de Tux Info, me acaba de informar del lanzamiento del número 40 de esta revista en línea, libre y gratuita. Este mes los temas tratados son:

  • Punk Fluid, the Shorewall – Hernán “HeCSa” Saltiel.
  • Proyecto HSMMN: High Speed Multimedia Network – Alex Casanova.
  • Smarttop: un servidor web (y mucho más) de bajo coste – Jorge Cacho Hernández.
  • Guía de GNU/Linux para principiantes e indecisos  – Rafael Murillo.
  • “El Tano Snouman” Animando gestos con Blender 3D – Marcos Caballero.
  • Tuxmóvil 3 – Especial Samsung – Porqué Android es el número uno.
  • Copiar y progresar. – Claudio De Brasi.
  • ¿Qué es el Proyecto Venenux? – Naudy Vilarroel Urquiola.
  • Programación funcional en Python – Olemis Lang.
  • Liberando … las variaciones Goldberg – Jorge Cacho Hernández.
  • Teamviewer en Linux – Samuel Morales Cambrón.
  • ¿Por qué monitorear redes informáticas? –  Diego Córdoba.
  • Celebrando el V Aniversario – Ubuntu.ve – Naudy Vilarroel Urquiola.
  • Rincón del lector – Pasos para pasar el Quench de Android 1.5 a Android 2.1.
  • read more

    Leer más » 2 Comentarios

    ¿Gimp cambia de nombre?

    Es posible que muchos de vosotros os hayáis preguntado si después de un cambio tan brutal, como el que os anunciamos hace poco sobre el modo de ventana única o single mode en Gimp, sea necesario cambiarle el nombre para diferenciarlo claramente.

    No se me ha ocurrido a mi, han sido los chicos de OMG Ubuntu los que han creado una encuesta para determinar si hacemos una propuesta común o no para el cambio de nombre de Gimp o a establecer un nuevo codename para esta versión.

    ¿Merece la pena todo esto? Vota aquí. Yo ya he votado. NO era mi respuesta, pero me gustaría además conocer vuestra opinión. read more

    Leer más » 7 Comentarios

    Curso programación de videojuegos con SDL – Incluyendo enemigos

    ¿Qué sería de un videojuego de este tipo sin enemigos? La verdad es que es difícil de imaginar por lo que aunque de una manera no demasiado cuidada vamos a incluirlos. Sabiendo ya incluir imágenes y moverlas, la operación es sencilla:

    1. Creamos una nueva estructura de datos para guardar la posición de los enemigos más cómodamente:
      struct posicion{
      int x;
      int y;
      };
    2. El correspondiente puntero para referencia el vector de posiciones:struct posicion *posicionesEnemigos;
    3. Un entero para el número de enemigos: int numeroEnemigos=10;
    4. Un doble puntero para referenciar un vector con los punteros a los enemigos: SDL_Surface **enemigos;
    5. Reservamos memoria para ambos:
      enemigos=(SDL_Surface**)malloc(sizeof(SDL_Surface*)*numeroEnemigos);
      posicionesEnemigos=(struct posicion*)malloc(sizeof(struct posicion)*numeroEnemigos);
    6. Cargamos los mapas de bits, con transparencia, para cada uno de los enemigos. Además inicializamos las posiciones de los enemigos de la siguiente manera:
    • Posición X: Un valor entre 0 y 590 para que quede dentro de la pantalla.
    • Posición Y: Un valor entre 20 y 100 para que no esten todos alineados.

         for(i=0;i<numeroEnemigos;i++)
         {
              enemigos[i]=SDL_LoadBMP(“enemigo.bmp”);
              SDL_SetColorKey (enemigos[i], SDL_SRCCOLORKEY,      SDL_MapRGB (enemigos[i]->format, MASK));
              posicionesEnemigos[i].x=rand()%590+1;
              posicionesEnemigos[i].y=60-rand()%40+1;
         }

    1. Modificamos el título de la ventana: SDL_WM_SetCaption( “Incluyendo enemigos”, “Incluyendo enemigos” );
    2. Dentro del bucle hacemos:
      1. Colocamos las superficies de los enemigos:
        for(i=0;i<numeroEnemigos;i++)
        {
        posicion.x=posicionesEnemigos[i].x;
        posicion.y=posicionesEnemigos[i].y;
        SDL_BlitSurface(enemigos[i], NULL, screen, &posicion);
        }
      2. Le damos velocidad a los enemigos:for(i=0;i<numeroEnemigos;i++){ posicionesEnemigos[i].y+=2;}

      Veamos en una imagen cómo queda:

      Y el código completo serían el siguiente:

      #include <stdio.h> #include <stdlib.h> #include <SDL/SDL.h> #include <time.h> #define MASK 255, 255, 255 struct posicion{ int x; int y; }; int main() { SDL_Surface *screen; SDL_Surface *fondo; SDL_Surface *jugador; SDL_Surface **enemigos; struct posicion *posicionesEnemigos; SDL_Event event; SDL_Rect posicion; int terminar=0; int numeroEnemigos=10; int i, j; int posicionJugadorX=290, posicionJugadorY=430; Uint8* teclas; srand(time(NULL)); if (SDL_Init(SDL_INIT_VIDEO) < 0) { printf("No se pudo inicializar SDL: %s\n", SDL_GetError()); exit(1); } /*creando vector para contener enemigos*/ enemigos=(SDL_Surface**)malloc(sizeof(SDL_Surface*)*numeroEnemigos); /*y vector para posiciones de los mismos*/ posicionesEnemigos=(struct posicion*)malloc(sizeof(struct posicion) *numeroEnemigos); fondo = SDL_LoadBMP("fondo.bmp"); jugador = SDL_LoadBMP("avion.bmp"); SDL_SetColorKey (jugador, SDL_SRCCOLORKEY, SDL_MapRGB (jugador->format, MASK)); /*cargando graficos para enemigos y generando posiciones iniciales para los enemigos*/ for(i=0;i<numeroEnemigos;i++) { enemigos[i]=SDL_LoadBMP("enemigo.bmp"); SDL_SetColorKey (enemigos[i], SDL_SRCCOLORKEY, SDL_MapRGB (enemigos[i]->format, MASK)); posicionesEnemigos[i].x=rand()%590+1; posicionesEnemigos[i].y=60-rand()%40+1; } 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( "Incluyendo enemigos", "Incluyendo enemigos" ); while(!terminar) { 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=posicionJugadorX; posicion.y=posicionJugadorY; SDL_BlitSurface(jugador, NULL, screen, &posicion); for(i=0;i<numeroEnemigos;i++) { posicion.x=posicionesEnemigos[i].x; posicion.y=posicionesEnemigos[i].y; SDL_BlitSurface(enemigos[i], NULL, screen, &posicion); } SDL_Flip(screen); while ( SDL_PollEvent(&event) ) { if (event.type == SDL_QUIT || event.key.keysym.sym == SDLK_ESCAPE) terminar = 1; } teclas = SDL_GetKeyState(NULL); if (teclas[SDLK_UP]) { posicionJugadorY -= 2; } if (teclas[SDLK_DOWN]) { posicionJugadorY += 2;} if (teclas[SDLK_LEFT]) { posicionJugadorX -= 2; } if (teclas[SDLK_RIGHT]) { posicionJugadorX += 2; } for(i=0;i<numeroEnemigos;i++) { posicionesEnemigos[i].y+=2; } } SDL_Quit(); return 0; } read more

    Leer más » 8 Comentarios