Etiqueta: OpenCms

Extenda gana el Premio Cibersur a Mejor Web Andaluza en la categoría Institución

03 dic 2010

Ayer se publicó el fallo del jurado de los Premios Cibersur a las Mejores Webs Andaluzas, otorgando el de Mejor Web Andaluza en categoría de Institución al nuevo sitio web de Extenda.

Este portal  ha sido desarrollado por el departamento de desarrollo de portales de Viavansi bajo tecnología OpenCms 7, en una estrecha colaboración con la agencia de publicidad DEC BBDO.

Nuestra más sincera enhorabuena a la institución y a los participantes en el proyecto.

OpenCms Content Relation Engine (CRE)

30 sep 2008

Una de las principales mejoras de OpenCms 7 es la incorporación del CRE (Content Relation Engine). Esta herramienta desarrollada por Michael Moossen permite establecer relaciones entre recursos del VFS (Vitual File System) de OpenCms.

Imaginemos lo siguiente:

Tenemos en el proyecto Offline un recurso A de OpenCms de tipo página html o jsp, en cuyo código hay un enlace a una imagen (recurso B) usando la etiqueta <img>.  Publicamos A.

¿Qué ocurre en versiones anteriores de OpenCms?

En el mejor de los casos si el recurso es de tipo página html el navegador mostraría la típica aspa roja indicando que no encuentra la imagen en el proyecto Online. En el peor de los casos, en jsp, suponiendo que la imagen fuese necesaria ya que leemos alguna propiedad (por ejemplo Description para mostrar el texto alternativo) el sistema podría dar un error 500.

¿Qué ocurre en el nuevo OpenCms si hemos usado CRE?

Pues que el sistema avisaría de que no hemos publicado la imagen y permitiría publicarla junto al recurso al que está asociada.

¿Qué ha cambiado en la base de datos de OpenCms?

Se ha añadido una nueva tabla llamada CMS_ONLINE_RESOURCE_RELATIONS para cada proyecto (sustituir ONLINE por OFFLINE) con los siguientes campos:

RESOURCE_SOURCE_ID: De tipo VARCHAR(36), contiene el id del recurso A.
RESOURCE_SOURCE_PATH: TEXT, contiene el path en ruta absoluta del recurso A.
RESOURCE_TARGET_ID: VARCHAR(36), contiene el id del recurso B.
RESOURCE_TARGET_PATH: TEXT, contiene el el path en ruta absoluta al recurso B.
RELATION_TYPE : INTEGER, es el tipo de relación que vamos a establecer.

¿Dónde se configuran las relaciones?

El el fichero opencms-workplace.xml. La configuración por defecto:


<default-preferences>
   <workplace-preferences>
      <workplace-generaloptions>
         ...
         <allowbrokenrelations>false</allowbrokenrelations>
         <publishrelatedresources>true</publishrelatedresources>
         ...
      </workplace-generaloptions>
   </workplace-preferences>
</default-preferences>

¿Cómo se usan las relaciones?

  1. Desde el menú flotante, opción relaciones: Podemos ver las relaciones de los recursos y asignar categorías.
  2. En jsp, usando el macro %(link.strong) o %(link.weak). En vez de usar

     <img src=”<cms:link>/imagenes/imagen.jpg</cms:link>” />

    usamos

     <img src=”<cms:link>%(link.strong:/imagenes/imagen.jpg)</cms:link>” />
  3. Usando categorías:
    • Primero hay que definir categorías, esto se hace creando una estructura de carpetas en /system/categories/ , por ejemplo:
      /system/categories/categoria1/
      /system/categories/categoria1/subcategoria11/
      /system/categories/categoria1/subcategoria12/
      /system/categories/categoria1/subcategoria13/
    • En el .XSD usamos el widget org.opencms.widgets.CmsCategoryWidget para mostrar el listado de categorías.
    • En jsp usamos org.opencms.file.collectors.CmsCategoryResourceCollector para listar los recursos pertenecientes a dicha categoría.
  4. Desde las clases de CmsObject (crear nuevas relaciones y leer o borrar existentes) y CmsRelationFilter.

Por último hay que destacar que Michael Moossen realizó una presentación muy interesante sobre CRE en los OpenCms Days. Las trasparencias que usó están disponibles en el siguiente enlace.

Trasparencias de Michael Moossen para la presentación de CRE en OpenCms Days.

Viavansi ya es proveedor oficial de soluciones OpenCms

28 ago 2008

Los señores de Alcakon han tenido a bien introducirnos en la lista de “Professional OpenCms solution providers in Europe“… Con nosotros ya somos 9 las empresas españolas que desarrollan sobre OpenCms recogidas en el listado: Adequa (Barcelona), Consoltic (Málaga), Drago Solutions (Madrid), Encamina (Valencia), GPM Factoría Internet (Salamanca), inxtenso (Barcelona), Open Sistemas (Madrid), openTrends (Barcelona) y Viavansi (Sevilla). Eso sí, como está por orden alfabético, salimos los últimos del listado de proveedores :-D

Enhorabuena a mis compañeros del departamento de Desarrollo de OpenCms.

Consejos para desarrolladores de OpenCms

15 abr 2008

Hace unas semanas mientras impartía formación de OpenCms estuve hablando con un técnico de otra empresa y me comentó los problemas que estaban teniendo al manejar un proyecto en OpenCms 6. Al cabo de unos minutos nos dimos cuenta de que los problemas que tenía no se debían a OpenCms (más bien, yo me di cuenta y él dijo:¡Por fin alguien que me entiende!), sino al diseño del portal que le habían entregado.
Llegados a este punto le estuve comentando los siguientes consejos que nosotros seguimos en Viavansi:

1.- No usar microsites cuando no sea apropiado:

Un microsite es un tipo de carpeta (“carpeta extendida”) que viene en el módulo TemplateOne.
Básicamente se utiliza para dar una funcionalidad distinta a una parte del portal. Si vamos a crear un portal desde cero no debe estar contenido en un microsite, sino en una carpeta normal. Si vamos a actualizar a futuras versiones de OpenCms ni siquiera debemos usarlo, es más, en la instalación por defecto de OpenCms 7.0.4 no aparece (se recomienda no instalar el módulo TemplateOne y usar el nuevo TemplateTwo).

2.- Si programas para OpenCms 6 o superior es mejor que olvides la forma de trabajar que tenías en OpenCms 5.

3.- Crea una estructura correcta:

Es muy importante crear un portal sólido, con una estructura lógica. Las plantillas deben estar en una carpeta en nuestro módulo y la parte navegable debe estar en /sites/ o /sites/default/ (dependiendo de como configures el fichero opencms-system.xml). Olvidate de cosas del estilo http://misitio.com/com.misitio/resources?noticia=/sites/actualidad/noticia_0005.html.
Si tu estructura es correcta puedes ver la noticia escribiendo http://misitio.com/actualidad/noticia_0005.html.
(Doy fe de haber visto cosas como esa en más de una ocasión).

4.- No añadas las jsp a las fuentes de las búsquedas:

La búsqueda por defecto muestra una descripción de cada elemento en los resultados. Si añadis las jsp y os ponen como búsqueda “include” las descripciones pueden mostrar cosas como cms.loginWebUser(usuario,contraseña), etc.

5.- Cuidado con las distintas versiones de OpenCms:

Hay que conocer cómo se comporta cada versión de OpenCms (qué bugs o qué cosas se implementaron según qué versión).
OpenCms 6.x hasta OpenCms 6.2.2 valida antes de cerrar los campos de los XSD, esto fue corregido en la 6.2.3.
OpenCms 7.0 hasta OpenCms 7.0.3 no mapea de campos a atributos, OpenCms 7.0.4 sí.
Para conocer estos detalles no hay nada mejor que leerse las notas de cada versión.

6.- Corrige los errores conocidos:

Hay errores del desarrollador que son fácilmente reconocibles en OpenCms, por ejemplo si el menú flotante aparece n veces repetido significa que al modificar el fichero opencms-modules.xml has repetido n veces un id de recurso.

7.- Copias de seguridad: Las copias de seguridad no se deben hacer sólo de la base de datos:
Si no tenemos los archivos de configuración (en especial el opencms-modules.xml) es muy dificil que restauremos el sistema.

8.- No tocar el código fuente de OpenCms:
La mejor forma de poder actualizar a futuras versiones es que el código fuente de OpenCms no se haya modificado. Si hacemos un portal y no hemos respetado este punto lo más seguro es que tarde o temprano nos arrepintamos.

9.- OpenCms tiene una línea de aprendizaje fácil (comparada con otras tecnologías, por supuesto), pero es muy difícil llegar a dominarlo. Hay que echarle muchas horas, hacer muchas pruebas, etc.

10.- Comunidad:
No estais sólos con OpenCms. Existe una comunidad muy grande de desarrolladores que os pueden echar una mano. Los principales recursos de OpenCms son:

* Página de OpenCms.
* Lista de correos oficial (en inglés).
* Foro de OpenCms (en inglés).
* OpenCms Hispano (en español).
* Grupo en facebook.(en inglés). Buscar por OpenCms, claro.
* OpenCms wiki (en inglés).

OpenCms: difama y vencerás

22 mar 2008

Últimamente vengo observando en diversos grupos de opinión de nuestro entorno una creciente animadversión hacia OpenCms como plataforma de gestión de contenidos, indiferentemente de la versión de la que hablemos (la versión 7 ya lleva bastante tiempo estabilizada). Puedo entender cierto picorcillo contra una serie de experiencias de hace ya varios años, basadas en implantaciones de un pseudo-OpenCms 5 que tenía por delante un fuerte desarrollo frontend para dotarle de funcionalidades de las que no disponía esa versión. El problema (y la ventaja) del software libre es que tienes ahí el código fuente, listo para adaptarlo a tus necesidades. Pero claro, si lo “adaptas demasiado”, te separas de la línea principal de desarrollo y te quedas anclado en la versión antigua. Sin embargo, de eso no tiene la culpa el software (en este caso, OpenCms), sino el equipo que forman los contratados para hacer algo, y los que contratan eso.

La mayoría de organizaciones que buscan un CMS requieren una serie de características muy difíciles de conjugar:

  • Que sea software libre, y además gratuito.
  • Que los usuarios puedan ser dueños y señores de su web, pudiendo introducir contenidos con editores WYSIWYG, imágenes (y que se auto-redimensionen), contenidos estructurados (noticias, eventos, ficheros, etc.), con herramientas sencillas y usables…
  • Que a pesar de todo ello, se mantenga la accesibilidad de la página (algo complicado, porque los editores visuales no pueden generar HTML semánticamente correcto). ¿Quién le impide a un usuario poner un título con una etiqueta que no sea una <h1>, <h2>, …<hN>?
  • Circuitos y flujos de aprobación de los contenidos.
  • Gestión de permisos de edición y publicación sobre diferentes áreas funcionales, recursos, etc. Por ejemplo, “el grupo de prensa puede crear noticias”, etc.
  • Velocidad, estabilidad y alta disponibilidad: cacheo, posibilidad de balanceo de carga, clusterización…
  • Posibilidad de definir nuevos contenidos de la forma más sencilla posible, y la máxima flexibilidad para plasmar estos contenidos en la zona web (por ejemplo, un evento, que se pueda desplegar como un calendario).
  • Facilidad de mantenimiento (tanto a nivel Sistemas como Desarrollo), de forma que la evolución del portal sea lo menos costosa posible.
  • Publicación/despublicación diferida (programada para una fecha concreta).
  • En muchos casos, soporte multi-idioma.
  • Soporte de plantillas y temas.
  • Posibilidad de introducir zonas privadas con autenticación de usuarios (con funciones de registro, recordatorio de contraseñas, roles y visibilidad, etc.).
  • Funcionalidades más o menos avanzadas: indexación de contenidos (web, ficheros, etc.) y búsqueda, autogeneración del mapa de la web, autogeneración de migas (breadcrumbs) de navegación, autogeneración de menús, etc etc etc.

A lo largo de mi vida profesional he probado innumerables plataformas CMS. En Carrefour España fui el Jefe de Proyecto responsable de la creación de la intranet corporativa de la empresa, basada en el entonces novedosísimo PhpNuke versión 6 :-) desarrollada por los nunca suficientemente valorados Simplelogica. He sido siempre un gran defensor de PHP como plataforma de desarrollo rápido, con plataformas bastante interesantes (Joomla, Drupal…) y veo con interés las apariciones de otras alternativas como Plone (Python), frameworks de desarrollos como Ruby On Rails, etc. Sin embargo, en este mercado suelen confundirse mucho los productos de portal, como era ese PhpNuke, mal llamados CMSs, con los productos de gestión de contenidos, como son OpenCms, Vignette, etc. De hecho, en tecnologías Java hablamos de dos especificaciones distintas: la JSR-170 para la persistencia de contenidos y la JSR-168 más orientada a portales, y en concreto a la estandarización de los componentes portlets.

En el caso de la Junta de Andalucía, que me pilla bastante cerca, no puedo entender cómo se puede poner en duda la utilización de OpenCms (al menos su última versión 7). Cumple a rajatabla todos los requisitos que se suelen solicitar, como los que he enumerado anteriormente, pero además tiene una serie de ventajas de gran importancia:

  • Tiene excelentes características de rendimiento (cacheo avanzado, posibilidad de clusterizar y balanceo de carga…).
  • Es coherente con la apuesta tecnológica (JAVA). Y eso es MUY importante para una organización que haya hecho una apuesta por una tecnología. Cuando ya dispones de programadores formados, de personal de Sistemas (muchos de ellos funcionarios de la propia Junta) que sabe gestionar servidores de aplicaciones y motores de servlets como JBoss, Oracle iAS, Tomcat, o SGBDR como Oracle 9i ó 10g, ¿de verdad es buena idea comenzar a desarrollar con plataformas como Python o PHP? No quiero decir que estas plataformas sean mejores o peores (como siempre, dime para qué), pero en una gran organización la estandarización es realmente importante.
  • A pesar de ser Open Source, tienen una empresa detrás (en este caso, Alcakon) que asegura la estabilidad, e incluso, por qué no decirlo, la posibilidad de acceder a servicios de soporte y mejoras de pago. Nunca olvidemos que la estrategia comercial del Software Libre se basa en los servicios. Ocurre igual con otros productos Open Source de moda como Alfresco, Open Office, algunas distribuciones de Linux, Tomcat, Hibernate, JBoss y tantos otros…

No sé si estaré influenciado por el excelente nivel de mis compis en OpenCms. No sólo se han ido encargando de realizar las traducciones al castellano, sino que la verdad es que han desarrollado portales estupendos, permitiendo a usuarios de dudoso nivel técnico (pedían que se les enseñase a copiar y pegar, verídico) meter, por ejemplo, complejos mapas de Google con zonas sensibles que desplegaban vídeos Youtube y galerías de imágenes Lightbox. Sacar a la luz portales en una semana. Y experiencias super-interesantes técnicamente, como crear una infraestructura OpenCms 6 clonable, de forma que se puedan crear múltiples portales (en este caso, para Ayuntamientos de la provincia de Sevilla) en apenas un par de horas de desarrollo, y cambiado el estilo inyectando CSS (al estilo del proyecto CSS Zen Garden de Dave Shea). Dos ejemplos interesantes son la web del Ayuntamiento de Paradas y la del Ayuntamiento de Gelves. Cualquier curioso podrá observar que tienen el mismo HTML. Las últimas noticias que tenía es que más de 50 Ayuntamientos de la provincia están usando, o van a usar, esta tecnología que montamos para la Diputación de Sevilla.

Plataformas como OpenCms, Plone o el excelente Joomla (o Drupal, quizás ya muy desplazado por éste último) son buenas en sí mismas, pero los que las hacen buenas o malas en la realidad son los desarrolladores. Al igual que ocurre con un proyecto JSF, Struts2 o RubyOnRails, el conocimiento es el que marca la diferencia. El problema es que de vez en cuando, se encargan estudios y comparativas a personas que no han estudiado y comparado todas las plataformas, y que tienen claro el resultado objetivo antes de empezar. Para hacer una comparativa seria, debería fijarse un objetivo, y realizar un pequeño piloto con cada alternativa. Analizar diferentes parámetros: facilidad de desarrollo, flexibilidad, ajuste a las necesidades de los usuarios, estabilidad (pruebas de estrés, etc.). Así se puede escribir con propiedad y convencimiento que X es mejor que Y y peor que Z para esta necesidad y este caso concreto.

Siempre será más fácil destruir que construir. Decir “X es una mierda” cala mucho más que un discurso técnico que suele aburrir a todo interlocutor que no se interese tanto por la tecnología como el entusiasta friki que habla de las excelencias de un software complejo. En este caso, creo que OpenCms está sufriendo este tipo de campaña de desprestigio, cuando, como cualquier otra plataforma, los que las harán buenas o malas serán los desarrolladores.