Mucho cuidado en Los Lances

28 02 2010

Desde hace ya varios meses, cada vez que entraba y salía del agua no había fin de semana que no me encontrase en la arena esta cosa que podéis observar en la imagen.

Carabela Portuguesa

Carabela Portuguesa en la playa de los Lances (Tarifa)

Al principio creí que se trataba de algún tipo de cebo o artilugio extraño para pescar, puesto que en alguna ocasión llegué a explotar con la punta de mi tabla el globo que conforma la parte superior de esta cosa (pobre iluso), pero este fin de semana, al observar la ingente cantidad de estos globitos a lo largo de la orilla decidí consultar a un amigo y corroborar su opinión con San Google. ¡Descubrí entonces que se trata de un er vivo!

Se le conoce como Carabela Portuguesa (Physalia physalis) y no, no se trata de una medusa, sino de un organismo colonial que usa el globo que yo exploté como medio de transporte y cuyos tentáculos contienen células urticantes que al contacto desprenden una peligrosa toxina que puede ser bastante dañina para los humanos, pudiendo provocar hasta el paro cardiaco.

Carabela Portuguesa - Tentáculos urticantes

Carabela Portuguesa - Tentáculos urticantes

Esta mañana las conté a lo largo de 50 metros y me salió la cuenta de 2.5 bichos por metro (uups) e incluso me acerqué a la Playa Chica para comprobar si allí también aparecían y, efectivamente, me topé con unas cuantas (pero bastante menos) . La inmensa mayoría estaban muertas (al menos eso creo) pero me topé con una que se movía tal como lo hace la que aparece en el vídeo que os adjunto.

Pero bueno, no hagamos un drama de esto, pues llevo viendo bichos de estos desde hace ya varios meses y hasta ahora no he tenido noticia de ningún percance (puede ser gracias a la protección del neopreno), teniendo en cuenta que en esta playa surfea bastante gente. Eso sí, tened cuidado cuando entréis o salgáis del agua de no pisar ninguna, ya que aunque estén muertas, el contacto con un tentáculo sigue “picando” (si usáis escarpines, mejor).

Así que lo dicho, cuidadín y ¡buenas olas!.

Anuncios




Importar módulos en OpenCms por lotes… ¿cómo?

17 02 2010

Una de las tareas más tediosas a la hora de poner en marcha nuestro gestor de contenidos basado en OpenCms es, sin duda alguna, la importación de los módulos que queramos añadir, máxime si estos son demasiados y si son dependientes entre ellos, ¿no es cierto?.

Para facilitar esta tarea, mientras desarrollaba para un proyecto con OpenCms en la empresa en la que trabajo, se me ocurrió hacer un pequeño alto en el camino y construir un modulito que permitiese importar módulos por lotes a nuestro gestor de contenidos. De aquí salió MultiModuleImporter.

La idea es sencilla, recopilamos todos aquellos módulos que queramos importar en un fichero comprimido .zip, lo seleccionamos desde la administración del workplace y todos nuestros módulos quedan importados, es más, todas las dependencias entre el conjunto de módulos a instalar quedan resueltas gracias a la ordenación topológica que ofrece la API de OpenCms.

A este módulo se le saca verdadero partido cuando, tras instalar OpenCms debemos instalar todos los módulos que conformen nuestra versión final del gestor de contenidos que hayamos desarrollado, evitando tener que importarlos uno a uno y evitando comprobar las dependencias, cosa que puede llegar a ser bastante frustrante.

Os paso el enlace a la descarga del módulo en la web de OpenCms Hispano, para que lo probéis y juzguéis vosotros mismos:





Sincronización de instancias de OpenCms. ¡Gracias Ángel!

11 02 2010

A los que desarrolléis con OpenCms os invito a que echéis un vistazo al excelente trabajo que ha realizado mi colega Ángel C. Lázaro desarrollando un nuevo módulo para sincronizar instancias de OpenCms cuando tenemos un cluster de éstas para conseguir alta disponibilidad.

Este trabajo pretende ser una alternativa Open Source al módulo de pago ya existente

comenta Ángel.

Os paso el enlace al proyecto publicado en Google Code

También os dejo el post en el que Ángel nos cuenta todo acerca de su trabajo.

Buen trabajo Ángel.





¿Por qué QWERTY?

1 02 2010

Desde este post simplemente voy a enlazaros a otro que me pasó un amigo, en el cuál podréis comprobar que, por extraño y absurdo que parezca, la eficiencia y la productividad no siempre han sido el objetivo primordial de ciertas industrias… no es oro todo lo que reluce. En este post se explica el porqué de la distribución de las teclas en los teclados QWERTY, estándar, absoluto e indiscutible.

He aquí el post: Dar en la tecla: historia del teclado.

A mí me dejó de piedra. Espero que os guste.





Nueva versión del módulo de Georeferenciación para OpenCms

30 01 2010

En la empresa donde trabajo hemos publicado una nueva versión del módulo de georeferenciación para OpenCms, solucionando algunos bugs e incorporando nuevos iconos al editor del workplace.

La nueva versión ha sido publicada en la web de OpenCms Hispano y podéis descargarlos desde el siguiente enlace:

También os paso la noticia relacionada con la publicación del módulo:





Cómo hacer data-bindings con Enums en Spring Webflow

30 01 2010

Hace poco trabajando con Spring Webflow me vi en la necesidad de tener que llevar a cabo un data-binding contra un objeto del dominio de tipo Enum y, mira tú por dónde, no existe property ecitor alguno que te realice este binding. Buscando un poco por internet encontré un post en el que se explicaba cómo implementar un property editor para enums, lo cual me solventó la papeleta.

En este post voy a explicar lo que explica este hombre en inglés y para Spring MVC pero en castellano y para Spring Webflow, así como a realizar una modificación que, bajo mi punto de vista, hace que la solución que se propone posea otra alternativa también útil en algunos casos.

En primer lugar, he aquí nuestro enum, cualquier cosa:

package es.joselopezpua.examples;

public  enum EnumSample {
    TO_BE, NOT_TO_BE
}

Ahora escribamos la clase del property editor:

package es.joselopezpua.examples;</code>

import java.beans.PropertyEditorSupport;

/**
* Editor que permite la traducción entre {@link String} y {@link Enum}
*/

@SuppressWarnings("unchecked")
public class EnumEditor extends PropertyEditorSupport {

    /**
    * Esta clase será la clase concreta que se pasará al property editor como enumerado.
    */
    private Class clazz;

    /**
    * Constructor.
    * @param clazz
    */
    public EnumEditor(Class clazz) {
    this.clazz = clazz;
    };

    /**
    * Devuelve el valor del enumerado como texto.
    */
    public String getAsText() {
        return (getValue() == null ? "" : ((Enum) getValue()).toString());
    }

    /**
    * Establece el valor a partir de una cadena de texto.
    */
    public void setAsText(String text) throws IllegalArgumentException {
        setValue(Enum.valueOf(clazz, text));
    }
}

Sólo nos queda registrarla mediante nuestro property editors:

package es.joselopezpua.examples;

import org.springframework.beans.PropertyEditorRegistrar;
import org.springframework.beans.PropertyEditorRegistry;

/**
* PropertyEditors específico para registrar EnumEditor.
*
*/
public class PropertyEditors implements PropertyEditorRegistrar {

    /**
    * Registra nuestro PropertyEditor personalizado.
    */
    public void registerCustomEditors(final PropertyEditorRegistry registry) {
        registry.registerCustomEditor(EnumSample.class, new EnumEditor(EnumSample.class));
    }
}

Y listo, ya podemos hacer binding tranquilamente con nuestros formularios y tipos enum en Spring Webflow. Ahora, si me lo permitís, mi sugerencia.

En primer lugar imaginad que hemos definido nuestro enum con una cadena de texto para cada posible valor, tal que así:

package es.joselopezpua.examples;

    public  enum EnumSample {
        TO_BE("ser"),
        NOT_TO_BE("no ser")
    };

    /**
    * Cadena asociada al enumerado.
    */
    private String label;

    /**
    * Contructor del enumerado.
    *
    * @param stringValue cadena asociada.
    */
    EnumSample(final String stringValue) {
        this.label = stringValue;
    }

    /**
    * @see java.lang.Enum#toString().
    *
    * @return cadena asociada al enumerado.
    */
    @Override
    public String toString() {
        return label;
    }
}

Como véis hemos sobreescrito el método toString() para que devuelva la cadena asociada al enum.

En este punto es posible que nuestro EnumEditor se comporte de dos formas distintas:

  1. Estableciendo y recuperando el valor del enum en función del texto que representa al nombre de la constante. (como se ha descrito hasta ahora).
  2. Estableciendo y recuperando el valor del enum en función del texto que representa la descripción asociada a la constante.

Veamos las modificaciones oportunas para este segundo caso. El método getAsText() no cambia, dado que hemos sobreescrito el método toString() anteriormente. Modificamos el método setAsText(String text), para que establezca como valor el objeto enum apropiado para la cadena de texto que se le pasa, interpretándola como descripción asociada a la constante. Con todo, nuestro nuevo EnumEditor quedaría como sigue:

package es.joselopezpua.examples;

import java.beans.PropertyEditorSupport;

/**
* Editor que permite la traducción entre {@link String} y {@link Enum}, en función del valor de la descripción asociada a la constante del enumerado.
*/

@SuppressWarnings("unchecked")
public class EnumEditor extends PropertyEditorSupport {

    /**
    * Esta clase será la clase concreta que se pasará al property editor como enumerado.
    */
    private Class clazz;

    /**
    * Constructor.
    * @param clazz
    */
    public EnumEditor(Class clazz) {
        this.clazz = clazz;
    };

    /**
    * Devuelve el valor del enumerado como texto.
    */
    public String getAsText() {
        return (getValue() == null ? "" : ((Enum) getValue()).toString());
    }

    /**
    * Establece el valor a partir de una cadena de texto.
    */
    public void setAsText(String text) throws IllegalArgumentException {
        EnumSample enumSamples[] = EnumSample.values();
        boolean enc = false;
        int i = 0;
        while (i &lt; enumSamples.length &amp;&amp; !enc) {
            if (enumSamples[i].toString().equals(text)) {
                enc = true;
            } else {
                i++;
            }
        }
        if (!enc) {
            throw new IllegalArgumenException();
        } else {
            setValue(Enum.valueOf(clazz, enumSamples[i]));
        }
    }
}

Como se puede observar, simplemente comparamos la descripción de todos los posibles valores del enum con la cadena que se recibe; en caso de encontrar un valor cuya descripción sea igual, se establece ese enum como valor, si no, se lanza una excepción.

Esto puede resultar útil cuando nos interesa, por la razón que sea, que el valor del campo del formulario con el que hayamos hecho el binding del enum contenga la descripción y no el valor ordinal.

Espero que os sea de utilidad.

Posts relacionados:





Módulos de OpenCms

25 01 2010

No hace mucho, en la empresa en la que trabajo, publicamos varios módulos para OpenCms como consecuencia de nuestro trabajo con este gestor de contenidos. Merece la pena dedicar unos minutos a conocer qué pueden hacer estos módulos por nosotros ;).

  • GeoReferenceContentType: Este módulo permite añadir geolocalización a contenidos de forma “user-friendly”, estableciendo N puntos sobre la misma superficie del mapa, en el mismo editor de contenidos de OpenCms 😀
  • SurveyModule: Este módulo supone una mejora del módulo Alkacon OAMP Survey Module, consiguiendo el renderizado de las gráficas estadísticas mediante Open Flash Chart
  • RestrictedVFSWidget: con este widget de exploración mejorado conseguiremos que desde el editor de contenidos sólo sea posibe seleccionar aquel(aquellos) tipos de contenido que aplique(n) en cada caso, evitando incoherencias :).
  • AlfrescoModule: ¿Usar el gestor documental Alfresco y el gestor de contenidos OpenCms de forma integrada? Instala este módulo en tu OpenCms y listo.
  • Thesaurus: Si necesitas que tu sitio web basado en OpenCms disponga de un Thesaurus, este es tu módulo

Todos estos módulos han sido publicados bajo licencia GPL V3 y podéis descargarlos en la web de la comunidad OpenCms Hispano desde el siguiente enlace:

Posts relacionados:








A %d blogueros les gusta esto: