miércoles, junio 27, 2007

Búsqueda instantánea en linux [Beagle, Tracker y Deskbar-applet]

En linux, siempre hemos podido realizar búsquedas instantáneas desde el terminal gracias al comando locate, éste locate se apoya en una base de dados que se va actualizando sola o bien manualmente con la instrucción sudo updatedb. Bien, ésto existe desde hace muuuuchos años y por consecuencia sus funcionalidades se limitan a buscar un fichero y punto.

Las cosas avanzan y linux más así que salieron de la comunidad tres proyectos importantes para añadir funcionalidades extra al "sistema de búsqueda de archivos", beagle, tracker y deskbar-applet.


Éstas tres aplicaciones son:

1- Beagle: Es un motor de búsqueda instantánea desarrollado sobre la plataforma mono, en donde es capaz de localizar desde un tipo de fichero determinado (por ejemplo: búscame un video que se llame ...) hasta texto dentro de ficheros. Una lista extensa la tenéis en éste enlace.

La ventaja de éste sistema es que está muy avanzado.

La desventaja és que al ejecutarse sobre el framework mono, consume muchos recursos, sobretodo ram.

sudo aptitude install beagle


2- Tracker: También es un motor de búsqueda instantánea pero ésta vez desarrollado directamente en c, es capaz de indexar más de 100 ficheros por segundo con un consumo de unos 3 - 4 megas de ram y tiene un analizador interno de uso de cpu para acelerar o detener la indexación para que el sistema no pierda absolutamente nada de rendimiento. Tracker además proporciona un sistema de tags por lo que podremos poner etiquetas a nuestros documentos y luego realizar búsquedas a través de ellas.

La ventaja de éste sistema es su increible rendimiento respecto a beagle.

La desventaja és que no está tan desarrollado como Beagle peró quizá incluso ni notas las carencias.

sudo aptitude install tracker


Además podemos disponer de una interfaz gráfica propia del programa que la podemos instalar (quizá no hace falta cuando leáis el punto 3).

sudo aptitude install tracker-search-tool


PD: Por defecto, indexa todo el contenido no oculto de /home/ pero en mi caso tengo una partición de datos en /home/datos así que por defecto no la indexa, la solución es sencilla.

En el terminal ponemos:

sudo gedit .Tracker/tracker.cfg


Y en la lína que pone WatchDirecoryRoots=/home/; añadimos la que queremos que indexe, en mi caso quedaría:

WatchDirectoryRoots=/home/;/home/data;

También podemos poner directorios que no queremos indexar así como muchas otras opciones que encontraremos en dicho fichero.

3- Deskbar-applet: Bien, ésta será la herramienta definitiva que culmina las búsquedas en nuestro sistema. Como su nombre indica es un applet (botón derecho sobre la barra de "inicio" la primera opción, añadir al cuadro, ahí están todos los applets del sistema), que en mi caso (catalán) se llama Barra d'escriptori (en castellano, Barra de escritorio).

Éste applet es capaz de trabajar tanto con beagle como con tracker, y es un complemento perfecto ya que nos proporciona la interfaz de búsquedas gráficamente en pantalla.

Una vez añadida a nuestra barra, con el botón derecho podemos ir a su configuración en donde tendremos muchas opciones en donde la aplicación buscará, entre ellas una se llama tracker live results en donde nos mostrará los resultados consultando a tracker.

Como complemento a las búsquedas de tracker, podemos poner por ejemplo programas y búsquedas en el web. Además podemos configurar el botón de inicio de la aplicación en el apartado Visualización, subapartado Focus (yo tengo la tecla F12).

Así pues, si pulso el botón F12, me aparecerá un cuadro como éste:



Y a medida que vayamos escribiendo texto, en tiempo real no irán apareciendo los resultados de forma instantánea subdivididos en tantas categorías como métodos de búsqueda activados en la configuración (si es que existe algún resultado en esa búsqueda).

Una funcionalidad que me encanta es la de abrir directamente una página web, en vez de abrir el firefox y escribir la dirección lo que hago es pulsar F12, se me abre el cuadro de diálogo, escribo la dirección por ejemplo: zegnus.blogspor.com, le doy al enter y automáticamente se me abre el firefox con esa dirección.

Bug: Trasteando con el sistema de búsquedas en la web, me di cuenta de que se puede especificar que busque en todos los motores de búsqueda que uno tiene disponible en firefox, o que sólo lo busque en el buscador principal.

Yo como motor de búsqueda principal tengo el Google, pero si ponía en el applet que sólo me buscase en el buscador principal, en realidad me buscaba en todos. Entré en el canal oficial de ubuntu en internet y me confirmaron el bug así que me puse a trastear un poco.

Encontré el fichero de código (escrito en python) del applet que realiza las búsquedas (cómo lo encontré ? muy fácil, desde el terminal puse: locate deskbar-applet, y al instante me salieron todos los resultados, exactamente en la ruta /usr/lib/deskbar-applet/handlers/ había un fichero llamado mozilla.py, tenia que ser éste, seguro!), abrí el fichero mozilla.py y descubrí que el applet mira en el fichero prefs.js del usuario del firefox, en mi caso para localizarlo me fui al fichero de perfiles de firefox (.mozilla/firefox/profiles.ini) y el perfil por defecto (sólo tengo ese) me indicaba que la ruta era p6m12ygp.default, perfecto, ahora me fui a .mozilla/firefox/p6m13ygp.default/ y milagro! dentro se encontraba el ficherito prefs.js.

Perfecto, por un lado tenemos abierto (yo lo abro con el gedit) en modo superusuario el fichero mozilla.py y por el otro lado tenemos abierto en usuario normal el fichero prefs.js.

A ver que pasa con el fichero mozilla.py:

- En la línea 78 vemos que el applet busca la propiedad user_pref("browser.search.selectedEngine") en el fichero prefs.js

- Además en la línea 70 tenemos que PRIMARY_SEARCH_ENGINE = None

- En las líneas 208 - 214 tenemos una lista de directorios en donde si vamos por ejemplo a la ruta /usr/lib/firefox/searchplugins/ vemos que tenemos unos ficheros que corresponden con la lista de buscadores disponible a través de firefox.

Así pues deduzco que el buscador por defecto sera None (osea que ninguno), buscará la propiedad "browser.search.selectedEngine" en el prefs.js para mirar qué buscador está utilizando firefox y tenemos una lista de buscadores disponible en la ruta /usr/lib/firefox/searchplugins.

Ahora miraré a ver que pasa con el fichero prefs.js y su relación con los motores de búsqueda de firefox:

- Con el fichero prefs.js abierto, abrimos el firefox y hacemos clic en el icono de la barra de búsquedas para seleccionar cualquier motor que no sea Google, por ejemplo Yahoo y cerramos el Firefox.



- Ahora nos vamos al fichero prefs.js abierto, y al cabo de unos segundos el gedit nos informa que el fichero ha sido cambiado, le damos a recargar y magia !! ha aparecido la línea que el applet andaba buscando.

- Bien, hago lo mismo con qualquier otro buscador y lo mismo volviendo a google, observo que con google esa línea desaparece pero con qualquier otro buscador aparece. También muevo de posición los buscadores para que google no esté el primero, pero pasa exactamente lo mismo. Así que lo que deduzco es que si el buscador es google, la línea no estará y si es cualquier otro, la línea se creará.

Así que para mi la solución es:

En el fichero mozilla.py que tenemos abierto, modificamos el None por "Google" quedando así:

PRIMARY_SEARCH_ENGINE = "Google"


Quito el deskbar-applet y lo vuelvo a insertar y plah' !! ahora sólo me busca en google si es que en el firefox tengo indicado que sea google mi buscador primario.

Peerfecto, bug solucionado y reportado a la comunidad.

Podéis consultar y seguir el estado del bug en ésta dirección.

A disfrutar !!

---
Captura: Realizada en linux [ubuntu], con el programa de retoque fotográfico Gimp

1 comentario:

Anónimo dijo...

Nice article as for me. Thnx a lot for posting that data.

Craig Torson
portable cell jammer