Publi

  • Sorteo: Camisetas geek gratis

    Al principio hice un post copy-paste de la web, pero mira, ahora me lo voy a currar un poco más.

    Desde Nosolounix nos presentan un curioso sorteo de camisetas geek. No hay que currar mucho, y podemos aprovechar para ver qué tal es el servicio de Ropageek.com.

    Sólo tenemos que entrar aquí y seguir las instrucciones. Básicamente hay que vivir en España, escribir un comentario en ese mismo blog y enviar un mail diciendo tu nombre y qué camiseta quieres (habrá que entrar en la web para ver el catálogo).… Leer artículo completo

  • Bailando con bits: Trabajando a nivel de bit II

    binarios

    Hace unos días empecé con la serie Bailando con Bits (aunque llevaba escrito varios meses) trata de formas para trabajar a nivel de bit desde C.

    Hoy voy a proponer otra forma, quizás menos intuitiva que la anterior, pero diferente. Esta vez no utilizaremos un registro enorme ni nada parecido, utilizaremos un mismo número entero para hacer el ejemplo:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include <stdio.h>

    #define PESOBIT(bpos) 1<<bpos
    #define COGEBIT(var,bpos) (var & PESOBIT(bpos))?1:0
    #define PONE_1(var,bpos) var | PESOBIT(bpos)
    #define PONE_0(var,bpos) var & ~(PESOBIT(bpos))
    #define CAMBIA(var,bpos) var ^ PESOBIT(bpos)

    int main()
    {
      int numero;
      int i;

      numero=63;
      printf ("Numero: %d\n", numero);


      for (i=31; i>=0; i--)
        printf("%4d", i);

      printf("\n");

      for (i=31; i>=0; i--)
        printf("%4d",COGEBIT(numero,i));

      printf("\n");

      numero=PONE_1(numero, 17);
      numero=PONE_0(numero, 3);
      numero=CAMBIA(numero, 20);
      numero=CAMBIA(numero, 5);

      for (i=31; i>=0; i--)
        printf("%4d",COGEBIT(numero,i));

      printf("\nNúmero: %d\n", numero);

    }

    Ahora usamos varias macros que harán operaciones de bit con la variable a analizar (están definidas en la parte de arriba), tenemos PESOBIT, COGEBIT, PONE_1, PONE_0 y CAMBIA:

    • PESOBIT: Nos dice cuánto vale un bit con valor 1 en la posición especificada, por ejemplo en la posición 0 (LSB) vale 1, en la posición 1, vale 2, en la posición 3, vale 4, en la posición 4, vale 8…
    • COGEBIT: Nos dice si el bit en la posición bpos de la variable var vale 0 ó 1
    • PONE_1: Pone un 1 en el bit bpos de la variable var
    • PONE_0: Pone un 0 en el bit bpos de la variable var
    • CAMBIA: Cambia el valor (de 0 a 1 y viceversa) del bit en la posición bpos de la variable var

    Como vemos en el ejemplo si queremos poner a 1 el bit 5 de numero, tendremos que hacer numero=PONE_1(numero,5), aunque en el siguiente ejemplo veremos cómo simplificar todo eso.… Leer artículo completo

  • Fibonacci recursivo en C [ intentemos no repetir operaciones! ]

    fibo
    Es un ejercicio muy típico cuando se está aprendiendo con funciones recursivas es la sucesión de Fibonacci, aquella en la que F(n)=F(n-1)+F(n-2).
    Aunque esta técnica podemos (y deberíamos) utilizarla para una gran cantidad de algoritmos. A veces es necesario sacrificar un poco la memoria del sistema (sin pasarnos) para agilizar y hacer más rápido el programa. Debemos adoptar una solución que beneficie al usuario, no es plan de dejarlo sin memoria, pero tampoco es plan de que la solución se eternice.… Leer artículo completo

  • Reproducir vídeos de youtube desde Firefox con mplayer

    flvideoreplacer-logoHace unas horas descubrí esta fantástica extensión para Firefox. Su misión es cambiar los reproductores flash de Vimeo y Youtube entre otros por un reproductor de medios compatible (en mi caso, yo uso el plugin de mplayer). Los vídeos por fin se reproducen de forma fluida y la búsqueda dentro de los mismos es mucho más rápida que desde flash.

    Ahora por fin, no se pone el ventilador de mi ordenador a gritar (al menos el ventilador de la CPU) cuando intento reproducir algo a pantalla completa.… Leer artículo completo

  • Descargar álbumes Picasa sin Picasa, sin Java y sin ningún programa extra

    fotofotoUn buen sistema para compartir fotos es Picasa, de Google; aunque puede que no seamos usuarios de Google, ni tengamos el programa instalado en nuestro equipo, pero queramos descargar un álbum de fotos por completo.

    Presento otro de mis scripts rápidos (no está optimizado, tal vez sea lento, pero hace el apaño) para descargar las fotos de un álbum Picasa. Lo que necesitamos es el RSS del álbum, lo descargamos en algún directorio y ejecutamos el siguiente script:

    1
    2
    3
    4
    for i in `sed -e 's/\/>/\/>\n/g' archivo.rss | sed -n -e 's/.*<media:content url='"'"'\(.*\)'"'"' height=.*/\1/p'`
    do
      wget $i;
    done

    Donde archivo.rss es el archivo que acabamos de descargarnos.… Leer artículo completo

  • Curioso e interesante (2): Fragmentación en Linux, WikiUnix, convertir documentos desde la línea de comando, Ubuntu más seguro que Windows by Dell

    Estos días he estado un poco liado, pero he dejado varias pestañas del navegador abiertas con algunas curiosidades que he encontrado estos días y me han llamado la atención:

    • Lo leí en Muy Linux. Hay controversia en este tema… casi todos decimos que no es necesario, y otros dicen que sólo somos geeks talibanes que ocultamos las carencias de nuestro sistema operativo preferido; pero la realidad es que la fragmentación en los sistemas de archivos más populares de Linux es significativamente menor que en Windows.
    Leer artículo completo
  • Bailando con bits: Ver y modificar los bits de un número

    Hay muchas formas para hacer esto, pero quizás la más visual (tal vez también útil algunas veces) es la siguiente (se explica más abajo):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    #include <stdio.h>

    typedef struct {
        unsigned int b1:1;
        unsigned int b2:1;
        unsigned int b3:1;
        unsigned int b4:1;
        unsigned int b5:1;
        unsigned int b6:1;
        unsigned int b7:1;
        unsigned int b8:1;
        unsigned int b9:1;
        unsigned int b10:1;
        unsigned int b11:1;
        unsigned int b12:1;
        unsigned int b13:1;
        unsigned int b14:1;
        unsigned int b15:1;
        unsigned int b16:1;
        unsigned int b17:1;
        unsigned int b18:1;
        unsigned int b19:1;
        unsigned int b20:1;
        unsigned int b21:1;
        unsigned int b22:1;
        unsigned int b23:1;
        unsigned int b24:1;
        unsigned int b25:1;
        unsigned int b26:1;
        unsigned int b27:1;
        unsigned int b28:1;
        unsigned int b29:1;
        unsigned int b30:1;
        unsigned int b31:1;
        unsigned int b32:1;

    } Tint_bits;

    int main()
    {
      int numero;
      Tint_bits *bitpack;

      bitpack=(Tint_bits*)&numero;
      numero=63;
      printf ("Dir cos: %X\nDir paq: %X\n", &numero, bitpack);  // Vemos que las direcciones de memoria son idénticas.
    Leer artículo completo
  • Clases abstractas e interfaces en PHP

    objetoLos interfaces son bastante comunes en la programación orientada a objetos, en PHP, son algo así como una declaración de lo que debe implementar una clase. Tendrá información de los métodos (exclusivamente) que se deben implementar.

    Las clases abstractas contienen atributos y métodos, algunos pueden estar implementados y otros pueden ser abstractos. Los métodos abstractos son aquellos que no están implementados. Como tienen métodos sin implementar no podemos crear una instancia de este tipo de clases; entonces, ¿ para qué valen ?… Leer artículo completo

  • Curioso e interesante: Google se derrumba, K-Maps, Buenhabit, y más

    Quiero dedicar este post a cosas que me han llamado la atención estos últimos días:

    1. Google se derrumba: Lo descubrí gracias a novatillasku. Es una tontería chulísima, la página principal de Google se cae a pedazos, aunque para verlo tendréis que utilizar un navegador decente. Abstenerse Internet Explorer. Click aqui para verlo.
    2. Mapas de Karnaugh: Via Acerca de Ubuntu veo una serie de programas para resolver mapas de Karnaugh y ser el terror de la electrónica digital 🙂
    3. Piedra, papel, tijeras, lagarto, Spock: Últimamente estoy viendo la serie The Big Bang Theory, ya estaba tardando en empezarla, y hace poco vi este post.
    Leer artículo completo
  • Bucles for en BASH

    loooop

    No por ser un lenguaje de script enfocado a la línea de comando vamos a dejar de poder hacer un bucle. Es más, si los archivos batch pueden, estos scripts no van a ser menos. Es común ver un bucle for en bash de este modo:

    1
    2
    3
    4
    for i in $lista;
    do
       echo $i;
    done

    Donde lista puede ser:

    lista=»Una serie de cosas separadas por un espacio normalmente.

    Leer artículo completo