<?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/"
	>

<channel>
	<title>programania&#187; ZEND FRAMEWORK</title>
	<atom:link href="http://www.programania.net/category/zend-framework/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.programania.net</link>
	<description>Ingeniería del Software</description>
	<lastBuildDate>Mon, 05 Jul 2010 15:20:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>¿Está PHP preparado para la empresa?</title>
		<link>http://www.programania.net/desarrollo-agil/%c2%bfesta-php-preparado-para-la-empresa/</link>
		<comments>http://www.programania.net/desarrollo-agil/%c2%bfesta-php-preparado-para-la-empresa/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 07:13:51 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[DESARROLLO DE SOFTWARE]]></category>
		<category><![CDATA[DSL - Domain Specific Language]]></category>
		<category><![CDATA[Integración continua]]></category>
		<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[MVC - Model View Controller]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PRUEBAS FUNCIONALES]]></category>
		<category><![CDATA[PRUEBAS UNITARIAS]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[SELENIUM]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[ZEND FRAMEWORK]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[e-learning]]></category>
		<category><![CDATA[mediawiki]]></category>
		<category><![CDATA[moodle]]></category>
		<category><![CDATA[phpundercontrol]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=683</guid>
		<description><![CDATA[PHP está preparado para la empresa]]></description>
			<content:encoded><![CDATA[<div>Leyendo el artículo de la <a href="http://www.infoq.com/articles/enterprise-php">infoQ sobre si PHP está preparado para la empresa</a>, me vienen varios pensamientos a la cabeza. En primer lugar, preguntarse si un lenguaje está &#8220;preparado para la empresa&#8221; me parece muy del mundo Java. A día de hoy no sé muy bien qué significa. Y, en segundo lugar, sigo en mis trece con <a href="http://www.programania.net/desarrollo-agil/tendencias-en-el-desarrollo-de-software-2009/">la &#8220;tendencia&#8221; que comenté en un artículo anterior: creo que los lenguajes de backend están perdiendo importancia</a>. Dicho esto, ¿está PHP preparado para la empresa? Descomponiendo ésta pregunta en subpreguntas:</div>
<div></div>
<div><strong>¿Permite PHP técnicas ágiles como pruebas unitarias, funcionales, integración contínua, etc?</strong></div>
<div>SI (phpunit, selenium, phpundercontrol, etc.)</div>
<div></div>
<div><strong>¿Permite PHP aplicar metodologías ágiles de gestión de proyectos como SCRUM, etc?</strong></div>
<div>Dado que esto no tiene que ver con el código&#8230; ¿Cómo no?</div>
<div></div>
<div><strong>¿Tiene PHP los suficientes mecanismos de POO, patrones y buenas prácticas?</strong></div>
<div>Zend Framework es una buena demostración de la posibilidad de escribir programas MVC, active record, con DSL´s, Conventions over Configurations, etc.</div>
<div></div>
<div><strong>¿Qué tal funciona PHP cuando hace falta alto rendimiento?</strong></div>
<div>Cuando se trata de aguantar a millones de usuarios, PHP no tiene competidor. Está demostrado que ofrece mayor rendimiento que Java y, por supuesto, que Ruby. Cuando la clave no está en tener muchos usuarios sino en tener complejas transacciones con bases de datos, normalmente se confía en Java (el rey del software bancario). <a href="http://www.oracle.com/technology/global/lad-es/tech/php/index.html">Por mucho que Oracle siga gritando que se puede utilizar perfectamente PHP para estos menesteres</a>.</div>
<div></div>
<div><strong>¿Ofrece algunas ventajas sobre los otros lenguajes?</strong></div>
<div>PHP es, sin duda, el rey del software libre. Y prueba de ello son desarrollos como Moodle, el rey del e-learning, MediaWiki, el rey de los wikis, WordPress (nadie le iguala en plugins y themes, y es un potentísimo CMS) y es el lenguaje que permite tener un hosting más barato.</div>
<div></div>
<div><strong>Entonces, ¿es el mejor lenguaje, plataforma, y sólo deberíamos desarrollar en PHP?</strong></div>
<div>Pues no, claro. Si quieres hacer una aplicación no-web, en PHP lo tienes difícil (a menos de que sea con Flex). Aunque PHP permita montar un marco de desarrollo realmente profesional, no obliga y permite chapucear a base de bien, hay que tener más cuidado que en otros lenguajes, por ejemplo. Y es verdad que hasta ahora le faltaban mecanismos básicos de distribuión de código como PHAR o Namespaces.</div>
<div></div>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/%c2%bfesta-php-preparado-para-la-empresa/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Seguridad y Zend Framework</title>
		<link>http://www.programania.net/php/seguridad-y-zend-framework/</link>
		<comments>http://www.programania.net/php/seguridad-y-zend-framework/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 10:44:39 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[ZEND FRAMEWORK]]></category>
		<category><![CDATA[session hichjacking]]></category>
		<category><![CDATA[sql injection]]></category>
		<category><![CDATA[zend framework seguridad]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=707</guid>
		<description><![CDATA[Maneras de hacer más seguro el Zend Framework]]></description>
			<content:encoded><![CDATA[<p>Dejo a continuación una interesante presentación que habla sobre cómo implementar seguridad en un desarrollo con Zend Framework. Habla sobre temas básicos como autenticación , validación o filtrado, así como Cross Site Request Forgery, Session Hitchjacking, SQL Injection, etc. Está muy bien porque repasa aquellos mecanismos de seguridad automáticos que tiene el ZF y da consejos para hacer más seguro aquello que no lo es.</p>
<p><a href="http://www.suspekt.org/downloads/DPC_Secure_Programming_With_The_Zend_Framework.pdf">Presentación sobre seguridad en Zend Framework [PDF]</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/php/seguridad-y-zend-framework/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Críticas a la ingeniería del software</title>
		<link>http://www.programania.net/desarrollo-agil/criticas-a-la-ingenieria-del-software/</link>
		<comments>http://www.programania.net/desarrollo-agil/criticas-a-la-ingenieria-del-software/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 09:54:56 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[PRUEBAS FUNCIONALES]]></category>
		<category><![CDATA[PRUEBAS UNITARIAS]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[ZEND FRAMEWORK]]></category>
		<category><![CDATA[code coverage]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=817</guid>
		<description><![CDATA[Críticas a los métodos tradicionales de desarrollo de software y a los métodos ágiles]]></description>
			<content:encoded><![CDATA[<p>Acabo de leer las <a href="http://gallir.wordpress.com/2009/07/20/%C2%BFingenieria-del-software-ahora-vienen-los-mea-culpa/">críticas a la ingeniería del software de las que se hace eco  Ricardo Galli en su artículo</a>. Me parecen muy interesantes. Copipego aquí directamente:</p>
<blockquote>
<ul>
<li><em>Hoy en día todos comprendemos que las métricas de software cuestan dinero y tiempo, y que deben ser usadas con moderación.</em></li>
<li><em>El desarrollo de software <strong>es inherentemente diferente de las ciencias naturales</strong> tales como las física, por lo que sus métricas son muchas menos precisas para capturar lo que deben describir.</em></li>
<li><em>La frase más citada del libre es «No puedes controlar lo que no puedes medir». Esta frase contiene una verdad real, pero cada vez me sentía más incómodo con el uso que hice de ella. Está implícita en la frase (y en título del libro) que el control es un aspecto importante, quizás el más importante, de cualquier proyecto de software. <strong>Pero no lo es</strong>.</em></li>
<li><em>Muchos proyectos se han realizado sin demasiado control pero han generado productos maravillosos tales como Google Earth o la Wikipedia.</em></li>
<li><em>Esto nos lleva a la desagradable conclusión que el control estricto es algo que importa mucho en proyectos relativamente inútiles y <strong>mucho menos en proyectos útiles</strong>. Sugiere que mientras más te enfoques en el control aumenta la probabilidad de que estás trabajando en un proyecto que se esfuerza por generar algo de valor relativamente menor.</em></li>
<li><em>¿Estoy diciendo que está bien ejecutar proyecto sin control o con un control relativamente menor? Casi. <strong>Estoy sugiriendo que deberíamos seleccionar primero a los proyectos cuyo control preciso no importe demasiado</strong>.</em></li>
<li><em>Estoy llegando gradualmente a la conclusión que <strong>el momento de la ingeniería del software vino y se marchó</strong>.</em></li>
<li><em>En los últimos 40 años nos hemos torturado por nuestra ineptitud en acabar proyectos a tiempo y con el presupuesto previsto. Pero como sugerí antes, no debería haber sido el objetivo supremo.</em></li>
<li><em><strong>El objetivo más importante es la transformación, crear software que cambie el mundo</strong>, o que transforme una empresa, o la forma en que hace negocios.</em></li>
<li><em><strong>El desarrollo de software es y será siempre algo experimental</strong>. Lo construcción real de software no es necesariamente experimental, pero sí lo es su concepción. Allí deberíamos enfocar nuestros esfuerzos. Allí es donde deberíamos haberlo hecho siempre.</em></li>
</ul>
</blockquote>
<p>Respecto a éstas críticas, básicamente estoy de acuerdo. Respecto al propio artículo de Galli, dejaré aquí mi opinión:</p>
<ul>
<li>Yo también creo que muchas veces se utilizan <a href="http://www.programania.net/desarrollo-agil/la-verguenza-de-la-ingenieria-del-software/">las palabras &#8220;Ingeniería del software&#8221; de forma patética</a>&#8230;</li>
<li>Sí creo que las prácticas tradicionales de hace 40 años están muertas. Pero no creo que pensar que esas prácticas están muertas sea algo revolucionario.. La mayoría de los gurús actuales abrazan los &#8220;métodos ágiles&#8221; y estos son la corriente principal. Tampoco creo que los métodos ágiles sean la panacea, pero si creo que son un enorme avance para el desarrollo de software.</li>
<li>No creo que exista ninguna incompatibilidad entre hacer software libre y utilizar métodos ágiles. Y, sino, <a href="http://framework.zend.com/community/resources">mira el Zend Framework</a>, por ejemplo: es software libre pero utiliza muchos de los conceptos de programación extrema como <em>Test Driven Development</em> o <em>Continuous Integration</em>, y utiliza métricas como <em>Code Coverage</em>, etc.</li>
<li>Utilizar el kernel de Linux como ejemplo es un poco tendencioso. No creo que haya muchos proyectos de sofware que se le parezcan, y no creo que podamos cogerlo como paradigma de cómo desarrollar software.</li>
<li>Y respecto a &#8220;cómo desarrollar software&#8221;, estamos ante el problema de siempre: ¿Qué software? No es lo mismo programar un misil tierra aire, el World of Warcraft, la página web de una PYME o un software bancario&#8230;</li>
</ul>
<p>No creo que nadie dude hoy en día de que los métodos clásicos de desarrollo importados de la ingeniería clásica no se ajustan al desarrollo de software. Esto no es nada polémico. Tampoco creo que nadie dude del éxito del software libre a través de proyectos como el Kernel de Linux y otros muchos. Pero también creo que se ha demostrado la eficacia de las llamadas metodologías ágiles, de ciertas métricas como Code Coverage, etc.</p>
<p>Actualización, dos opiniones más que interesantes al hilo del mismo artículo de Coding Horror:</p>
<ul>
<li><a href="http://www.navegapolis.net/content/view/909/99/">Juan Palacio hablando del tema.</a></li>
<li><a href="http://najaraba.blogspot.com/2009/07/somos-ingenieros-los-del-software.html">Joserra hablando del tema.</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/criticas-a-la-ingenieria-del-software/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Tutorial de introducción a PHP Phar</title>
		<link>http://www.programania.net/php/tutorial-de-introduccion-a-php-phar/</link>
		<comments>http://www.programania.net/php/tutorial-de-introduccion-a-php-phar/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 10:53:19 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[ZEND FRAMEWORK]]></category>
		<category><![CDATA[php 5.3]]></category>
		<category><![CDATA[php phar]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=792</guid>
		<description><![CDATA[Tutorial sobre como utilizar phar, novedad en php 5.3]]></description>
			<content:encoded><![CDATA[<p>Desde la versión 5.3, los programadores de PHP podemos disfrutar de archivos PHAR que son el equivalente a los JAR de Java. Los archivos JAR sirven para encapsular en un sólo archivo toda una aplicación. Así, será más fácil de distribuir e instalar. En el caso de los PHAR podremos hacer lo siguiente:</p>
<ul>
<li>Crear un sólo archivo (sin comprimir, o comprimido en ZIP, por ejemplo) que incluya en su interior toda la aplicación PHP y los recursos necesarios (imágenes, etc).</li>
<li>Éste archivo contendrá en u interior un Stub. Un Stub es un pequeño programa que se ejecutará inicialmente cada vez que se llame a PHAR, sirve para inicializarlo y dirigirlo, por ejemplo, a un index.php.</li>
<li>El PHAR puede no ser una aplicación en si misma, que se autoejecute. Puede ser que sea una librería a cuyas clases queramos acceder. Para ello se podrá hacer utilizado la habitual función &#8220;include&#8221;.</li>
<li>PHAR incluye su propia API para crear los archivos, editarlos y trabajar con ellos.</li>
</ul>
<p>Un tutorial completo sobre PHAR <a href="http://www.ibm.com/developerworks/opensource/library/os-php-5.3new4/index.html?ca=dgr-lnxw9dPHP5.3-Phar&amp;S_TACT=105AGX59&amp;S_CMP=grsitelnxw9d">aquí</a>.</p>
<p>Actualización:</p>
<p>Dejo aquí un tutorial de <a href="http://blog.calevans.com/2009/07/19/lessons-in-phar/">cómo convertir todo el Zend Framework en un PHAR y usarlo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/php/tutorial-de-introduccion-a-php-phar/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Novedades Zend Framework 1.9: Zend_Feed_reader</title>
		<link>http://www.programania.net/zend-framework/novedades-zend-framework-1-9-zend_feed_reader/</link>
		<comments>http://www.programania.net/zend-framework/novedades-zend-framework-1-9-zend_feed_reader/#comments</comments>
		<pubDate>Sat, 18 Jul 2009 07:31:53 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[ZEND FRAMEWORK]]></category>
		<category><![CDATA[zend framework 1.9]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=804</guid>
		<description><![CDATA[Preview de la salida de la versión Zend Framework 1.9]]></description>
			<content:encoded><![CDATA[<p><a href="http://devzone.zend.com/article/4846-Zend-Framework-1.9.0-Preview-Release-Now-Available">Nos comunican que en un par de semanas podemos tener nueva versión del Zend Framework</a>. Esta versión, cómo todas, trae interesantes novedades:</p>
<ul>
<li><code>Zend_Rest_Route</code>, <code>Zend_Rest_Controller</code>, y     <code>Zend_Controller_Plugin_PutHandler</code>, podrán proveer de servicios RESTful mediante MVC.</li>
<li><code>Zend_Feed_Reader</code>, proveerá un API para generar RSS y Atom, extensiones para cada formato y cacheo. <a href="http://blog.astrumfutura.com/archives/408-Zend_Feed_Reader-promoted-to-Zend-Framework-trunk-watch-out-for-ZF-1.9!.html:">Artículo concreto sobre Zend_Feed_Reader</a>.</li>
<li><code>Zend_Queue</code> y <code>Zend_Service_Amazon_Sqs</code>, que son dos servicios de Amazon para mensajería y sistema de colas para procesos asíncronos.</li>
<li><code>Zend_Db_Table. No será necesario extenderla para utilizarla. Podrás cargar la definición de la tabla que quieras usar vía constructor.</code></li>
<li>Zend_PDF: soporte para procesado de anotaciones y mejoras en el rendimiento.</li>
<li><code>Zend_Dojo</code>, soporte para custom build.</li>
<li>Zend_Ldap: multiples mejoras.</li>
<li><code>Zend_Log_Writer_Syslog</code>: un writer para tu log de sistema.</li>
<li>Nuevos view helpers.</li>
</ul>
<p><strong>Actualización</strong>: al parecer <a href="http://devzone.zend.com/article/4875-Zend-Framework-1.9.0-Beta-Now-Available">Zend Framework 1.9 será la primera versión de ZF que será totalmente compatible con PHP 5.3!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/zend-framework/novedades-zend-framework-1-9-zend_feed_reader/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sale la versión definitiva de PHP 5.3</title>
		<link>http://www.programania.net/php/sale-la-version-definitiva-de-php-5-3/</link>
		<comments>http://www.programania.net/php/sale-la-version-definitiva-de-php-5-3/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 14:41:20 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP 6]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[ZEND FRAMEWORK]]></category>
		<category><![CDATA[php 5.3]]></category>
		<category><![CDATA[php closures]]></category>
		<category><![CDATA[php namespaces]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=729</guid>
		<description><![CDATA[publicado php 5.3 con todas sus novedades]]></description>
			<content:encoded><![CDATA[<p>La <a href="http://bolsadeideas.cl/zsamer/2009/06/php-530-liberado/">blogosfera ya comienza a hacerse eco</a>, y se puede descargar <a href="http://php.net/downloads.php#v5.3.0">aquí</a>. Recordemos que ésta versión trae mayor velocidad, nuevas características de POO, closures, namespaces, y todo de lo que ya hemos hablado por aquí.</p>
<p>Recordemos también que <a href="http://www.programania.net/patrones-de-diseno/zend-framework-20-no-sera-compatible-hacia-atras/">comienza la cuenta atrás para la llegada de Zend Framework 2.0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/php/sale-la-version-definitiva-de-php-5-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pruebas unitarias y funcionales en PHP</title>
		<link>http://www.programania.net/desarrollo-agil/pruebas-unitarias-y-funcionales-en-php/</link>
		<comments>http://www.programania.net/desarrollo-agil/pruebas-unitarias-y-funcionales-en-php/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 07:04:51 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[Integración continua]]></category>
		<category><![CDATA[METODOLOGÍAS ÁGILES]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PRUEBAS FUNCIONALES]]></category>
		<category><![CDATA[PRUEBAS UNITARIAS]]></category>
		<category><![CDATA[TDD - Test Driven Development]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[ZEND FRAMEWORK]]></category>
		<category><![CDATA[acceptance testing]]></category>
		<category><![CDATA[mock objects]]></category>
		<category><![CDATA[mockery phpt]]></category>
		<category><![CDATA[php spec]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[SELENIUM]]></category>
		<category><![CDATA[simpletest]]></category>
		<category><![CDATA[zend_test]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=609</guid>
		<description><![CDATA[Técnicas y frameworks de pruebas unitarias en PHP]]></description>
			<content:encoded><![CDATA[<div>A continuación dejo unos cuantos recursos que recorren todo lo relacionado con las pruebas unitarias y funcionales en PHP.</div>
<p>Los principales frameworks de pruebas unitarias en PHP:</p>
<ul>
<li><a href="http://www.phpunit.de/">phpUnit</a>.</li>
<li><a href="http://www.simpletest.org/">SimpleTest</a>.</li>
<li><a href="http://qa.php.net/write-test.php">phpt</a></li>
</ul>
<p>Comparartivas:</p>
<ul>
<li><a href="http://weierophinney.net/matthew/archives/64-PHP-Unit-Tests-and-the-winner-is-phpt.html">phpt versus phpUnit</a>.</li>
<li><a href=" http://blog.astrumfutura.com/archives/317-Mocks,-Stubs,-And-SimpleTest-Wins.html">SimpleTest versus phpunit</a>.</li>
<li>S<a href="http://baphled.wordpress.com/2009/01/28/simpletest-vs-phpunit/">impleTest versuss phpunit 2</a>.</li>
</ul>
<p>Pruebas funcionales:</p>
<ul>
<li>Z<a href="http://framework.zend.com/manual/en/zend.test.html">end_Test, extensión e phpUnit para probar el MVC del Zend Framework</a>.</li>
<li><a href="http://devzone.zend.com/article/2242-Acceptance-Testing-of-Web-Applications-with-PHP">Acceptance test in php with Selenium</a>.</li>
</ul>
<p>Integración continua:</p>
<ul>
<li><a href="http://phpundercontrol.org/about.html">phpUnderControl</a></li>
<li><a href="http://www.atlassian.com/software/bamboo/">Bamboo</a></li>
<li><a href="http://rephlux.sourceforge.net/">Rephlux</a></li>
<li><a href="http://code.google.com/p/xinc/">Xinc</a></li>
</ul>
<p>Extra point:</p>
<ul>
<li><a href="http://code.google.com/p/phpspec/">phpSpec: Behaviour Driven Development (BDD) en PHP</a>.</li>
<li><a href=" http://sebastian-bergmann.de/archives/509-Mock-Objects-in-PHPUnit.html">Mock Objects in phpUnit.</a></li>
<li><a href="http://blog.astrumfutura.com/archives/392-The-Mockery-An-Independent-Mock-Object-and-Stub-Framework-for-PHP5.html">Mockery: an independent Mock and Stub framework for PHP.</a></li>
<li><a href="http://www.programania.net/desarrollo-agil/%C2%BFpruebas-unitarias-mutantes/">Pruebas unitarias mutantes.</a></li>
<li><a href="http://www.ds-o.com/archives/62-PHPDBUnit-Testing-DB-interaction-with-PHPUnit.html">Pruebas unitarias y base de datos.</a></li>
</ul>
<p><strong>Mi elección es phpUnit.</strong> Y es que pese a que es verdad que su mecanismo para Mock Objects es peor que el de SimpleTest, y que escribir pruebas es más pesado que en phpT, es el framework de pruebas unitarias en PHP que elige Zend Framework (y su Zend_Test) y su creador (Sebastian Bergmann) es el que más activamente está desarrollando extensiones para base de datos, etc&#8230; así que, si todavía tienen puntos débiles, con el tiempo será el aceptado por todo el mundo. Además,  Bergmann es el principal promotor de phpUnderControl, el framework de integración continua que hemos decidido utilizar <a href="http://www.programania.net/david-gonzalez/">David</a> y yo (ya explicaremos más ampliamente en su momento el por qué).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/desarrollo-agil/pruebas-unitarias-y-funcionales-en-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Inyección de dependencias y PHP: la necesidad de un container</title>
		<link>http://www.programania.net/diseno-de-software/inyeccion-de-dependencias-y-php-la-necesidad-de-un-container/</link>
		<comments>http://www.programania.net/diseno-de-software/inyeccion-de-dependencias-y-php-la-necesidad-de-un-container/#comments</comments>
		<pubDate>Fri, 22 May 2009 08:27:54 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[DESARROLLO DE SOFTWARE]]></category>
		<category><![CDATA[DSL - Domain Specific Language]]></category>
		<category><![CDATA[Inyección de dependencias]]></category>
		<category><![CDATA[PATRONES DE DISEÑO]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[ZEND FRAMEWORK]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[inyección de dependencias en PHP]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=488</guid>
		<description><![CDATA[crítica al uso de xml para construir DSL ´s en PHP y hacer inyección de dependencias mediante uso de containers]]></description>
			<content:encoded><![CDATA[<p>Fabien Potencier escribe una serie de artículos sobre<a href="http://fabien.potencier.org/article/16/symfony-service-container-the-need-for-speed"> la implementación de un container para hacer inyección de dependencias en PHP</a>. A poco que se haya trabajado con <a title="inyección de dependencias, patrón de diseño de softwaere" href="http://www.programania.net/category/patrones-de-diseno/inyeccion-de-dependencias/">inyección de dependencias</a> en PHP, como por ejemplo en mi caso con el <a title="zend framework" href="http://www.programania.net/category/zend-framework/">Zend Framework</a>, uno se da cuenta de que las ventajas de éste patrón pueden ser muchas, pero<strong> construir una clase puede convertirse en un auténtico infierno</strong>.</p>
<p>Si éste artículo te interesa pero no tienes muy claro qué es la <strong>inyección de dependencias</strong>, qué ventajas tiene y qué es un container, <a href="http://www.martinfowler.com/articles/injection.html">ataca a éste artículo de Martin Fowler</a> y a éste s<a href="http://www.ibuildings.com/blog/archives/1181-Dependency-Injection-and-Zend-Framework-Controllers.html#extended">obre Zend Framework</a>.</p>
<p>El problema para mí con ésta solución está en dos cosas:</p>
<ul>
<li>si utilizas un container de esa manera estás consiguiendo anular todas las ventajas de la inyección de dependencias: esto es, tus clases estarán ligadas al container, y el container a tu código, con lo cuál pierdes toda ventaja, y todo ello habiendo tenido que escribir una gran cantidad de código (menos que sin el container, eso es verdad).</li>
<li>esta solución puede ser necesaria sólo si se hace un uso MUY repetido de LA MISMA configuración, en caso contrario acabarías replicando código a mansalva.</li>
<li>el uso de XML para la configuración. Precisamente los DSL (<a href="http://www.programania.net/php/domain-specific-language-java/">Domain Specific Languages</a>) internos (aquellos que utilizan el propio lenguaje para escribirse, en éste caso PHP) han demostrado ser mucho más eficaces que aquellos que utilizan XML´s externos (cualquier programador de Java podrá contar miles de experiencias codificando XML´s infinitos e infernales).</li>
</ul>
<p>Dicho esto dejo aquí una idea más sencilla y que me ha gustado más: <a href="http://codeutopia.net/blog/2009/04/01/using-a-builder-to-construct-complex-classes/">un simple constructor de clases sin XML</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/diseno-de-software/inyeccion-de-dependencias-y-php-la-necesidad-de-un-container/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.8</title>
		<link>http://www.programania.net/php/zend-framework-18/</link>
		<comments>http://www.programania.net/php/zend-framework-18/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 06:50:00 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[ZEND FRAMEWORK]]></category>
		<category><![CDATA[zend amazon ec2]]></category>
		<category><![CDATA[zend amazon s3]]></category>
		<category><![CDATA[zend framework 1.8]]></category>
		<category><![CDATA[zend_application]]></category>
		<category><![CDATA[zend_navigation]]></category>
		<category><![CDATA[Zend_tool]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=499</guid>
		<description><![CDATA[Pronto se publicará zend framework 1.8. Un vistazo.]]></description>
			<content:encoded><![CDATA[<p>Los chicos de Zend no paran. Como venimos diciendo hace tiempo, aunque Zend Framework no fuera el framework más maduro de PHP al principio, su hoja de ruta y la gente que lo impulsa lo va a convertir en el mejor framework de PHP. Dejo aquí la lista de mejoras que traerá la versión 1.8:</p>
<ul>
<li>Zend_Application para simplificar el bootstraping.</li>
<li>Zend_Tool, una utilidad de linea de comandos que sirve para crear y mantener tu estructura de directorios.</li>
<li>Componentes para Amazon EC2 y S3.</li>
<li>Zend_Navigation, una utilidad para generar tus menús, sitemaps, bradcrumbs, etc.</li>
</ul>
<p>Además traerá abundantes validaciones y filtros preconstruidos y otras mejoras a componentes como Zend_Pdf, etc&#8230; personalmente lo que más hecho de menos es un mayor desarrollo de la integración que se ofrece entre ZF y jQuery, que creo que todavía se puede mejorar y simplificar bastante.</p>
<p>Más en <a href="http://weierophinney.net/matthew/archives/214-Zend-Framework-1.8-PREVIEW-Release.html">el sitio original de la noticia</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/php/zend-framework-18/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zend_Form: Cómo crear tu propia apariencia de formulario</title>
		<link>http://www.programania.net/zend-framework/zend_form-como-crear-tu-propia-apariencia-de-formulario/</link>
		<comments>http://www.programania.net/zend-framework/zend_form-como-crear-tu-propia-apariencia-de-formulario/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 11:09:11 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
				<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[ZEND FRAMEWORK]]></category>
		<category><![CDATA[Zend_Form]]></category>

		<guid isPermaLink="false">http://www.programania.net/?p=467</guid>
		<description><![CDATA[Sobreescribir el método render del Zend_Form para adecuarlo a nuestras necesidades de diseño.]]></description>
			<content:encoded><![CDATA[<p>Zend_Form es uno de los componentes estrella del Zend Framework. Muchas son las ventajas de utilizarlo (generación de apariencia, validación de html, limpieza del código, etc.). El problema es que a menudo podemos encontrarnos con el problema de que la apariencia que genera el propio Zend_Form no nos interesa. Es cierto que podemos personalizarla mediante los decorators. Pero incluso estos pueden resultarnos limitados.</p>
<p>En el ejemplo que expongo a continuación, queremos generar una tabla de checkbox para puntuar del 1 al 3 (malo, regular, bueno) una serie de conceptos. Como veréis, la manera de hacerlo es sobreescribiendo el método render, aunque necesitaremos un poco más de código para hacerlo funcionar todo.</p>
<p>Por supuesto, éste ejemplo podría complicarse infinitamente, si se quisiera mezclar el render por defecto, con un render personalizado. <strong>Y, cuidado, ésta técnica es algo sucia y sólo debería utilizarse cuando la posibilidad de crear nuestros propios Zend_Form_Elements o Zend_Form_Decorators es demasiado costosa o insuficiente.</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> MyForm <span style="color: #000000; font-weight: bold;">extends</span> Zend_Form<span style="color: #009900;">&#123;</span>
&nbsp;
    protected <span style="color: #000088;">$valores</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
     <span style="color: #666666; font-style: italic;">/*
     Aquí se declararían los elementos del zend form que se van a utilizar, sus tipos, valores, validaciones, etc...
     Éste Zend Form se va a utilizar como cualquier otro formulario. Aprovecharemos la posibilidad de validarlo desde en controller, etc..
     Lo único que cambia es que cuando invoquemos render() no se generará de manera regular, sino de la manera que a nosotros nos plazca.
     */</span>
&nbsp;
    <span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">//construct</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//sobreescribimos el  método setDefaults, que Zend_Form llama cuando se van a introducir valores por defecto en el formulario.</span>
    <span style="color: #666666; font-style: italic;">// setDefaults también es llamado desde el método populate del Zend_Form.    </span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setDefaults<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span> <span style="color: #000088;">$values</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// guardamos en &quot;valores&quot; la lista de valores de los campos </span>
       <span style="color: #666666; font-style: italic;">//del formulario, para luego poder utilizarlos en el método render()</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valores</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$values</span><span style="color: #339933;">;</span> 
        parent<span style="color: #339933;">::</span><span style="color: #004000;">setDefaults</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">//setDefaults</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #009900;">&#40;</span>Zend_View_Interface <span style="color: #000088;">$view</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">&quot;&lt;table&gt;
                  &lt;thead&gt;
                         &lt;tr&gt;
                               &lt;th&gt;&lt;/th&gt;
                               &lt;th&gt;Malo&lt;/th&gt;
                                &lt;th&gt;Regular&lt;/th&gt;
                                &lt;th&gt;Bueno&lt;/th&gt;
                         &lt;/tr&gt;
                  &lt;/head&gt;
                  &lt;tbody&gt;
                    &lt;tr&gt;
                           &lt;td&gt;Concepto 1 &lt;/td&gt;
                           &lt;td&gt;
                                  &lt;input &quot;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valores</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'concepto1'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>?<span style="color: #0000ff;">'checked'</span><span style="color: #339933;">:</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;  type=&quot;</span>radio<span style="color: #0000ff;">&quot; name = &quot;</span>concepto1<span style="color: #0000ff;">&quot; value = &quot;</span><span style="color: #cc66cc;">1</span><span style="color: #0000ff;">&quot;/&gt;
                           &lt;/td&gt;
                           &lt;td&gt;
                                  &lt;input &quot;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valores</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'concepto1'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>?<span style="color: #0000ff;">'checked'</span><span style="color: #339933;">:</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; type=&quot;</span>radio<span style="color: #0000ff;">&quot; name = &quot;</span>concepto1<span style="color: #0000ff;">&quot; value = &quot;</span><span style="color: #cc66cc;">2</span><span style="color: #0000ff;">&quot;/&gt;
                           &lt;/td&gt;
                           &lt;td&gt;
                                  &lt;input &quot;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valores</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'concepto1'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>?<span style="color: #0000ff;">'checked'</span><span style="color: #339933;">:</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; type=&quot;</span>radio<span style="color: #0000ff;">&quot; name = &quot;</span>concepto1<span style="color: #0000ff;">&quot; value = &quot;</span><span style="color: #cc66cc;">3</span><span style="color: #0000ff;">&quot;/&gt;
                           &lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                           &lt;td&gt;Concepto 2 &lt;/td&gt;
                           &lt;td&gt;
                                  &lt;input &quot;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valores</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'concepto2'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>?<span style="color: #0000ff;">'checked'</span><span style="color: #339933;">:</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; type=&quot;</span>radio<span style="color: #0000ff;">&quot; name = &quot;</span>concepto2<span style="color: #0000ff;">&quot; value = &quot;</span><span style="color: #cc66cc;">1</span><span style="color: #0000ff;">&quot;/&gt;
                           &lt;/td&gt;
                           &lt;td&gt;
                                  &lt;input &quot;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valores</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'concepto2'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>?<span style="color: #0000ff;">'checked'</span><span style="color: #339933;">:</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; type=&quot;</span>radio<span style="color: #0000ff;">&quot; name = &quot;</span>concepto2<span style="color: #0000ff;">&quot; value = &quot;</span><span style="color: #cc66cc;">2</span><span style="color: #0000ff;">&quot;/&gt;
                           &lt;/td&gt;
                           &lt;td&gt;
                                  &lt;input &quot;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valores</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'concepto2'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>?<span style="color: #0000ff;">'checked'</span><span style="color: #339933;">:</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; type=&quot;</span>radio<span style="color: #0000ff;">&quot; name = &quot;</span>concepto2<span style="color: #0000ff;">&quot; value = &quot;</span><span style="color: #cc66cc;">3</span><span style="color: #0000ff;">&quot;/&gt;
                           &lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                           &lt;td&gt;Concepto 3 &lt;/td&gt;
                           &lt;td&gt;
                                  &lt;input &quot;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valores</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'concepto3'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>?<span style="color: #0000ff;">'checked'</span><span style="color: #339933;">:</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; type=&quot;</span>radio<span style="color: #0000ff;">&quot; name = &quot;</span>concepto3<span style="color: #0000ff;">&quot; value = &quot;</span><span style="color: #cc66cc;">1</span><span style="color: #0000ff;">&quot;/&gt;
                           &lt;/td&gt;
                           &lt;td&gt;
                                  &lt;input &quot;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valores</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'concepto3'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>?<span style="color: #0000ff;">'checked'</span><span style="color: #339933;">:</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; type=&quot;</span>radio<span style="color: #0000ff;">&quot; name = &quot;</span>concepto3<span style="color: #0000ff;">&quot; value = &quot;</span><span style="color: #cc66cc;">2</span><span style="color: #0000ff;">&quot;/&gt;
                           &lt;/td&gt;
                           &lt;td&gt;
                                  &lt;input &quot;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">valores</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'concepto3'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>?<span style="color: #0000ff;">'checked'</span><span style="color: #339933;">:</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; type=&quot;</span>radio<span style="color: #0000ff;">&quot; name = &quot;</span>concepto3<span style="color: #0000ff;">&quot; value = &quot;</span><span style="color: #cc66cc;">3</span><span style="color: #0000ff;">&quot;/&gt;
                           &lt;/td&gt;
                    &lt;/tr&gt;
            &lt;/tbody&gt;
            &lt;/table&gt;
&quot;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
    <span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">//render</span>
&nbsp;
<span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// MyForm</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/zend-framework/zend_form-como-crear-tu-propia-apariencia-de-formulario/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
