Jun
06

Antes de comenzar la instalación es necesario asegurarse que se tiene instalado Java 5 o superior y como mínimo PHP 5.2.4. Para este caso se ha utilizado un servidor con las siguientes versiones:

  • Ubuntu Server 12.04
  • PHP 5.3.10
  • Apache/2.2.22
  • Java 6

En primer lugar se debe instalar el módulo de Drupal Apache Solr Search Integration (http://drupal.org/project/apachesolr). Se ha trabajado con la versión 7.x-1.2 del módulo.

Antes de activar el módulo es necesario realizar la instalación de Solr (http://lucene.apache.org/solr). A pesar de que existan paquetes para Solr en Debian y en Ubuntu, para que la integración funcione con Drupal se ha descargado la última versión de la página oficial (Solr 3.6.2 – http://www.apache.org/dyn/closer.cgi/lucene/solr/3.6.2).

Para instalar el servidor Solr se han seguido los siguientes pasos:

  1. Descomprimir apache-solr-3.6.2.zip en el directorio /opt siempre y cuando este no sea visible para el servidor web.
    cd /opt
    sudo unzip apache-solr-3.6.2.zip
  2. Los ficheros de configuración de Solr se encuentran en apache-solr-3.6.2/example/solr/conf. Se deben sustituir dichos ficheros por los que proporciona el módulo de Drupal:
    cd apache-solr-3.6.2/example/solr/conf
    sudo mv solrconfig.xml solrconfig.xml.bak
    sudo cp [DIR DRUPAL]/sites/all/modules/apachesolr/solr-conf/solr-3.x/solrconfig.xml .
    sudo mv schema.xml schema.xml.bak
    sudo cp [DIR DRUPAL]/sites/all/modules/apachesolr/solr-conf/solr-3.x/schema.xml .
    sudo mv protwords.txt protwords.txt.bak
    sudo cp [DIR DRUPAL]/sites/all/modules/apachesolr/solr-conf/solr-3.x/protwords.txt .
  3. El módulo de Drupal incluye además varios ficheros de configuración adicionales que se deben copiar dentro del directorio de configuración de Solr.
    cd apache-solr-3.6.2/example/solr/conf
    sudo cp [DIR DRUPAL]/sites/all/modules/apachesolr/solr-conf/solr-3.x/solrconf_extra.xml .
    sudo cp [DIR DRUPAL]/sites/all/modules/apachesolr/solr-conf/solr-3.x/solrcore.properties .
  4. Es recomendable incluir una lista de palabras vacías para optimizar la indexación de los contenidos. Se pueden encontrar listas de palabras vacías para una gran número de idiomas en http://code.google.com/p/stop-words/. Para este caso el contenido que se va a indexar está en español por lo que se ha descargado la lista de palabras vacías en español.
    sudo mv stopwords.txt stopwords.txt.bak
  5. Finalmente lanzamos Jetty con Solr.
    sudo java -jar /opt/apache-solr-3.6.2/example/start.jar

Para comprobar que el servidor Solr está funcionando correctamente se debe acceder a la siguiente url http://[TU DOMINIO]:8983/solr/admin. Asegúrate que el puerto 8983 es accesibles. En caso contrario puedes abrirlo o cambiar el puerto en el fichero de configuración de Jetty.

En /opt/apache-solr-3.6.2/example/etc/jetty.xml cambia el puerto por defecto 8983 por otro que no sea el 80:

<Call name="addConnector">
[...]
<Set name="port"><SystemProperty name="jetty.port" default="8983"/></Set>

Servidor Solr con autenticación HTTP

Para proteger la página de administración del servidor Solr mediante autenticación HTTP se han seguido las indicaciones que se encuentran en la siguiente página http://www.shayanderson.com/linux/how-to-password-protect-apache-solr-server-admin-pages.htm. En primer lugar, en el fichero /opt/apache-solr-6.3.2/example/etc/jetty.xml se debe descomentar el siguiente fragmento de código, asegurándose que se sustituye Test Realm por Solr Admin Auth.

[...]
<Set name="UserRealms">
<Array type="org.mortbay.jetty.security.UserRealm">
<Item>
<New>
<Set name="name">Solr Admin Auth</Set>
<Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set>
<Set name="refreshInterval">0</Set>
</New>
</Item>
</Array>
</Set>
[...]

Después se edita /opt/apache-solr-6.3.2/example/etc/webdefault.xml y se añade al final del fichero el siguiente fragmento de código:

[...]
</locale-encoding-mapping-list>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Solr Admin Auth</realm-name>
</login-config>
<security-constraint>
<web-resource-collection>
<web-resource-name>Solr Admin Auth</web-resource-name>
<url-pattern>/admin/*</url-pattern>
<url-pattern>/update/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
</web-app>

A continuación se crea el fichero realm.properties en /opt/apache-solr-6.3.2/example/etc en el que se debe indicar el nombre de usuario, la contraseña y el identificador (role-name) que en este caso es admin:

username: password, admin

Para que el módulo de Drupal funcione con autenticación HTTP se debe indicar el usuario y la contraseña en el campo de la URL del servidor Solr:

http://username:password@localhost:8983/solr

Script en init.d

Para terminar, creamos un script en init.d para iniciar y parar el servidor Solr:

#!/bin/sh -e

# Starts, stops, and restarts solr

SOLR_DIR="/opt/apache-solr-3.6.2/example"
JAVA_OPTIONS="-Xmx1024m -DSTOP.PORT=8079 -DSTOP.KEY=stopkey -jar start.jar"
LOG_FILE="/var/log/solr.log"
JAVA="/usr/bin/java"

case $1 in
start)
echo "Starting Solr"
cd $SOLR_DIR
$JAVA $JAVA_OPTIONS 2> $LOG_FILE &
;;
stop)
echo "Stopping Solr"
cd $SOLR_DIR
$JAVA $JAVA_OPTIONS --stop
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}" >&2
exit 1
;;
esac

(fuente: http://lucene.472066.n3.nabble.com/solr-init-d-script-td1867519.html)

 

Mar
21

El proyecto, GRIAL 2.0, está entregado y defendido. Ahora es cuando viene lo divertido, seguir manteniéndolo y hacerlo crecer más.

Justo el día de la defensa del proyecto recibí la traducción al francés del plugin y ayer mismo tenía en mi correo la traducción al noruego. Visto que no he dado soporte al plugin de búsquedas en los dos últimos meses, decidí ponerme a implementar algunas mejoras sugeridas por los usuarios así como solventar algunos errores en su funcionamiento.

Cuando se utiliza WordPress como CMS más que como gestor de blogs, los usuarios pueden no entender la diferencia entre buscar en las publicaciones o post y buscar en las páginas estáticas, por ello, siguiendo el consejo de un par de usuarios, he añadido una opción tanto en la configuración del widget como en el uso del shortcode, que permite indicar que las búsquedas se hagan por defecto en posts y páginas y se oculta la opción  en el formulario de búsqueda.

Se ha resuelto un bug que impedía mostrar los posts privados en los resultados de búsqueda cuando estabas logueado en el sistema. Además, desde las primeras versiones, daba problemas con las instalaciones que habían migrado de un WPMU a WordPress 3.0 Multisite, se obtenía un error al activarlo que indicaba un fallo en la base de datos. Dicho bug ha sido resuelto en esta nueva versión.

Además de la funcionalidad, se ha reestructurado el plugin, separando la definición del widget en un fichero independiente y agrupando otra serie de funcionalidad como la definición de los shortcodes o el manejo de la base de datos en otros ficheros, de esta forma se facilita su mantenimiento. En versiones futuras se pasará a definir todo el plugin como un conjunto de clases que interactúan entre sí.

En definitiva, la nueva versión de Multisite Global Search, 1.2.5, con casi 3000 descargas, es más estable, está mejor estructurada e introduce pequeñas mejoras de usabilidad.

http://wordpress.org/extend/plugins/multisite-global-search/

Mar
08

Realizando la presentación para la defensa de mi proyecto, ese del que habla todo este blog, tuve la necesidad de plasmar en una sola imagen toda la maraña de herramientas y aplicaciones que he utilizado a lo largo de casi un año para dar forma a toda la estructura tecnológica que ahora da servicio a GRIAL.

Opté por crear un mapa conceptual por lo que me puse a probar algunas de las herramientas que existen para dicho propósito. Tras catar MindMeister, CmapTools y FreeMind ninguna terminaba de convencerme, o los diagramas eran demasiado sobríos o había que emplear más tiempo en aprender a manejar la herramienta que en crear en mapa.

Entonces encontré Bubbl.us, una herramienta gratuita online desarrollada en Flash. Nada más acceder a su web puedes comenzar a crear mapas conceptuales sin necesidad de registrarte. Una vez tengas hecho tu mapa puedes imprimirlo y exportarlo a imagen o  código HTML para insertarlo en una web. Solo si quieres guardar los mapas o compartirlos con otros usuarios será necesario registrarte, pero hasta eso es sencillo, introduces un usuario, una contraseña, tu dirección de correo y listo, cuenta creada sin perder el mapa que estuvieras construyendo.

Crear un mapa con Bubbl.us es sumamente sencillo e intuitivo, con solo situar el ratón sobre el nodo inicial se muestran todas las operaciones disponibles: eliminar, mover, conectar con otro nodo, cambiar el color, cambiar el tamaño de fuente, añadir un nodo hijo o añadir un nodo hermano. Además se puede generar toda la estructura utilizando únicamente el teclado, (Cmd o Ctrl) + Enter para añadir nodos hijo y Tab para añadir nodos hermano.
.

Feb
08

GRIAL 2.0

Feb
06

Desde que pasas por las clases de ingeniería del software no hacen más que repetirte que primero hay que definir requisitos, realizar una cantidad ingente de diagramas UML, seguir una metodología, plantearte el ciclo de vida que vas a seguir,etc. Se supone que cuando realizas el proyecto de fin de carrera tienes que aplicar todo eso, primero dedicas tiempo a lo que se denomina planificar y documentar y luego pasas al desarrollo en estado puro, siempre dependiendo del tipo de metodología utilizada.

Dejando un poco de lado la teoría, y llevándolo a la práctica, opino que realizar una correcta planificación de tareas así como definir los requisitos es fundamental en cualquier desarrollo. Es cierto que resulta una tarea pesada, que estas deseando ponerte a cacharrear, ver los frutos de tu trabajo, pero después de dos PFC puedo decir que es lo mejor que he podido hacer. Es tan simple como plantearte qué quieres hacer y en qué orden lo vas a hacer, y si realizas algún diagrama en UML ya tienes claro cómo lo vas a hacer. Luego, cuando toca programar, a  muchos de los problemas ya les tienes una solución. También se evita que tu programa empiece a crecer con mejoras y más mejoras, es decir, como previamente te has planteado lo que quieres hacer, ya tienes unos límites de hasta donde debes llegar para adaptarte a los tiempos de desarrollo establecidos.

En definitiva, aunque me quejara de estar documentando cuando empecé el proyecto, me alegro de haberlo hecho así. Y no quiero ni imaginar como hubiera sido tener que terminar de programar y ponerme a realizar toda la documentación, ingeniería inversa se llama. Ahora en vez de dedicarme a poner todo bonito en un documento de Word, hubiera tenido que hacer toda esa pesada tarea para que no me sirviera de nada, trabajo y tiempo perdido.