Gestión de contenidos. OpenCms 7 y Drupal 6.

13/11/2008

Después de todo este tiempo sin escribir me gustaría hablar de dos gestores de contenidos con los que he estado trabajando durante este tiempo, OpenCms 7 y Drupal 6.

Alguien me enseñó que en los proyectos de gestión de contenidos a la hora de seleccionar el CMS con el que vamos a trabajar nos interesa tener en cuenta, entre otros, tres factores: comunidad que existe tras el producto, facilidad para modificar la funcionalidad que el CMS nos proporciona y facilidad para modificar su aspecto visual para adaptarlo a la entidad corporativa del cliente, analicemos estos factores para los dos gestores de contenido que nos ocupan.

OpenCms 7 es un gestor de contenidos open source desarrollado por la empresa Alkacon Software haciendo uso de Java y XML. Para su instalación necesita un contenedor de aplicaciones como Tomcat y un SGBD como MySQL. El proceso de instalación es fácil, ya que tras su despliegue en el contendor de aplicaciones tan solo es necesario seguir un gestor de instalación que nos irá solicitando los datos necesarios para llevar a cabo la instalación del CMS. La idea de OpenCms va un poco más allá, además de proporcionar el propio gestor de contenidos, este CMS intenta proporcionar un IDE a través del cual poder realizar nuestros desarrollos.

Drupal 6 es un gestor de contenidos open source que fue originalmente desarrollado por Dries Buytaert y es usado para impulsar los sitios web Debian Planet, Spread Firefox, Kernel Trap y más. Para su instalación necesita un servidor web como Apache y un SGBD como MySQL, al igual que ocurre con OpenCms, Drupal proporciona un gestor de instalación paso a paso.

Estos dos CMS tienen en común que proporcionan un marco de trabajo con una serie de funcionalidades básicas y la capacidad de extender dichas funcionalidades básicas a través del desarrollo de nuevos módulos, funcionales, de contenido y de visualización (skins), a partir de aquí todo es distinto, veámoslo:

Comunidad

Cuando empezamos a utilizar estos dos gestores de contenidos vemos, a la luz de las búsquedas, que existe una gran diferencia entre las comunidades de OpenCms y de Drupal, podríamos fijarnos en el número de módulos que la comunidad de Drupal a aportado y el número de módulos de la comunidad de OpenCms.

Extensión funcional

La extensión funcional de estos dos CMS´s se realiza a través de la creación de módulos, ya sean funcionales o de contenido. La creación de un tipo de contenido para OpenCms es, a priori, más ventajosa que la de Drupal, pero ahí está el matiz, a priori, si lo que queremos crear es un tipo de contenido nuevo simple, por ejemplo, una noticia, con validaciones simples, comprobar si los campos están rellenos, OpenCms nos lo pone más fácil que Drupal, pero esa facilidad es un arma de doble filo cuando queremos hacer algo más complicado, por ejemplo una validación que no se pueda realizar con expresiones regulares, por ejemplo, que la fecha de alta de la noticia no sea posterior al día actual, ahí es donde Drupal le saca ventaja a OpenCms, mientras que con OpenCms tendríamos que crear una clase que X’ que heredara de la clase X y que implementa la interfaz Y, con Drupal tan solo tendríamos que tomar el valor del campo en el correspondiente hook y realizar la validación mencionada, esto para tipos de contenidos, el caso más fácil, pero si complicamos el caso, por ejemplo con la creación de un módulo funcional de administración, empezaremos a tener problemas, incluso en el propio desarrollo. Me explico, la idea de OpenCms de proporcionar un marco desde el que poder implementar, ahora mismo la considero hilarante, teniendo en cuenta el estado actual del mercado de IDE´s, suponiendo que no vamos a usar OpenCms para desarrollar nos encontramos con el problema del versionado, ¿cómo lo hacemos?. Cuando tenemos un módulo de contenidos versionamos el módulo y listo, pero cuando desarrollamos un módulo funcional, mucho de los ficheros y estructura de directorios han de ubicarse en una carpeta específica del VFS, para solventar este problema, un posible solución pasaría por replicar en el módulo los directorios VFS y mantener el fichero manifest.xml para que al importar el módulo lo mapee correctamente. Con Drupal no nos encontramos con este problema, los módulos, ya sean de contenidos o funcionales tienen una ubicación específica y desde ahí pueden trabajar, no necesitan declarar ninguna propidad y el versionado es trivial.

Apariencia

En este apartado las cosas están más o menos igual. En OpenCms 7 tenemos el Workspace desde donde podremos crear los contenidos y administrarlos con una apariencia similar a la de un sistema operativo. Para generar la interfaz del portal, podemos, de manera opcional, instalar y usar el Template Two, configurando esta plantilla podremos generar, de forma ágil, el skin de nuestro portal. En el otro lado tenemos los themes de Drupal, con ellos podemos modificar, con unos pocos golpes de ratón, completamente la apariencia de nuestro portal, sin existir una ruptura abrupta en la interfaz como ocurre con OpenCms, además estos themes, al igual que el Template Two, son totalmente transparentes con otras características como las URL´s amigables. El problema existiria si decidiéramos hacer uso de nuestras propias templates, en ese caso tendremos que programas nosotros esas características.

Horizontalmente a estos existen otros problemas, como por ejemplo la necesidad de tener un OpenCms para poder generar los instalables de los módulos a partir de los fuentes del repositorio, por suerte, siempre hay quien se preocupa de poner remedio a este tipo de eventualidades.

Nada es verdad ni es mentira; todo es según el color del cristal con que se mira. Ramón de Campoamor.

Anuncios

Integración continua con PHP (I)

27/09/2008

Para una empresa que tiene en el Desarrollo de Software una parte importante del núcleo de su negocio disponer de todas las herramientas necesarias para facilitar el desarrollo (IDE´s, licencias de software, entornos de preproducción, etc) de su actividad supone una ventaja respecto a sus competidores.

Hoy vamos a comenzar con el primero de una serie de posts cuyo objetivo final es conseguir configurar un sistema de integración continua para proyectos ejecutados con tecnología PHP. Un entorno de integración continua es una de esas herramientas que facilitan y mejoran todo el ciclo de vida de un producto software.

Un sistema de integración continua está compuesto por una serie de piezas que dispuestas de una cierta forma permitirán realizar integraciones automáticas frecuentes del proyecto, con todas las ventajas que ello supone. Estas piezas que necesitamos son, como mínimo:

  • Sistema de control de versiones (SVN).
  • Sistema de construcción de proyectos (Phing).
  • Servidor de integración continua (Xinc).

En este primer post solo vamos a cubrir las dos primeras partes del sistema de integración continua: sistema de control de versiones y sistema de construcción de proyectos. Para el sistema de control de versiones vamos a utilizar Subversion y como sistema de construcción de proyectos vamos a usar Phing.

Como supongo que todos conocemos lo que es un sistema de control de versiones como Subversion hablemos de Phing. Phing es un sistema de construcción de proyectos basado en Apache Ant que permite automatizar, a través de la descripción en un fichero XML, tareas como: ejecución de pruebas de unitarias, generación de documentación, comprobación de estándares de codificación, generación de “distribuibles”, etc.

Lo primero que haremos será llevar a cabo la instalación del sistema de control de versiones para ello podemos seguir los pasos de pasos de la siguiente guía.

Una vez instalado el sistema de control de versiones pasaremos a instalar Phing, (suponiendo que tenemos ya tenemos instalado PHP) para ello seguiremos los siguientes pasos:

  • apt-get install php5-dev, con este paquete podremos instalar phpize que nos facilitará la instalación de Xdebug.
  • apt-get install pear, PEAR es un sistema de distribución de componentes PHP.
  • pear channel-discover pear.phing.info
  • pear install -a phing/phing, con la opción -a haremos que se descarguen todas las dependencias de Phing.
  • pear install VersionControl_SVN-0.3.1, debemos instalar este paquete porque la configuración por defecto de Pear siempre instala la versión “estable” y para trabajar con phing necesitamos esta versión alpha.

Bien, ya tenemos instalado nuestro sistema de construcción de proyectos, ahora veamos cómo funciona. Para comenzar, una prueba simple (más adelante lo complicaremos más). Supongamos, para no ser demasiado simplista, que estamos desarrollando un proyecto con Drupal y lo tenemos versionado, un nuevo recurso se incorpora al proyecto para poder comenzar a desarrollar lo único que tendrá que hacer es instalar Phing y tras descargar el fichero build.xml

<?xml version="1.0"?>
<project name="drupal" default="dev" basedir=".">
    <target name="dev" depends="checkout"/>
    <svncheckout
       svnpath="/usr/bin/svn"
       username="usuario"
       password="contraseña"
       repositoryurl="http://localhost/svn/portal-drupal/trunk/"
       todir="/home/user/workspace/Test"/>
</project>

Tras hacer esto ya tendrá disponible el entorno de desarrollo listo para comenzar con actividad.

Aunque se presentado un ejemplo muy simple las posibilidades de Phing son, como hemos comentado antes, muy ampllias y las iremos descubriendo en sucesivos posts.

La función de un buen software es hacer que lo complejo aparente ser simple. Grady Booch


Documentación de proyectos

16/09/2008

El proceso de documetación (históricamente vinculado al perfil del becario) de un proyecto aunque es en cierta medida un proceso automatizable, gracias a herramientas como PHPDoc, Javadoc, etc, es una tarea que se antoja tediosa y larga. Si a esta ecuación le añadimos variables como la extensión de la documentación, necesidad de distribuir la documentación en distintos formatos (html, pdf, etc), con distintos estilos y a través de distintos canales la cosa comienza a tomar un cariz oscuro.

Con este escenario en mente y sabiendo la relación 1 a 1 que existe entre las entidades Tiempo y Dinero es cuando comienza a tomar fuerza el uso de herramientas como Docbook, entre las ventajas que esta herramienta nos proporciona podemos citar algunas como:

  • Nos permite abstraernos del aspecto y centrarnos en el contenido.
  • Estilos personalizables.
  • Producción de contenidos en distintos formatos partiendo de un mismo fuente.

Por supuesto también tiene algunas desventajas, como:

  • Debemos superar la curva de aprendizaje que toda nueva tecnología nos impone.
  • Poca madurez en muchas de las herramientas libres.

A continuación presento un esquema que ilustra el funcionamiento de Docbook

Esquema de funcionamiento de docbook

Esquema de funcionamiento de docbook

La instalación de dockbook junto con los procesadores XSLT es sencilla, basta con seguir los siguientes pasos:

Instalamos los esquemas de docbook y las xsl

  1. apt-get install docbook-xml
  2. apt-get install docbook-xsl

Instalamos el procesador XSLT

  1. apt-get install xmlto

Instalamos el generador para pdf

  1. wget http://www.uniontransit.com/apache/xmlgraphics/fop/fop-0.94-bin-jdk1.4.tar.gz
  2. tar -xvzf fop-0.94-bin-jdk1.4.tar.gz
  3. mv fop-0.94 /opt
  4. ln -s fop-0.94 fop

Ahora si queremos, por ejemplo, generar un documento html,partiendo de un documento test.xml que sigue el formato docbook, haremos lo siguiente:

  1. xsltproc -o test.html /usr/share/xml/docbook/stylesheet/nwalsh/html/docbook.xsl test.xml

Si en vez de un documento html queremos generar un pdf haremos esto otro:

  1. xsltproc -o test.html /usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl test.xml
  2. /opt/fop/fop test.fo -pdf test.pdf
Invertir en conocimientos produce siempre los mejores beneficios. Benjamin Franklin

Sobre los prejuicios y PHP

04/09/2008

Con la llegada de PHP5 y su orientación a objetos (la orientación a objetos que PHP4 proporcionaba no lo convertía en una opción competitiva aún) con sus modificadores de visibilidad, manejo de excepciones orientada a objetos y demás características ha vuelto a cobrar fuerza una opción que revoloteaba en la cabeza de muchos ingenieros software a la hora de seleccionar un marco tecnológico con el que modelar la solución software que le proporcionarán a sus clientes, está claro, a la luz de los hechos, que dicha opción no existe o no tiene el mismo peso en todas cabezas.

En el día a día , tanto profesional como personal, se toman muchas decisiones, de mayor o menor envergadura, en base a una serie de criterios y motivos. Muchos de estos criterios y motivos son estudiados minuciosamente para conseguir maximizar los beneficios obtenidos de tales decisiones, pero por desgracia hay otras decisiones, fundamentales para una empresa que tiene en la Ingeniería del Software una de sus áreas de negocio, como son los marcos tecnológicos con los que trabajar, que se toman en base a prejuicios e ideas infundadas. PHP es uno de esos marcos tecnológicos que cuenta con un número mayor de ellas:

  • PHP no es seguro.
  • No es escalable.
  • Java tiene frameworks que facilitan el desarrollo de aplicaciones.
  • Java es más fácil.
  • Java lo usan más empresas.

Como vemos existen muchos prejuicios (recalcando la palabra prejuicio) alrededor de los marcos tecnológicos basados en PHP, muchos de ellos totalmente falsos y otros muchos demasiado poco matizados como para poder tomarlos en consideración. Porque las facilidades que PHP o cualquiera de sus frameworks (Symfony, Cake, etc) o productos (Magento, OSCommerce, Drupal, Phing, Xinc, etc) proporcionen para gestionar la seguridad y la escalabilidad, la capacidad de un técnico para asimilar nuevos conceptos, etc no quedan exclusivamente determinados por el marco tecnológico, al igual que las herramientas utilizadas para desarrollar un producto no determinan totalmente la calidad de éste, sino que nos proporcionan esa serie de criterios, comentados al principio, que debemos evaluar para conseguir seleccionar el marco tecnológico que mejor se ajuste a nuestras necesidades y las de nuestros clientes.

No se trata de hacer una defensa desaforada de los marcos tecnológicos basados en PHP o cualquier otra tecnología, sino de hacer una defensa de la toma de decisiones razonada y basada en criterios y motivos sólidos y fundamentados.

No existen soluciones, solo caminos que merece la pena tomar. Proverbio chino.


Configuración de un entorno de depuración para PHP

26/08/2008

Con este primer post comenzaremos a sentar las bases necesarias para conseguir montar un entorno de desarrollo e integración continua para proyectos realizados con tecnología PHP.

Los elementos que vamos a necesitar serán los siguientes:

EclipsePDT, es un IDE Eclipse que trae instalado los plugins necesarios para desarrollar aplicaciones con tecnología PHP (necesitaremos tener instalado JRE1.5).

WampServer permite instalar PHP, Apache y MySQL sobre un sistema operativo Windows. A partir de la versión 2.0 WampServer ofrece, además, la posibilidad de cambiar las versiones de los distintos componentes.

Xdebug es una extensión PHP que permite la depuración de scripts PHP ofreciéndonos una gran cantidad de información útil.

Lee el resto de esta entrada »


Ya estamos aquí

18/08/2008

Pues sí, finalmente y tras mucho meditarlo, he decidido (no sé si acertadamente), que ha llegado la hora de compartir, con todo aquel que quiera acercarse a este rincón de la web, todo lo que he aprendido y estoy aprendiendo acerca de esta apasionante profesión a la que me dedico la Ingeniería Informática.

Una pregunta muy recurrente y que yo mismo me he hecho en numerosas ocasiones, ¿por qué crear un blog?. Ahora lo tengo claro, para mí no han sido muchas las razones que me han llevado a dar este salto (que considero un punto de inflexión en mi trayectoria profesional), pero sí muy poderosas. La primera y más importante de todas es intentar devolver de alguna manera, y aunque sea mínimamente, todo lo que la comunidad me ha aportado durante estos años, otra de las razonees que también me han impulsado ha sido la firme creencia de que un blog como el que pretendo me ayudará a ir reciclando y aumentando mis conocimientos.

En este blog vamos a hablar y aprender sobre Ingeniería del Software, frameworks y herramientas de desarrollo, ¿ecosistemas software? (aunque considero que estoy muy verde en este tema intentaremos hacer algo interesante) y en general sobre todas aquellas cosas relacionadas con la Ingeniería Informática, por supuesto estaré encantado de hablar sobre aquellos temas que me propongais y que estén dentro de mi área de conocimiento.

Finalmente no querría dejar pasar este momento para agradecerle a mis amigos (muchos de ellos compañeros de batalla) que me hayan animado a dar este paso, me esforzaré para estar a la altura de las espectativas.

Lo que sabemos es una gota de agua; lo que ignoramos es el océano. Isaac Newton