<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Ángel C. Lázaro &#187; PHP</title>
	<atom:link href="http://angellazaro.wordpress.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://angellazaro.wordpress.com</link>
	<description>               Desarrollo e Ingeniería del Software</description>
	<lastBuildDate>Thu, 22 Oct 2009 08:16:36 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='angellazaro.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/158649f1dba303f1f4ff47633b85680a?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Ángel C. Lázaro &#187; PHP</title>
		<link>http://angellazaro.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://angellazaro.wordpress.com/osd.xml" title="Ángel C. Lázaro" />
		<item>
		<title>Rendimiento en aplicaciones PHP</title>
		<link>http://angellazaro.wordpress.com/2009/10/22/rendimiento-en-aplicaciones-php/</link>
		<comments>http://angellazaro.wordpress.com/2009/10/22/rendimiento-en-aplicaciones-php/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 00:05:01 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[KCacheGrind]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[The Grinder]]></category>
		<category><![CDATA[Xdebug]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=242</guid>
		<description><![CDATA[En esta última semana he comenzado a participar en un nuevo proyecto. Consiste en hacer una auditoría del rendimiento y la calidad del software de una aplicación implementada con tecnología PHP. El problema está en que la aplicación va degradando el servidor de aplicaciones web Apache hasta que este provoca una denegación de servicio y [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&blog=4544954&post=242&subd=angellazaro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>En esta última semana he comenzado a participar en un nuevo proyecto. Consiste en hacer una auditoría del rendimiento y la calidad del software de una aplicación implementada con tecnología PHP. El problema está en que la aplicación va degradando el servidor de aplicaciones web Apache hasta que este provoca una denegación de servicio y es preciso reiniciarlo.</p>
<p>Para esta auditoría se van a utilizar diversas herramientas:</p>
<p>1. Análisis del rendimiento de la aplicación web. En esta parte se localizarán los cuellos de botella en tiempo de ejecución y en definitiva los motivos por los cuales la aplicación consigue degradar el servidor hasta el punto de hacer que provoque la denegación de servicio antes comentada. Para ello se van a utilizar dos herramientas, <a href="http://grinder.sourceforge.net/">The Grinder</a> y <a href="http://kcachegrind.sourceforge.net/html/Home.html">XCacheGrind</a>.</p>
<ul>
<li><strong>The Grinder</strong>. Me la recomendó mi compañero <a href="http://amunizmartin.wordpress.com/">Antonio</a>, y es simplemente espectacular. Es una herramienta basada software libre y su funcionamiento e instalación es muy simple, está basado en una consola central y en uno o varios agentes, cada uno de estos agentes (que son distribuidos entre distintas máquinas físicas) despliega una serie de workers y cada uno de estos workers despliega los hilos que los agentes tengan configurados. Además proporciona un proxy que nos permite realizar las pruebas UI fácilmente con cualquier navegador.</li>
</ul>
<div id="attachment_250" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-250" title="The Grinder" src="http://angellazaro.files.wordpress.com/2009/10/graph.png?w=300&#038;h=216" alt="Esquema de funcionamiento de The Grinder" width="300" height="216" /><p class="wp-caption-text">Esquema de funcionamiento de The Grinder</p></div>
<ul>
<li><strong>XCacheGrind</strong>. Esta herramienta tiene dos variantes WinCacheGrind y KCacheGrind y permiten visualizar gráficamente el consumo de tiempo que cada una de las funciones o scripts PHP ha tardado en ejecutarse y <a href="http://www.xdebug.com/docs/profiler">otra información</a> que puede ser de interés para realizar las tareas de profile. Para ello hace uso de los logs que proporciona <a href="http://www.xdebug.com/">XDebug</a>, que se tendrán que configurar con los siguientes parámetros:</li>
</ul>
<blockquote><p>xdebug.remote_autostart = On<br />
xdebug.remote_enable=On<br />
xdebug.profiler_output_dir = &#8220;/home/aclr/kcachegrind/&#8221;<br />
xdebug.trace_output_dir = &#8220;/home/aclr/kcachegrind/&#8221;<br />
xdebug.profiler_append = On<br />
xdebug.profiler_enable = On<br />
xdebug.auto_trace = On</p></blockquote>
<p>Veamos un ejemplo de la información que obtenemos haciendo uso de estas herramientas:</p>
<blockquote><p>&lt;?php<br />
function escribe($cad){<br />
echo $cad.&#8217;&lt;br/&gt;&#8217;;<br />
}</p>
<p>for($i = 0 ; $i &lt; 100 ; $i++){<br />
for($j = 0; $j &lt; 100 ; $j++){<br />
escribe(&#8220;hola&#8221;);<br />
}<br />
}<br />
?&gt;</p></blockquote>
<p><img class="aligncenter size-medium wp-image-258" title="Distribución de la ejecución" src="http://angellazaro.files.wordpress.com/2009/10/0015.png?w=300&#038;h=160" alt="Distribución de la ejecución" width="300" height="160" /></p>
<p>Como se puede apreciar en esta imagen solo el 9.6% del tiempo consumido en la ejecución es utilizado por la función escribe, el resto, el 99.4% del tiempo de ejecución se ejecuta en el main, es decir, en el bucle, en un caso real una situación análoga a esta nos diría que tenemos que tratar de centrar nuestros esfuerzos de optimización en el main, no en la función escribe.</p>
<p>En próximas entradas intentaré hablar un poco más en profundidad de The Grinder y sobre las herramientas que se utilizarán para el análisis de la calidad del código.</p>
<p>Aunque me gusta terminar mis posts con la cita de alguna frase célebre que trate o evoque sobre el tema del que versa el post, esta vez voy no podrá ser, son las 2:04 y me voy a la cama <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
Posted in Desarrollo Tagged: KCacheGrind, PHP, The Grinder, Xdebug <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/242/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&blog=4544954&post=242&subd=angellazaro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2009/10/22/rendimiento-en-aplicaciones-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>

		<media:content url="http://angellazaro.files.wordpress.com/2009/10/graph.png?w=300" medium="image">
			<media:title type="html">The Grinder</media:title>
		</media:content>

		<media:content url="http://angellazaro.files.wordpress.com/2009/10/0015.png?w=300" medium="image">
			<media:title type="html">Distribución de la ejecución</media:title>
		</media:content>
	</item>
		<item>
		<title>Integración continua con PHP (II). Pruebas unitarias.</title>
		<link>http://angellazaro.wordpress.com/2008/12/27/integracion-continua-con-php-ii-pruebas-unitarias/</link>
		<comments>http://angellazaro.wordpress.com/2008/12/27/integracion-continua-con-php-ii-pruebas-unitarias/#comments</comments>
		<pubDate>Sat, 27 Dec 2008 13:13:56 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Integración Continua]]></category>
		<category><![CDATA[Phing]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=138</guid>
		<description><![CDATA[En el proceso de construcción del software la implementación y ejecución de pruebas unitarias es, entre otros, uno de los pilares fundamentales. La creación de tests unitarios y su ejecución automatizada permiten dotar a dicho proceso de construcción del software de confianza y calidad, permitiendo éstos parámetros, a su vez, la puesta en marcha de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&blog=4544954&post=138&subd=angellazaro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>En el proceso de construcción del software la implementación y ejecución de pruebas unitarias es, entre otros, uno de los pilares fundamentales. La creación de tests unitarios y su ejecución automatizada permiten dotar a dicho proceso de construcción del software de confianza y calidad, permitiendo éstos parámetros, a su vez, la puesta en marcha de metodologías de trabajo ágiles.</p>
<p>En la actualidad existen en el mercado del software libre multitud de frameworks que facilitan la tarea de implementación y ejecución de pruebas  unitarias, concretamente, para entornos de desarrollo basados en tecnología PHP nos encontramos con frameworks como PHPUnit o <a href="http://www.simpletest.org/">SimpleTest</a>, aunque también existen frameworks de desarrollo, como Symfony, que proporcionan su propia suite de testing.</p>
<p>En el presente post nos centraremos en <a href="http://www.phpunit.de/">PHPUnit</a> y su integración con <a href="http://phing.info/trac/">Phing</a> para un proyecto basado en <a href="http://www.symfony-project.org/">Symfony 1.0</a> (<a href="http://www.symfony-project.org/installation/1_0">instrucciones de instalacion</a>).</p>
<p>Para instalar PHPUnit ejecutaremos las siguientes instrucciones (se supone que tenemos instalado pear):</p>
<ul>
<li> pear channel-discover pear.phpunit.de</li>
<li>pear install -a phpunit/PHPUnit</li>
</ul>
<p>Una vez instalado PHPUnit, crearemos un proyecto symfony (con la correspondiente aplicación y módulo), para este post vamos a crear una clase Contact con su correspondiente test ContactTest. Para ejecutar los tests nos situaremos en la carpeta &#8220;/lib/classes/&#8221; del proyecto y ejecutaremos la siguiente instrucción:</p>
<ul>
<li> phpunit *Test.class.php</li>
</ul>
<p>Pero, cómo podemos automatizar la ejecución de las pruebas, es en este punto donde entra en juego la herramienta de la que hablamos en el anterior post, phing, con ella podemos declarar una nueva tarea que ejecutará todas las pruebas unitarias que hayamos implementado para la aplicación que estamos desarrollando. veámoslo.</p>
<p>En primer lugar tendremos que crear un nuevo fichero build.xml con el que construiremos nuestra aplicación, este fichero contará, entre otras, una tarea de ejecución de pruebas que será algo como lo siguiente:</p>
<p>&lt;target name=&#8221;test&#8221;&gt;<br />
&lt;phpunit2 haltonfailure=&#8221;false&#8221; printsummary=&#8221;true&#8221;&gt;<br />
&lt;batchtest&gt;<br />
&lt;fileset dir=&#8221;./lib/classes/&#8221;&gt;<br />
&lt;include name=&#8221;*Test.class.php&#8221;/&gt;<br />
&lt;/fileset&gt;<br />
&lt;/batchtest&gt;<br />
&lt;/phpunit2&gt;<br />
&lt;/target&gt;</p>
<p>Con esta tarea le estamos indicando a phing que queremos ejecutar todas las pruebas que se encuentran en el directorio &#8220;lib/classes/&#8221;, que no queremos que se pare si encuentra alguna prueba no satisfactoria y que queremos que se muestre por pantalla el resumen, a su vez existen otras tareas ligadas a phpunit que permiten obtener reportes más completos como gráficas estadísticas, niveles de covertura, etc.</p>
<p>Como podemos ver la integración de phpunit en phing nos proporciona una forma ágil de ejecutar tests unitarios obteniendo los reportes oportunos.</p>
<p>Aquí dejo el <a href="http://www.box.net/shared/1frlxcnyc1">proyecto symfony</a> con el fichero build.xml</p>
<p>En esta ocasión voy a optar por no escribir una frase célebre que más o menos resuma la idea que se escondía detrás de este post, como es mi costumbre, sino que voy a aprovechar para felicitaros a todos estas fiestas y desearos un feliz comienzo de año 2009.</p>
Posted in Integración Continua Tagged: Phing, PHP, PHPUnit, Symfony <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/138/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&blog=4544954&post=138&subd=angellazaro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2008/12/27/integracion-continua-con-php-ii-pruebas-unitarias/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>
	</item>
		<item>
		<title>NetBeans PHP IDE vs EclipsePDT</title>
		<link>http://angellazaro.wordpress.com/2008/11/22/netbeans-php-ide-vs-eclipsepdt/</link>
		<comments>http://angellazaro.wordpress.com/2008/11/22/netbeans-php-ide-vs-eclipsepdt/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 17:24:29 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[PDT]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=88</guid>
		<description><![CDATA[Hace ya algún tiempo leí un post en el que Justin Carmony hacía una comparación de dos IDE´s para trabajar con tecnología PHP, Zend Studio  y Eclipse PDT. Me gustaría seguir la tarea que comenzara Justin (como se puede observar por el título del post) haciendo una comparación entre dos IDE´s de desarrollo de software [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&blog=4544954&post=88&subd=angellazaro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hace ya algún tiempo leí un post en el que <a href="http://www.justincarmony.com/blog/">Justin Carmony</a> hacía una <a href="http://www.justincarmony.com/blog/2008/09/24/zend-studio-vs-php-development-tools/">comparación</a> de dos IDE´s para trabajar con tecnología PHP, Zend Studio  y Eclipse PDT. Me gustaría seguir la tarea que comenzara Justin (como se puede observar por el título del post) haciendo una comparación entre dos IDE´s de desarrollo de software libre, Eclipse PDT y la que podría ser la estrella revelación de la temporada NetBeans IDE 6.5.</p>
<p>Ahora bien, qué factores podríamos evaluar sobre estos dos IDE´s, Justin nos propone 6, veáse: facilidad de instalación, refactoring, PHP Unit testing, debugging, editor y Zend Platform &amp; Zend Framework. A mí me gustaría plantear los siguientes factores: code completion, code errors y project plan, aunque también comentaré algo sobre los primeros.</p>
<p><strong>Debbuging.</strong></p>
<p>Esta primera característica es una de las que Justin evalua en su post. Tras haber trabajado un tiempo con PHP PDT me he podido percatar que durante la depuración la profundidad de exploración no pasaba de 3, este problema no lo tenemos en NetBeans, como podemos ver en las imágenes.</p>
<p><strong>Code completion.</strong></p>
<p>Con este factor se evaluará la capacidad del IDE para completar el código, facilitando de esta manera la programación. Aunque tanto PDT como Netbeans poseen esta característica, la ejecutan de forma distinta, mientras que Netbeans completa el código tanto de las funciones y métodos que hemos definido, como de las funciones existentes en el core y extensiones de PHP, PDT lo hace tan solo de los métodos y funciones que están definidos en el proyecto actual.</p>
<p><strong>Code errors.</strong></p>
<p>Con este factor se evaluará la capacidad del IDE no sólo para mostrar los errores que se pueden producir durante la programación, sino también la claridad y completitud de los mismos. En este factor la diferencia es más clara, como podemos observar en las siguientes imágenes.</p>
<p><strong>Project plan.</strong></p>
<p>Con este factor se pretende evaluar el roadmap de ambos proyectos, ya que éste nos indica las líneas de trabajo que se están siguiendo e incluso podremos solicitar qué líneas de trabajo nos gustaría que se siguieran. En la <a href="http://wiki.netbeans.org/PHPDevelopmentPlanNB7">wiki del proyecto Netbeans</a> podemos ver cuáles son las características que se van a implementar en futuras releases del IDE e incluso ¡¡¡votar por las que más nos interesen!!!, entre ellas podemos encontrar algunas muy interesantes como PHP Unit Support, Support for Symfony, PHPDocumentor integration y otras muchas. En el <a href="http://www.eclipse.org/pdt/plans/php_plan_2_0.php">roadmap de PDT IDE</a> podemos encontrar cuál será el mantenimiento evolutivo del proyecto, de las características que están planeadas implementar llama la atención, personalmente: Code Template y Code Assit for Dynamic Variables.</p>

<a href='http://angellazaro.wordpress.com/2008/11/22/netbeans-php-ide-vs-eclipsepdt/attachment/002/' title='002'><img width="150" height="90" src="http://angellazaro.files.wordpress.com/2008/11/002.png?w=150&#038;h=90" class="attachment-thumbnail" alt="" title="002" /></a>
<a href='http://angellazaro.wordpress.com/2008/11/22/netbeans-php-ide-vs-eclipsepdt/001-2/' title='001'><img width="150" height="90" src="http://angellazaro.files.wordpress.com/2008/11/001.png?w=150&#038;h=90" class="attachment-thumbnail" alt="" title="001" /></a>
<a href='http://angellazaro.wordpress.com/2008/11/22/netbeans-php-ide-vs-eclipsepdt/attachment/005/' title='005'><img width="150" height="90" src="http://angellazaro.files.wordpress.com/2008/11/005.png?w=150&#038;h=90" class="attachment-thumbnail" alt="" title="005" /></a>
<a href='http://angellazaro.wordpress.com/2008/11/22/netbeans-php-ide-vs-eclipsepdt/attachment/006/' title='006'><img width="150" height="90" src="http://angellazaro.files.wordpress.com/2008/11/006.png?w=150&#038;h=90" class="attachment-thumbnail" alt="" title="006" /></a>

<blockquote><p>La construcción exitosa de toda máquina depende de la perfección de las herramientas empleadas. Charles Babbage</p></blockquote>
Posted in Desarrollo Tagged: IDE, NetBeans, PDT, PHP <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/88/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&blog=4544954&post=88&subd=angellazaro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2008/11/22/netbeans-php-ide-vs-eclipsepdt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>
	</item>
		<item>
		<title>Gestión de contenidos. OpenCms 7 y Drupal 6.</title>
		<link>http://angellazaro.wordpress.com/2008/11/13/gestion-de-contenidos-opencms-7-y-drupal-6/</link>
		<comments>http://angellazaro.wordpress.com/2008/11/13/gestion-de-contenidos-opencms-7-y-drupal-6/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 22:52:57 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[OpenCms]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=90</guid>
		<description><![CDATA[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 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&blog=4544954&post=90&subd=angellazaro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>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.</p>
<p><a href="http://www.manuelrecena.com/">Alguien</a> 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.</p>
<p>OpenCms 7 es un gestor de contenidos open source desarrollado por la empresa <a href="http://www.alkacon.com/en/">Alkacon Software</a> 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.</p>
<p>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.</p>
<p>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:</p>
<p><strong>Comunidad</strong></p>
<p>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 <a href="http://www.ohloh.net/projects/drupal-contributions">comunidad</a> de <a href="http://www.ohloh.net/projects/drupal">Drupal</a> a aportado y el número de módulos de la <a href="http://www.ohloh.net/projects/4368">comunidad de OpenCms</a>.</p>
<p><strong>Extensión funcional</strong></p>
<p>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&#8217; 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.</p>
<p><strong>Apariencia</strong></p>
<p>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.</p>
<p>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 <a href="http://amunizmartin.wordpress.com/2008/11/06/modulos-opencms-y-maven/">quien</a> se preocupa de poner remedio a este tipo de eventualidades.</p>
<blockquote><p>Nada es verdad ni es mentira; todo es según el color del cristal con que se mira. Ramón de Campoamor.</p></blockquote>
Posted in Desarrollo Tagged: Drupal, Java, OpenCms, PHP <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/90/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&blog=4544954&post=90&subd=angellazaro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2008/11/13/gestion-de-contenidos-opencms-7-y-drupal-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>
	</item>
		<item>
		<title>Integración continua con PHP (I)</title>
		<link>http://angellazaro.wordpress.com/2008/09/27/integracion-continua-con-php-i/</link>
		<comments>http://angellazaro.wordpress.com/2008/09/27/integracion-continua-con-php-i/#comments</comments>
		<pubDate>Sat, 27 Sep 2008 13:24:48 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Integración Continua]]></category>
		<category><![CDATA[Pear]]></category>
		<category><![CDATA[Phing]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Xinc]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=59</guid>
		<description><![CDATA[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 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&blog=4544954&post=59&subd=angellazaro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>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.</p>
<p>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.</p>
<p>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:</p>
<ul>
<li>Sistema de control de versiones (SVN).</li>
<li>Sistema de construcción de proyectos (Phing).</li>
<li>Servidor de integración continua (Xinc).</li>
</ul>
<p><a href="http://angellazaro.files.wordpress.com/2008/09/ci.png"><img class="aligncenter size-medium wp-image-76" title="ci" src="http://angellazaro.files.wordpress.com/2008/09/ci.png?w=300&#038;h=158" alt="" width="300" height="158" /></a></p>
<p>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 <a href="http://es.wikipedia.org/wiki/Subversion">Subversion</a> y como sistema de construcción de proyectos vamos a usar <a href="http://phing.info/trac/">Phing</a>.</p>
<p>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 &#8220;distribuibles&#8221;, etc.</p>
<p>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 <a href="http://aprendizdetodo.wordpress.com/2007/05/15/servidor-svn-en-ubuntu/">guía</a>.</p>
<p>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:</p>
<ul>
<li><em>apt-get install php5-dev</em>, con este paquete podremos instalar phpize que nos facilitará la instalación de Xdebug.</li>
<li><em>apt-get install pear</em>, PEAR es un sistema de distribución de componentes PHP.</li>
<li><em>pear channel-discover pear.phing.info</em></li>
<li><em>pear install -a phing/phing</em>, con la opción -a haremos que se descarguen todas las dependencias de Phing.</li>
<li><em>pear install VersionControl_SVN-0.3.1</em>, debemos instalar este paquete porque la configuración por defecto de Pear siempre instala la versión &#8220;estable&#8221; y para trabajar con phing necesitamos esta versión alpha.</li>
</ul>
<p>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 <strong>build.xml</strong></p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;project name="drupal" default="dev" basedir="."&gt;
    &lt;target name="dev" depends="checkout"/&gt;
    &lt;svncheckout
       svnpath="/usr/bin/svn"
       username="usuario"
       password="contraseña"
       repositoryurl="http://localhost/svn/portal-drupal/trunk/"
       todir="/home/user/workspace/Test"/&gt;
&lt;/project&gt;</pre>
<p>Tras hacer esto ya tendrá disponible el entorno de desarrollo listo para comenzar con actividad.</p>
<p>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.</p>
<blockquote><p>La función de un buen software es hacer que lo complejo aparente ser simple. Grady Booch<em></em></p></blockquote>
Posted in Integración Continua Tagged: Pear, Phing, PHP, Xinc <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/59/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&blog=4544954&post=59&subd=angellazaro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2008/09/27/integracion-continua-con-php-i/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>

		<media:content url="http://angellazaro.files.wordpress.com/2008/09/ci.png?w=300" medium="image">
			<media:title type="html">ci</media:title>
		</media:content>
	</item>
		<item>
		<title>Sobre los prejuicios y PHP</title>
		<link>http://angellazaro.wordpress.com/2008/09/04/sobre-los-prejuicios-y-php/</link>
		<comments>http://angellazaro.wordpress.com/2008/09/04/sobre-los-prejuicios-y-php/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 22:44:22 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Miscelánea]]></category>
		<category><![CDATA[Cake]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[OSCommerce]]></category>
		<category><![CDATA[Phing]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Xinc]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=48</guid>
		<description><![CDATA[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 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&blog=4544954&post=48&subd=angellazaro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>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 <a href="http://www.php.net/releases/5_2_6.php" target="_blank">demás características</a> 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 <a href="http://www.manuelrecena.com/blog/archives/167#comment-1113">hechos</a>, que dicha opción no existe o no tiene el mismo peso en todas cabezas.</p>
<p>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 <a href="http://es.wikipedia.org/wiki/Prejuicio">prejuicios</a> e ideas infundadas. PHP es uno de esos marcos tecnológicos que cuenta con un número mayor de ellas:</p>
<ul>
<li>PHP no es seguro.</li>
<li>No es escalable.</li>
<li>Java tiene frameworks que facilitan el desarrollo de aplicaciones.</li>
<li>Java es más fácil.</li>
<li>Java lo usan más empresas.</li>
<li>&#8230;</li>
</ul>
<p>Como vemos existen muchos <strong>prejuicios</strong> (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 <strong>exclusivamente</strong> 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.</p>
<p>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.</p>
<blockquote><p><strong>No existen soluciones, solo caminos que merece la pena tomar.</strong> Proverbio chino.</p></blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/angellazaro.wordpress.com/48/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/angellazaro.wordpress.com/48/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/48/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&blog=4544954&post=48&subd=angellazaro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2008/09/04/sobre-los-prejuicios-y-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>
	</item>
		<item>
		<title>Configuración de un entorno de depuración para PHP</title>
		<link>http://angellazaro.wordpress.com/2008/08/26/configuracion-de-un-entorno-de-depuracion-para-php/</link>
		<comments>http://angellazaro.wordpress.com/2008/08/26/configuracion-de-un-entorno-de-depuracion-para-php/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 21:43:22 +0000</pubDate>
		<dc:creator>Ángel Cristóbal Lázaro Ríos</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[PDT]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wamp]]></category>
		<category><![CDATA[Xdebug]]></category>

		<guid isPermaLink="false">http://angellazaro.wordpress.com/?p=19</guid>
		<description><![CDATA[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 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&blog=4544954&post=19&subd=angellazaro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>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.</p>
<p>Los elementos que vamos a necesitar serán los siguientes:</p>
<p><a href="http://www.eclipse.org/downloads/download.php?file=/tools/pdt/downloads/drops/R20080603/all-in-one/pdt-all-in-one-R20080603-win32.zip"><img class="alignleft size-thumbnail wp-image-20" src="http://angellazaro.files.wordpress.com/2008/08/eclipse_icon.jpg?w=85&#038;h=50" alt="" width="85" height="50" /></a></p>
<p>EclipsePDT, es un IDE Eclipse que trae instalado los plugins necesarios para desarrollar aplicaciones con tecnología PHP (necesitaremos tener instalado JRE1.5).</p>
<p><a href="http://sourceforge.net/project/downloading.php?groupname=wampserver&amp;filename=WampServer2.0c.exe&amp;use_mirror=dfn"><img class="alignleft size-full wp-image-22" src="http://angellazaro.files.wordpress.com/2008/08/wamp_icon.jpg?w=85&#038;h=50" alt="" width="85" height="50" /></a></p>
<p>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.</p>
<p><a href="http://www.xdebug.org/link.php?url=xdebug203-52-win"><img class="alignleft size-thumbnail wp-image-21" src="http://angellazaro.files.wordpress.com/2008/08/xdebug_icon.png?w=85&#038;h=50" alt="" width="85" height="50" /></a></p>
<p>Xdebug es una extensión PHP que permite la depuración de scripts PHP ofreciéndonos una gran cantidad de información útil.</p>
<p><span id="more-19"></span><br />
El primer paso que daremos será llevar a cabo la instalación del servidor WampServer. Una vez terminado el proceso de instalación podremos comprobar su correcto funcionamiento accediendo a &#8220;http://localhost/&#8221;.</p>
<p><a href="http://angellazaro.files.wordpress.com/2008/08/001.png"><img class="alignnone size-medium wp-image-28" src="http://angellazaro.files.wordpress.com/2008/08/001.png?w=300&#038;h=183" alt="" width="300" height="183" /></a></p>
<p>Una vez hecho esto pasaremos a instalar Xdebug en nuestra máquina, para ello copiaremos la extensión Xdebug en el directorio de extensiones de PHP, en nuestro caso será &#8220;&lt;WAMP_HOME&gt;\wamp\bin\php\phpX.Y.Z\ext&#8221; (debemos tener cuidado de descargar la versión de Xdebug correspondiente con la versión de PHP que hemos instalando), opcionalmente, le podremos cambiar el nombre a &#8220;php_xdebug.dll&#8221; con el fin de facilitarnos los siguientes pasos</p>
<p>El siguiente paso será informar a WampServer que tiene disponible la extensión Xdebug para permitir la depuración, esto lo haremos accediendo al fichero de configuración &#8220;php.ini&#8221; a través de la consola de WampServer y añadiendo el siguiente fragmento de código al final de dicho fichero</p>
<p><!--more-->zend_extension_ts=&#8221;&lt;WAMP_HOME&gt;\wamp\bin\php\phpX.Y.Z\ext\php_xdebug.dll&#8221;<br />
xdebug.remote_enable=On<br />
xdebug.remote_host=&#8221;localhost&#8221;<br />
xdebug.remote_port=9000<br />
xdebug.remote_handler=&#8221;dbgp&#8221;</p>
<p><!--more--></p>
<p>Grabamos los cambios y reiniciamos el servidor, si hemos realizado todos los pasos correctamente de una imagen como la siguiente en &#8220;http://localhost/?phpinfo&#8221;</p>
<p><img class="aligncenter size-medium wp-image-26" src="http://angellazaro.files.wordpress.com/2008/08/003.png?w=300&#038;h=42" alt="" width="300" height="42" /><br />
pasaremos a tener una como esta otra, en la que podemos observar cómo tenemos disponible la extensión de depuración Xdebug</p>
<p><img class="aligncenter size-medium wp-image-25" src="http://angellazaro.files.wordpress.com/2008/08/004.png?w=300&#038;h=42" alt="" width="300" height="42" /></p>
<p>Ahora sólo nos queda indicarle a EclipsePDT qué servidor tiene que usar para llevar a cabo la depuración , para ello abriremos EclipsePDT y creamos un nuevo proyecto PHP vacío al que llamaremos Test y crearemos un nuevo fichero &#8220;index.php&#8221; con un código de prueba.</p>
<p>A continuación nos iremos a &#8220;Window -&gt; Preferences&#8230;&#8221; y expandiremos el árbol &#8220;PHP/Debug&#8221; y le indicaremos a EclipsePDT que debe usar la extensión de depuración Xdebug.</p>
<p>También deberemos crear un perfil de depuración para nuestro proyecto, para ello, haremos click derecho sobre el proyecto y selecionaremos &#8220;Debug As -&gt; Open Debug Dialog &#8230;&#8221; crearemos una nueva configuración sobre &#8220;PHP Web Page&#8221; que llamaremos &#8220;Test_Configuration&#8221;, en File seleccionaremos &#8220;/Test/index.php&#8221; y pasamos a la siguiente pestaña, &#8220;Advanced&#8221;.</p>
<p>Tras pulsar sobre &#8220;Apply&#8221; saltará inmeditamente el navegador predefinido intentando acceder a &#8220;http://localhost/Test/index.php&#8221; devolviéndonos un error 404, esto se debe a que no tenemos dado de alta el proyecto, esto lo haremos fácilmente gracias a la gestión de los alias que WampServer nos ofrece.</p>
<p>Seleccionaremos &#8220;Apache -&gt; Alias directories -&gt; + Add an alias&#8221; en la consola de WampServer, esto nos mostrará una ventana en la que nos solicitará la dirección tanto lógica como física</p>
<p><a href="http://angellazaro.files.wordpress.com/2008/08/008.png"><img class="alignnone size-medium wp-image-31" src="http://angellazaro.files.wordpress.com/2008/08/008.png?w=300&#038;h=138" alt="" width="300" height="138" /></a></p>
<p>Tras proporcionarle los datos necesarios volveremos a lanzar el depurador y obtendremos el depurador funcionando correctamente para poder trabajar</p>
<p><a href="http://angellazaro.files.wordpress.com/2008/08/009.png"><img class="alignnone size-medium wp-image-32" src="http://angellazaro.files.wordpress.com/2008/08/009.png?w=300&#038;h=216" alt="" width="300" height="216" /></a></p>
<blockquote><p>Para correr primero debemos aprender a andar.</p></blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/angellazaro.wordpress.com/19/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/angellazaro.wordpress.com/19/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/angellazaro.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/angellazaro.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/angellazaro.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/angellazaro.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/angellazaro.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/angellazaro.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/angellazaro.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/angellazaro.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/angellazaro.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/angellazaro.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=angellazaro.wordpress.com&blog=4544954&post=19&subd=angellazaro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://angellazaro.wordpress.com/2008/08/26/configuracion-de-un-entorno-de-depuracion-para-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">angellazaro</media:title>
		</media:content>

		<media:content url="http://angellazaro.files.wordpress.com/2008/08/eclipse_icon.jpg?w=128" medium="image" />

		<media:content url="http://angellazaro.files.wordpress.com/2008/08/wamp_icon.jpg" medium="image" />

		<media:content url="http://angellazaro.files.wordpress.com/2008/08/xdebug_icon.png?w=128" medium="image" />

		<media:content url="http://angellazaro.files.wordpress.com/2008/08/001.png?w=300" medium="image" />

		<media:content url="http://angellazaro.files.wordpress.com/2008/08/003.png?w=300" medium="image" />

		<media:content url="http://angellazaro.files.wordpress.com/2008/08/004.png?w=300" medium="image" />

		<media:content url="http://angellazaro.files.wordpress.com/2008/08/008.png?w=300" medium="image" />

		<media:content url="http://angellazaro.files.wordpress.com/2008/08/009.png?w=300" medium="image" />
	</item>
	</channel>
</rss>