php

Eclipse y Ubuntu [Mal matrimonio]

Desde hace ya bastante tiempo uso Ubuntu en casa como sistema operativo principal, de hecho a Windows solo le veo en el portátil de la empresa y porque pos desgracia no me queda más remedio. A pesar de mi devoción por Ubuntu ha habido una cosa que siempre me ha tocado literalmente las narices y es Eclipse. Hace tiempo me costó lo suyo hacerlo andar en Ubuntu (corría entonces la versión 9.04) y desde entonces he andando con ese “paquetito” hecho a medida que iba viajando conmigo en cada actualización.

Hace pocos días me dio por instalarme la última versión en el ordenador del trabajo y .. ¡¡ooohhh!! ¡cuánta cosa bonita! Pues en cuanto llegue el fin de semana me lo instalo, me dije para mí mismo. Lo primero que hice fue aparcar la “carpetita” en cuestión e intentar instalar Eclipse desde el repositorio que tiene Ubuntu, sin acordarme que en su día eso fue lo que me volvió completamente loco e hizo plantearme el bajar y configurar a mi manera todo.

Aunque al principio todo fue como la seda no tardaron demasiado tiempo en aparecer los primeros problemas. Yo evidentemente uso Eclipse, como mucha otra gente, para programar en Java, pero no es en lo único que programo. Ni corto ni perezoso intenté descargar los paquetes que hacen que Eclipse hable Java y… PEEEKKK! Error.. ¿Cómo? ¿Esto que eeessss? Bueno, pues vamos a intentar ponerlo en “Cristiano” (por defecto sale en inglés) con el paquete Babel del repositorio para Eclipse Indigo.. PEEEKKK!!! Su put……e!!!

Finalmente mi memoria hizo lo que tenía que hacer, recordar que usar el paquete hecho para Ubuntu no iba a servir así queeee.. como hace  3 años.

Pasos a seguir:

  • Descargar el paquete para tu versión de Linux (Es un TGZ) de la página Oficial de Eclipse. Hay muchos paquetes, con descargar el Eclipse Classic será suficiente: 179Mb.
  • Descomprimimos el archivo y ejecutamos Eclipse.
  • Ahora sí, si nos vamos al menú Help->Install New Software ya podemos instalar cosas. Lo primero de todo es dentro del repositorio de Indigo buscar dentro de Programming Languages a PHP y tooooodo lo que nos haga falta e instalarlo.
  • Lo siguiente es añadir al repositorio la dirección https://download.eclipse.org/technology/babel/update-site/R0.9.1/indigo
  • Al hacer esto último podremos instalar los paquetes de idiomas del “Proyecto Babel”. Buscamos el correspondiente a Spanish y lo instalamos, con lo que en el siguiente reinicio del programa nuestro Eclipse aparecerá en un lenguaje que seguramente entenderemos mejor

Poco más. ¡A disfrutar de Eclipse en Ubuntu!

 

 

Los primeros pasos con Lucene bajo PHP. Al final funcionará y todo

Ayer, y tal como ponía en mi anterior publicación me empeñé en echar a andar el motor de búsqueda Lucene sobre PHP. Mi intención era clara, tengo una base de datos en MySQL un poco “toqueteada internamente por mí” para que funcione mejor a nivel de consultas Full-Text que no me termina de convencer, por lo tanto manos a la obra…

Tras “googlear” un poco en busca de información (malos hábitos que creo que ya tiene el 99.9% de los mortales que se dedican a esta nombre y malpagada profesión) encuentro varios documentos en “cristiano” sobre cómo implementar en Ubuntu (sistema que uso como servidor en la empresa) el motor Lucene bajo PHP. La primera sorpresa es que Lucene en PHP tira de Zend, pero tampoco me preocupa demasiado, a pesar de que no soy muy amigo de utilizar Frameworks. En fin, que lo peor de todo es que la información que encuentro es ANTIGUA DE NARICES, muy muy obsoleta, pero por suerte hay una página que prácticamente explica todo lo que me hace falta: https://www.phpriot.com/articles/zend-search-lucene.

Vamos allá… instalamos Zend:

$ sudo apt-get install libzend-framework-php

Y parece que todo va bien.. Ubuntu no se queja así que vamos a hacer nuestro primer código fuente con los ejemplos modificados que hay en la página que hemos mencionado anteriormente..

$path = “/mi_path/a_un_lugar/para_el_indice”;

if(!is_dir($path)){
    echo “Creando Path…<br>”;
       $index = Zend_Search_Lucene::create($path);
}
else{
   $index = Zend_Search_Lucene::open($path);
}

y primera castaña… el script arroja un error de que no reconoce la clase Zend_Search_Lucene….. Perooooo… ¿no la acabo de instalar? Mmmmm… a lo mejor hay que reiniciar Apache.. Procedemos..

$ sudo /etc/init.d/apache restart

Probamos otra vez… ¡¡PEEEEEKK!! Error…. ¡¡arrrghh!! En fin, revisemos nuevamente la documentación a ver qué se me está olvidando…..

5 minutos más tarde

Las prisas, o la agonía, vete tú a saber. Si no se le dice al script que use la librería Zend, ¿cómo va a funcionar? Solución, al principio del script se pone:

require_once(“Zend/Search/Lucene.php”);

Pero como se ve que ayer tuve muy mala suerte me vuelve a dar unos bonitos mensajes de error diciendo que no se puede insertar la librería… Vuelta a “San Google”…. y nada… así que me armo de valor y empiezo a mirar qué archivos ha modificado el sistema y veo que Zend crea un archivo de configuración dentro del arbol de PHP llamado  /etc/php5/conf.d/zend-framework.ini. Lo edito y veo que el path donde va a buscar los archivos está ¡¡¡COMENTADO CON UN PUNTO Y COMA!!! Perooooo… en fin, quito el dichoso “punto y coma”, recargo la configuración de Apache por si las moscas y… ¡¡ahora sí!! Ni un error y en el path que he definido del sistema se ha creado una bonita carpeta con varios archivos dentro que según leo en la documentación de Lucene son los índices. Primer paso dado, vamos a darle caña a hacer algo añadiendo las siguientes líneas a nuestro script:

    $doc = new Zend_Search_Lucene_Document();
    $doc->addField(Zend_Search_Lucene_Field::UnIndexed(‘dia’, ‘2011-12-29’));
    $doc->addField(Zend_Search_Lucene_Field::UnIndexed(‘pagina’, ‘3’));
    $doc->addField(Zend_Search_Lucene_Field::UnStored(‘texto’, ‘Manolito es una persona que ha hecho muchas cosas’));
    $index->addDocument($doc);

Ejecutamos y…parece que todo ha ido bien…. ¿Funcionará la búsqueda?

Realizamos el siguiente script y lo ejecutamos:

require_once(“Zend/Search/Lucene.php”);

$path = “/mi_path/a_un_lugar/para_el_indice”;
Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding(‘utf-8’);
Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive());
if(!is_dir($path)){
    die(“El indice no existe”);
}
else{
   $index = Zend_Search_Lucene::open($path);
}

$patron = “manolito”;

echo “Buscando “$patron”…<br>”;
echo “Documentos Totales:”.$index->numDocs().”<br>”;
$hits  = $index->find($patron);
$numHits = count($hits);
echo “Encontradas $numHits coincidencias<br>”;
foreach($hits as $hit){
    echo $hit->dia.”<br>”;
    echo $hit->pagina.”<br>”;    
    echo $hit->score.”<br>”;
}

¡¡¡¡Oooohhhhh!!!!! ¡¡Alegría por todo mi ser!! Me dice que ha encontrado una coincidencia (estoy buscando la palabra “manolito) y que el número total de documentos almacenados es 1.

Conclusión, PHP también parece que se entiende con Lucene, y para los que nos tenemos que pelear con buscadores de palabras parece que se nos abre el cielo. Próximamente intentaré implementarlo de verdad con unas cuantas cosas que tengo en mente, pero eso será “más adelante”…