Archive

Archive for the ‘Programación’ Category

cmislib, cliente CMIS en python

May 23rd, 2010

A finales de agosto del año pasado comencé un nuevo proyecto, un plugin para Trac que permitiese su integración con Alfresco. Desde entonces mucho ha llovido, especialmente este año. Cuando comencé no encontré ninguna librería que facilitase el trabajo con el Restful API que proporciona Alfresco y comencé un pequeño cliente para este proyecto. Más adelante pensé que si el cliente maduraba, quizás me convendría liberarlo de forma independiente al plugin para que otros pudieran evolucionarlo y mejorarlo. Yo sólo quería implementar los métodos más básicos.

Los momentos de standby son realmente malos para cualquier proyecto, pero lo son especialmente para proyectos en los que sólo hay una persona y su planificación no se extiende más allá de tres meses para la primera versión. Con el nacimiento de klicap, decidimos impulsar este plugin y en ello estamos. Antes de retomarlo, analicé el trabajo realizado y me cuestioné algunas decisiones previas. Durante esos días, descubrí cmislib. Según he pedido comprobar, su primer commit tiene fecha de mediados de diciembre de 2009. Su autor es Jeff Potts, presidente y CEO en Metaversant Group, Inc., donde parece que es el único empleado. Esta librería, escrita en python, forma parte del proyecto (en incubación) Apache Chemistry. Éste último tiene como objetivo proporcionar librerías cliente para trabajar con soluciones que implementen la especificación CMIS. La librería no está completa, aun quedan funcionalidades por implementar, pero desde luego su última versión 0.3 publicada es estable y cubre gran parte de la especificación. Teniendo en cuenta que la versión 1.0 de la especificación de CMIS tiene fecha 1 de mayo de 2010, sólo me queda agradecer el excelente trabajo de Jeff.

Esto se traduce en que he dejado de implementar mi propio cliente, y he comenzado a usar esta librería. Esto hace incluso que me planté el nombre del plugin, porque ahora podemos integrar Trac con Alfresco, Nuxeo y otros ECM que implementen CMIS. Desde @klicap haremos lo posible por colaborar en este proyecto.

Comprobar que Alfresco REST API está disponible

November 12th, 2009

Para el plugin de Trac que estoy desarrollando (en los huecos que tengo) estoy desarrollando un pequeño cliente en python que me permita trabajar cómodamente con Alfresco REST API, especialmente con CMIS Web Reference. Uno de los métodos que necesitaba para este cliente es aquel que me permitiese comprobar si la configuración para trabajar con el API era correcta. Comprobar eso lleva implícito comprobar que Alfresco está disponible (se tiene acceso HTTP).

La configuración del plugin en relación a Alfresco es muy simple:

  • Usuario y contraseña (credenciales)
  • URL base en la que se publica RESTful API

Dejo por aquí el fragmento de código:

def is_alive(self):
    isAlive_service = self.__url_api + '/login' +  '?u=dummy&pw=dummy'
    self.__log.debug('Restful Service: ' + isAlive_service)
    try:
        response, content = self.__http.request(isAlive_service, 'GET')
        if response.status == httplib.FORBIDDEN:
            self.__log.debug('Alfresco RESTful API is alive')
            return True
        else:
            self.__log.debug('Alfresco RESTful API is not alive')
            return False
    except:
        self.__log.debug('Alfresco RESTful API is not alive')
        return False

Cualquier sugerencia será bienvenida.

Trabajar con documentos CSV con Java

September 22nd, 2009

Hace algunas semanas escribía una breve entrada sobre librerías para trabajar con hojas de cálculo Excel desde Java. En esta ocasión he tenido la necesidad de exportar un conjunto de datos en formato CSV. Generar un archivo con datos separados por comas o punto y coma es sencillo, y quizás, no compense añadir una nueva dependencia para algo tan simple. Antes de ponerme a codificar, decidí ojear un poco:

  1. Java CSV
  2. SuperCSV

Opté por la segunda porque me ha permitido trabajar directamente con JavaBeans y es algo más completa que la primera. Otra librería que conocí hace algún tiempo es Smooks. Aunque hubiera sido como cortar el césped con una excavadora, estuve tentado a usarla. Tiene muy buena pinta y las referencias y ejemplos que he visto, son muy interesantes.

Author: Manuel Jesús Recena Soto Categories: Programación Tags: ,

Desarrollando plugins de Trac

August 19th, 2009

El otro día comencé a configurar el entorno de desarrollo local. Se me olvidó comentar que para desarrollar plugins de Trac la mejor opción es ejecutarlo en modo standalone. El porqué viene justificado por uno de los pros de este modo:

Automatic reloading: For development, Tracd can be used in auto_reload mode, which will automatically restart the server whenever you make a change to the code (in Trac itself or in a plugin).

Toda la configuración está perfectamente explicada en el sitio web de Trac. En mi caso me he creado un pequeño script (start_trac.sh):

tracd -p 8000 --basic-auth=AlfrescoTracIntegration,/home/recena/Documentos/trac-users.conf,/home/recena/Documentos/trac-projects/AlfrescoTracIntegration /home/recena/Documentos/trac-projects/AlfrescoTracIntegration

Si por el contrario lo que queremos es ejecutarlo desde Eclipse, también podemos encontrar las correspondientes instrucciones. La intención era haber publicado esta pequeña entrada el pasado jueves, 13 de agosto. Pero he estado sin acceso a Internet desde entonces. Algunas notas que a mi me están viniendo muy bien para comenzar a desarrollar un plugin de Trac sin tener experiencia en Python:

  1. Configurar un buen entorno de desarrollo local que nos permita trabajar cómodamente y como no, depurar.
  2. Conocer las características del lenguaje de programación. Me he leído “Python para todos“, y sólo agradecer a Raúl González Duque el excelente trabajo realizado.
  3. Guías:
    1. Style Guide for Python Code
    2. Docstring Conventions
  4. Estudiar otros plugins
  5. Instalar TracDeveloper, un plugin de Trac muy útil para desarrollar.
Author: Manuel Jesús Recena Soto Categories: Programación Tags: ,

Configurando un entorno para desarrollar plugins de Trac

August 12th, 2009

Desde que era muy pequeño mis padres me inculcaron que las vacaciones (especialmente los veranos) no son para “no hacer nada”. Son una época en la que uno dispone de mayor tiempo y por tanto mayor posibilidad de hacer cosas. Recuerdo aquellos veranos en los que la TV estaba prácticamente prohibida durante el día, las mañanas eran para hacer cuadernillos Rubio y las tardes para hacer deporte, pescar o campamentos, pero lo más deseado por mi, pasar tiempo con mi Amstrad 1512 y posteriormente con mi 80486 con el que conocí la demoscene.

Durante estos días me gustaría acercarme al desarrollo de plugins en Trac. Lo primero que he hecho es leer un poco y conocer qué necesito para configurar un entorno de desarrollo local que me permita trabajar cómodamente. A continuación una descripción del entorno:

  1. Mandriva 2009
  2. Aptana Studio 1.5.1 (con PyDev)
  3. Python 2.6 (paquetes)
  4. MySQL Server 5.1
  5. Genshi 0.5.1 (paquetes)
  6. Setuptools 0.6c9 (paquetes)
  7. Subversion 1.6.4 (paquetes)
  8. SWIG 1.3.38 (paquetes)
  9. Subversion SWIG Python bindings (paquetes, subversion-devel)
  10. MySQLDB (Ojo! no ZMySQLDA)
    1. Descargamos los fuentes correspondientes a la versión 1.2.2
    2. Descomprimimos el tar.gz
    3. Asegurarse de que están disponibles de los fuentes de MySQL porque MySQLDB los necesita para su instalación
    4. Seguimos las instrucciones que vienen en archivo README
  11. Trac 0.11.5

Os podéis ahorrar muchos de estos pasos porque en varias distribuciones de Linux ya existe un paquete con Trac (con soporte para MySQL y Subversion). Por ejemplo, en Mandriva existe ese paquete. En nuestro ecosistema software usamos Trac con SQLite y todo va muy bien, sin embargo, he querido aprovechar esta ocasión para conocer de primera mano el soporte de MySQL que tiene Trac. Si los resultados son positivos, probablemente, nos planteemos la migración a medio plazo.

Author: Manuel Jesús Recena Soto Categories: Programación Tags:

Trabajar con documentos Excel con Java

August 4th, 2009

Una de las nuevas funcionalidades de Opina que está planificada para la versión 1.4.0 es la exportación de los resultados de una encuesta a una hoja de cálculo Excel. Inicialmente había pensado en trabajar con OpenDocument, pero necesitaba compatibilidad con Microsoft Excel 97 y sus versiones posteriores. La verdad es que la hoja de cálculo que se necesita es un muy simple, nada de imágenes, nada de fórmulas, simplemente celdas con algo de estilos (colores, tipos de letra y tamaños) y datos.

Las opciones que encontré para trabajar con documentos Excel desde Java fueron:

  1. JExcelApi
  2. POI-HSSF / POI-XSSF

En estos momentos estoy usando la primera en Opina, y las impresiones son muy buenas:

  • Aunque a priori la documentación parece escasa, es suficiente para comenzar a trabajar y montar un ejemplo.
  • Tiene carencias en cuanto al manejo de fórmulas y gráficos, pero si no necesitas algo complejo, es una opción válida.
  • No he trabajado con documentos complejos y grandes, pero en breve tendré referencias en este sentido. Tengo encuestas con más de 40 preguntas y más de 1500 usuarios encuestados. Además la estamos usando en un proyecto donde se gestiona un volumen de datos importante y puede ser otra buena referencia. Cuando tenga resultados, los compartiré.
  • Los conceptos a manejar son pocos: workbook, worksheet, label, writableFont, writableCellFormat y algunos más.
  • La última versión (2.6.10) es el 28 de mayo de 2009. La primera versión de la rama 2.x es del 10 de octubre de 2003. Durante este periodo más de 30 versiones publicadas. Y si vemos la lista de correo, podemos comprobar su actividad.

Que conste que las necesidades que Opina tiene son muy básicas, es probable que otro tipo de proyectos tengan más requisitos y tengan que descartar esta opción. He buscando el artefacto por los repositorios de Maven que conozco, pero no lo he encontrado. Por lo tanto, he definido sus coordenadas para instalarlo en mi repositorio local (y en nuestro ecosistema) y he añadido el JAR a directorio libs correspondiente.

De la segunda opción no puedo decir nada de primera mano, sólo tengo comentarios e impresiones. Es un proyecto importante en ASF y son muchos los proyectos que en él se apoyan, por lo tanto, me da confianza. De hecho lo usamos de forma indirecta porque Eclipse Birt es nuestra opción (actual) para la generación de reportes.

Temas en Drupal

March 11th, 2009

En los últimos meses he tenido que codificar varios temas en Drupal para unos proyectos que hemos desarrollado. Para aquellos que estáis comenzando os recomiendo encarecideamente que no comencéis un tema desde cero. En Drupal, existe el concepto de módulo y submódulo, esto se extendiende también para los temas.

Haz un sub-tema partiendo de Zen Extend And Design. Es un tema considerado base sobre el extender el tuyo. ¿Qué te proporciona?

  • Plantillas de las vistas principales (node, page, comment, etc)
  • Las plantillas tienen una semántica muy bien definida y usan correctamente los estándares web.
  • Un punto de partida para aprender a desarrollar temas en Drupal
  • Buena documentación

Una lectura que no puede faltal para todo aquel que vaya a desarrollar un tema es lo que se conoce como la anatomía de un tema. A mi me ha venido muy bien organizar las hojas de estilo según dicha anatomía:

En unos días liberaré el último en el que estoy trabajando.

Configurando un entorno de desarrollo para Drupal

September 5th, 2008

Recientemente he tenido que configurar un entorno de desarrollo para trabajar con Drupal en Linux, concretamente Madriva. Quizás a alguien le puedan venir bien estas notas:

  1. Instalar y configurar Eclipse IDE con soporte para PHP (PDT Project). Ya comenté hace tiempo que uso Pulse para gestionar y mantener distintas instancias de Eclipse IDE.
  2. Instalamos Apache Web Server con soporte para PHP (preferiblemente PHP5). Para esto tenemos varias opciones:
    1. LAMPStack de BitNami
    2. Seguir estas instrucciones.
    3. Instalar Apache Web Server con soporte para PHP y MySQL desde paquetes
    4. Instalar Apache Web Server con soporte para PHP y MySQL desde los fuentes
  3. Descargamos y descomprimimos Drupal dentro de nuestro workspace de Eclipse:
    [recena@localhost Eclipse 3.3 PDT]$ wget http://ftp.drupal.org/files/projects/drupal-6.4.tar.gz
    [recena@localhost Eclipse 3.3 PDT]$ tar -xvzf drupal-6.4.tar.gz
    [recena@localhost Eclipse 3.3 PDT]$ rm drupal-6.4.tar.gz
  4. Ahora configuramos un alias (p.e. qabox) para poder acceder a nuestra instalación de Drupal de una forma similar a http://localhost/qabox. Para ello añadimos a httpd.conf:
    Alias /qabox "/home/recena/Workspaces/Eclipse 3.3 PDT/drupal-6.4"
    <Directory "/home/recena/Workspaces/Eclipse 3.3 PDT/drupal-6.4">
            AllowOverride All
            Options MultiViews Indexes Includes FollowSymLinks
            Order allow,deny
            Allow from all
    </Directory>
  5. A partir de este momento, accedemos a http://localhost/qabox, y lo que resta es seguir las instrucciones de la propia instalación de Drupal. Que no se os olvide colocar el correspondiente archivo .htaccess en el directorio raíz donde se encuentre instalado Drupal. En la documentación viene todo perfectamente comentado.

Una vez que tenemos lo básico para ejecutar Drupal nuestro trabajo se centrará -probablemente- en el desarrollo de módulos y/o temas. Pues bien, la idea es tener un proyecto para cada uno de los módulos y/o temas que desarrollemos. De esta forma tendremos nuestra instalación de Drupal por un lado, y nuestros desarrollos (modelados como proyectos de Eclipse) por otro. Ahora lo único que tenemos que hacer es decirle a Drupal que use estos módulos y/o temas. Así iremos viendo los resultados. Para hacer esto basta con hacer simples enlaces simbólicos donde corresponde y hacía donde se encuentran nuestros proyectos.

En la captura de pantalla que se muestra a continuación, veréis un tema que estoy desarrollando que se llama QABox y el enlace simbólico que he creado para que Drupal sepa que dispone de ese tema como se estuviera almacenado en $DRUPAL_HOME/sites/default/themes (p.e.):

Gráficas renderizadas en Flash (SWF)

March 29th, 2008

La verdad es que la primera vez que tuve que renderizar unas gráficas fue para una pequeña aplicación programada en PHP que se encargaba de controlar la ocupación de unas aulas de informática. Por aquella época, JpGraph era una de las mejores librerías en PHP para el renderizado de gráficas. La verdad es que desde aquello ha llovido un poco y ahora hay otras opciones.

Hace unos días os comentaba que estábamos (en GMV) trabajando en un plugin para TRAC llamado STractistics para medir la actividad de los proyectos. Todavía está un poco verde, pero estamos trabajando para añadirle nuevas funcionalidades. Para este proyecto se barajaron varias opciones:

  • Generar las gráficas en el servidor al estilo de JpGraph y devolverlas al cliente como una imagen.
  • Generar las gráficas en el cliente: HTML + CSS o HTML + CSS +Javascript.
  • Generar las gráficas en el cliente: Flash (SWF), OpenFlashChart
  • Generar las gráficas en “Google” haciendo uso de Google Chart API

Se hicieron algunas pruebas con la segunda opción y los resultados no eran malos, todo lo contrario, sin embargo, los problemas de compatibilidad con los distintos navegadores web suponía un problema. Las búsquedas nos llevaron a Open Flash Char, desde mi punto de vista, un excelente trabajo que nos permite generar unas vistosas y configurables gráficas.

Ayer leía que el software usado en SOITU durante las elecciones para el renderizado de gráficas ha sido liberado con licencia GNU GPLv3. Mi más sincera enhorabuena por la iniciativa. Después de conocer cómo funciona OpenFlashChart y de leer como funciona Charts (SOITU), la forma en la que este último recoje los datos es más sencilla y cómoda, basta con generar un XML.

Por ahora STractistics se quedará así pero se estudiará la migración a Charts (SOITU).

Author: Manuel Jesús Recena Soto Categories: Programación Tags:

Ingredientes: Eclipse, Jetty y un proyecto J2EE descrito con Maven

August 19th, 2007

Esta semana ha surgido en Opina la necesidad de definir un entorno de desarrollo en el que en lugar de Apache Tomcat se necesitaba trabajar con Jetty 6.x. Nunca había trabajo con Jetty, sin embargo, mis compañeros de trabajo todos lo usaban y las primeras impresiones son muy buenas.

El objetivo del presente post es, teniendo nuestro proyecto J2EE descrito con Maven y configurado en Eclipse, trabajar con Jetty. En este caso el proyecto será Opina e intentaremos usar Jetty en lugar de Apache Tomcat durante el desarrollo.

En primer lugar tendremos que configurar el plugin de maven correspondiente. Para ello, en la sección correspondiente a build (dentro de pom.xml):

<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.5</version>
<configuration>
<scanIntervalSeconds>5</scanIntervalSeconds>
<scanTargets>
<scanTarget>
${basedir}/src/main/webapp/WEB-INF
</scanTarget>
</scanTargets>
<classesDirectory>
${basedir}/src/main/webapp/WEB-INF
</classesDirectory>
<contextPath>${project.artifactId}</contextPath>
<webAppSourceDirectory>
${basedir}/src/main/webapp
</webAppSourceDirectory>
<webXml>
${basedir}/src/main/webapp/WEB-INF/web.xml
</webXml>
</configuration>
</plugin>

Esta configuración está condicionada a que en Opina usarmos ${basedir}/src/main/webapp para montar la aplicación mientras estamos desarrollando. Prueba de ello es que normalmente usamos: mvn compile war:inplace

Una vez que hemos actualizado el archivo pom.xml, vamos a configurar Eclipse para que podamos invocar a Maven con los argumentos que necesitamos:

  1. Run > External Tools > Open External Tools Dialog
  2. Sobre Program, pulsamos el botón derecho y  New
  3. Definimos un nombre para esta tarea (junto a Name)
  4. Estando sobre la pestaña Main:
    1. Location: Indicamos donde se encuentra el ejecutable de Maven
    2. Working directory: Navegamos por Working Directory y seleccionamos nuestro proyecto
    3. Arguments: Indicamos los argumentos que nos interesen, por ejemplo: compile war:inplace jetty:run. Con estos argumentos conseguimos que nuestro proyecto pase por todas las fases del ciclo de vida definido en Maven hasta llegar a la fase de compilación. Esto nos garantizará que se han generado todos nuestros recursos (web.xml, struts-config.xml, etc), se ha aplicado nuestro perfil correspondiente (profiles.xml), se ha compilado nuestras clases, se han obtenido nuestras dependencias y que nuestra aplicación se ha construido en ${basedir}/src/main/webapp.
  5. Aplicar
  6. Cerrar

Si todo ha ido bien, estaremos dispuestos a ejecutar la tarea. Para ello:

Captura de pantalla de Eclipse

He preparado un screencast de la consola de Eclipse simplemente para que vea como se ejecutan las distintas tareas que se le indican a Maven y como posteriormente se lanza Jetty con nuestra aplicación.

Y ahora lo más importante para poder desarrollar con estos ingredientes, la depuración. ¿Qué tenemos que hacer para poder depurar? El siguiente objetivo es claro. Ahora necesitamos seguir usando la perspectiva de depuración de Eclipse de igual forma que la usamos en otros proyectos o la usamos cuando usamos Apache Tomcat.

Tenemos que modificar la tarea que hemos creado. Para ello, editamos la tarea, y sobre la pestaña Environment, añadimos la variable MAVEN_OPTS con el valor: -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y

Una vez modificada la tarea:

  1. Run > Open Debug Dialog
  2. Sobre Remote Java Application, pulsamos con el botón derecho y New
  3. Definimos un nombre (junto a Name)
  4. Y sobre la pestaña Connetion:
    1. Project: Selecionamos nuestro proyecto
    2. Connection Properties:
      1. Host: localhost
      2. Port: 4000 (el que hemos indicando en MAVEN_OPTS).
  5. Aplicar
  6. Cerrar (aun no debemos depurar nada)

Teniendo la tarea definida y la configuración para la depuración, estamos en disposición de comprobar si todo ha ido bien. Para ello, he preparado un segundo screencast.

Algunas referencias donde viene todo esto explicado:

  1. Debugging with the Maven Jetty Plugin inside Eclipse
  2. Maven Jetty Plugin

Un problema con el que me he encontrado, y parece que más gente, es que cuando se desea terminar la tarea que acabados de ejecutar el proceso no se detiene y Jetty continua en ejecución. Si las tareas que hemos definido las ejecutamos desde la línea de comandos todo funciona perfectamente. Al pulsar CTRL+C, la tarea de Maven termina y Jetty de apaga correctamente. Parece que hay un parche que nos ayuda a terminar la tarea que aun no he probado.

Es probable que la integración mejore considerablemente cuando hagan compatible con la versión 6 de Jetty el plugin de Eclipse Jetty Launcher.

Existen otras formas de integración con los mismos ingredientes. Sin embargo esta es la que interesante me ha parecido, entre otras cosas porque no nos hemos tenido que preocupar ni de descargar Jetty.

Copias de seguridad para los repositorios de subversion

June 17th, 2007

En un post anterior os publicaba un simple shell script que he preparado para las copias de seguridad de mis proyectos en trac. Partiendo de ese mismo script, lo he modificado para realizar las copias de seguridad de los repositorios de subversion.

Dejo el script por si a alguien le puede resultar útil.

Copias de seguridad para los proyectos de trac

June 16th, 2007

He preparado un pequeño shell script para realizar las copias de seguridad de mis proyectos en trac. El script cuenta con tres parámetros de configuración:

  • BACKUP_DIR: Directorio donde se van a almacenar los tar.gz correspondientes a cada proyecto.
  • TRAC_PROJECTS_DIR: Directorio donde se encuentran los proyectos de trac.
  • TRAC_INSTALL_DIR: Directorio donde se encuentra instalado trac. En mi caso hice la instalación con la opción –prefix=/usr/local/trac y por ese motivo tengo un diretorio base donde están instalados todos los archivos correspondientes a trac.

El script genera un archivo de la siguiente forma: PROJECTNAME_YYMMDD_HHMM.tar.gz. Una vez probado el script desde la línea de comandos, he programado una tarea en el cron que ejecuta el script todos los días a las 00:00h. Si tenéis algún problema con el script en el cron, comprobad que las variables de entorno necesarias de PYTHON están disponibles. En mi caso, antes de invocar a trac-admin con la opción hotcopy, he tenido que definir la variable PYTHONPATH.

Dejo el script por si a alguien le puede resultar útil.

Profiling en PHP

May 25th, 2007

Desde hace algunas semanas tengo pendiente escribir sobre profiling en PHP. Hace tiempo que no desarrollo ningún proyecto serio con PHP, sin embargo es un lenguaje de programación que siempre me traerá buenos recuerdos y del que procuro nos desvincularme demasiado. Aunque el marco tecnológico en el que me muevo ahora es otro, creo que es necesario no perder de vista otra opciones porque nos pueden aportar soluciones muy interesantes.

La intención de este post, y algún otro que le seguirá, es proporcionar algunas referencias para instalar y configurar un entorno de desarrollo con PHP en que tengamos la posibilidad de realizar debugging y profiling de forma más o menos seria. Las instrucciones están hechas sobre el sistema operativo Microsoft Windows, pero son fáciles de trasladar a otros sistemas operativos.  Antes de comenzar necesitamos conocer los requisitos para la instalación:

  • WAMP Server: Es un paquete preparado para Microsoft Windows ( lo he probado en Windows 2000, Windows XP y Windows Vista) que a través de un instalador tendremos disponible un Apache Web Server, PHP5 y MySQL. Concretamente, WAMP 1.7.1 tiene Apache Web Server 2.2.4, PHP 5.2.2 y MySQL 5.0.37. Al igual que este paquete existen otros como por ejemplo XAMPP (disponible para Microft Windows, Linux, Solaris y Mac OSX) y MAMP (disponible para Mac OSX y con una versión PRO),
  • Xdebug : Es la herramienta que nos proporcionará las trazas de los mensajes de error, información sobre la memoria consumida por los script, información sobre los tiempos de ejecución de script, funciones, etc… Esta herramienta se instalará y configurará como una extensión del intérprete de PHP. La versión que usaremos será la 2.0.0RC para Microsoft Windows y PHP 5.2.1 .
  • WinCacheGrind: Esta herramienta está disponible para Microft Windows y es la que nos permitirá analizar los archivos que Xdebug genera con la información de profiling a partir de una interfaz gráfica. Esta herramienta no es necesaria porque Xdebug permite varios modos para monitorizar la información, sin embargo, el que personalmente me parece más interesante es el que genera unos archivos que posteriormente pueden ser analizados con WinCacheGrind.

Una vez que nos hemos descargado el instalador de WAMP Server, Xdebug (extensión para PHP) y WinCacheGrind, procedemos a su instalación:

  1. De la instalación de WAMP Server poco hay que destacar porque precisamente una de las ventajas que tiene usar este tipo de paquetes en lugar de instalar las cosas de forma individual, es que proporciona un asistente que si mal no recuerdo lo único que pregunta es el directorio para la instalación, posibilidad de configurar los puertos con los que Apache Web Server y MySQL trabajarán y poco más. Tras la instalación y ejecutando wampserver tendremos una utilidad desde la que podremos lanzar los servicios y configurar Apache, MySQL y PHP. A continuación debemos lanzar los servicios, en nuestro caso con lanzar Apache Web Server es suficiente.
  2. Para comprobar que la instalación se ha realizado correctamente, podemos acceder desde nuestro navegador web a http://localhost y ver una página con información sobre el paquete instalado.
  3. Para instalar la extensión de PHP correspondiente a Xdebug:
    1. Copiamos la DLL en el directorio WAMP_INSTALL_DIR/php/ext/
    2. Habilitamos la extensión editando el archivo php.ini que se encuentra en WAMP_INSTALL_DIR/Apache2/bin
    3. Buscando la sección del archivo donde se encuentran el resto de extensiones añadimos la siguiente línea: zend_extension_ts=”WAMP_INSTALL_DIR/php/ext/LIBRARY_NAME”
  4. Reiniciamos Apache Web Server y accedemos al phpinfo que nos proporciona la págna principal de WAMP Server. Para comprobar que la extensión se ha cargado correctamente debemos obtener:
  5. Para descripción detallada sobre cada uno de los parámetros de configuración visitar la página de xdebug. A continuaciónun ejemplo de configuración básica (profiling):
    Sección con la configuración de Xdebug en php.ini

Espero que estas notas ayuden a configurar un entorno de desarrollo con PHP con la posibilidad de realizar tareas de profiling. Intentaré añadir un screenscast con un ejemplo.

Author: Manuel Jesús Recena Soto Categories: Programación Tags:

Switch to our mobile site