Archive for the ‘Software libre’ Category

h1

Chat de vídeo de Google Talk en OpenSUSE

28 septiembre 2010

Aunque Google ya proporciona un paquete RPM, supuestamente para dar soporte de manera sencilla a la videoconferencia en OpenSUSE, la realidad es que al final no es todo tan simple. El proceso inicial es el típico: la primera vez que intentemos iniciar el chat de voz/vídeo nos proporcionará un enlace desde el que descargar el paquete RPM. Sin embargo, cuando intentemos instalarlo avisará de que falta una dependencia libcrypto.so.10, que se encuentra dentro del paquete openssl.

Tras descargar este último (incluyendo también la versión de 32 bits si nuestro operativo es de 64), en lugar de instalar directamente el complemento de vídeo hay que crear dos enlaces simbólicos, porque a saber qué criterio de nombrado habrán utilizado en Google y por eso no encuentra la biblioteca que procede. Las órdenes son:

sudo ln -s /lib/libcrypto.so.1.0.0 /lib/libcrypto.so.10
sudo ln -s /lib/libssl.so.1.0.0 /lib/libssl.so.10

Ahora sí, podemos proceder a instalar el RPM, ignorando el error de dependencias que se muestre. Tras reiniciar el navegador ya deberíamos poder configurar los parámetros de la cámara 😀 Aviso de que a mí tampoco me funcionó a la primera, tuve que instalarlo primero en Chrome y después volver a probar desde Firefox. Tras este segundo intento ya funcionó sin problemas en ambos.

h1

Acceder como manager al Tomcat distribuido con Netbeans

25 marzo 2010

Entre las opciones de instalación de Netbeans se encuentra el servidor Tomcat, para el que configura un usuario administrador automáticamente (se puede ver junto a otros datos en Services » Servers » Apache Tomcat).

Si queremos añadir otro usuario un poco más fácil de recordar, ver las aplicaciones desplegadas, etc., debemos dirigirnos a nuestra carpeta persona » .netbeans en lugar de a la raíz de instalación global de Tomcat. Ningún cambio que hagamos en dicha raíz se reflejará si accedemos mediante la configuración por defecto de Netbeans.

Si queremos trabajar directamente sobre la instalación general de Tomcat, debemos añadir una nueva configuración de servidor en Services » Servers, y poner como carpeta base de Catalina la de dicha instalación.

h1

Incluir JAR propio en un repositorio Maven local

24 marzo 2010

Una de las principales ventajas de Maven es que gestiona las dependencias de los proyectos descargándolas a un repositorio local la primera vez que se necesiten. Sin embargo, posiblemente tengamos que incluir algunas a mano porque no estén disponibles en los repositorios “oficiales”, como me ocurrió con Qt Jambi (editado: hoy he descubierto que hay un repositorio independiente en Sourceforge para la versión Community). Después de dar vueltas buscando una solución, resultó estar en las FAQ de Maven 🙂

Para incluir un artefacto debemos ejecutar una orden donde indicar cuál es el archivo a subir, su groupId, artifactId, versión, tipo de empaquetado y si debe generar el POM (no veo ningún motivo para no hacerlo), utilizando una orden como la siguiente. Nota: Si tenemos el ejecutable de Maven en el PATH podemos colocarnos en la carpeta donde se encuentre el artefacto para no tener que escribir toda su ruta.

mvn install:install-file -Dfile=qtjambi-4.5.0_01.jar -DgroupId=qtjambi -DartifactId=qtjambi -Dversion=4.5.0_01 -Dpackaging=jar -DgeneratePom=true

En este caso concreto el groupId y el artifactId coinciden porque me pareció más coherente, ya que se trata del JAR principal para cualquier aplicación que utilice Qt Jambi. Si también fuésemos a incluir las distribuciones para Windows, Mac y Linux podríamos hacerlo dentro del mismo groupId pero con distinto artifactId, como en las siguientes órdenes:

mvn install:install-file -Dfile=qtjambi-win32-msvc2005-4.5.0_01.jar -DgroupId=qtjambi -DartifactId=qtjambi-win -Dversion=4.5.0_01 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=qtjambi-macosx-gcc-4.5.0_01.jar -DgroupId=qtjambi -DartifactId=qtjambi-mac -Dversion=4.5.0_01 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=qtjambi-linux32-gcc-4.5.0_01.jar -DgroupId=qtjambi -DartifactId=qtjambi-linux -Dversion=4.5.0_01 -Dpackaging=jar -DgeneratePom=true
Y con esto tenemos cuatro nuevos JAR en nuestro repositorio local, listos para ser utilizados desde cualquier proyecto Maven 😀

h1

Illegal mix of collations en procedimiento almacenado de MySQL

23 marzo 2010

En el trabajo he tenido que modificar el modelo de una base de datos MySQL para un proyecto ya casi terminado (benditos lusers que no saben cómo hacen lo que hacen), por lo que creé un par de procedimientos almacenados. En mi equipo funcionaban perfectamente, pero al probarlo en otro no hacía más que mostrar el error:

ERROR 1267 (HY000): Illegal mix of collations (utf8_spanish_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='

El único punto del procedimiento donde podía ocurrir era en un where donde se comparaban dos longtext:

select id into errorid from errortecnico
where mensaje = errormensaje

Buscando y buscando encontré la inspiración en el blog de Pablo Viquez, un desarrollador de Costa Rica, con la única diferencia de que su problema ocurría con la codificación latin1.

La solución es convertir la parte del where que causa problemas a la collation (dentro de una codificación, la ordenación de caracteres) que nosotros usamos mediante la sentencia convert, que en mi caso quedaría tal que así:

select id into errorid from errortecnico where mensaje
= CONVERT(errormensaje using utf8) collate utf8_spanish_ci

Con esto, MySQL convertirá automáticamente el dato que interpretaba como utf8_general_ci a utf8_spanish_ci.

h1

Limitaciones de la API Criteria de Hibernate

19 marzo 2010

En el trabajo estoy utilizando la API Criteria para desarrollar un generador de informes, porque permite componer consultas dinámicamente sin tener que concatenar asquerosamente un montón de cadenas de texto. Por desgracia, aún tiene varias limitaciones que no están presentes si utilizamos HQL y que la deslucen un poco.

Lo peor de todo es que descubrirlas puede llevar bastante tiempo, así que por si Google indexa este post de manera que salga en alguna de las primeras entradas, al menos le habrá ahorrado tiempo a alguien xD Las limitaciones que he descubierto hasta ahora son:

  • Cruzar varias veces con la misma tabla (aunque a cada join se le asigne un alias distinto).
  • Restricciones/proyecciones con atributos multivaluados, representados mediante una CollectionOfElements. Para la versión 3.5.0 parece posible que al menos la primera parte del problema se solucione gracias a un parche.
h1

Crear un índice con enlaces en OpenOffice

23 febrero 2010

Aunque un índice normal ya facilita realizar búsquedas en un documento, si queremos acceder a un apartado en concreto es mucho mejor tener enlaces en sus entradas, que se activan con la combinación CTRL+clic. En un principio, el sistema que proporciona OpenOffice resulta más complejo que el de Microsoft Office (y con una interfaz nada intuitiva), pero también brinda más posibilidades de personalización.

Por el tamaño del tocho parece una tarea complicadísima pero es que la explico totalmente al detalle, en realidad son cuatro tonterías 🙂

Crear el índice

Para añadir un índice al documento, debemos utilizar la opción de menú Insertar » Índices » Índices. Uno de los valores en los que más hay que fijarse es el de Evaluar hasta nivel, porque serán los niveles del árbol de apartados que se nos muestren. Por ejemplo, si seleccionamos tres niveles se mostrarán las entradas 1, 1.1 y 1.1.1, pero no más allá. Según la complejidad del documento, 2-3 niveles suele ser lo más habitual.

Crear los enlaces

Podemos personalizar los enlaces en el cuadro de diálogo de creación del índice o, si lo preferimos, hacerlo después presionando el botón derecho del ratón sobre el índice y seleccionando la opción Editar índice/tabla del menú contextual.

En la pestaña Entradas el apartado que nos interesa es Estructura, donde se muestran cuatro pequeños botones: E#, E, T, #. Cada uno de ellos representa una parte de la línea que corresponde a cada entrada del índice (se puede ver en un cuadro emergente al pasar el ratón sobre ellos):

  • E# es el número de capítulo (1, 1.1, 1.1.1…)
  • E es el título del capítulo
  • T es la tabulación, es decir, los puntos que unen el título del capítulo con su número de página asociado
  • # es el número de página

Y entre cada uno se ve un recuadro en blanco. Podemos añadir un enlace a cualquier subconjunto de cada entrada: solo en el número y título de capítulo, solo en el número de página, en toda la línea, etc. Por comodidad, yo prefiero asociarlo a toda la línea. Para ello:

  1. Se selecciona el primer recuadro en blanco, antes de E#, y presionamos en botón Hiperenlace que se encuentra un poco más abajo. Debería aparecer un nuevo mini-botón antes de E# y, si pasamos el ratón sobre él, un cuadro emergente nos indicará que es el comienzo de un hiperenlace.
  2. Repetimos el proceso con el último recuadro en blanco, después de #. En este caso, la descripción es de final del hiperenlace.

De esta forma, seleccionando cada nivel del índice en la lista a la izquierda podemos aplicar un estilo de enlace distinto para cada uno, aunque sea un poco WTF. Como lo más coherente sería aplicar el mismo a todos, tenemos un fantástico botón Todo a la derecha de la barra de mini-botones. Si lo presionamos y después seleccionamos otro nivel distinto del actual, veremos cómo se han aplicado los cambios a todos ellos.

Fuente: Lista de discusión de OpenOffice en español

h1

Comunicarse con Windows Mobile en OpenSUSE usando SynCE

12 febrero 2010

El uso más habitual que le doy a mi PDA (con Windows Mobile) es ver vídeos en el camino al trabajo y, como ahora mismo solo tengo Windows instalado para jugar, una de las cosas que más pereza me da es tener que reiniciar para mover archivos del ordenador al móvil. La última vez que intenté comunicarla con Kubuntu 8.04 el resultado fue nulo pero ayer, tras instalar KDE SC 4.4, decidí probar también con esto y (por suerte) las cosas han cambiado 🙂

Para ello utilicé SynCE, que parece la alternativa más extendida para realizar esta tarea y además tiene una entrada dedicada exclusivamente a ella en la web de OpenSUSE.  El proceso completo, después del salto. Read the rest of this entry ?

h1

Publicación de KDE SC 4.4 (y II)

10 febrero 2010

Tras comentar las principales novedades que incluye esta nueva versión del entorno de escritorio KDE, sigo con la lista asociada a las aplicaciones educativas, juegos y a la plataforma de desarrollo, que no he incluido en el post anterior porque considero que su ámbito de uso está más restringido y podrían no interesar a todo el mundo 🙂

Read the rest of this entry ?

h1

Publicación de KDE SC 4.4 (I)

10 febrero 2010

Si lo hice con el etiquetado, tenía que comentar forzosamente la publicación, ¿no? 🙂 Ayer de noche se liberó KDE SC 4.4 bajo el nombre en clave “Caikaku”. El anuncio oficial en español se puede leer aquí.

Por curiosidad, estuve buscando su significado y de paso encontré el de “Caizen”. En realidad, son dos palabras japonesas: kaizen se refiere a una mejora incremental o pequeña, y kaikaku a grandes cambios. ¿Cuáles son? A aquellos que les dé pereza leerse entera la guía visual (bastante más completa que el anuncio) se los doy resumidos y divididos por ámbito después del salto. Read the rest of this entry ?

h1

Encriptar la contraseña de conexión en hibernate.cfg.xml

5 febrero 2010

Por defecto, en el fichero de configuración de Hibernate se muestran en texto plano todos los datos de conexión, lo que evidentemente no resulta muy seguro en cuanto lo ponemos a disposición de los usuarios. Para encriptarlos de manera sencilla podemos utilizar la biblioteca Jasypt (Java Simplified Encryption), que también nos permite encriptar el contenido de la base de datos, aunque eso queda fuera del alcance de este post 🙂

En este caso, supongamos que solo vamos a encriptar la contraseña. Lo primero es generar este valor a partir de una clave mediante uno de los scripts BAT o SH que se incluyen en la distribución. Ejecutamos la orden encrypt.bat input=contraseña_a_encriptar password=clave_del_algoritmo y nos devolverá un resultado como el siguiente:

----ENVIRONMENT-----------------
Runtime: Sun Microsystems Inc. Java HotSpot(TM) Client VM 14.2-b01
----ARGUMENTS-------------------
input: mipass
password: foobar
----OUTPUT----------------------
j1BNruKrxJ9xy9u8e1GtBw==

El valor de salida será el que se escriba en el fichero hibernate.cfg.xml, pero antes nos quedan cosas por hacer. En el fichero donde esté mapeada la base de datos (en caso de usar anotaciones habrá que crear uno nuevo) incluimos la declaración del tipo del cifrador:

<hibernate-mapping>
      <typedef name="encrypted"
      class="org.jasypt.hibernate.type.EncryptedStringType">
            <param name="encryptorRegisteredName">
                  hibernateEncryptor</param>
      </typedef>
</hibernate-mapping>

En la clase donde se cree la SessionFactory de Hibernate (lo habitual es utilizar una llamada HibernateUtil) se asocia esta al cifrador antes declarado:

config = new AnnotationConfiguration().configure();

PBEStringEncryptor encryptor =
      new StandardPBEStringEncryptor();
// La clave se puede obtener consultar en web,
// en una variable del programa o de entorno...
encryptor.setPassword("foobar");
HibernatePBEEncryptorRegistry registry =
      HibernatePBEEncryptorRegistry.getInstance();

// Asignar el mismo nombre que en hibernate-mapping
registry.registerPBEStringEncryptor(
      "hibernateEncryptor", encryptor);

sessionFactory = config.buildSessionFactory();

Y ya es hora de tocar el fichero de configuración de Hibernate, añadiendo las siguientes líneas. Es importante escribir la contraseña encriptada entre paréntesis porque es el formato que utiliza Jasypt para diferenciar las cadenas encriptadas de las que viajan en plano.

<!-- Proveedor más simple de conexión encriptada,
también existe uno sobre C3P0 -->
<property name="connection.provider_class">
      org.jasypt.hibernate.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider
</property>
<property name="connection.encryptor_registered_name">
      hibernateEncryptor
</property>
<property name="connection.password">
      ENC(j1BNruKrxJ9xy9u8e1GtBw==)
</property>

<!-- Fichero con el hibernate-mapping -->
<mapping resource="mapping.xml" />

Y con estos pocos pasos habremos mejorado un poquito la seguridad de nuestra aplicación 😀