<?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>Symfony.es</title>
	<atom:link href="http://www.symfony.es/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.symfony.es</link>
	<description>Hablamos sobre Symfony, el mejor framework para desarrollar aplicaciones web con PHP</description>
	<lastBuildDate>Tue, 17 Apr 2012 09:50:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Anunciados los ganadores del desafío Sismo</title>
		<link>http://www.symfony.es/2012/04/17/anunciados-los-ganadores-del-desafio-sismo/</link>
		<comments>http://www.symfony.es/2012/04/17/anunciados-los-ganadores-del-desafio-sismo/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 09:15:25 +0000</pubDate>
		<dc:creator>Javier Eguiluz</dc:creator>
				<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.symfony.es/?p=2194</guid>
		<description><![CDATA[Hace un mes hablamos sobre el Desafío Sismo, un concurso de programación organizado por la empresa ibuildings. El reto consistía en crear ... <a href="http://www.symfony.es/2012/04/17/anunciados-los-ganadores-del-desafio-sismo/">seguir leyendo</a>]]></description>
			<content:encoded><![CDATA[<p>Hace un mes hablamos sobre el <a href="http://www.symfony.es/2012/03/16/desafio-sismo-ganate-un-ipad/">Desafío Sismo</a>, un concurso de programación organizado por la empresa ibuildings. El reto consistía en crear un notificador para Sismo, la herramienta de integración continua que utiliza Symfony.</p>
<p>La idea es muy sencilla: Sismo ejecuta automáticamente los tests de tu aplicación. Cuando algo va mal, te notifica el error. ¿Cómo? Enviándote un email, escribiendo un mensaje en tu aplicación de chat, etc. Precisamente el concurso consistía en crear nuevas formas de notificar el resultado de la ejecución de los tests.</p>
<p>Para que fuese una competición más justa, se crearon tres categorías: el notificador más útil, el más creativo y el más inspirador. En cada categoría se elige a un ganador y entre ellos se sortea un iPad y dos entradas para asistir a una conferencia.</p>
<p>Hoy se han dado a conocer <a href="http://techportal.ibuildings.com/2012/04/17/sismo-challenge-results">los resultados en el blog de ibuldings</a> y estos han sido los ganadores:</p>
<ul>
<li><strong>El más útil</strong>: <em>Wallpaper Notifier</em> de Javier Eguiluz. Esta fue la propuesta que envié yo mismo al concurso. Más adelante te cuento los detalles.</li>
<li><strong>El más creativo</strong>: <em>Houston Notifier</em> de Andreas Hucks. Cuando los tests fallan, este notificador hace que tu ordenador diga <em>&#8220;Houston, we have a problem here!&#8221;</em>.</li>
<li><strong>El más inspirador</strong>: <em>Eggdrop Notifier</em> de Andrew Graham. Notifica el resultado mediante mensajes escritos por <a href="http://www.eggheads.org/">Eggdrop</a>, uno de los <em>bots</em> más utilizados en los canales IRC.</li>
</ul>
<p>Al concurso se presentaron 23 programadores, aunque finalmente sólo 14 enviaron el código de su solución. Ninguna de las propuestas sugirió la categoría en la que le gustaría participar, así que fueron los propios organizadores los encargados de categorizar las propuestas.</p>
<p>La propuesta <em>Wallpaper Notifier</em> que les envié consiste en un notificador silencioso, minimalista y no intrusivo, ya que notifica el resultado modificando la imagen de fondo de tu escritorio.</p>
<p>Este es el código del notificador: <a href="https://gist.github.com/2404810">https://gist.github.com/2404810</a></p>
<p>Y aquí tienes la explicación que les envié a los responsables del concurso:</p>
<div style="width:595px" id="__ss_12569889"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/javier.eguiluz/wallpaper-notifier" title="Wallpaper Notifier" target="_blank">Wallpaper Notifier</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/12569889" width="595" height="497" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/javier.eguiluz" target="_blank">Javier Eguiluz</a> </div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.symfony.es/2012/04/17/anunciados-los-ganadores-del-desafio-sismo/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>El futuro de Drupal se llama Symfony</title>
		<link>http://www.symfony.es/2012/03/26/el-futuro-de-drupal-se-llama-symfony/</link>
		<comments>http://www.symfony.es/2012/03/26/el-futuro-de-drupal-se-llama-symfony/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 07:18:00 +0000</pubDate>
		<dc:creator>Javier Eguiluz</dc:creator>
				<category><![CDATA[conferencia]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://www.symfony.es/?p=2187</guid>
		<description><![CDATA[La semana pasada se celebró en Denver la edición americana de la conferencia Drupalcon. Más de 3.000 asistentes se reunieron para disfrutar ... <a href="http://www.symfony.es/2012/03/26/el-futuro-de-drupal-se-llama-symfony/">seguir leyendo</a>]]></description>
			<content:encoded><![CDATA[<p>La semana pasada se celebró en Denver la edición americana de la <a href="http://denver2012.drupal.org/">conferencia Drupalcon</a>. Más de 3.000 asistentes se reunieron para disfrutar de decenas de charlas de todas las temáticas.</p>
<p>Durante su charla inaugural, <a href="http://buytaert.net/">Dries Buytaert</a>, líder del proyecto Drupal, anunció los planes para el futuro inmediato del proyecto:</p>
<p><object id="flashObj" width="622" height="350" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,47,0"><param name="movie" value="http://c.brightcove.com/services/viewer/federated_f9?isVid=1&#038;isUI=1" /><param name="bgcolor" value="#FFFFFF" /><param name="flashVars" value="videoId=1492322912001&#038;playerID=793830727001&#038;playerKey=AQ~~,AAAAuFIGwck~,XYSambmH7ySRJvSGXM6jvO2WTQY3FJ3a&#038;domain=embed&#038;dynamicStreaming=true" /><param name="base" value="http://admin.brightcove.com" /><param name="seamlesstabbing" value="false" /><param name="allowFullScreen" value="true" /><param name="swLiveConnect" value="true" /><param name="allowScriptAccess" value="always" /><embed src="http://c.brightcove.com/services/viewer/federated_f9?isVid=1&#038;isUI=1" bgcolor="#FFFFFF" flashVars="videoId=1492322912001&#038;playerID=793830727001&#038;playerKey=AQ~~,AAAAuFIGwck~,XYSambmH7ySRJvSGXM6jvO2WTQY3FJ3a&#038;domain=embed&#038;dynamicStreaming=true" base="http://admin.brightcove.com" name="flashObj" width="622" height="350" seamlesstabbing="false" type="application/x-shockwave-flash" allowFullScreen="true" allowScriptAccess="always" swLiveConnect="true" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></embed></object></p>
<p>Una de las ideas principales lanzadas por Dries es que Drupal 8 debe tomarse en serio de una vez a los dispositivos móviles. En un tono casi desesperado, Dries aseguró que esta es la última y única oportunidad que tendrán para ganarse a todos los usuarios que editan sitios web desde el móvil o <em>tablet</em>.</p>
<p>La segunda idea principal fue que <strong>el futuro de Drupal se llama Symfony</strong>. Desde hace unos meses ya se sabía que <a href="http://www.symfony.es/2011/10/26/drupal-8-integra-los-primeros-componentes-de-symfony2/">Drupal 8 utilizaría algún componente de Symfony</a>. La sorpresa ha sido que finalmente Drupal 8 utilizará tantos componentes de Symfony como sea posible. Por el momento ya están confirmados: HttpFoundation, HttpKernel, Routing, EventDispatcher, DependencyInjection y ClassLoader.</p>
<p>Cuando un proyecto tan gigantesco como Drupal decide que programar todo el código de su aplicación es una pérdida de tiempo y que es mucho mejor reutilizar los componentes de altísima calidad ya disponibles, esto es una clara señal de que tú o tu empresa deberíais hacer lo mismo.</p>
<p>Con este anuncio, <strong>Symfony ya es la base tecnológica de dos de los cuatro grandes proyectos PHP</strong>: <a href="http://www.phpbb.com/">phpBB</a> y <a href="http://drupal.org/">Drupal</a>. Últimamente se leen rumores de que <a href="http://www.joomla.org/">Joomla!</a> podría ser el siguiente y por tanto, sólo nos faltaría <a href="http://wordpress.org/">WordPress</a> para acabar de conquistar el mundo PHP.</p>
<p>Por último, si eres programador de Drupal o tu empresa desarrolla proyectos con Drupal, no te puedes perder el próximo 15 y 16 de junio la <strong><a href="http://desymfony.com/">conferencia deSymfony 2012</a></strong> en Castellón. Dos días muy intensos en los que te explicaremos, entre otras muchas cosas, qué son los componentes Symfony que utilizará Drupal 8. Además, Fabien Potencier, creador de Symfony, estará en persona en la conferencia, por lo que podrás conocer de primera mano los planes de Symfony + Drupal.</p>
<p><strong>Actualización 26 de marzo</strong>: continúa la <em>symfonización</em> de Drupal. Desde hace unas horas se está <a href="http://drupal.org/node/1499460">discutiendo sustituir PHP por Twig</a> para crear las plantillas de Drupal.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.symfony.es/2012/03/26/el-futuro-de-drupal-se-llama-symfony/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Desafío Sismo, ¡gánate un iPad!</title>
		<link>http://www.symfony.es/2012/03/16/desafio-sismo-ganate-un-ipad/</link>
		<comments>http://www.symfony.es/2012/03/16/desafio-sismo-ganate-un-ipad/#comments</comments>
		<pubDate>Fri, 16 Mar 2012 11:42:38 +0000</pubDate>
		<dc:creator>Javier Eguiluz</dc:creator>
				<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://www.symfony.es/?p=2176</guid>
		<description><![CDATA[Sismo es un servidor de integración continua creado por Fabien Potencier, el mismo responsable del proyecto Symfony. Los servidores de integración continua ... <a href="http://www.symfony.es/2012/03/16/desafio-sismo-ganate-un-ipad/">seguir leyendo</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://sismo.sensiolabs.org/">Sismo</a> es un servidor de integración continua creado por Fabien Potencier, el mismo responsable del proyecto Symfony. Los servidores de integración continua son aplicaciones que ejecutan automáticamente los test de tu aplicación (cada vez que haces un cambio, cada vez que haces un <em>commit</em>, periódicamente, etc.)</p>
<p>Si conoces proyectos como Jenkins y Hudson, Sismo es una versión infinitamente simplificada de ellos (y mucho más fácil de usar). En el <a href="https://github.com/fabpot/sismo">repositorio oficial de Sismo</a> puedes ver su código y puedes leer las instrucciones para instalarlo.</p>
<p>Una de las claves de Sismo son sus <strong>notificadores</strong>, que se encargan de avisarte del resultado de la última ejecución de los tests. Actualmente Sismo cuenta con un notificador que te envía el resultado por email, otro que te avisa vía Growl (sólo funciona en Mac), otro que te envía notificaciones vía DBus y otros dos notificadores que te envían mensajes vía servidores XMPP y vía GoogleTalk.</p>
<p>Y precisamente los notificadores son la base del <a href="http://www.ibuildings.com/challenge/">Desafío Sismo</a> organizado por la empresa inglesa <a href="http://www.ibuildings.com/">ibuildings</a> y con el que <strong>puedes ganar un iPad</strong>.</p>
<p>La idea es muy sencilla: crea un nuevo notificador para Sismo. Un notificador que sea útil, creativo y/o inspirador. Así que esta es una excelente oportunidad para demostrar lo creativo que eres. El notificador que desarrolles no tiene por qué ser útil. Basta con que funcione y notifique el resultado de una manera extraña, rara, novedosa, creativa, etc. </p>
<p>Cada programador sólo puede enviar una propuesta (si quieres, con más de un notificador cada una) y tienes de plazo <strong>hasta el 31 de marzo de 2012</strong>. La organización elegirá tres ganadores: el notificador más útil, el más creativo y el más inspirador. Entre los tres se sorteará un iPad y los otros dos ganarán una entrada para la conferencia PHPNW.</p>
<p>No se admiten ideas mejoradas de los notificadores existentes (nada de email por ejemplo), así que estrújate el cerebro y deslumbra a la comunidad con tu idea original, creativa e inspiradora.</p>
<p>Ver todos los detalles del concurso y envío de propuestas: <a href="http://www.ibuildings.com/challenge/">ibuildings.com/challenge</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.symfony.es/2012/03/16/desafio-sismo-ganate-un-ipad/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fabien Potencier será ponente en deSymfony 2012</title>
		<link>http://www.symfony.es/2012/03/14/fabien-potencier-sera-ponente-en-desymfony-2012/</link>
		<comments>http://www.symfony.es/2012/03/14/fabien-potencier-sera-ponente-en-desymfony-2012/#comments</comments>
		<pubDate>Wed, 14 Mar 2012 11:46:29 +0000</pubDate>
		<dc:creator>Javier Eguiluz</dc:creator>
				<category><![CDATA[conferencia]]></category>
		<category><![CDATA[desymfony]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://www.symfony.es/?p=2170</guid>
		<description><![CDATA[La gran sorpresa de deSymfony 2012 acaba de ser desvelada en Twitter: Fabien Potencier, creador y máximo responsable del proyecto Symfony, será ... <a href="http://www.symfony.es/2012/03/14/fabien-potencier-sera-ponente-en-desymfony-2012/">seguir leyendo</a>]]></description>
			<content:encoded><![CDATA[<p>La gran sorpresa de deSymfony 2012 <a href="https://twitter.com/#!/desymfony/status/179854505289060352">acaba de ser desvelada en Twitter</a>: <strong>Fabien Potencier, creador y máximo responsable del proyecto Symfony, será ponente en deSymfony</strong>.</p>
<p>Desde que comenzamos la aventura de <strong>deSymfony</strong>, siempre hemos querido traer a Fabien y él siempre ha intentado venir. El año pasado estuvimos a punto de conseguirlo, pero finalmente una agenda demasiado apretada lo impidió.</p>
<p>Así que estamos muy felices de que por fin todos los asistentes de <strong>deSymfony</strong> puedan conocer, aprender y hablar con el más grande. Fabien impartirá dos charlas durante su estancia: <em>Look beyond PHP</em> y <em>Varnish, the easy way to spped up your websites</em>.</p>
<p>Con esta incorporación, <strong><a href="http://desymfony.com/">deSymfony</a></strong> se consolida como uno de los eventos tecnológicos del verano. Dos días apasionantes y muy intensos (<a href="http://www.symfony.es/2012/03/12/desymfony-2012-desvela-su-programa/">ver programa</a>) con los que te vas a poner al día en todos los temas que deben conocer los programadores PHP profesionales.</p>
<p>Sin olvidar la gran oportunidad que supone juntarte con cientos de miembros de la comunidad. Si eres una empresa, aquí es donde puedes contratar gente brillante (y de paso ahorrarte el coste que supone la búsqueda de talento). Si eres trabajador, este es el lugar al que acuden las empresas y la gente a la que preguntan las empresas cuando buscan talento.</p>
<p>Así que reserva cuanto antes tu plaza antes de que se agoten los tickets baratos del período de <em>early bird</em> (55 euros IVA incluído y con todas las comidas pagadas).</p>
<p><iframe src="https://desymfony.stagehq.com/events/1343/external" marginheight="5" marginwidth="5" frameborder="0" scrolling="auto" height="150" width="600"><br />
</iframe></p>
<p><a href="http://desymfony.com/noticias/fabien-potencier-sera-ponente-en-desymfony-2012">Fuente: Fabien Potencier será ponente en deSymfony 2012</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.symfony.es/2012/03/14/fabien-potencier-sera-ponente-en-desymfony-2012/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>deSymfony 2012 desvela su programa</title>
		<link>http://www.symfony.es/2012/03/12/desymfony-2012-desvela-su-programa/</link>
		<comments>http://www.symfony.es/2012/03/12/desymfony-2012-desvela-su-programa/#comments</comments>
		<pubDate>Mon, 12 Mar 2012 19:48:13 +0000</pubDate>
		<dc:creator>Javier Eguiluz</dc:creator>
				<category><![CDATA[conferencia]]></category>
		<category><![CDATA[desymfony]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://www.symfony.es/?p=2141</guid>
		<description><![CDATA[deSymfony 2012 ha desvelado por fin el programa completo que podrán disfrutar los asistentes durante los próximos 15 y 16 de junio. ... <a href="http://www.symfony.es/2012/03/12/desymfony-2012-desvela-su-programa/">seguir leyendo</a>]]></description>
			<content:encoded><![CDATA[<p><strong>deSymfony 2012</strong> ha desvelado por fin el programa completo que podrán disfrutar los asistentes durante los próximos 15 y 16 de junio. Resumiéndolo en pocas palabras, <strong>deSymfony 2012 te presenta en dos días todas las tecnologías y conceptos que deben conocer los programadores PHP/Symfony profesionales</strong>.</p>
<p>¿Sabes lo que es <em>Composer</em>? Se utiliza en Symfony 2.1 y dentro de unos meses podría acabar con PEAR. <a href="http://desymfony.com/ponencia/composer"><strong>Adán</strong> te lo contará</a> en la conferencia. ¿Te suena Symfony CMF? Es el proyecto más importante de la comunidad Symfony. <a href="http://desymfony.com/ponencia/cmf"><strong>Nacho</strong> te lo va a explicar</a> con detalle, ya que forma parte del proyecto.</p>
<p>¿Conoces TDD, tests, etc.? ¡Claro! Eso lo sabe casi todo el mundo. Pero en deSymfony no nos quedamos en la teoría, así que <a href="http://desymfony.com/ponencia/codigo-facil"><strong>Álvaro</strong> te va a explicar</a> cómo hacer que tu código sea más fácil de probar y <a href="http://desymfony.com/ponencia/tdd"><strong>Jacopo</strong> te va a dar una clase magistral</a> aplicando TDD en vivo y en directo. Los test son tan importantes para los programadores profesionales, que <a href="http://desymfony.com/ponencia/integracion"><strong>César</strong> te hablará</a> de la integración continua y <a href="http://desymfony.com/ponencia/bdd"><strong>Carlos</strong> te explicará</a> cómo funciona el BDD con Symfony2.</p>
<p>Como sabes, los componentes es una de las claves del éxito de Symfony2. <a href="http://desymfony.com/ponencia/componentes"><strong>Javier</strong> te los va a presentar</a>, prestando especial atención al componente de validación. ¿Sabes cómo se desacoplan las aplicaciones web profesionales? Con los eventos, otro componente esencial de Symfony2, que <a href="http://desymfony.com/ponencia/concierto-eventos">te van a explicar a dúo <strong>Eduardo</strong> y <strong>Javier</strong></a>. Pero no todo son componentes, por eso <a href="http://desymfony.com/ponencia/entorno"><strong>Albert</strong> te va a presentar</a> todas las librerías y ecosistema que se está formando alrededor del proyecto Symfony.</p>
<p>¿Utilizas Twig para crear las plantillas de tus aplicaciones? Pues no te pierdas la charla que <a href="http://desymfony.com/ponencia/twig">impartiré yo mismo</a> y en la que te voy a contar decenas de trucos y técnicas avanzadas. ¿Quieres exprimir los formularios de Symfony2 al límite? <a href="http://desymfony.com/ponencia/formularios"><strong>Ignacio</strong> te ayuda</a> a conseguirlo. ¿Estás pensando en utilizar MongoDB? Espera a que <a href="http://desymfony.com/ponencia/mongodb"><strong>Pablo</strong> te explique</a> cómo usarlo con Symfony2 para mejorar el rendimiento de tus aplicaciones.</p>
<p>¿Crees que lo sabes todo de Symfony2? Espera a que <a href="http://desymfony.com/ponencia/internals"><strong>Raúl</strong> te hable</a> de la parte interna de Symfony2, eso que no está documentado en ninguna parte. Como la inyección de dependencias, que podrás dominarla después de que <a href="http://desymfony.com/ponencia/servicios"><strong>Ricard</strong> te explique</a> con detalle los servicios.</p>
<p>Todas las charlas de deSymfony tienen un enfoque práctico, pero algunas van más allá y presentan directamente casos prácticos reales. <a href="http://desymfony.com/ponencia/internacionalizacion"><strong>Cristina</strong> te explica</a> por ejemplo cómo internacionalizar un sitio complejo con 35 idiomas, <a href="http://desymfony.com/ponencia/monitorizacion"><strong>Jordi</strong> te muestra</a> cómo monitorizan un sitio web con millones de usuarios y <a href="http://desymfony.com/ponencia/rest"><strong>Asier</strong> te enseña</a> cómo utilizar los componentes de Symfony para crear tu propio framework. Sin olvidar el <em>despliegue</em> de aplicaciones en los servidores de producción. <a href="http://desymfony.com/ponencia/despliegue"><strong>Moisés</strong> te cuenta</a> cómo lo hacen los profesionales.</p>
<p>En resumen, <strong>deSymfony 2012</strong> es una oportunidad única para actualizarte en tan sólo dos días. Y a un precio más que asequible: 55 euros por 20 sesiones e incluye las comidas y coffee-breaks de los dos días. Puedes comprar tu entrada con el siguiente formulario o entrando en <a href="http://desymfony.com">desymfony.com</a>:</p>
<p><iframe src="https://desymfony.stagehq.com/events/1343/external" marginheight="5" marginwidth="5" frameborder="0" scrolling="auto" height="150" width="600"><br />
</iframe></p>
<p>Y si eres empresa, no dejes pasar la oportunidad de patrocinar uno de los eventos tecnológicos del verano: <strong><a href="http://desymfony.com/desymfony-2012-guia-patrocinio.pdf">Guía de patrocinio (PDF)</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.symfony.es/2012/03/12/desymfony-2012-desvela-su-programa/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Publicada la versión estable de PHP 5.4</title>
		<link>http://www.symfony.es/2012/03/02/publicada-la-version-estable-de-php-5-4/</link>
		<comments>http://www.symfony.es/2012/03/02/publicada-la-version-estable-de-php-5-4/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 08:14:36 +0000</pubDate>
		<dc:creator>Javier Eguiluz</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://www.symfony.es/?p=2130</guid>
		<description><![CDATA[Hace unas horas, y tras ocho versiones release candidate, se ha publicado la esperadísima versión 5.4 de PHP. Esta no es actualización ... <a href="http://www.symfony.es/2012/03/02/publicada-la-version-estable-de-php-5-4/">seguir leyendo</a>]]></description>
			<content:encoded><![CDATA[<p>Hace unas horas, y tras ocho versiones <em>release candidate</em>, se ha publicado la esperadísima versión 5.4 de PHP. Esta no es actualización más, ya que supone un punto de inflexión en la historia de PHP.</p>
<p>La lista de cambios y novedades es tan larga como interesante y la puedes consultar en <a href="http://php.net/ChangeLog-5.php">el changelog</a>. Desde el punto de vista de los programadores Symfony2, estas son algunas de las más interesantes:</p>
<p><strong>1. Servidor web incluido</strong>. ¿Quieres desarrollar aplicaciones Symfony2? Ya no necesitas ni Apache, ni Ngnix ni nada. Entra en el directorio de tu aplicación y ejecuta lo siguiente:</p>
<pre>$ cd proyectos/sf2/cupon
$ php -S localhost:80</pre>
<p>Ahora abres un navegador, entras en <code>http://localhost</code> y ya puedes probar tu aplicación Symfony2. Para hacerlo bien del todo, <a href="http://michal-pipa.blogspot.com/2011/12/using-symfony2-with-php-54-built-in-web.html">lee este breve artículo</a> donde te explica cómo crear un script de tipo router para las aplicaciones Symfony2.</p>
<p><strong>2. Código más conciso</strong>. Ahora puedes utilizar la notación simplificada para crear arrays:</p>
<pre>$ids = [1, 2, 3];
$propiedades = ["usuario" => "...", "edad" => 20, "rol" => "admin"];</pre>
<p>También funcionan cosas como estas, que evitan tener que crear variables intermedias:</p>
<pre>// Si el método devuelve un array, puedes seleccionar un elemento en la misma llamada
$oferta = $em->getRepository('CiudadBundle:Ciudad')->getTodasLasOfertas($slug)[0];

// Utilizar métodos al crear la clase
$usuario = (new Usuario)->setNombre("Anónimo");

// El nombre de los métodos estáticos puede ser una expresión
$slug = Slugger::{"slugify_v".$version}($string);</pre>
<p><strong>3. No son clases, pero lo parecen</strong>. En ocasiones necesitas que dos clases compartan unos pocos métodos (quizás sólo uno). Si no puedes o no quieres hacer una clase padre de la que hereden las dos, puedes crear lo que se llama un <code>trait</code>, que es como un <em>trozo de clase, pero que no es una clase</em>.</p>
<p>Observa este ejemplo en el que dos clases llamadas <code>Usuario</code> y <code>Oferta</code> comparten dos métodos:</p>
<pre>trait metodosComunes {
    function getId() { return $this->id; }
    function getNombre() { return $this->nombre; }
}

class Usuario {
    use metodosComunes;
    /* ... */
}

class Oferta {
    use metodosComunes;
    /* ... */
}</pre>
<p>Ahora puedes hacer cosas como lo siguiente:</p>
<pre>$usuario->getNombre();
$oferta->getId();</pre>
<p>La <a href="http://es.php.net/traits">documentación oficial de traits</a> explica cómo utilizar los traits para usos mucho más avanzados.</p>
<p><strong>4. Mucho más rápido</strong>. Al contrario de lo que sucede con la mayoría del software, PHP es más rápido en cada nueva versión. Las primeras pruebas hablan de hasta un 20% de mejora sin tener que hacer ningún cambio. Una de las razones es la cantidad de <em>cosas viejas</em> (<em>&#8220;legacy features&#8221;</em>) que le han quitado. La otra es la mejora en el Zend Engine, que de paso reduce el consumo de memoria significativamente.</p>
<p><strong>¿Cuál es el soporte de PHP 5.4 en Symfony2?</strong></p>
<p>Según los datos del servidor de integración continua Travis, Symfony2 pasa todos los test cuando se ejecuta sobre PHP 5.4 (casi 6.000 tests). Aquí tienes los datos de <a href="http://travis-ci.org/#!/symfony/symfony">la ejecución más reciente</a> y aquí el detalle de lo que sucedió al <a href="http://travis-ci.org/#!/symfony/symfony/jobs/772249">ejecutarlo sobre PHP 5.4</a>.</p>
<p>En los últimos días, también se han realizado cambios en la <a href="https://github.com/symfony/symfony">rama master del repositorio de Symfony2</a> para asegurar una total compatibilidad con PHP 5.4.</p>
<p>Así que <strong>tus aplicaciones Symfony2 deberían funcionar bien sin tener que hacer cambios</strong>, a menos que en tu código hayas utilizado alguna de las características que han eliminado. Para saberlo, consulta la <a href="http://es.php.net/migration54">guía de actualización de PHP 5.3 a PHP 5.4</a>.</p>
<p><strong>En resumen</strong></p>
<p>PHP 5.4 no es una actualización más. Esta versión marca un punto de inflexión en la historia de PHP por la gran limpieza de opciones obsoletas y por la cantidad de características interesantes añadidas.</p>
<p>Sería una locura actualizar tus aplicaciones hoy mismo, pero también sería una locura no hacerlo en los próximos meses. Así que pregunta hoy mismo a tu empresa de hosting si tiene soporte de PHP 5.4. Y si no lo tiene, empieza a buscar empresas de hosting serias. Por el bien de PHP, no podemos esperar cinco años hasta que se generalice PHP 5.4.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.symfony.es/2012/03/02/publicada-la-version-estable-de-php-5-4/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Sorteamos dos entradas para deSymfony 2012</title>
		<link>http://www.symfony.es/2012/02/29/sorteamos-dos-entradas-para-desymfony-2012/</link>
		<comments>http://www.symfony.es/2012/02/29/sorteamos-dos-entradas-para-desymfony-2012/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 07:12:37 +0000</pubDate>
		<dc:creator>Javier Eguiluz</dc:creator>
				<category><![CDATA[conferencia]]></category>
		<category><![CDATA[desymfony]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://www.symfony.es/?p=2114</guid>
		<description><![CDATA[deSymfony 2012, la segunda conferencia más importante del mundo dedicada a Symfony, se celebra los próximos 15 y 16 de junio. Dentro ... <a href="http://www.symfony.es/2012/02/29/sorteamos-dos-entradas-para-desymfony-2012/">seguir leyendo</a>]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://desymfony.com">deSymfony 2012</a></strong>, la segunda conferencia más importante del mundo dedicada a Symfony, se celebra los próximos 15 y 16 de junio. Dentro de unos días se estrenará la nueva web, se anunciará gran parte de la agenda y se pondrán a la venta las entradas.</p>
<p>Como desde symfony.es ayudamos en la organización del evento, <strong>hemos conseguido en exclusiva dos entradas para deSymfony 2012 y las vamos a sortear entre todos vosotros</strong>. La única condición que debes cumplir para participar en el sorteo es haber comprado el libro <a href="http://www.symfony.es/libro-symfony2/">Desarrollo web ágil con Symfony2</a> que hemos publicado en esta misma web. Si lo has hecho, indica tu nombre y email en el siguiente formulario y ya participarás en el sorteo:</p>
<p><strong>NOTA IMPORTANTE</strong>: en el sorteo puede participar cualquier persona de cualquier país. Pero si resultas ganador/a, debes estar físicamente el 15 de junio en la ciudad de Castellón (España). El premio no incluye los gastos de traslado ni de alojamiento.</p>
<p><iframe src="https://docs.google.com/spreadsheet/embeddedform?formkey=dGJWMTFhcDVidjhjRmpGclRlWUd6SlE6MQ" width="760" height="350" frameborder="0" marginheight="0" marginwidth="0">Cargando&#8230;</iframe></p>
<p><strong>¿Cuándo se conocerá el ganador/a?</strong><br />
El sorteo se realizará el día antes a que se pongan a la venta las entradas de deSymfony, que está previsto entre el 1 y el 15 de marzo.</p>
<p><strong>¿Cómo se elige al ganador/a?</strong><br />
Para que la elección sea completamente aleatoria y no condicionada, se elegirá como primer ganador a la persona cuya posición en la lista de personas apuntadas coincida con el resultado de la siguiente operación:</p>
<pre>(watchers + forks + followers) mod numero_apuntados</pre>
<p>Donde <code>watchers</code> es el número total de watchers del repositorio oficial de Symfony2 en Github, <code>forks</code> es el número total de forks del mismo repositorio y <code>followers</code> es el total de followers de la cuenta @fabpot de twitter. Todas las cifras se obtendrán a las 11:00 AM CET del día del sorteo y la primera persona de la lista se considera que está en la posición <code>0</code>.</p>
<p>Si la elección se hubiera realizado por ejemplo a las 18:38 CET del 23 de febrero y hubiera 123 personas apuntadas, el ganador sería la persona cuya posición en la lista sea la número 51:</p>
<pre>(3.984 + 1.033 + 8.318) mod 123 = 51</pre>
<p>El ganador del segundo ticket será la persona inmediatamente siguiente al primer ganador. Si hubiera cualquier problema con cualquier ganador, siempre se considera como nuevo ganador a la persona siguiente de la lista.</p>
<p><strong>¿Cómo se notifica a los premiados/as?</strong><br />
El resultado del sorteo se publicará en este mismo post y se notificará vía email a los ganadores.</p>
<p><strong>¿Cómo se entrega el premio?</strong><br />
La entrega del ticket se realizará el día 15 de junio, en las instalaciones del evento y antes de que comience el registro de asistentes.</p>
<p><strong>¿Quién puede participar en el sorteo?</strong><br />
Cualquier persona que haya comprado el libro de Symfony2 y se apunte en el formulario anterior, salvo los oganizadores, ponentes y patrocinadores del evento. Esta última comprobación se realiza a <em>posteriori</em>, por lo que no se elimina a ninguna persona antes del sorteo.</p>
<p><strong>¿En qué consiste el premio?</strong><br />
El premio del sorteo consiste en dos entradas individuales para el evento deSymfony 2012. El premio no es canjeable por dinero y no incluye ni el alojamiento ni el desplazamiento.</p>
<hr/>
<p><strong>Actualización 12 de marzo</strong></p>
<p>El pasado 7 de marzo a las 11:00 CET se realizó el sorteo de las dos entradas. En ese mismo instante se notificó a los dos ganadores. Todavía no hemos recibido confirmación oficial de que pueden asistir, así que seguimos esperando (y ya hemos avisado a los dos primeros reservas).</p>
<p><strong>Actualización 13 de marzo</strong></p>
<p>El primer ganador del sorteo fue <strong>Francisco Cerezo</strong>, que renuncia al premio por motivos profesionales. El segundo ganador fue <strong>Roi Rodriguez</strong>, que también renuncia por motivos profesionales.</p>
<p>Siguiendo las bases del sorteo, los nuevos ganadores son las personas cuya posición es justo la siguiente a los ganadores originales.</p>
<p>El primer nuevo ganador es <strong>Jesús Camacho</strong>, que ha aceptado el premio. El segundo nuevo ganador es <strong>Carlos Pascual</strong>, que también ha respondido afirmativamente.</p>
<p>En resumen, los ganadores del sorteo son <strong>Jesús Camacho</strong> y <strong>Carlos Pascual</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.symfony.es/2012/02/29/sorteamos-dos-entradas-para-desymfony-2012/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Desarrollo web ágil con Symfony2, dos meses después</title>
		<link>http://www.symfony.es/2012/02/27/desarrollo-web-agil-con-symfony2-dos-meses-despues/</link>
		<comments>http://www.symfony.es/2012/02/27/desarrollo-web-agil-con-symfony2-dos-meses-despues/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 08:46:24 +0000</pubDate>
		<dc:creator>Javier Eguiluz</dc:creator>
				<category><![CDATA[documentación]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://www.symfony.es/?p=2099</guid>
		<description><![CDATA[Esto no es un artículo técnico sobre Symfony. En este artículo hablo de la experiencia que ha supuesto escribir el libro sobre ... <a href="http://www.symfony.es/2012/02/27/desarrollo-web-agil-con-symfony2-dos-meses-despues/">seguir leyendo</a>]]></description>
			<content:encoded><![CDATA[<p>Esto <strong>no</strong> es un artículo técnico sobre Symfony. En este artículo hablo de la experiencia que ha supuesto escribir el libro sobre Symfony2, de los resultados obtenidos, de lo bueno, de lo malo y de las lecciones aprendidas. Así que si sólo te interesa la parte técnica de Symfony, puedes dejar de leer.</p>
<p><strong>El 21 de diciembre de 2011, a las 9:00 AM hora española se ponía a la venta el libro <a href="http://www.symfony.es/libro-symfony2/">Desarrollo web ágil con Symfony2</a>. Treinta segundos después ya había vendido seis copias, dos meses después ya son más de 600 copias. ¿Cómo lo he conseguido? Sigue leyendo porque te lo voy a contar todo.</strong></p>
<h3>¿En español o en inglés?</h3>
<p>La primera decisión importante a la que me tuve que enfrentar fue si escribir el libro en inglés o en español. Siendo un libro técnico de programación, parece que la respuesta obvia debería ser inglés. No obstante, me decidí por escribirlo en español por los siguientes motivos:</p>
<ul>
<li>Dentro de la comunidad hispana soy conocido por mi trabajo en el blog symfony.es y en la <a href="http://desymfony.com/">conferencia deSymfony</a>. En la comunidad extranjera no me conoce casi nadie, así que me hubiera costado mucho convencerles de que el libro podría ser interesante. Si partiera de cero en las dos comunidades, lo habría escrito en inglés.</li>
<li>Los hispanos no leen en inglés: por los comentarios que me llegan, intuyo que un enorme porcentaje de hispanohablantes no quiere leer en inglés, incluso aunque sean capaces de hacerlo. Así que si lo escribo en inglés, me hubiera encontrado con el rechazo de la mayoría de la comunidad hispana.</li>
<li>Latinoamérica: español no es España, español son 400 millones de personas en todo el mundo. Hablar y escribir en español te abre las puertas de medio mundo (para el otro medio mundo sí que necesitas el inglés). </li>
<li>Cursos: estoy preparando cursos presenciales de Symfony2 basados en la documentación del libro. En el tema de los cursos no hay ninguna duda: obligatoriamente deben ser en español para que la gente se apunte. Si la documentación está en inglés, me hubiera costado mucho preparar documentación especial para los cursos.</li>
</ul>
<h3>¿Digital o papel?</h3>
<p>La segunda decisión importante fue si debía publicar el libro sólo en formato digital, sólo en papel o en los dos. Decidí empezar por publicarla solamente en formato digital como archivo PDF. Prometí que unos meses después evaluaría la posibilidad de publicarla en papel.</p>
<p>A pesar de las lógicas reticencias iniciales de algunos lectores, la aceptación del formato digital ha sido abrumadoramente positiva. Tanto que ahora mismo suena ridículo plantearse la publicación en papel. Evidentemente esto no es extrapolable a cualquier tipo de libro y de sitio web, ya que el 100% de mis lectores son tecnófilos y de un nivel infinitamente superior a la media de la población.</p>
<p>Aún así, estoy convencido de que los libros en papel van a desaparecer por completo en pocos años. La gente sólo suele criticar las desventajas de lo digital frente al papel, pero en realidad, las ventajas son mayoría. En mi caso concreto, las ventajas del formato digital son las siguientes:</p>
<ul>
<li>Me permite ser el distribuidor de mi propio libro, ya que sólo tengo que enviar unos cuantos bytes al comprador. Sin intermediarios, lo que me permite ajustar los precios, y sin esperas, lo que me permite ofrecer un buen servicio a mis lectores.</li>
<li>El libro se imprime a todo color, lo que hace que los listados de código sean muy fáciles de entender debido al coloreado de su sintaxis. Publicar un libro impreso de casi 600 páginas en color es impensable.</li>
<li>Me permite enviar actualizaciones a mis lectores. Así que cuando te llega la nueva versión, tiras el PDF viejo y ya sabes que el nuevo tiene todos los fallos corregidos. Cuando te compras un libro técnico en papel, sabes que ya está viejo desde que salió de la imprenta.</li>
<li>Buscar información es muy importante en un libro que trata muchos temas diferentes. Gracias al formato digital, puedes hacer búsquedas instantáneas en los contenidos del archivo PDF.</li>
<li>Un libro digital incluye en su interior un libro en papel. Sólo tienes que darle al botón de imprimir. Con la ventaja de imprimirte sólo las partes que necesitas o que más te interesan.</li>
</ul>
<h3>El precio</h3>
<p>En mi opinión, el nombre y el precio son las dos cosas más difíciles de establecer para un producto o servicio. Antes de pensar en serio en el precio, lo primero que hice fue calcular los gastos que me suponía <em>publicar</em> cada copia del libro.</p>
<p>Como el servidor desde el que envío los libros ya lo tenía de antes para otros proyectos y como el sistema de venta de libros (que explico más adelante) me lo programé yo mismo, los costes propios de <em>publicar</em> cada unidad eran 0 euros. Así que sólo debía tener en cuenta las comisiones de la pasarela de pago (explicadas también más adelante).</p>
<p>Con esta libertad para elegir el precio, decidí que vendería el libro al precio más alto que me pareciera razonable a mí mismo. Así que el libro se vendería a 10 euros, que es el precio máximo que me parece razonable pagar por un libro electrónico. Si te acuerdas, ese fue el precio al que Amazon empezó a vender libros electrónicos, antes de que las avariciosas editoriales le obligaran a subir los precios hasta niveles ridículos.</p>
<h3>Los aciertos</h3>
<p>Afortunadamente, después de estos dos meses, puedo decir que he tomado la decisión correcta en los tres puntos anteriores: escribir el libro en español, publicarlo sólo en digital y cobrar 10 euros. En este tiempo, sólo dos personas me lo han pedido en papel y sólo una persona me ha dicho que el libro le parecía caro.</p>
<p>Además de esto, creo que he acertado en las siguientes decisiones:</p>
<ul>
<li><strong>No añadir DRM</strong> ni ningún tipo de protección digital al archivo PDF del libro. Muchos me decían que estaba loco y que me iban a piratear el libro desde el primer día. Lo cierto es que decidí suponer que mis lectores eran adultos responsables en vez de ladrones sinvergüenzas &#8230; y acerté.</li>
<li><strong>Actualizaciones gratis</strong>. Cuando compras el libro, tienes derecho a recibir gratis actualizaciones, tanto correcciones de errores como nuevos contenidos. Esta es una de las cosas que más ha gustado a los lectores y creo que debería ser obligatorio en todos los libros electrónicos, ya que el coste de distribuir la actualización es casi cero.</li>
<li><strong>El momento adecuado</strong>. Aunque quería haber publicado el libro antes, creo que el momento escogido fue el más adecuado. Primero porque fue justo antes de Navidad, cuando la gente está más dispuesta a gastar dinero. Segundo, cuando Symfony2 ya había ganado mucha tracción en el mercado hispano (y mundial). Y tercero, porque todavía no existía ningún otro libro sobre Symfony2 en ningún idioma (por lo que se, este sigue siendo el único libro de Symfony2 que se ha publicado en el mundo).</li>
<li><strong>No publicarlo en ninguna App Store ni en Amazon</strong>. Se que es muy cómodo coger el iPad, pulsar dos iconos y comprar el libro a través de la App Store. El problema es que así Apple se queda con el 30% de mi dinero y encima soy yo el que tengo que trabajar para Apple adaptando el libro a su tienda y sus normas. Si no dispusiera de una comunidad como symfony.es, me sería muy difícil llegar a la gente y sí que tendría que pasar por el aro de Google, Apple y Amazon.</li>
<li><strong>No prometer lo que no puedes dar</strong>. Cuando anuncié que iba a publicarlo sólo en digital, mucha gente me pidió que lo publicara como e-book, no como PDF. Hice muchas pruebas y el resultado fue bastante decepcionante. Así que decidí no prometer la versión e-book, ya que no sabía si la podría hacer. Más adelante en este mismo artículo hablo de <strong>easybook</strong>, una aplicación con la que esto podría cambiar pronto.</li>
<li><strong>Gratis, pero útil</strong>. Como es habitual, ofrezco <a href="http://issuu.com/javier.eguiluz/docs/libro-symfony2-apendice-twig?mode=window&#038;backgroundColor=%23222222">gratis un capítulo del libro</a> como prueba antes de comprarlo. Como se trata de un libro <em>guionizado</em>, es difícil entender un capítulo extraído al azar. Así que publiqué un apéndice entero, que se puede entender por sí sólo. Además se trata de uno de los mejores contenidos del libro, así que incluso a los que no compren el libro les puede ser útil.</li>
<li><strong>Aplicación de regalo</strong>. El libro explica Symfony2 mientras se desarrolla entera una aplicación de ejemplo. El <a href="https://github.com/javiereguiluz/Cupon">código fuente de esta aplicación</a> lo publiqué como software libre. Esto hace que la gente pueda ver la aplicación, jugar con ella y se interese por el libro que explica cómo está construida. También me ayuda a que la gente descubra errores y me ayude a solucionarlos.</li>
</ul>
<h3>Los errores</h3>
<p>Los errores más graves han tenido relación con el pago de los libros, tal y como explico con detalle más adelante. El error más evidente fue el propio precio del libro, que es igual para todos los países del mundo. Se que 10 euros no es mucho dinero en Europa, pero en algunos países de América Latina sí que supone un desembolso importante.</p>
<p>Otro error a solucionar para la próxima vez es la necesidad de ofrecer varias alternativas de pago, ya que es <em>imposible</em> que una solución funcione en todos los países y en todos los casos.</p>
<p>La distribución de los libros ha funcionado bien en casi todos los casos, pero existen circunstancias difíciles de controlar y que afectan gravemente al servicio que ofreces a tus lectores. Al planificar el proceso de compra, es muy fácil trazar sobre el papel una flecha indicando que el libro se envía al comprador por email después de la compra.</p>
<p>La realidad es que el email no siempre es un camino directo al comprador. En algunos casos, el email con el libro iba directamente a la carpeta de <em>Spam</em>. En otros casos, alguna regla o filtro hacía que el libro se guardase en una carpeta extraña, en vez de en la bandeja de entrada. Otras veces el comprador escribe mal su email sin querer y el libro no le llega.</p>
<p>Lo peor que me pasó es que alguien se equivocó en su email (escribió <code>@hotmai.com</code> en vez de <code>@hotmail.com</code>) y cuando me reclamó que el libro no le llegaba, su email se guardó en mi carpeta <em>Spam</em>. Así que pagó por mi libro, no recibió nada y sus emails de queja no recibían respuesta. Afortunadamente todo se puedo aclarar después.</p>
<p>Por último, otro error ha sido no estimar la cantidad de trabajo de soporte al usuario que supone la publicación del libro. Cada vez que me llega un email con dudas, problemas o sugerencias, tengo que probar lo que me dicen, pensar en posibles consecuencias que pueda ocasionar el cambio en otras partes de la aplicación y actualizar el libro. Este es un proceso que lleva muchísimo tiempo y hace que no responda a vuestros emails tan rápido como debería (pero prometo que os respondo a todos, aunque sea lento).</p>
<h3>La comunidad</h3>
<p>Lo mejor de la experiencia de la auto-publicación ha sido la comunidad de usuarios. Desde hace mucho tiempo soy consciente de que entre mis seguidores hay una desproporcionada cantidad de gente buena. Ahora he podido confirmarlo hasta límites increíbles.</p>
<p>En primer lugar, he recibido un montón de emails de agradecimiento. ¡Me compran el libro y son ellos los que me dan las gracias! ¿Qué puedo decir?</p>
<p>En segundo lugar, he recibido decenas y decenas de emails con correcciones de fallos y con sugerencias para mejorar el libro. ¡Me compran el libro y encima me dicen cómo mejorarlo! ¿Qué puedo decir?</p>
<p>Para no extenderme mucho, voy a copiar a continuación un extracto del mensaje que me envió un lector (he eliminado la información identificativa, pero él sabe quién es). Este ejemplo va especialmente dedicado a la SGAE y a toda esa basura que piensan que en Internet sólo hay ladrones:</p>
<p><em>Estoy siguiendo tu libro de symfony2, me lo ha dejado un compañero en su versión digital [...] Por ello, me interesa mucho ayudarte en éste proyecto y comprar tu versión digital [...] El problema que tengo es que lo he intentado ya 3 veces con varias tarjetas de crédito y paypal me dice que no es posible realizar la compra, no lo entiendo. Te agradecería que me dieras algún que otro método alternativo, transferencia o demás y así poder formalizar mi compra.</em></p>
<p>La primera parte de su mensaje parece muy negativa: ¡ha pirateado mi libro! ¡lo está leyendo sin pagar! Pero cuando sigues leyendo, comprendes que la razón es que este lector no se conformó con el capítulo de prueba gratuito y prefirió hojear el libro entero antes de decidir si merecía la pena comprarlo. Después, no sólo dijo que lo compraba, sino que lo compró. Y probó con una tarjeta de crédito, después con otra e incluso con una tercera. ¿Y que hizo cuando no funcionó ninguna? Escribir al autor y decirle: <em>quiero pagarte por el libro, pero no me dejan. ¿qué puedo hacer?</em>.</p>
<p>Lo voy a decir otra vez a ver si se enteran: ¡no todos son piratas! ¡no todos roban! ¡la gente paga si creen que merece la pena! ¡pónselo fácil para no piratear! (por ejemplo con precios razonables y actualizaciones incluidas).</p>
<p>Lamentablemente no puedo expresar con palabras mi gratitud con vosotros tal y como la siento. Así que espero que el próximo 15 y 16 de junio nos veamos en la conferencia deSymfony y pueda daros las gracias en persona a la mayoría.</p>
<h3>Cobrando los libros</h3>
<p>El libro sobre Symfony2 no es libre, por lo que la gente que quiere leerlo debe pagar 10 euros. La elección de la pasarela de pago para vender el libro fue muy sencilla: <strong>PayPal</strong>. A pesar de las furibundas críticas y malas experiencias de algunos usuarios que se pueden leer en Internet, lo cierto es que es un servicio que funciona muy bien para la mayoría de sus más de 100 millones de clientes.</p>
<p>Por lo que he investigado, PayPal es con mucha diferencia el servicio de pago más completo que existe. Se trata del único que funciona en casi todos los países, con casi todos los bancos, con casi todas las tarjetas y con un montón de divisas. Este es el gran punto fuerte de PayPal: abres una cuenta y al instante puedes vender de verdad en casi todos los países del mundo. Si conoces algo igual o mejor, por favor dímelo en los comentarios de este artículo.</p>
<h4>La parte técnica</h4>
<p>La documentación técnica del sitio web de PayPal da asco, tanto en español como en inglés. Yo no sabía nada sobre la parte técnica de PayPal y después de leer su documentación, sabía todavía menos. Mi consejo: si eres programador, lee este artículo <em><a href="http://www.geekality.net/2011/05/28/php-tutorial-paypal-instant-payment-notification-ipn/">PayPal Instant Payment Notification</a></em>; si no eres programador, contrata a un programador para que te lo haga.</p>
<p>Básicamente, el funcionamiento de PayPal para vender productos digitales es el siguiente:</p>
<ol>
<li>Entras en la página de PayPal y creas un botón para vender tu producto (aquí pones el precio y si las hay, otras características del producto)</li>
<li>Programas un script sencillo en PHP y lo guardas en algún lugar secreto, pero accesible desde el exterior, de tu servidor (el artículo que mencionaba antes te lo explica muy bien)</li>
<li>En tu cuenta de PayPal indicas la dirección (URL) de este script secreto</li>
<li>Cada vez que alguien pulse el botón y compre tu producto, PayPal cobra el producto al usuario y hace una llamada a ese script, pasándole todos los datos de la compra y del comprador. Esto es lo que se llama IPN o <em>Instant Payment Notification</em></li>
<li>Tu script comprueba los datos de la compra (normalmente sólo se comprueba que el dinero que ha pagado el comprador es suficiente)</li>
<li>Si todo está bien, envías el libro PDF vía email o creas una contraseña para que el usuario pueda acceder al contenido en algún sitio. Si hay algún problema, desde ese mismo script te puedes enviar un email avisando del problema y así consultas los detalles en la web de PayPal</li>
</ol>
<p>Antes de vender este libro, yo no sabía nada de los detalles técnicos de PayPal. Así que te animo a que lo pruebes porque es muy sencillo: la clave se llama IPN (<em>Instant Payment Notification</em>).</p>
<h4>Límite de ingresos</h4>
<p>Las leyes de diversos gobiernos obligan a PayPal a imponer un límite inicial de 2.500 euros como cantidad máxima que puedes ingresar por la venta de tus productos. Si crees que vas a ingresar más dinero, debes iniciar un proceso de verificación exhaustiva de tu cuenta para que te quiten ese límite.</p>
<p>El proceso es sencillo pero lleva unas dos semanas, así que tienes que empezarlo mucho antes de que te acerques al límite. En mi caso, el proceso consistió en vincular una cuenta bancaria y enviarles escaneado el DNI y una factura de teléfono que demuestre mi dirección postal (también sirven facturas de la luz, del gas, etc.).</p>
<p>Como me estaba acercando al límite y PayPal no respondía vía email, decidí llamarles por teléfono. El trato fue excelente y me levantaron el límite en la misma llamada. Así que te recomiendo que les llames para meterles prisa unos días después de entregar toda la documentación.</p>
<h4>Comisiones</h4>
<p>Cuando vendes un producto en PayPal, por defecto no está activada la conversión automática de divisas. Yo activé esta conversión porque prefería tener todos mis ingresos en euros en vez de varias divisas. La comisión que cobra PayPal cuando vendo un libro a un comprador que paga en euros son 69 céntimos. Cuando el comprador paga en cualquier otra divisa, PayPal sube la comisión hasta los 84 céntimos.</p>
<h4>Fraudes y problemas</h4>
<p>El problema más habitual que he tenido con el pago a través de PayPal es que algunos usuarios tienen asociada una cuenta de correo electrónico que ya no usan o no es su cuenta personal. Como el libro se envía automáticamente al email asociado a PayPal, esto es algo importante a considerar. La solución siempre es la misma: el usuario me dice que no le ha llegado nada, descubrimos que la culpa es su email y le vuelvo a enviar el libro a mano a la dirección que me indica.</p>
<p>Al margen de las cuentas de email erróneas, solamente en dos ocasiones el pago con PayPal no ha sido exitoso. En ambos casos me llegó un email de PayPal diciendo que la transacción era sospechosa o que el comprador había dicho que el no lo había comprado. Lo que hace PayPal en estos casos es quitarte tu dinero, devolvérselo al comprador e iniciar un proceso de resolución de disputas. En ese período puedes aportar a PayPal pruebas de que has entregado el producto al comprador, como por ejemplo los emails que has intercambiado con el comprador.</p>
<p>En mi caso, los dos compradores fueron muy amables y comprensivos. Ninguno de los dos había hecho nada raro y querían pagar como fuera a cambio de recibir el libro. Sin embargo, en un caso PayPal decidió que el comprador tenía razón y no me devolvió el dinero. En el otro caso me dio la razón a mi. No obstante, al final en los dos casos obtuve el dinero gracias a la buena disposición de los compradores.</p>
<p>Por último, otros problemas ocasionados por PayPal han sido los siguientes: en Paraguay no existe PayPal; muchas personas en América Latina no tienen tarjeta de crédito; algunas tarjetas de América Latina no funcionan con PayPal; algunas personas no quieren usar PayPal y prefieren las transferencias bancarias. Otro <em>problema</em> que merece mención aparte es Cuba.</p>
<h3>Cuba</h3>
<p>Desde que puse a la venta el libro he recibido decenas de emails de ciudadanos cubanos. Todos los emails se resumen en: <em>&#8220;Me gustaría leer el libro. No tengo ninguna posibilidad de pagar vía Internet. ¿Puedo conseguirlo de alguna forma?&#8221;</em>.</p>
<p>Soy consciente de que la población no es culpable de los desencuentros entre los gobiernos de Cuba y EE.UU. pero no me parece correcto regalar el libro a cualquier ciudadano cubano que lo solicite. Primero porque sería injusto para los demás usuarios y segundo, porque casi todos ellos me han dicho que quieren pagar pero no pueden hacerlo.</p>
<p>Este es un asunto que todavía no he resuelto, pero sobre el que pienso mucho y tengo algunas propuestas. Si se te ocurre alguna idea buena para todas las partes, por favor indícalo en los comentarios de este post.</p>
<h3>Las sorpresas</h3>
<p>Lo bueno de hacer cosas a través de Internet es que nunca sabes lo que puede pasar. Y casi todo lo que pasa son cosas buenas. Mis previsiones iniciales eran vender 300 copias durante toda la vida del libro. Y esto ya me parecía un objetivo difícil de conseguir, por tratarse de un libro técnico, orientado a un nicho pequeño y escrito en español. Haber vendido el doble y en sólo dos meses, ha sido la mayor sorpresa de esta aventura de la auto-publicación.</p>
<p>Otra sorpresa muy positiva ha sido que varios programadores extranjeros han comprado el libro, incluyendo ciudadanos franceses, italianos, portugueses y americanos de EE.UU. Además, he recibido decenas de peticiones para traducir el libro al inglés. Siempre he dicho que no, por el gran volumen de trabajo que supondría. Quizás esto cambie, ya que en los últimos días he recibido una propuesta muy interesante.</p>
<h3>Subproductos</h3>
<p>En el ámbito de la tecnología, es muy habitual que surjan subproductos o <em>by-products</em> a partir del desarrollo del producto o servicio principal de la empresa. En mi caso, publicar el libro me obligó a mejorar la herramienta que utilizo para publicar libros, llamada <code>easybook</code> (el nombre es un homenaje a todas las horas que me hizo sufrir <code>DocBook</code>, la aplicación que utilizaba al principio).</p>
<p>Después de hablar con algunos programadores que también han publicado libros técnicos y que no encontraron ninguna herramienta decente para hacerlo, decidí lanzar públicamente el proyecto <a href="http://easybook-project.org/">easybook</a>. Ahora es una aplicación mucho más completa, más rápida y permite generar e-books en formato <code>.epub</code>.</p>
<p>Aunque sólo tiene dos semanas de vida, ya tiene más de 100 <em>watchers</em> en github, ha sido portada en Hacker News y pronto se publicará un artículo sobre ella en una prestigiosa revista internacional de software libre. Como decía antes, cuando haces cosas en Internet, suelen pasar muchas cosas y casi todas buenas.</p>
<h3>En resumen</h3>
<ul>
<li>Vender productos digitales a través de Internet es muy fácil. La mejor forma de hacerlo es con PayPal.</li>
<li>La auto-publicación permite al autor quedarse con el 93% de sus ventas, frente al 10% habitual que pagan las grandes editoriales.</li>
<li>No tiene sentido publicar libros técnicos en papel.</li>
<li>Crear una comunidad de usuarios te facilita mucho las cosas. Nadie te la va a crear por tí, así que puedes empezar a crearla hoy mismo.</li>
<li>No puedes acabar con la piratería digital, pero la mayoría de gente no es pirata.</li>
<li>La gente que me sigue a través de symfony.es es excepcionalmente buena.</li>
<li>Cuando haces cosas en Internet, suelen pasar muchas cosas y casi todas buenas.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.symfony.es/2012/02/27/desarrollo-web-agil-con-symfony2-dos-meses-despues/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Se publica la actualización de seguridad Symfony 2.0.11</title>
		<link>http://www.symfony.es/2012/02/25/se-publica-la-actualizacion-de-seguridad-symfony-2-0-11/</link>
		<comments>http://www.symfony.es/2012/02/25/se-publica-la-actualizacion-de-seguridad-symfony-2-0-11/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 09:21:31 +0000</pubDate>
		<dc:creator>Javier Eguiluz</dc:creator>
				<category><![CDATA[seguridad]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://www.symfony.es/?p=2064</guid>
		<description><![CDATA[Se acaba de publicar Symfony 2.0.11, una actualización no planeada que soluciona un grave error de seguridad. Este fallo sólo afecta a ... <a href="http://www.symfony.es/2012/02/25/se-publica-la-actualizacion-de-seguridad-symfony-2-0-11/">seguir leyendo</a>]]></description>
			<content:encoded><![CDATA[<p>Se acaba de publicar <strong>Symfony 2.0.11</strong>, una actualización no planeada que <strong>soluciona un grave error de seguridad</strong>. Este fallo sólo afecta a las aplicaciones que utilizan el componente Serializer.</p>
<p>Concretamente, el error es debido a que el componente XMLEncoder no desactiva las entidades externas cuando procesa los archivos XML. Aprovechando esta vulnerabilidad, es posible acceder a los contenidos de cualquier archivo del servidor. En el post oficial puedes ver un <a href="http://symfony.com/blog/security-release-symfony-2-0-11-released">ejemplo de cómo aprovechar la vulnerabilidad</a>.</p>
<p>Si utilizas el serializador de Symfony2, <strong>debes actualizar tu versión de Symfony2 urgentemente</strong>. Para ello, actualiza primero tus archivos <code>deps</code> y <code>deps.lock</code> por los siguientes:</p>
<ul>
<li><a href="https://raw.github.com/symfony/symfony-standard/v2.0.11/deps">Archivo deps de Symfony 2.0.11</a></li>
<li><a href="https://raw.github.com/symfony/symfony-standard/v2.0.11/deps.lock">Archivo deps.lock de Symfony 2.0.11</a></li>
</ul>
<p>Y después ejecuta el siguiente comando para descargar los cambios:</p>
<pre>$ php bin/vendors install</pre>
<p>Por último, si al ejecutar después la aplicación se muestra algún error, vuelve a borrar la cache manualmente:</p>
<pre>$ php app/console cache:clear</pre>
<p>Si no puedes actualizar ahora mismo todo Symfony2, al menos aplica a mano este parche de código para solucionar el problema: <em><a href="https://github.com/symfony/symfony/commit/3e64d36cbdc34acaa82e0e6318112cd2eacb6fec">[Serializer] Fix XML decoding attack vector through external entities</a></em></p>
<p>Fuente: <a href="http://symfony.com/blog/security-release-symfony-2-0-11-released">Security Release: Symfony 2.0.11 released</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.symfony.es/2012/02/25/se-publica-la-actualizacion-de-seguridad-symfony-2-0-11/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Desarrollo rápido de aplicaciones con Symfony2</title>
		<link>http://www.symfony.es/2012/02/23/desarrollo-rapido-de-aplicaciones-con-symfony2/</link>
		<comments>http://www.symfony.es/2012/02/23/desarrollo-rapido-de-aplicaciones-con-symfony2/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 11:46:26 +0000</pubDate>
		<dc:creator>Javier Eguiluz</dc:creator>
				<category><![CDATA[bundles]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://www.symfony.es/?p=2044</guid>
		<description><![CDATA[Symfony2 es un framework que ya incluye varias técnicas para acelerar el desarrollo de tus aplicaciones: existen multitud de comandos de consola ... <a href="http://www.symfony.es/2012/02/23/desarrollo-rapido-de-aplicaciones-con-symfony2/">seguir leyendo</a>]]></description>
			<content:encoded><![CDATA[<p>Symfony2 es un framework que ya incluye varias técnicas para acelerar el desarrollo de tus aplicaciones: existen multitud de comandos de consola para generar clases y código PHP, toda la configuración de la aplicación se puede realizar con archivos YAML en vez de XML, soporta anotaciones para definir toda la configuración de la aplicación en las propias clases PHP en vez de en archivos de configuración externos, etc.</p>
<p>Como todo es mejorable, los programadores de la empresa <a href="http://knplabs.com/">Knp Labs</a> han pensado que Symfony2 podría ser todavía más orientado a RAD (<em>rapid application development</em>). Para ello han creado el bundle <a href="https://github.com/KnpLabs/KnpRadBundle">KnpRadBundle</a>.</p>
<p>Entre otras características, KnpRadBundle añade un kernel propio a tu proyecto Symfony2 que se carga automáticamente. Así que por ejemplo, el <code>AppKernel.php</code> original de Symfony2 se sustituye por un sencillo archivo de configuración YAML:</p>
<pre># config/kernel.yml
project: KnpRad
all:
    bundles:
        - Symfony\Bundle\FrameworkBundle\FrameworkBundle
        - Symfony\Bundle\SecurityBundle\SecurityBundle
        - Symfony\Bundle\TwigBundle\TwigBundle
        - Symfony\Bundle\MonologBundle\MonologBundle
        - Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle
        - Symfony\Bundle\AsseticBundle\AsseticBundle
        - Symfony\Bundle\DoctrineBundle\DoctrineBundle
        - Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle

    parameters:
        locale:  en
        secret:  ThisTokenIsNotSoSecretChangeIt
        ...
dev:
    bundles:
        - Symfony\Bundle\WebProfilerBundle\WebProfilerBundle
test:
    bundles:
        - Symfony\Bundle\WebProfilerBundle\WebProfilerBundle</pre>
<p>El otro cambio más significativo es una estructura de archivos y directorios muy simplificada respecto a la de Symfony2 (desaparece por ejemplo la carpeta <code>Resources/</code>):</p>
<p><a href="http://www.symfony.es/wp-content/uploads/2012/02/knp-rad-bundle-estructura.png"><img src="http://www.symfony.es/wp-content/uploads/2012/02/knp-rad-bundle-estructura.png" alt="" title="knp-rad-bundle-estructura" width="800" height="680" class="aligncenter size-full wp-image-2045" /></a></p>
<p>Además, cada bundle dispone de su propio archivo de configuración YAML y el controlador base ha sido ampliado para que contenga muchos más atajos y métodos útiles.</p>
<p>En el sitio web <a href="http://rad.knplabs.com/">rad.knplabs.com</a> tienes toda la información detallada sobre los cambios/mejoras que propone el bundle.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.symfony.es/2012/02/23/desarrollo-rapido-de-aplicaciones-con-symfony2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

