Archive for the ‘Informática’ Category

h1

UnsupportedOperationException en array construido con Arrays.asList

26 febrero 2010

Si se intenta ejecutar un método add, remove, etc., sobre una lista construida mediante Arrays.asList se obtiene una UnsupportedOperationException. El motivo es que dicho método no crea una lista dinámica real (como sería un ArrayList) sino una vista para el array. Al seguir usando el mismo objeto que teníamos, por tanto, no se puede redimensionar.

La solución a este problema sería emplear un código como el siguiente para construir una lista dinámica real:

List lista = new ArrayList(Arrays.asList(array));

Fuente: Raja’s Weblog

Anuncios
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

Buscar texto en cualquier tipo de archivo en Windows XP

18 febrero 2010

La búsqueda por contenido incluida por defecto en Windows XP (no sé si en 7 es igual) apesta: solo permite buscar texto en archivos .txt, .doc, .xls y demás formatos de Microsoft. Si tienes una carpeta llena de archivos de código fuente puedes darte por muerto, salvo si lo configuras a mano.

Milagrosamente, por una vez la web de soporte de Microsoft sirve para algo 😮 Proporcionan dos métodos, el primero consistente en instalar una actualización, pero sigue manteniendo una lista de formatos limitada y el formato .po (utilizado en traducciones de gettext) no está reconocido, lo cual me fastidia bastante cuando estoy traduciendo una aplicación en Windows.

La segunda alternativa es configurar el sistema de búsqueda a costa de una penalización en el rendimiento que yo aún no he notado. Supongo que si eliges explorar todo el disco duro en lugar de una carpeta concreta será más agónico. Los pasos para ello son:

  1. Abrir la función de búsqueda, desde Inicio » Buscar o desde el botón Búsqueda en una vista de carpeta.
  2. Seleccionar Cambiar preferencias (la última opción) » Con Index Server (para búsquedas locales más rápidas) » Cambiar la configuración de Index Server (avanzada). No es necesario activar el Servicio de Index Server.
  3. En la barra de herramientas, hacemos clic en Mostrar u ocultar el árbol de la consola y, cuando se muestre el panel izquierdo, en Servicio de Index Server en equipo local (con el botón derecho) » Propiedades.
  4. En la pestaña Generación, marcamos la casilla Indizar archivos con extensiones desconocidas, cerramos el cuadro de diálogo y salimos de la consola. Cerramos la ventana actual del Explorador de Windows (es un poco cortito en temas de refresco 😛 ) y cuando la volvamos a abrir ya estará activada una búsqueda decente.

Fuente: Web de soporte de Microsoft

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 😀