Espacio de tecnologia, software libre y sus derivados. Una horda de monos entrenados escriben de vez en cuando por aqui algunas noticias, opiniones e incluso alguna que otra cosa fuera del tema. Maqueros, favor de abstenerse que no somos lo suficientemente guapos.

Piano daemon

Archive for GPL

Los que usamos Mysql ya no somos tan hippies…. ?

Ahora resulta que soy experto en la base de datos open source de sun.. ?



Jamas pense que algo asi pudiece pasar con mysql….. a lo mejor tu si lo pensaste(con un porrito en mano..)….

Buscar usando LIKE o Full Text Search - php/mysql

Vamos a crear un buscador que busque en una tabla de nuestra base de datos y que según el número de palabras buscadas utilice LIKE o el Full Text Search de MySQL.

Que és Full Text Search?
El Full Text Search utiliza los índices de la tabla para hacer las búsquedas y hace las comparaciones de la misma forma que se hacen en los grandes buscadores y no como una comparación sencilla y costosa en tiempo como la utilizada por el like.

El resultado que devuelve es ordenado por similitud a las palabras o cadena buscada, esto se puede hacer ya que cuando va encontrando los resultados el mismo le asigna un indice de similitud a lo buscado, con lo que podemos saber lo exacto que es el resultado.

Para crear el índice en la tabla a buscar haremos:

   ALTER TABLE noticias ADD FULLTEXT(titulo, texto);

Suponiendo que la tabla se llama noticias y los campos que queremos buscar són titulo y texto. Debemos tener en cuenta que los campos del índice solo pueden ser Char, Varchar o TEXT.

Nota: Los índices hacen que las tablas ocupen más espacio en disco peró agilizan mucho las búsquedas.

MATCH … AGAINST
Para buscar en la tabla utilizando el índice, haremos:

SELECT * FROM el índice WHERE MATCH(titulo, texto)
AGAINST ('palabras_a_buscar')

Si queremos saber noticias de similitud del resultado podemos hacer:

   SELECT * FROM noticias WHERE MATCH(titulo, texto)
   AGAINST ('palabras_a_buscar') AS similitud

Donde similitud sera el valor de aproximación a la busqueda.

Problemas del MATCH … AGAINST
El problema principal es que ens busquedas de una sola palabra acostumbra a fallar, ya que tiene un límite dado por el MySQL de busqueda de palabras mayores o iguales a 4 carácteres, por lo que si buscasemos por ejemplo PHP no tendriamos resultado. Lo que haremos es mirar si la cadena que nos llega es de una sola palabra o de más de una, en caso de ser una haremos la búsqueda usando LIKE y si es más de una usaremos MATCH … AGAINST Buscador con paginación.

 //Conectar con la base de datos,
 //también podemos poner el ADODB
 //Yo utilizo conexiones con código directamente aquí

 include ("conexion_bd.php");
        if ($p_busca!='')
        { if (!$num) $num=0;
             //Separamos las palabras usando cada espacio como separador
             //Hacemos la separación de la cadena a buscar
             $cadena_buscada=explode(" ",$p_busca);
             if (count($cadena_buscada)==1)
             {
               //Si solo hay una palabra usamos LIKE
               $sql=" SELECT SQL_CALC_FOUND_ROWS titulo, texto
                        FROM noticiasLIKE '%".$p_busca."%' OR texto LIKE '%".$p_busca."%'
                        WHERE titulo
                        LIMIT ".$num.",10";
             }
             elseif (count($cadena_buscada)>1)
             {
               //Si hay más de una palabra usaremos MATCH AGAINST
               $sql=" SELECT SQL_CALC_FOUND_ROWS titulo, texto, MATCH (titulo, texto)
                        AGAINST MATCH (titulo,AS Score FROM noticias
                                    ('".$p_busca."') texto) AGAINST ('".$p_busca."')
                        WHERE BY Score DESC LIMIT ".$num.",10";
                        ORDER
             }
               $rs = $db->Execute($sql);
               if (!$rs) echo $conn->ErrorMsg();
               else if ($rs->fields["id"])
               { while (!$rs->EOF)
                  { echo $rs->fields["titulo"].'‘.$rs->fields[”texto”];
                  } $rs->MoveNext();
     }
     else
        echo ‘No se han encontrado resultados correspondientes a su búsqueda.’;
     //Paginación
     $rs_cont=$db->Execute (”select found_rows() as total_filas”);
     if ($rs_cont->fields[”total_filas”]>10)
     { for ($i=0; $i<$rs_cont->fields[”total_filas”] && $i<50; $i=$i+10)
        { $a++;
            echo '[’.$a.’] ’;
     } }
}

Primera demanda por violacion de la GPL

La Free software fundation por primera vez procede legalmente contra el vendedor de software Monsoon Multimedia por violar la licencia GPL y sera llevado a la corte.

Lastima que un movimiento libre como este se empieze a empañar con el desmadre de demandas legales, ni hablar.

Si quieres libertad no sigas a Linus Torvalds

richard stallmanOtra vez stallman y su egomaniaco arremeten contra Linus Torvalds en la discusion de Open source, free software y las licencias usadas, ahora que la GPL3 esta por salir apoyada por Stallman y detractada por Linus

The fact that Torvalds says “open source” instead of “free software” shows where he is coming from. I wrote the GNU GPL to defend freedom for all users of all versions of a program. I developed version 3 to do that job better and protect against new threats.

Torvalds says he rejects this goal; that’s probably why he doesn’t appreciate GPL version 3. I respect his right to express his views, even though I think they are foolish. However, if you don’t want to lose your freedom, you had better not follow him.

La entrevista completa aqui en idg.