<?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>Los Tiempos Cambian</title>
	<atom:link href="http://www.lostiemposcambian.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lostiemposcambian.com/blog</link>
	<description>tech blog by nitsnets &#124; studios</description>
	<lastBuildDate>Wed, 16 Nov 2011 19:24:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Enviar emails con formato HTML y texto plano en PHP</title>
		<link>http://www.lostiemposcambian.com/blog/php/enviar-emails-con-formato-html-y-texto-plano-en-php/</link>
		<comments>http://www.lostiemposcambian.com/blog/php/enviar-emails-con-formato-html-y-texto-plano-en-php/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 07:16:37 +0000</pubDate>
		<dc:creator>pere</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[email]]></category>

		<guid isPermaLink="false">http://www.lostiemposcambian.com/blog/?p=3245</guid>
		<description><![CDATA[<a href="http://www.lostiemposcambian.com/blog/php/enviar-emails-con-formato-html-y-texto-plano-php/"><img class="alignnone size-full wp-image-452 border" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/enivar-emails-HTML-texto-plano-php.jpg" alt="enviar emails formato html texto plano php" width="539" height="193" /></a>

A pesar de los tiempos que corren, muchas veces nos encontramos con  gestores/servidores de correo que no interpretan bien los correos en  formato <strong>HTML </strong>o directamente no lo interpretan, estos servidores suelen  tratarse de algunos gestores de correos de nuestros hostings (webmail) o  algunos especiales para utilizarlos con nuestros móviles o simplemente  hotm*** :P .

Bueno esto tiene fácil solución (pensamos) se envía en texto plano y  listo, pero al ver con que cara vas a tu <strong>diseñador/maquetador</strong> que se ha  currado una plantilla para enviar tanto correos corporativos cómo de  marketing y le dices que vas a pasar de su diseño... para evitar que nos  coman vamos a intentar dejar a todo el mundo contento.]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-452 border" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/enivar-emails-HTML-texto-plano-php.jpg" alt="enviar emails formato html texto plano php" width="539" height="193" /></p>
<p>A pesar de los tiempos que corren, muchas veces nos encontramos con  gestores/servidores de correo que no interpretan bien los correos en  formato <strong>HTML </strong>o directamente no lo interpretan, estos servidores suelen  tratarse de algunos gestores de correos de nuestros hostings (webmail) o  algunos especiales para utilizarlos con nuestros móviles o simplemente  hotm*** <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  .</p>
<p>Bueno esto tiene fácil solución (pensamos) se envía en texto plano y  listo, pero a ver con que cara vas a tu <strong>diseñador/maquetador</strong> que se ha  currado una plantilla para enviar tanto correos corporativos cómo de  marketing y le dices que vas a pasar de su diseño&#8230; para evitar que nos  coman vamos a intentar dejar a todo el mundo contento.</p>
<p><strong>¿Y cómo lo conseguimos?</strong></p>
<p><span style="color: #008998"><strong>Solución <em>a mano</em>: mail en PHP</strong></span><br />
<strong>Pues enviamos los dos formatos</strong>, el del cuerpo con HTML y el del  cuerpo con sólo el texto plano,<em> EH! </em>pero esperad <em>no vamos a enviar dos  e-mails!!</em>, que <strong>decida el Servidor que correo mandar según a que persona</strong>.</p>
<p>Vamos a ver cómo lo haríamos con este pequeño ejemplo:</p>
<pre class="brush: php; title: ; notranslate">
//creamos un identificador único
//para indicar que las partes son idénticas
$uniqueid= uniqid('np');

//indicamos las cabeceras del correo
$headers = &quot;MIME-Version: 1.0\r\n&quot;;
$headers .= &quot;From: Foo \r\n&quot;;
$headers .= &quot;Subject: Test mail\r\n&quot;;
//lo importante es indicarle que el Content-Type
//es multipart/alternative para indicarle que existirá
//un contenido alternativo
$headers .= &quot;Content-Type: multipart/alternative;boundary=&quot; . $uniqueid. &quot;\r\n&quot;;

$message = &quot;&quot;;

$message .= &quot;\r\n\r\n--&quot; . $uniqueid. &quot;\r\n&quot;;
$message .= &quot;Content-type: text/plain;charset=utf-8\r\n\r\n&quot;;
$message .= &quot;E-mail en Texto Plano sin formato.&quot;;

$message .= &quot;\r\n\r\n--&quot; . $uniqueid. &quot;\r\n&quot;;
$message .= &quot;Content-type: text/html;charset=utf-8\r\n\r\n&quot;;
$message .= &quot;E-mail con &lt;b&gt;HTML&lt;/b&gt;.&quot;;

$message .= &quot;\r\n\r\n--&quot; . $uniqueid. &quot;--&quot;;

//con la función mail de PHP enviamos el mail.
mail('ejemplo@ejemplo.com', 'correo para todos', $message, $headers);
</pre>
<p>Cómo vemos todo va relacionado con que le indicamos a la cabecera del  e-mail de que su <strong>Content-Type</strong> tiene contenido alternativo,  indicándoselo con <em>multipart/alternative</em>, de este modo <strong>mandaremos un correo en ambos formatos</strong> y según si el correo al que es enviado soporta  HTML verá la versión HTML y en el caso de que no lo admita vera el  contenido alternativo y todos contentos.</p>
<p>En el ejemplo si os  fijáis la codificación esta en <strong>utf-8</strong> pero no es obligatorio para este funcionamiento.</p>
<pre class="brush: php; title: ; notranslate">
$message .= &quot;Content-type: text/html;charset=ISO-8859-1\r\n\r\n&quot;
</pre>
<p>Todo  lo que hemos explicado es para realizarlo a &#8220;mano&#8221; con la función mail  de PHP pero si somos de esos que preferimos que nos lo den todo hecho en la mayoría de las librerías más utilizadas viene implementado.</p>
<p><span style="color: #008998"><strong>Con PHPMailer</strong></span><br />
En el  caso de <a title="phpmailer" href="http://phpmailer.worxware.com/index.php" target="_blank">PHPMailer</a> tenemos la variable <em>&#8220;altBody&#8221;</em> que hace el papel de  contenido alternativo que internamente si esta tiene valor monta lo que hemos hablado antes.</p>
<pre class="brush: php; title: ; notranslate">
$mail = new PHPMailer();

$mail-&gt;Body = &quot;Hola &lt;b&gt;HTML&lt;/b&gt;&quot;;
$mail-&gt;AltBody = &quot;Hola TEXTOPLANO&quot;;
</pre>
<p><span style="color: #008998"><strong>Con Codeigniter y su librería email</strong></span><br />
Y si trabajamos con la librería <a title="librería email codeigniter" href="http://codeigniter.com/user_guide/libraries/email.html" target="_blank">Email de Codeigniter</a> tenemos la función <em>set_alt_message()</em> que al igual que en PHPMailer ya se encarga de montar las cabeceras correspondientes.</p>
<pre class="brush: php; title: ; notranslate">
$this-&gt;email-&gt;set_alt_message('Mensaje alternativo');
</pre>
<p>Espero que os sirva de ayuda este pequeño <strong>TIP<strong> <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </strong></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lostiemposcambian.com/blog/php/enviar-emails-con-formato-html-y-texto-plano-en-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subflash 2011. Dia 3</title>
		<link>http://www.lostiemposcambian.com/blog/sublash-2011/subflash-2011-santa-susanna-dia-3/</link>
		<comments>http://www.lostiemposcambian.com/blog/sublash-2011/subflash-2011-santa-susanna-dia-3/#comments</comments>
		<pubDate>Sat, 17 Sep 2011 09:49:22 +0000</pubDate>
		<dc:creator>elad</dc:creator>
				<category><![CDATA[sublash 2011]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[nitsnets]]></category>
		<category><![CDATA[subflash]]></category>
		<category><![CDATA[subflash2011]]></category>

		<guid isPermaLink="false">http://www.lostiemposcambian.com/blog/?p=3296</guid>
		<description><![CDATA[<a href="http://www.lostiemposcambian.com/blog/sublash-2011/subflash-2011-santa-susanna-dia-3/"><img class="alignnone size-full wp-image-452 border" title="santa susanna subflash 2011 foto oficial (c) Francisco Moreno" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/subflash2011-foto-oficial-franciscomoreno.jpg" alt="santa susanna subflash 2011 foto oficial (c) Francisco Moreno" width="539" height="236" /></a>

Y finalizó <b>Subflash 2011</b>. Nos levantamos a pesar del frío cogido la noche anterior y con un poco de resaquilla. Pero aún nos quedaba un gran día por delante y dos buenas conferencias por ver.

Tengo que admitir que este fue el Subflash que más rápido me pasó, casi ni me enteré. Pero tengo una buena noticia que deciros, queda un día menos para <b>subflash 2012</b>.
]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-452 border" title="santa susanna subflash 2011 foto oficial (c) Francisco Moreno" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/subflash2011-foto-oficial-franciscomoreno.jpg" alt="santa susanna subflash 2011 foto oficial (c) Francisco Moreno" width="539" height="236" /></p>
<p>Y finalizó <b>Subflash 2011</b>. Nos levantamos a pesar del frío cogido la noche anterior y con un poco de resaquilla. Pero aún nos quedaba un gran día por delante y dos buenas conferencias por ver.</p>
<p>Tengo que admitir que este fue el Subflash que más rápido me pasó, casi ni me enteré. Pero tengo una buena noticia que deciros, queda un día menos para <b>subflash 2012</b>.</p>
<p><h3><span style="color: #008998;">SBF04. Automatizaciones y datos variables con Photoshop</span></h3>
<p><img class="alignnone size-full wp-image-452 border" title="subflash2011 automatizacion photoshop ignacio lledo" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/subflash2011-automatizacion-photoshop-ignacio-lledo.jpg" alt="subflash2011 automatizacion photoshop ignacio lledo" width="539" height="277" /></p>
<p><a href="http://www.twitter.com/ignaciolledo" target="_blank">Ignacio Lledó</a> nos sorprendió con una magnífica conferencia sobre Photoshop y como automatizar proyectos. Recomendable 100% para todos los diseñadores, fotógrafos y demás que utilizan Photoshop.</p>
<p>¡Ay la de horas que nos va ahorrar en nuestro equipo de diseño gráfico!<br />
<b>¡Gracias Ignacio!</b></p>
<p>Además <a href="http://www.naranjara.com/" target="_blank">Ignacio Lledó</a> cuenta con unos maravillosos cursos de retoque fotográfico los cuales son muy muy recomendables en <a href="http://www.video2brain.com/es/trainer-16.htm" target="_blank">video2brain</a>. Incluso a los conferenciantes nos obsequiaron con uno de estos cursos los cuales repartimos entre los asistentes por meritocracia <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><em>Andrés Karp sería genial tener los videos de estas dos confes también XD</em>
</p>
<p><h3><span style="color: #008998;">SBF05. HTML5 y CSS3 para móvil</span></h3>
<p><img class="alignnone size-full wp-image-452 border" title="subflash2011 html5 css3 mobile htmlboy javier usobiaga" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/subflash2011-html5-css3-mobile-htmlboy-javier-usobiaga.jpg" alt="subflash2011 html5 css3 mobile htmlboy javier usobiaga" width="539" height="277" /></p>
<p><a href="http://www.twitter.com/htmlboy" target="_blank">Javier Usobiaga</a>, de <a href="http://swwweet.com/" target="_blank">Swwweet</a> conocido por ser el mítico <b>htmlboy</b> nos explicó como utilizar HTML5 y CSS3 para el desarrollo en mobile. Una introducción muy útil con trucos, librerías a utilizar, efectos, las mejoras de HTML5.</p>
<p>Fue curioso como destacó las posibles soluciones a tener en cuenta cuando te propones adaptar una web a mobile:</p>
<ul>
<li>no hacer nada
<li>un sitio específico para mobile con sus problemas de link sharing, ¿qué pasa con los tablets? ¿un sitio para cada dispositivo?
<li><b>responsive web design!</b> oooohhh yeah!
</ul>
<p>Aquí tenemos su presentación:<br />
<iframe src="http://www.slideshare.net/slideshow/embed_code/9129428" width="539" height="450" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p>Nos recomendó un espectacular libro: <a href="http://www.abookapart.com/products/responsive-web-design" target="_blank">Responsive Web Design</a> de <em>Ethan Marcotte</em><br />
<b>¡Gracias Javi!</b></p>
<p>En mi caso me quedé con las ganas de compartir algún momento más con Javier.</p>
<p>De paso preguntarle algo que me intriga: <i>¿existe htmlgirl? ¿lucharán contra los malvados flasheros? (valeeeee el chiste es malísimo pero es que el nick me encanta y me recuerda a esos maravillosos superhéroes de la marvel)</i>
</p>
<p><h3><span style="color: #008998;">¡ Y los ansiados regalos!</span></h3>
<p><img class="alignnone size-full wp-image-452 border" title="subflash 2011 camisetas diseño skeku" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/subflash2011-camisetas-disenyo-criterion.jpg" alt="subflash 2011 camisetas diseño skeku" width="539" height="293" /></p>
<p>Después de las conferencias llegó otra tradición más: <b>los regalos!</b> Es increíble como un evento tan pequeño (70 personas) tiene tanta repercusión y tantos <a href="http://ww.subflash.com/talleres/2011/php/sponsors.php" target="_blank">sponsors</a>. Se repartieron de nuevo más de 15.000 € en premios y muchos subflasheros están pensando venir con una furgoneta ya, porque cada año nos vamos más cargados <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<ul>
<li><a href="http://www.tecnoram.org" target="_blank">Andrés Cayon</a> del <em>Adobe User Group Dreamweaver Spain</em> que aporta nuevamente<strong> una licencia Adobe Web Premium CS5</strong>y encima esta vez no pudo asistir. <b>¡Gracias Andrés!</b></li>
<li><a href="http://www.blocketpc.com" target="_blank">BlocketPC</a> del <em>Adobe User Group Mobile Spain</em> dirigido por <a href="http://www.twitter.com/elecash" target="_blank">Raúl Jimenez</a> y <a href="http://www.twitter.com/qmarcos" target="_blank">Marcos Gonzalez</a> que aporta <strong>otra licencia Adobe Web Premium CS5</strong></li>
<li><a href="http://www.cdmon.com" target="_blank">CDMon</a> empresa de hosting que nos volvieron a regalar <strong>un plan de hosting profesional a cada uno de los asistentes. </strong>. CDMon también fue el encargado de buscar y encontrar la sede de este Subflash 2011. Una implicación muy grande y que es de agradecer. </li>
<li><a href="http://www.video2brain.com/es/" target="_blank">Video2Brain</a> que regaló una<strong> semana gratuita de acceso ilimitado de sus cursos de formación profesional</strong> a todos los asistentes de subflash. ¡Y un increíble descuento de <b>100 € para la suscripción anual</b>! </li>
<li><a href="http://idnworld.com/" target="_blank">IdN</a> con sus packs de revistas de diseño. </li>
<li><a href="http://www.indexbook.com/" target="_blank">Indexbook</a> que aportó un kit de libros para cada uno de los asistentes. <b>¡70 kits!</b> Con dos maravillosos libros: <a href="http://www.indexbook.com/libro.php?idLibro=652" target="_blank"> Logomondo</a> por Hitoshi Nagasawa y <a href="http://www.indexbook.com/libro.php?idLibro=851" target="_blank">Good: Ética en el diseño gráfico</a> por Lucienne Roberts +.<br />
Impresionante implicación gracias también al trabajo de <a href="http://www.twitter.com/skeku" target="_blank">Skeku</a>: <a href="http://www.criteriondg.info/wordpress" target="_blank">Criterion</a>.</p>
<li><a href="http://www.quadricula.com" target="_blank">Quadrícula</a>  y su necesaria ayuda a la <strong>organización del evento</strong></li>
<li>Agradecer de nuevo a <a href="http://www.twitter.com/qmarcos" target="_blank">Marcos</a> y <a href="http://www.q-interactiva.com" target="_blank">[Q] Interactiva</a> que hacen posible este evento año tras año, con la misma ilusión y que nos permite a todos disfrutar. <b>Gracias +1000.</b></li>
<li><a href="http://www.eyegraphic.net" target="_blank">Eyegraphic</a>. <a href="http://www.twitter.com/eyeclipse" target="_blank">Raúl Solano</a>, que tampoco pudo asistir, con la colaboración en el diseño de camisetas Subflash 2011</li>
<li>
Nosotros por nuestra parte seguimos estando<strong> orgullosos de participar como sponsors en subflash</strong> y esperamos seguir colaborando.</p>
<p>Un año más <a href="http://www.nitsnets.com" target="_blank">nitsnets | studios</a> aportamos la vestimenta oficial a todos los asistentes de subflash. Unas camisetas con un genial diseño de <a href="http://www.twitter.com/skeku" target="_blank">Armando</a> de <a href="http://www.criteriondg.info/wordpress" target="_blank">Criterion</a> y fabricadas gracias a la gestión de <a href="http://www.quadricula.com" target="_blank">Ramón Más &#8220;Sipi&#8221;</a>. Y este año con versión para chicas, y es que cada vez hay más chicas en el evento&#8230; buena señal <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />
</li>
</ul>
<p><img class="alignnone size-full wp-image-452 border" title="subflash 2011 camisetas roller" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/subflash2011-roller-camisetas-nitsnets.jpg" alt="subflash 2011 camisetas roller" width="539" height="454" /></p>
<p>Por otra parte tuvimos una suerte increíble. <b>¡¡¡Nos tocó uno de los premios grandes!!!</b> Una licencia <em>Adobe Web Premium CS5</em>. Le tocó a <b>Helena</b> y fue muy gracioso porque ante la expectación de todos me preguntaba: <em>&#8220;que he ganado? que he ganado?&#8221;</em> y yo le dije: <em>&#8220;la champions!!!!&#8221;</em> <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>La otra licencia fue para el nuevo <em>[Q]-employee</em> con lo cual ya empezaron las suspicacias habituales&#8230; y es que desde que en A Coruña se llevaron dos licencias y de vez en cuando sale uno que otro <em>undefined</em> ya nadie se fia jajajaja</p>
<p>Marcos me decía: <em>&#8220;que curioso después de tantos años sin que nos toque nada han tenido que venir dos nuevos integrantes en [Q] y nitsnets para que nos toque&#8221;</em>.<br />
Le contesté: <em>&#8220;un poco mal si huele sí, jajajaja, los nuevos y de parte de la organización&#8230; jajaja&#8221;</em> Pero así es el <b>random de Flash</b> <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Para finalizar nos hicimos la <b>imprescindible foto oficial</b> con el hotel de fondo. Un año más una foto para el recuerdo.</p>
<h3><span style="color: #008998;">La comunidad escribe sobre Subflash</span></h3>
<p>Si os habéis quedado con ganas de más os dejamos aquí varios enlaces que comentan como fue el evento y sus sensaciones:</p>
<ul>
<li><a href="http://www.criteriondg.info/wordpress/subflash-2011-despedida-y-cierre/" target="_blank">Subflash 2011 despedida y cierre en Criterion por Armando</li>
<li><a href="http://blog.video2brain.com/es/subflash-2011-video2brain-resumen-del-evento.htm" target="_blank">Subflash 2011 resumen del evento en el blog del video2brain por Guzmán</a></li>
<li><a href="http://www.martiniglesias.eu/digo/resumen-de-subflash-2011-gracias-totales/138" target="_blank">Resumen de Subflash 2011 gracias totales por Martín Iglesias</a></li>
<li><a href="http://www.adwe.es/adwe-global/428" target="_blank">Crónica de los Talleres de Verano de Subflash por la Asociación de Webmasters de España</a>
</li>
<li>
<a href="http://www.fcomoreno.net/blog/?p=1024" target="_blank">Gracias Subflash por Francisco Moreno</a>
</li>
</ul>
<p>Todo el seguimiento de <b>subflash 2011 en lostiemposcambian</b>: </p>
<ul>
<li><a href="http://www.lostiemposcambian.com/blog/sublash-2011/subflash-2011-santa-susanna-dia-1-y-2/">Subflash 2011 Santa Susanna: Día 1 y 2</a></li>
<li><a href="http://www.lostiemposcambian.com/blog/sublash-2011/subflash-2011-santa-susanna-dia-3/">Subflash 2011 Santa Susanna: Día 3</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lostiemposcambian.com/blog/sublash-2011/subflash-2011-santa-susanna-dia-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subflash 2011 Santa Susanna: Dia 1 y 2</title>
		<link>http://www.lostiemposcambian.com/blog/sublash-2011/subflash-2011-santa-susanna-dia-1-y-2/</link>
		<comments>http://www.lostiemposcambian.com/blog/sublash-2011/subflash-2011-santa-susanna-dia-1-y-2/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 22:29:28 +0000</pubDate>
		<dc:creator>elad</dc:creator>
				<category><![CDATA[sublash 2011]]></category>

		<guid isPermaLink="false">http://www.lostiemposcambian.com/blog/?p=3258</guid>
		<description><![CDATA[<a href="http://www.lostiemposcambian.com/blog/sublash-2011/subflash-2011-santa-susanna-dia-1-y-2/"><img class="alignnone size-full wp-image-452 border" title="santa susanna subflash 2011 logo" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/subflash2011.jpg" alt="santa susanna subflash 2011 logo" width="539" height="400" /></a>

<i>Viernes 2 de Septiembre de 2011:</i> ¡Un nuevo subflash; asistir un nuevo lujazo!

<b>Cumplimos un año de blog</b> y hacerlo coincidir con el <a href="http://www.subflash.com" target="_blank">Subflash</a> ha sido una genialidad porque así no se nos olvida nunca. Con muchos lectores y muy buenos feedbacks, <b>gracias a todos.</b>

Un año más hemos tenido el placer de poder asistir y participar en <b>el mejor evento del año</b>. Un evento en el cual  se disfruta y aprende, se rie y descubre, te orienta y te hace avanzar... Un evento donde se imparten unas conferencias tecnológicas muy útiles y un fin de semana viviendo en comuna entre grandes profesionales del mundo web en España. El Subflash 2011 es la <b>novena edición</b>, la quinta en mi particular caso (como pasa el tiempo...)

Si te lo perdiste y has estado alguna vez en el <a href="http://www.twitter.com/" target=_blank">#subflash</a> esperamos que este post te haga pensar que no puede volver a pasar; y si no lo conoces te replantees como es posible ;)]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-452 border" title="santa susanna subflash 2011 logo" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/subflash2011.jpg" alt="santa susanna subflash 2011 logo" width="539" height="400" /></p>
<p>
<i>Viernes 2 de Septiembre de 2011:</i> ¡Un <b>nuevo subflash</b>; asistir un nuevo lujazo!</p>
<p><b>Cumplimos un año de blog</b> y hacerlo coincidir con el <a href="http://www.subflash.com" target="_blank">Subflash</a> ha sido una genialidad porque así no se nos olvida nunca. Con muchos lectores y muy buenos feedbacks, <b>gracias a todos.</b></p>
<p>Un año más hemos tenido el placer de poder asistir y participar en <b>el mejor evento del año</b>. Un evento en el cual  se disfruta y aprende, se rie y descubre, te orienta y te hace avanzar&#8230; Un evento donde se imparten unas conferencias tecnológicas muy útiles y un fin de semana viviendo en comuna entre grandes profesionales del mundo web en España. El Subflash 2011 es la <b>novena edición</b>, la quinta en mi particular caso (como pasa el tiempo&#8230;)</p>
<p>Si te lo perdiste y has estado alguna vez en el <a href="http://twitter.com/#!/search?q=%23subflash" target=_blank">#subflash</a> esperamos que este post te haga pensar que no puede volver a pasar; y si no lo conoces te replantees como es posible <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />
</p>
<p><h3><span style="color: #008998;">Viaje Subflash 2011 Santa Susanna</span></h3>
<p>Este año por temas laborales (como no&#8230;) salimos demasiado tarde de Alicante pero con muchísima ilusión. De <a href="http://www.nitsnets.com" target="_blank"><b>nitsnets</b> | studios</a> repetimos el equipo del año pasado <a href="http://www.twitter.com/daniinebot" target="_blank">Dani</a>, <a href="http://www.twitter.com/websmonerris" target="_blank">Pere</a> y <a href="http://www.twitter.com/eladnts" target="_blank">yo</a>; con una grata novedad Helena o <i>@princesahelena</i> (que confusión más graciosa cuando la twitteamos así y no tiene twitter&#8230; liada <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )</p>
<p>A las 23:00 llegamos a <a href="http://maps.google.es/maps?q=Paseo+Mar%C3%ADtimo+s%2Fn+08398+-+Santa+Susanna&#038;hl=es&#038;ie=UTF8&#038;gl=es&#038;t=m&#038;z=15&#038;vpsrc=0" target="_blank">Santa Susanna</a> cerca de Barcelona. Siempre es un momento especial cuando te reencuentras después de un año con muchos amigos, algunos de los cuales ni siquiera has tenido contacto durante todo este tiempo y sabes que vas a acabar hablando con una confianza tal como si llevarás toda la vida juntos. A sabiendas también que vas a hacer otros nuevos.</p>
<p>Y es que en Subflash cada año somos más, este año <b>70</b>!!!, y no me extraña estuvimos en pleno lugar turístico de la Costa Brava, en el <a href="http://www.tahitiplaya.com/" target="_blank">Hotel Tahiti Playa</a>.</p>
<p><img class="alignnone size-full wp-image-452 border" title="sede subflash 2011 hotel tahiti playa santa susanna" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/subflash2011-hoteltahitiplaya-santa-susanna.jpg" alt="sede subflash 2011 hotel tahiti playa santa susanna" width="539" height="342" />
</p>
<p><h3><span style="color: #008998;">Presentación Subflash 2011</span></h3>
<p>Al menos llegamos a la presentación, esa primera toma de contacto que ya es tradición.</p>
<p>Empezó con la genial introducción de <a href="http://www.twitter.com/qmarcos" target="_blank">Marcos</a> donde orienta del lugar y como va a ir el fin de semana. Después da paso esta <b>presentación</b> divertidísima. Una especie de <i>Alcohólicos Anónimos</i> pero con <i>frikis</i> de la web. Una buena experiencia para conocernos todos un poquito más; además este año estuvimos casi todos porque en la web se promocionó muy bien.</p>
<p>Siempre recordamos con simpatía algunos de estos momentos: el típico <i>&#8220;¡y yo!&#8221;</i> de <a href="http://www.twitter.com/laflores" target="_blank">LaFlores</a> cuando gritamos todos <i>&#8220;¡<a href="http://www.twitter.com/fcomoreno" target="_blank">Paco</a> te queremos!&#8221;</i>, el momento en el que <a href="http://www.twitter.com/palaueb" target="_blank">Marc Palau</a> dió paso a una entrada triunfal de <a href="http://www.twitter.com/lesmeslp" target="_blank">Lesmes</a>, etc. Nos resultó curioso como muchos se presentaban como <i>&#8220;soy el que me como todos los marrones&#8221;</i>, profesión que pese a la crisis parece que esta en auge <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Seguro que me dejo a muchos <i>(y si es así me vais a disculpar o comentar en el blog para que os añada)</i> pero fue increíble reencontrarse con mis <i>q-amigos</i>, mi clon <a href="http://www.twitter.com/qmarcos" target="_blank">Marcos</a>, <a href="http://www.twitter.com/jorcanvi" target="_blank">Jorge</a> con el que ya no hay piques futboleros <em>(siempre gana el Barça)</em>, <a href="http://www.twitter.com/qordas" target="_blank">Berto</a> que está casi en el paro con el 98% de internet realizado, <a href="http://www.twitter.com/skeku" target="_blank">Armando</a> un tal tipo conocido por <a href="http://www.criteriondg.info/wordpress/" target="_blank">Criterion</a> o no se que jajaja, <a href="http://www.twitter.com/quadricula" target="_blank">Sipi</a> con el que me quedé con mil temas que tratar, <a href="http://www.twitter.com/bftoni" target="_blank">Toni</a> y Astrid que siempre es un lujazo verlos, el crack <a href="http://www.twitter.com/joangarnet" target="_blank">Joan Garnet</a> con el que volví a aprender y compartir muchos momentos (recomendado 100% su <a href="http://joan.garnet.io/" target="_blank">blog</a>), <a href="http://www.twitter.com/llops" target="_blank">Dani Llops</a> el mejor lobo pixelado y divertido que te puedes encontrar, <a href="http://www.twitter.com/cay" target="_blank">Cay</a> que tuve el placer de conocer y hablamos mucho <b>(gracias por todo Cay)</b>, <a href="http://www.twitter.com/davidsp" target="_blank">David</a> un crack HTML/Jquery con el que colaboramos dia a dia y esperamos que cada vez más, <a href="http://www.dandolachapa.com/" target="_blank">Zarate</a> venido ni más ni menos que de Londres y compartimos grandes momentos (espero verte pronto pronto!).</p>
<p>Y sigo: el gran <a href="http://www.twitter.com/fcomoreno" target="_blank">Francisco Moreno</a> y su tronchante chica <a href="http://www.twitter.com/laflores" target="_blank">La Flores</a> (os debo unas palabras jaja). El divertidísimo <a href="http://www.twitter.com/palaueb" target="_blank">Marc Palau</a> con sus videos de gatitos, <a href="http://www.yporqueno.es/blog/" target="_blank">Iván</a> y su <a href="http://www.yporqueno.es/blog/" target="_blank">yporque</a> no, <a href="http://www.twitter.com/almostDesign" target="_blank">Gonzalo</a>, el mítiquisimo <a href="http://www.twitter.com/mikipalma" target="_blank">Miki</a> que ya lleva <b>9 de 9 Subflash</b>, el codeactionscripter <a href="http://www.twitter.com/zguillez" target="_blank">Zguillez</a>, los de <i>A Coruña Team</i>, <a href="http://www.twitter.com/wikivgs" target="_blank">Verónica</a>, <a href="http://www.twitter.com/juanmi_rivas" target="_blank">Juanmi</a> y más alumnos aventajados del master de <a href="http://proweb.ua.es" target="_blank">Proweb de la Universidad de Alicante</a> ¡grande chicos!,  <a href="http://www.twitter.com/andreskarp" target="_blank">Andres Karp</a> todo un presidente de <a href="http://www.adwe.es" target="_blank">ADWE</a>,  <a href="http://www.twitter.com/martinigleu" target="_blank">Martin</a> que me quedé con ganas de compartir más momentos, <a href="http://www.twitter.com/_alfons" target="_blank">Alfons</a>, el bilbaíno <a href="http://www.twitter.com/arketipo" target="_blank">Diego</a>, <a href="http://www.twitter.com/alfonsofonso" target="_blank">Alfonso Fonso</a> con cara de poker, <a href="http://www.twitter.com/abelcabans" target="_blank">Abel Cabans</a> y <a href="http://www.twitter.com/lafabricaverde" target="_blank">Maria</a> con su exitoso <a href="http://www.humanstxt.org" target="_blank">humansTXT</a> (acordaros de una camiseta M para mi <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ), el genial <a href="http://www.twitter.com/tonicarbonell" target="_blank">Toni Carbonell</a>, el francés Steff un crack con el que he tenido el placer de colaborar en varias ocasiones (lástima que faltara Mel), <a href="http://www.twitter.com/ignaciolledo" target="_blank">Ignacio Lledó</a> un increíble profesional de Photoshop, <a href="http://www.twitter.com/ghuerta" target="_blank">Guzmán Huertas</a> project manager de <a href="http://www.video2brain.com/es/" target="_blank">Video2brain</a> España, <a href="http://www.twitter.com/_Id0_" target="_blank">Idoia</a>, <a href="http://www.twitter.com/carmenchurri" target="_blank">Carmen</a>, <a href="http://www.twitter.com/rakelka" target="_blank">Raquel</a>,<a href="http://www.twitter.com/jramonleon" target="_blank"> Jose Ramón León</a>, <a href="http://www.twitter.com/voskoboinikova" target="_blank">Olga Voskoboinikova</a> y muchos más.</p>
<p>También fue genial conocer a <b>familiares</b> que frente a tal planazo de lugar y fin de semana se apuntaron; conociendo así el futuro de <i>Jorginho (Marcos Junior)</i> con un futuro esplendoroso en Subflash, PHP y [Q].</p>
<p>Y con un poco de pena la verdad de que <b>faltaran ilustres</b> como <a href="http://www.twitter.com/elecash" target="_blank">Raúl Jimenez</a> que se la liaron un poco cambiando el Sublash al primer finde de Septiembre en vez el último de Agosto, <a href="http://www.twitter.com/rodrigo_dm" target="_blank">Rodrigo</a>, <a href="http://www.twitter.com/eyeclipse" target="_blank">Raúl Solano</a> por padrazo, <a href="http://www.twitter.com/supremo_tata" target="_blank">Luis Adrián</a> que nos desmotivo faltando, mi paisano <a href="http://www.twitter.com/sergiomas" target="_blank">Sergio Más</a>, el crack <a href="http://www.twitter.com/solisarg" target="_blank">Jorge Solis</a> que desde Alicante que no le vemos, <a href="http://www.twitter.com/alexsanchez" target="_blank">Alex</a> que este año había tenido el placer de trabajar juntos! <a href="http://www.twitter.com/isidroperez " target="_blank">Isidro Perez</a>, <a href="http://www.twitter.com/juanjocardona" target="_blank">Juanjo Cardona</a> que espero que no nos haya cambiado por política eehhh&#8230;</p>
<p>Y como no <a href="http://www.twitter.com/tecnorama" target="_blank">Andres Cayón</a> que ya no se si estuvo presente porque con sus impresionantes tweets estuvo constantemente en boca de todos; sólo un ejemplo: <i>&#8220;Pues os jodeis, hostias! >:( &#8220;<a href="http://www.twitter.com/eladnts" target="_blank">@eladnts</a>: +1000 <a href="http://www.twitter.com/martinigleu" target="_blank">@martinigleu</a>: <a href="http://www.twitter.com/tecnorama" target="_blank">@tecnorama</a> se te echa de menos aquí&#8221; <a href="http://www.twitter.com/qmarcos" target="_blank">#subflash</a>&#8220;</i> ;D</p>
<p>
Vamos con las <b>conferencias</b>:</p>
<h3><span style="color: #008998;">SBF00. Video2brain, la mejor formación online!</span></h3>
<p><img class="alignnone size-full wp-image-452 border" title="subflash 2011 video2brain" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/subflash2011-video2brain.jpg" alt="subflash 2011 video2brain" width="539" height="113" /></p>
<p><a href="http://www.twitter.com/ghuerta" target="_blank">Guzmán Huertas</a> project manager de <a href="http://www.video2brain.com/es/" target="_blank">video2brain</a> España nos contó las interesantes virtudes de la formación online mediante videos en todo este mundo digital.<br />
La que considero la mejor forma de formarte online que además se renueva día a día sacando nuevos cursos o novedades como ver los videos en tu ipad.</p>
<p><a href="http://www.video2brain.com/es/" target="_blank">video2brain</a> ha apostado muy gratamente en Subflash; esperemos que esten contentos con el resultado, nosotros estamos muy agradecidos. <b>¡Gracias Guzmán!</b></p>
<p>Varios profesionales que asisten, organizan y dan conferencias en Subflash tienen fantásticos cursos de formación en video2brain como por ejemplo: <a href="http://www.video2brain.com/es/products-144.htm" target="_blank">workshop con Adobe Photoshop: Retoque facial</a>, <a href="http://www.video2brain.com/es/products-140.htm" target="_blank">desarrollo de aplicaciones para iPhone y Objective-C por Marcos</a>, <a href="http://www.video2brain.com/es/products-180.htm" target="_blank">WordPress</a>&#8230;</p>
<p>Magníficos profesores como  <a href="http://www.video2brain.com/es/trainer-10.htm" target="_blank">Andres Cayón</a>, <a href="http://www.video2brain.com/es/trainer-29.htm" target="_blank">Marcos González</a>, <a href="http://www.video2brain.com/es/trainer-16.htm" target="_blank">Ignacio Lledó</a>, <a href="http://www.video2brain.com/es/trainer-26.htm" target="_blank">Jorge Mochón</a>, <a href="http://www.video2brain.com/es/trainer-37.htm" target="_blank">Armando Sotoca</a>&#8230;</p>
<p>Y no sólo patrocinan sino que además hicieron una promoción fantástica a todo el Subflash con <b>un descuento de 100 € </b> de la subscripción anual. <i>Wow!</i></p>
<p><h3><span style="color: #008998;">SBF01. SaaS en la nube</span></h3>
<p><img class="alignnone size-full wp-image-452 border" title="subflash 2011 elad rodriguez saas en la nube" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/subflash2011-elad-saas-en-la-nube.jpg" alt="subflash 2011 elad rodriguez saas en la nube" width="539" height="371" /><br />
<i>Foto de <a href="http://www.twitter.com/abelcabans" target="_blank">Abel Cabans</a></i></p>
<p>Este año tuvimos el honor de poder participar como conferenciantes en <a href="http://www.subflash.com" target="_blank">Subflash</a>.<br />
Lo primero fue felicitar a mi gran amigo <i>(pese a ser malísimo en el PRO Evolution Soccer jajaja)</i> <a href="http://www.twitter.com/skeku" target="_blank">Armando</a> de <a href="http://www.criteriondg.info/wordpress/" target="_blank">Criterion</a> que tuvo la suerte de nacer el dia en que se celebraría el IX Subflash, un visionario.</p>
<p>Dimos una charla a nivel divulgativo sin nada de código de la experiencia que hemos vivido algo largo de los años al crear una empresa web 2.0. Cómo poco a poco con el objetivo de tener grandes clientes hemos caído en los servicios y que creemos que hay una solución mejor: <b>el producto</b>.</p>
<p>La solución es el <a href="http://es.wikipedia.org/wiki/Software_como_servicio" target="_blank">Software como Servicio</a> y sus formas de desplegarlo mediante el <b><a href="http://es.wikipedia.org/wiki/Computaci%C3%B3n_en_nube" target="_blank">cloud computing</a></b>. <i>Servicios vs producto</i>, trabajar por horas vs escalabilidad con éxito hasta el infinito. Dejamos frases como <i>&#8220;no quería tener jefes así que monté una empresa, y ahora tengo 100 jefes (clientes)&#8221;</i> y cual es nuestra visión para un emprendedor o para quien busca un futuro mejor. Enseñamos también parte de nuestras ideas para uno de estos Software as a Services, nuestro <b>EDL Editor de Layouts</b> <i>(nombre dado por Joan aunque no se acordaba jajaja)</i>. Esto se puede ver en otra de nuestras <a href="http://www.lostiemposcambian.com/blog/web-2-0/industrializacion-en-la-web-conferencia-adwe/" target="_blank">conferencias en ADWE</a>.
</p>
<p>
<iframe src="http://player.vimeo.com/video/28604537?title=0&amp;byline=0&amp;portrait=0" width="539" height="404" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe></p>
<p><i>Gracias a <a href="http://www.andrekarp.es" target="_blank">Andres Karp</a> que ha grabado gentilmente las conferencias para disfrute de todos, aunque la próxima vez avisa que van a ser publicadas en Internet para cambiar el tono excesivamente coloquial <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </i>
</p>
<p>
Nos resultó un poco arriesgado salir del tema técnico pero esperemos que resultara de mucho interés al menos para el que no conociera todo esto o hacer piña quienes estamos intentando cambiar de modelo.</p>
<p>Recomendamos leer un post buenísimo de <a href="http://web.ontuts.com/" target="_blank">Ontuts</a> que habla de diferentes tipos de emprendedores web: <b><a href="http://web.ontuts.com/opinion/las-tres-opciones-del-emprendedor-el-bueno-el-feo-y-el-malo/" target="_blank">Las tres opciones del emprendedor: El bueno, el feo y el malo</a></b></p>
<p>El año pasado me sirvió tanto la charla de <a href="http://www.twitter.com/supremo_tata" target="_blank">Luis Adrián Rosas</a> y su <a href="http://www.lostiemposcambian.com/blog/subflash-2010/subflash-2010-dia-2/" target="_blank">Inteligencia Emocional</a> que se nos ocurrió hacer algo parecido. Llevamos una pequeñita sopresa que creo que gustó mucho. Gracias a <a href="http://www.wikishine.com">Wikishine</a> <i>(mi hermana es una artistaza)</i> hicimos <b>80 chapas</b> totalmente diferentes del mundo web 2.0, de subflash, de empresas de subflash, de iconos míticos de redes sociales, etc&#8230; y las repartimos entre todos.</p>
<p><img class="alignnone size-full wp-image-452 border" title="subflash 2011 elad rodriguez chapas 2.0" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/subflash2011-chapas-wikishine.jpg" alt="subflash 2011 elad rodriguez chapas 2.0" width="539" height="436" /></p>
<p><h3><span style="color: #008998;">SBF02. Piensa en Píxels Dani Llops</span></h3>
<p><iframe src="http://player.vimeo.com/video/28606548?title=0&amp;byline=0&amp;portrait=0" width="539" height="404" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe>
</p>
<p>
Ya el año pasado <a href="http://llops.com/blog/" target="_blank">Dani Llops</a> nos dio una <a href="http://www.lostiemposcambian.com/blog/subflash-2010/subflash-2010-dia-2/" target="_blank">genial charla sobre Combinar flash y drupal</a> pero los que lo seguimos desde hace años nos quedamos con las ganas de recibir una conferencia sobre una de <b>sus especialidades la programación creativa en Flash</b>.</p>
<p>Fue una maravilla la verdad <b>¡Gracias Dani!</b>. Por un lado una versión muy didáctica de tratamiento del color y los filtros, operaciones binarias, hexadecimales (106!!!!), códigos de color; y por otro lado vectores vs bitmaps donde a partir de Flash 8 se dio soporte nativo a operaciones de pixels, cómo mejorar el rendimiento con <i>CacheAsBitmap</i>, entender al fin como funcionan los blend modes en Flash y sobretodo ver los <a href="http://llops.com/lab/ventisca/" target="_blank">increíbles ejemplos</a> de animación con píxeles que tanto nos cautivaron en su blog: <a href="http://llops.com/lab/ilustraciones/" target="_blank">anima pixeles</a>.</p>
<p><img class="alignnone size-full wp-image-452 border" title="subflash 2011 dani llops piensa en pixeles" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/subflash2011-piensa-en-pixeles.jpg" alt="subflash 2011 dani llops piensa en pixeles" width="539" height="236" /></p>
<p>
Ya desde aquí animamos a <a href="http://www.twitter.com/cay" target="_blank">Cay</a> y <a href="http://www.twitter.com/llops" target="_blank">Llops</a> que el próximo año hagan una conferencia conjunta de <b>optimización en Flash y trucos</b> para hacer que cosas increíbles corran en ordenadores no creíbles <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />
</p>
<p><h3><span style="color: #008998;">SBF03. Expresiones Regulares</span></h3>
<p><iframe src="http://player.vimeo.com/video/28608526?title=0&amp;byline=0&amp;portrait=0" width="539" height="404" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe></p>
<p>Llegó la hora crítica del Subflash, sábado a las 16.00 donde el fantasma del sueño acecha inescrutablemente. La verdad es que yo estaba intrigadísimo de cómo un tema tan tan áspero y duro el crack más gracioso de todo el evento lo iba a hacer entretenidísimo y divertido.</p>
<p><a href="http://www.palaueb.com" target="_blank">Marc Palau</a> nos sorprendió con una magistral clase de la potencia de las expresiones regulares. Tengo que ser sincero no consiguió partirnos de risa (pese a las geniales imágenes que amenizaban la confe) y fue en momentos duro. Me reí mucho con un tweet que decía: <i>&#8220;me too, deu meu això s&#8217;hauria de prohibir&#8230; On es la ONU quan se la necessita?&#8221;</i> &#8211; no diré su autor jajaja</p>
<p>Pero me sorprendió porque <b>fue incluso mejor, muy pro</b> Aprendimos muchísimo sobre expresiones regulares: tracear expresiones regulares, backtracking, greedy vs lazy, cómo distintos motores de expresiones regulares en PHP y ActionScript 3 tiene matices diferentes, herramientas útiles como la de <a href="http://gskinner.com/blog" target="_blank">Grank Skinner</a> y su <a href="http://gskinner.com/RegExr/" target="_blank">analizador de expresiones regulares</a> (hay algo que este pedazo de crack NO haya hecho??)&#8230;</p>
<p>Me quedé convencido de que muchos de los desarrollos futuros que tenemos en mente en <a href="http://www.nitsnets.com" target="_blank">nitsnets | studios</a> van a hacer un uso de esta conferencia y <b>la potencia de las expresiones regulares</b>.</p>
<p><b>¡Muchas gracias Marc!</b></p>
<p>Al final Palau nos deleitó con sus míticos pases de Youtube y ahí si el Subflash empezó a reir para ya no parar&#8230;<br />
Os dejamos el resumen, os recomendamos verlos en este orden: <a href="http://www.youtube.com/watch?v=QH2-TGUlwu4" target="_blank">NYAN Cat</a>, <a href="http://www.youtube.com/watch?v=mTTwcCVajAc" target="_blank">I love cats</a>, <a href="http://www.youtube.com/watch?v=sP4NMoJcFd4&#038;feature=related" target="_blank">Songify This: CAN&#8217;T HUG EVERY CAT</a>&#8230; otros de las míticas osti*** caidas y uno de fútbol del <a href="http://www.youtube.com/watch?v=8OU1mW0Ty_Y" target="_blank">Tano Pasman</a>
</p>
<p><h3><span style="color: #008998;">Noche y fiesta</span></h3>
<p>Por la noche nos quedamos en el hotel y lo que empezó como un ligero <b>II Torneo de Poker Texas Hold’em Oficial</b> de #subflash acabó con horas y horas de juego. No pude revalorizar mi título de campeón y no pondré excusas pero fue muy muy divertido, algunos hasta jugando por equipos como <a href="http://wearenan.com/" target="_blank">Llops y Cay</a>. Esta vez ganó Jorge la primera manga y la segunda&#8230; no me acuerdo bien <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  y es que al pobre Marcos lo fastidié con mis bromas y cachondeo, pero como suelen decir por ahí <i>&#8220;no sos yo, es el señor Jack Daniels&#8221;</i> <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><img class="alignnone size-full wp-image-452 border" title="subflash 2011 poker llops" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/09/subflash2011-poker-llops.jpg" alt="subflash 2011 poker llops" width="539" height="398" /></p>
<p>Después salimos a tomar unas cervezas/copas más pero cayó el <b>diluvio universal</b> e hizo que la noche fuera un poco más corta.</p>
<p><b>¡Gracias Dani por ayudarme con este post!</b>
</p>
<p>
Todo el seguimiento de <b>subflash 2011 en lostiemposcambian</b>: </p>
<ul>
<li><a href="http://www.lostiemposcambian.com/blog/sublash-2011/subflash-2011-santa-susanna-dia-1-y-2/">Subflash 2011 Santa Susanna: Día 1 y 2</a></li>
<li><a href="http://www.lostiemposcambian.com/blog/sublash-2011/subflash-2011-santa-susanna-dia-3/">Subflash 2011 Santa Susanna: Día 3</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.lostiemposcambian.com/blog/sublash-2011/subflash-2011-santa-susanna-dia-1-y-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Links en Symfony2 con Plantillas Twig</title>
		<link>http://www.lostiemposcambian.com/blog/php/links-symfony2-plantillas-twig/</link>
		<comments>http://www.lostiemposcambian.com/blog/php/links-symfony2-plantillas-twig/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 07:18:16 +0000</pubDate>
		<dc:creator>danii</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>
		<category><![CDATA[twig]]></category>

		<guid isPermaLink="false">http://www.lostiemposcambian.com/blog/?p=3139</guid>
		<description><![CDATA[<a href="http://www.lostiemposcambian.com/blog/php/links-symfony2-plantillas-twig"><img src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/06/links-symfony.jpg" alt="Links en Symfony2" title="links-symfony2" width="539" height="150" class="alignnone size-full wp-image-452 border" /></a>

Hace unos días escribimos un post informativo sobre cómo configurar el <a target="_blank" href="http://www.lostiemposcambian.com/blog/php/configuracion-routing-symfony2/ ">Routing de Symfony2</a>, sobre todo atendiendo a los cambios y novedades con respecto a las versiones <strong>1.x</strong> del Framework Symfony (en las que tenemos más experiencia). El siguiente paso lógico sería entonces aprender cómo utilizar este nuevo y flamante sistema de Routing que nos hemos configurado en <strong>Symfony2</strong> para crear <strong>links</strong> o <strong>hipervínculos</strong> entre las páginas de nuestro proyecto.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/06/links-symfony.jpg" alt="Links en Symfony2" title="links-symfony2" width="539" height="150" class="alignnone size-full wp-image-452 border" /></p>
<p>Hace unos días escribimos un post informativo sobre cómo configurar el <a target="_blank" href="http://www.lostiemposcambian.com/blog/php/configuracion-routing-symfony2/ ">Routing de Symfony2</a>, sobre todo atendiendo a los cambios y novedades con respecto a las versiones <strong>1.x</strong> del Framework Symfony (en las que tenemos más experiencia). El siguiente paso lógico sería entonces aprender cómo utilizar este nuevo y flamante sistema de Routing que nos hemos configurado en <strong>Symfony2</strong> para crear <strong>links</strong> o <strong>hipervínculos</strong> entre las páginas de nuestro proyecto. </p>
<p>Por supuesto queremos utilizar el sistema de <a target="_blank" href="http://www.twig-project.org/">plantillas Twig</a> porque estamos básicamente enamorados de su simpleza y potencia, y esto significa nos podemos ir olvidando de los helpers PHP como <strong>link_to</strong> que utilizábamos en versiones anteriores de Symfony para crear hipervínculos. Mirando la <a target="_blank" href="http://symfony.com/doc/current/book/templating.html#linking-to-pages">documentación oficial sobre las plantillas en Symfony2</a>, vemos que en su lugar hemos de familiarizarnos con una serie de <strong>funciones Twig</strong>: <strong>path</strong>, <strong>url</strong> y <strong>asset</strong>.</p>
<p><span style="color: #008998;"><strong>La función path</strong></span></p>
<p>La función <strong>path</strong> de Twig generará la URL del enlace, basándose en la configuración del Routing. Esta función toma como parámetro el <strong>nombre de la ruta</strong> y un <strong>array</strong> de todos los parámetros que ésta necesite y devuelve una <strong>URL relativa</strong>: </p>
<pre class="brush: php; title: ; notranslate">
  path(
    'nombre_de_ruta',
    {  'nombre_de_param1': valor_de_param1,
       'nombre_de_param2': valor_de_param2,
       ...
    }
   )
</pre>
<p>Atención, ya que puesto que la función <strong>path</strong> devuelve tan solo el path URL, en <strong>Symfony2</strong> debemos incluir explícitamente la etiqueta  HTML <strong>&lt;a&gt;</strong> que formará el enlace, y será en el atributo <strong>href</strong> donde irá el resultado de la función <strong>path</strong>.</p>
<p>Por ejemplo, supongamos que nos hemos definido la siguiente ruta para las páginas que contendrán los &#8220;productos&#8221; que mostramos en nuestra web:</p>
<pre class="brush: python; title: ; notranslate">
mostrar_producto:
    pattern:   /producto/{nombre}
    ...
</pre>
<p><strong>En la sintaxis de Twig</strong> <strong>{{</strong> y <strong>}}</strong> son delimitadores que se utilizan para hacer un <strong>output</strong>, por lo que generamos un enlace a la página de un producto en particular así:</p>
<pre class="brush: php; title: ; notranslate">
  &lt;a href=&quot;{{
     path(
        'mostrar_producto',
       { 'nombre': producto.nombre_url }
     )
    }}&quot;&gt;
     {{ producto.nombre }}
  &lt;/a&gt;
</pre>
<p>La ventaja de este sistema es que si queremos modificar más adelante la URL de una página, tan sólo tenemos que cambiar la configuración del <strong>Routing</strong>, y todas nuestras plantillas generarán automáticamente la nueva URL. Por supuesto, la desventaja con la que nos encontraremos es que debemos utilizar constantemente los <strong>nombres de las rutas</strong> que hemos creado para generar enlaces. Nada nuevo si estamos acostumbrados al Framework Symfony en encarnaciones anteriores y a la necesidad de llevar un control exhaustivo de nuestras rutas, pero que puede ser una importante fuente de errores tontos si no vamos con cuidado.</p>
<p><span style="color: #008998;"><strong>La función url</strong></span></p>
<p>Si queremos generar URLs absolutas, entonces tenemos que usar la función de Twig <strong>url</strong>, que por otro lado se utiliza de forma exactamente igual que la función <strong>path</strong> que hemos visto anteriormente.</p>
<pre class="brush: php; title: ; notranslate">
&lt;a href=&quot;{{
    url('homepage')
  }}&quot;&gt;Home&lt;/a&gt;
</pre>
<p><span style="color: #008998;"><strong>La función asset</strong></span></p>
<p>Es muy común también incluir en los templates enlaces a imágenes, JavaScripts, hojas de estilo, y otros archivos que en conjunto denominamos <strong><em>assets</em></strong>. Para esto se utiliza la función de Twig <strong>asset</strong>. Por supuesto podemos simplemente meter &#8220;a pelo&#8221; el path relativo hasta estos <em>assets</em> (por ejemplo <strong>/mi_app/imagenes/imagen.jpg</strong>) pero la función <strong>asset</strong> puede ser muy útil ya que nos abstrae de dónde se encuentra ubicada físicamente nuestra aplicación. Por ejemplo:</p>
<pre class="brush: php; title: ; notranslate">
&lt;img src=&quot;{{
     asset('imagenes/imagen.jpg')
  }}&quot; alt=&quot;Zelda!&quot; /&gt;
</pre>
<p>El atributo src en este caso tomará el valor: <strong>/path_relativo_desde_root_hasta_mi_app/imagenes/imagen.jpg</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lostiemposcambian.com/blog/php/links-symfony2-plantillas-twig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Personalizar las Páginas de Error en Symfony2</title>
		<link>http://www.lostiemposcambian.com/blog/php/personalizar-paginas-error-symfony2/</link>
		<comments>http://www.lostiemposcambian.com/blog/php/personalizar-paginas-error-symfony2/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 08:15:11 +0000</pubDate>
		<dc:creator>danii</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>
		<category><![CDATA[twig]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://www.lostiemposcambian.com/blog/?p=2225</guid>
		<description><![CDATA[<a href="http://www.lostiemposcambian.com/blog/php/personalizar-paginas-error-symfony2"><img src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2010/12/symfony-personalizar-paginas-error.jpg" alt="Personalizar las páginas de error en symfony2" title="symfony2-personalizar-paginas-error" width="539" height="150" class="alignnone size-full wp-image-452 border" /></a>

¿Qué sería de la Web 2.0 sin la <strong>Fail Whale</strong> o las <strong>páginas de error 404 personalizadas</strong>? Es una práctica tan extendida que ya casi constituye una norma no escrita del desarrollo web: proveer al usuario de páginas de error que no sólo le informen de lo que está pasando sin perder la referencia de dónde está (es decir, totalmente integrada dentro de la estructura y el diseño de nuestro site), sino que además sean divertidas o por lo menos un tanto adorables, para aliviar el mal trago que supone el toparse de bruces con un error del protocolo HTTP. Por suerte para nosotros, en <strong>Symfony2</strong> el proceso de personalizar las páginas de error es realmente sencillo e intuitivo.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2010/12/symfony-personalizar-paginas-error.jpg" alt="Personalizar las páginas de error en symfony2" title="symfony2-personalizar-paginas-error" width="539" height="150" class="alignnone size-full wp-image-452 border" /></p>
<p>¿Qué sería de la Web 2.0 sin la <strong>Fail Whale</strong> o las <strong>páginas de error 404 personalizadas</strong>? Es una práctica tan extendida que ya casi constituye una norma no escrita del desarrollo web: proveer al usuario de páginas de error que no sólo le informen de lo que está pasando sin perder la referencia de dónde está (es decir, totalmente integrada dentro de la estructura y el diseño de nuestro site), sino que además sean divertidas o por lo menos un tanto adorables, para aliviar el mal trago que supone el toparse de bruces con un error del protocolo HTTP. Por suerte para nosotros, en <strong>Symfony2</strong> el proceso de personalizar las páginas de error es realmente sencillo e intuitivo.</p>
<p>Como siempre, el primer paso debería ser echarle un ojo a la propia <a href="http://symfony.com/doc/current/cookbook/controller/error_pages.html">documentación oficial</a> para ver qué novedades nos trae <strong>Symfony2</strong>. Como veremos, no son pocas: además de la página de error estándar de HTML, <strong>Symfony2</strong> viene con una página de error por defecto para la mayoría de los formatos de respuesta más comunes tales como <strong>JSON</strong> (error.json.twig), <strong>XML</strong> (error.xml.twig), <strong>Javascript</strong> (error.js.twig) y CSS (error.css.twig) y también otros menos comunes como TXT, RDF, y ATOM. Todas estas pantillas de error por defecto se encuentran dentro del <strong>FrameworkBundle</strong>. Si queremos substituir estas páginas por defecto por las nuestras personalizadas, simplemente debemos crear un archivo con el mismo nombre dentro de nuestro <strong>app/Resources/FrameworkBundle/views/Exception</strong>, es decir, siguiendo el <a target="_blank" href="http://symfony.com/doc/current/book/templating.html#overiding-bundle-templates">procedimiento estándar para hacer un <strong>override</strong></a> de cualquier template que se encuentre dentro de un bundle de Symfony2. </p>
<p>Por supuesto, se pueden crear fácilmente plantillas de error específicas según el código de error. Para ello, simplemente debemos concatenar el código de error HTTP a la palabra &#8220;error&#8221; en el nombre del archivo, por ejemplo, podríamos montar una plantilla <strong>error404.html.twig</strong> específica para los errores 404 (Página no encontrada). El motor de Symfony utiliza el siguiente algoritmo para determinar qué plantilla utilizar:</p>
<ul>
<li>Primero, busca una plantilla del formato y código de error dado (por ejemplo, error404.json.twig) y si la encuentra, la sirve;</li>
<li>Si no existe, se ignora el código de error y se busca la plantilla de error genérica para ese formato (en nuestro caso, error.json.twig);</li>
<li>Si ésta tampoco existe, sirve la plantilla de error genérica de HTML (error.html.twig).</li>
</ul>
<p><span style="color: #008998;"><strong>Lanzando un Error 404</strong></span></p>
<p>Para lanzar un error 404 desde nuestra aplicación, tenemos la clase nativa de Symfony <strong>NotFoundHttpException</strong>:</p>
<pre class="brush: php; title: ; notranslate">
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

public function indexAction()
{
    $producto = //recoger datos de BD

    if (!$producto)
        throw new NotFoundHttpException('Este producto no existe!');

    //resto de la acción..
}
</pre>
<p>Es importante, a nivel de buena práctica de programación web, que cuando no se encuentra un elemento que el usuario ha solicitado se notifique al navegador mediante un error con código 404, aunque posteriormente sirvamos otro contenido alternativo (por ejemplo, una lista de posibles elementos relacionados).</p>
<p><span style="color: #008998;"><strong>Testeando el Error 500</strong></span></p>
<p>Y para testear un <strong>Error 500</strong> (el temido <strong>Internal Server Error</strong>), el código es tan simple como lanzar una excepción cualquiera desde nuestro controlador:</p>
<pre class="brush: php; title: ; notranslate">
throw
new \Exception(
   'Error 500 de la Muerte!'
);
</pre>
<p>Ojo, que no es un error tipográfico, debemos escribir <strong>\Exception</strong>, no Exception, porque si no PHP se irá a buscar <strong>\Namespace_de_tu_Controlador\Exception</strong> y nos vamos a encontrar con un <i>Fatal Error: Class [...] not found</i>, en lugar de la excepción que queríamos.</p>
<p>Mientras programamos nuestro site en Symfony, tenemos que tener en cuenta que si estamos en <strong>entorno de desarrollo</strong>, las páginas de error que veremos no son las páginas de error de la versión de producción, sino <strong>las versiones debug para desarrollo</strong>, por ejemplo la plantilla sería <strong>exception.html.twig</strong> en vez de <strong>error.html.twig</strong> (por supuesto, éstas también pueden personalizarse, aunque son realmente majas). Si has perdido más de 20 minutos peleándote con la página de error por defecto y preguntándote porqué carajo no sale tu página personalizada, para después darte cuenta de que estabas viendo los debugs en entorno de desarrollo&#8230; no te preocupes, nos pasa a los mejores <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Por último, aunque ejemplos geniales e inspiradores de estas páginas de error <strong>user-friendly</strong> personalizadas los hay <a target="_blank" href="http://www.smashingmagazine.com/2009/01/29/404-error-pages-one-more-time/">a puñados</a>, aquí me gustaría destacar 2 sites que en mi opinión han hecho muy bien los deberes en este apartado: primero, <strong><a target="_blank" href="https://github.com">GitHub</a></strong> por el uso innovador de una técnica de paralelaje en <strong>CSS</strong> para darle una pequeña interacción al usuario con esa sensación de profundidad, y a nivel nacional (y no es por pegarnos el pegote, es que realmente me encantan), nosotros mismos en <strong><a target="_blank" href="http://www.nosplay.com">Nosplay</a></strong>&#8230; todas ellas geniales, perfectamente integradas con la navegación normal del site y con un toque &#8220;adorablemente friki&#8221; con referencias a <strong>Star Wars</strong> <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><a href="https://github.com/404" target="_blank"><strong>GitHub</strong> Página no encontrada</a>: &#8220;Estas no son las páginas que estás buscando&#8221;</p>
<p><a href="https://github.com/404" target="_blank"><img src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2010/12/github-error-404.jpg" alt="github error 404" title="github error 404" width="539" height="266" class="alignnone size-full wp-image-452 border" /></a></p>
<p><a href="https://github.com/500" target="_blank"><strong>GitHub</strong> Error Interno de Servidor</a> (te acabas de despeñar, chaval).</p>
<p><a href="https://github.com/500" target="_blank"><img src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2010/12/github-error-500.jpg" alt="githun error 500" title="github error 500" width="539" height="266" class="alignnone size-full wp-image-452 border" /></a></p>
<p><span style="color: #008998;"><strong>Nosplay</strong></span> Página no encontrada: &#8220;¡No puedes pasarrrr!&#8221;</p>
<p><img src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2010/12/nosplay-error-404.jpg" alt="nosplay error 404" title="nosplay error 404" width="539" height="308" class="alignnone size-full wp-image-452 border" /></p>
<p><span style="color: #008998;"><strong>Nosplay</strong></span> Error Interno de Servidor: &#8220;¡Soy tu padre!&#8221;</p>
<p><img src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2010/12/nosplay-error-500.jpg" alt="nosplay error 500" title="nosplay error 500" width="539" height="308" class="alignnone size-full wp-image-452 border" /></p>
<p>Y como <em>bonus track</em>, por si no habíais visto la página de error 404 de este humilde blog (¿no habéis puesto nunca &#8220;asdfasdf&#8221; detrás del <em>/post/</em> en la barra de direcciones mientras visitáis nuestro blog? increíble!), como todavía no habíamos tenido excusa para mostrarla, aquí va una captura:</p>
<p><img src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2010/12/lostiemposcambian-error-404.jpg" alt="lostiemposcambian error 404" title="lostiemposcambian error 404" width="539" height="281" class="alignnone size-full wp-image-452 border" /></p>
<p>Aunque nosotros teníamos menos margen de maniobra al ser un <strong>WordPress</strong> y no un site construído en <strong>Symfony2</strong> claro&#8230; ¿quizás para la próxima versión? <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lostiemposcambian.com/blog/php/personalizar-paginas-error-symfony2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Caso de éxito: Elche Club de Fútbol</title>
		<link>http://www.lostiemposcambian.com/blog/nitsnets/caso-de-exito-elche-club-de-futbol/</link>
		<comments>http://www.lostiemposcambian.com/blog/nitsnets/caso-de-exito-elche-club-de-futbol/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 07:50:31 +0000</pubDate>
		<dc:creator>elad</dc:creator>
				<category><![CDATA[nitsnets]]></category>
		<category><![CDATA[casos de éxito]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[edl]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.lostiemposcambian.com/blog/?p=2694</guid>
		<description><![CDATA[<a href="http://www.lostiemposcambian.com/blog/nitsnets/caso-de-exito-elche-club-de-futbol/"><img class="alignnone size-full wp-image-452 border" title="elchecf nuevaweb front" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/06/elchecf-nuevaweb1.jpg" alt="elchecf nuevaweb front" width="539" height="352" /></a>

Hace unos meses el <a href="http://www.elchecf.es" target="_blank">Elche Club de Fútbol</a> nos contrató para hacer su nueva campaña online con un <strong>site totalmente dinámico.</strong>

Para nosotros fue un honor que esta institución confiara en nuestra tecnología. Durante este post vamos a revelar algunos de los secretos de la tecnología utilizada y nuestro <strong>nts &#124; EDL</strong> <em>(Editor de Layouts)</em>. Está desarrollado íntegramente en PHP y <a href="http://www.codeigniter.com" target="_blank">CodeIgniter 1.7.3</a>.]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-452 border" title="elchecf nuevaweb front" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/06/elchecf-nuevaweb1.jpg" alt="elchecf nuevaweb front" width="539" height="352" /></p>
<p>Hace unos meses el <a href="http://www.elchecf.es" target="_blank">Elche Club de Fútbol</a> nos contrató para hacer su nueva campaña online con un <strong>site totalmente dinámico.</strong></p>
<p>Para nosotros fue un honor que esta institución confiara en nuestra tecnología. Durante este post vamos a revelar algunos de los secretos de la tecnología utilizada y nuestro <strong>nts | EDL</strong> <em>(Editor de Layouts)</em>. Está desarrollado íntegramente en PHP y <a href="http://www.codeigniter.com" target="_blank">CodeIgniter 1.7.3</a>. Este proyecto fue dirigido por nuestro desarrollador <a href="http://www.twitter.com/websmonerris" target="_blank"><strong>Pere Monerris</strong></a> que creó e ideó nuevos módulos para el EDL como gestión de partidos de todas las <em>categorías de futbol base, clasificaciones, control de goles, calendario</em> y un largo etcétera. </p>
<p>Algunas de sus funcionalidades se pueden ver en este video:</p>
<p><iframe width="539" height="442" src="http://www.youtube.com/embed/ZHqkskck-aU" frameborder="0" allowfullscreen></iframe></p>
<p>Ya poseíamos experiencia en el mundo de los managers de fútbol al haber creado todo el motor de gestión de los campeonatos de la escuela de fútbol <a href="http://www.newsportbdn.com/" target="_blank"><b>Newsport de Badalona</b></a>. En este caso juntamos la tecnología <a href="http://www.gopress.es/" target="_blank">gopress</a> junto con el manager de fútbol que al fin y al cabo era un gestor <b>PCFútbol</b> con generación/gestión de ligas internas. </p>
<p>Se pueden ver algunos <a href="http://www.lostiemposcambian.com/blog/web-2-0/industrializacion-en-la-web-conferencia-adwe/#ejemplos-conferencia-industrializacion-web-adwe">ejemplos y prototipos</a> de estos sistemas en la conferencia que dimos hace unos meses para <a href="http://www.adwe.es/" target="_blank">ADWE</a>: <a href="http://www.tucamon.es/contenido/indrustrializacion-en-la-web" target="_blank">Industrialización de la web</a> </p>
<p><strong>A nivel gráfico</strong> también echamos el resto, diseñando el site en base a unas estructuras de caja y dándole total importancia a la <strong>fotografía</strong> y el <strong>impacto visual</strong> con el verde Elche como base. También las ilustraciones se diseñaron a medida cuidando hasta el último detalle, mirad qué graciosas estas personalizaciones del pájaro del <em>twitter</em>:</p>
<p><img class="alignnone size-full wp-image-452 border" title="elchecf twitter" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/06/twitter-elchecf.jpg" alt="elchecf twitter" width="539" height="185" /></p>
<p><img class="alignnone size-full wp-image-452 border" title="elchecf twitter vuvuzela" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/06/twitter-elchecf-vuvuzela.jpg" alt="elchecf twitter vuvuzela" width="539" height="185" /></p>
<p>El resultado fue un <strong>éxito</strong> de acogida por parte de los aficionados así como el club que ha visto como sus visitas se han multiplicado, dando a sus socios y afición un mayor servicio. Quizás la nueva web les ayudó a llegar a los Playoffs y luchar por el <strong>ascenso a Primera!</strong> <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Incluso nos invitaron a participar en la <strong>presentación pública de la nueva web</strong> en rueda de prensa:</p>
<p><iframe title="YouTube video player" width="539" height="328" src="http://www.youtube.com/embed/mv7ezNOlleE" frameborder="0" allowfullscreen></iframe></p>
<p>De esta forma ya he cumplido otro de mis sueños <em>&#8220;ser futbolista profesional&#8221;</em> o al menos participar en una rueda de prensa de un equipo profesional que esperemos pronto este en la Liga BBVA en Primera División.</p>
<p>Ahora solo me falta jugar al fútbol como <b>Leo</b> aunque más o menos se puede hablar como ellos: <em>&#8220;Si bueno no, la web ha sido complicada; el framework se cerraba atrás muy bien y al final todos los sites son 11 contra 11 followers&#8221;</em> <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lostiemposcambian.com/blog/nitsnets/caso-de-exito-elche-club-de-futbol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuración del Routing de Symfony2</title>
		<link>http://www.lostiemposcambian.com/blog/php/configuracion-routing-symfony2/</link>
		<comments>http://www.lostiemposcambian.com/blog/php/configuracion-routing-symfony2/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 09:51:00 +0000</pubDate>
		<dc:creator>danii</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://www.lostiemposcambian.com/blog/?p=2798</guid>
		<description><![CDATA[<a href="http://www.lostiemposcambian.com/blog/php/configuracion-routing-symfony2"><img src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/05/logo_symfony_header.jpg"  alt="symfony2 routing logo" title="symfony2 routing logo" width="539" height="100" class="alignnone size-full wp-image-452 border" /></a>

Aunque el release de la versión final de <strong>Symfony2</strong> haya sido retrasado, los chicos de <strong>SensioLabs</strong> (y toda la comunidad <strong>Symfony</strong>, por supuesto) siguen avanzando <a href="http://symfony.com/blog/symfony2-beta2-released" target="_blank">pasito</a> a <a href="http://symfony.com/blog/symfony2-beta3-available">pasito</a> para solucionar todos los bugs y cerrar toda la documentación, condiciones necesarias para terminar con la <strong>fase beta</strong>. Mientras tanto, nosotros los desarrolladores de a pie podemos aprovechar para ir familiarizándonos con los (considerables) cambios con respecto a la versión 1.4, aunque actualmente nos enfrentamos a una situación prácticamente inédita: <strong>la documentación existente todavía es escasa y no está actualizada</strong> (ni mucho menos traducida al castellano, para todos aquellos que no estéis a gusto con el inglés).

Como el título de este post indica, vamos a tratar una de las partes más potentes, y a su vez que más quebraderos de cabeza provoca del framework Symfony: <strong>el Routing</strong>. Aunque la definición en sí del <strong>Routing</strong> (mediante patrones de reglas y el uso de <em>wildcards</em> o variables) no ha cambiado (demasiado) con respecto a las versiones de Symfony 1.x, donde sí que han habido extensos cambios  (y, en nuestra modesta opinión, para mucho mejor) es la forma de configurarlo, y es en estas novedades en las que nos vamos a centrar.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/05/logo_symfony_header.jpg" alt="symfony2 routing logo" title="symfony2 routing logo" width="539" height="100" class="alignnone size-full wp-image-452 border" /></p>
<p>Aunque el release de la versión final de <strong>Symfony2</strong> haya sido retrasado, los chicos de <strong>SensioLabs</strong> (y toda la comunidad <strong>Symfony</strong>, por supuesto) siguen avanzando <a href="http://symfony.com/blog/symfony2-beta2-released" target="_blank">pasito</a> a <a href="http://symfony.com/blog/symfony2-beta3-available">pasito</a> para solucionar todos los bugs y cerrar toda la documentación, condiciones necesarias para terminar con la <strong>fase beta</strong>. Mientras tanto, nosotros los desarrolladores de a pie podemos aprovechar para ir familiarizándonos con los (considerables) cambios con respecto a la versión 1.4, aunque actualmente nos enfrentamos a una situación prácticamente inédita: <strong>la documentación existente todavía es escasa y no está actualizada</strong> (ni mucho menos traducida al castellano, para todos aquellos que no estéis a gusto con el inglés).</p>
<p>Como el título de este post indica, vamos a tratar una de las partes más potentes, y a su vez que más quebraderos de cabeza provoca del framework Symfony: <strong>el Routing</strong>. Aunque la definición en sí del <strong>Routing</strong> (mediante patrones de reglas y el uso de <em>wildcards</em> o variables) no ha cambiado (demasiado) con respecto a las versiones de Symfony 1.x, donde sí que han habido extensos cambios  (y, en nuestra modesta opinión, para mucho mejor) es la forma de configurarlo, y es en estas novedades en las que nos vamos a centrar.</p>
<p><span style="color: #008998;"><strong>¿Symfony2? ¿Routing?</strong></span></p>
<p>Lo primero es lo primero, y antes de hablar específicamente sobre el <strong>Routing</strong>, deberíamos echarle un ojo a las nuevas características que nos trae Symfony2, y para eso, recomiendo el <a href=" http://symfony.com/doc/2.0/quick_tour/the_big_picture.html" target="_blank">Quick Tour de Symfony2</a> donde se muestran muchas novedades interesantes.</p>
<p>El objetivo del sistema de Routing en Symfony es <strong>mapear patrones de rutas URL a los diferentes controladores de la aplicación</strong>, con lo que nos permite utilizar de forma fácil y mantenible <strong>pretty URLs</strong> (<em>&#8220;an absolute MUST to any serious web application&#8221;</em>, en palabras de los creadores de Symfony). Una vez puestos en situación, tenemos la <a href=" http://symfony.com/doc/current/book/routing.html" target="_blank">documentación del Routing</a> en el <strong>libro oficial de Symfony2</strong> (aún en inglés, claro), lectura de referencia obligada.</p>
<p><span style="color: #008998;"><strong>Formato de Configuración del Routing</strong></span></p>
<p>La primera gran noticia es que además de utilizar <strong><a href="http://www.yaml.org/" target="_blank">YAML</a></strong> para definir los archivos de configuración del Routing de Symfony, también podemos definirlas tanto en <strong>XML</strong> como vía <strong>PHP</strong> de forma intercambiable y sin afectar al rendimiento de la aplicación, ya que las rutas generadas son cacheadas. Incluso podemos utilizar una combinación de todas para definir nuestras rutas. No es que tengamos problemas con el formato YAML en particular (aunque puede resultar bastante odiable, sobre todo si algo falla), pero todo lo que sean más opciones para el desarrollador es siempre bienvenido. </p>
<p>La sintaxis en <strong>XML</strong> es por supuesto <strong>mucho más verbosa</strong>, pero también más potente, y de todas formas, creo que a estas alturas la mayoría de desarrolladores estamos tan acostumbrados a las estructuras de nodos en formato XML que quizás nos resulte más intuitiva, y con la ventaja adicional de que nuestro <strong>IDE</strong> nos ayudará a autocompletar los nodos y nos informará amablemente si nos hemos colado en algún sitio. Por supuesto, la opción más potente pero mucho menos legible (y por tanto, yo creo que menos recomendable) será definir las rutas &#8220;a pincho&#8221; mediante <strong>código PHP</strong>. Existe una alternativa muy elegante que es definir la ruta mediante <strong>annotations</strong> (es decir, mediante comentarios en el propio código PHP) embebidas en el controlador, una pequeña joya que comentaremos exhaustivamente más adelante.</p>
<p><span style="color: #008998;"><strong>Archivos de Routing Externos</strong></span></p>
<p>La siguiente diferencia en la configuración del Routing, y quizás con aún mayor relevancia que el punto anterior, es que ahora se pueden hacer <strong>includes</strong> (o <strong>imports</strong>) de otros ficheros externos de Routing. Si alguna vez habéis programado un proyecto relativamente grande en Symfony 1.x seguro que el <strong>routing.yml</strong> acabó siendo una pesadilla organizativa donde había casi tantos comentarios de referencia para distinguir qué rutas correspondían a qué módulos como rutas en sí. Pues bien, gracias a esta nueva y genial <em>feature</em>, podemos afirmar que esto es cosa del pasado. Ahora, cada <strong>controlador</strong> puede definir sus propias rutas, y tan sólo debemos importarlas desde el <strong>fichero principal de configuración de Routing</strong>.</p>
<p>Además, podemos definir <strong>prefijos</strong> para estas rutas cargadas externamente, lo cual nos ayudará aún más a tener nuestras rutas bien organizadas, simples y elegantes.</p>
<p><span style="color: #008998;"><strong>@Route: Annotations al poder</strong></span></p>
<p>Las <strong>annotations</strong> son una de las <em>features</em> del <a href="http://en.wikipedia.org/wiki/Annotation#Java_annotations" target="_blank">lenguaje Java</a> a la que más partido se le puede sacar y que, aunque <strong>no son soportadas de forma nativa por PHP</strong>, en Symfony2 pueden utilizarse para configurar muchas funcionalidades de los controladores de manera simple y concisa. Para ello, deberemos activar el <a target="_blank" href="http://symfony2bundles.org/sensio/SensioFrameworkExtraBundle">SensioFrameworkExtraBundle</a>. No te dejes intimidar por eso de <em>experimental</em>, sigue leyendo y verás como merece la pena &#8220;arriesgarse&#8221; por la potencia que tienen.</p>
<p>La <strong>annotation @Route</strong> es la que aquí nos concierne. Su función es <strong>mapear un patrón de ruta con una función controlador</strong>, y como ya hemos comentado, lo mejor es que lo hace desde el propio código del controlador. Podemos encontrar la <a target="_blank" href=" http://bundles.symfony-reloaded.org/frameworkextrabundle/annotations/routing.html">documentación de @Route aquí</a>. La mayor ventaja es que además, de esta manera, el código del controlador y su configuración asociada se encontrarán <strong>en el mismo archivo</strong> (el de la clase del controlador). A la hora de definir rutas más o menos complejas mediante una annotation @Route se pueden utilizar por supuesto variables, requerimientos, etc. tal y como haríamos con una ruta definida por cualquier otro método. Por ejemplo:</p>
<pre class="brush: php; title: ; notranslate">
/**
 * @Route(
       &quot;/lista/:nombre/:page&quot;,
       requirements:{ &quot;page&quot; = &quot;\d+&quot;},
       defaults:{&quot;page&quot;=&quot;1&quot;}
    )
 */
public function listarAction()
{
    //código de la acción
}
</pre>
<p>Características adicionales a destacar:</p>
<ul>
<li>
<strong>Nombre de Ruta</strong></p>
<p>Por defecto, una ruta definida con una annotation @Route recibe un nombre basado en una <strong>concatenación</strong> del nombre del controlador y el método (acción) sobre el que se define. Por nuestra experiencia, es clave que los nombres de rutas en Symfony sean <strong>fáciles de recordar</strong>, <strong>sencillos</strong> y sobre todo <strong>autoexplicativos</strong>, así que recomendamos encarecidamente el uso del atributo de annotation <strong>name</strong> para definir un nombre de ruta que cumpla esas características. Por ejemplo:</p>
<pre class="brush: php; title: ; notranslate">
/**
 * @Route(&quot;/&quot;, name=&quot;lista_productos&quot;)
 */
public function listarAction()
{
    //código de la acción
}
</pre>
</li>
<li>
<strong>Prefijos</strong></p>
<p>Una annotation @Route definida a <strong>nivel de clase</strong> (en lugar de a nivel de método o acción) define un <strong>prefijo</strong> para todas las rutas que se definan dentro de los métodos de esta clase. Ya hemos comentado brevemente los <strong>prefijos</strong> a la hora de incluir archivos de ruta externos, pues bien utilizando annotations también podemos disfrutar de la potencia y limpieza organizativa de esta característica nueva del Routing de Symfony 2.</p>
<pre class="brush: php; title: ; notranslate">

/**
 * @Route(&quot;/productos&quot;)
 */
class ProductoController extends Controller
{
    /**
     * @Route(&quot;/:nombre&quot;, name=&quot;mostrar_producto&quot;)
     */
    public function mostrarAction($id)
    {
      //código de la acción
    }
}//end of class
</pre>
<p>Así, hemos mapeado la acción <strong>mostrar</strong> (definida en la función mostrarAction) dentro del controlador de producto a una regla de Routing cuyo nombre es <strong>mostrar_producto</strong> y cuyo patrón es <strong>/productos/:nombre</strong>
</li>
<li>
<strong>Importación for Dummies</strong></p>
<p>Otra ventaja de las annotations es que nunca se nos olvidará importarlas en el archivo de configuración principal del Routing ya que podemos importar directamente las rutas de todos los controladores (así, a saco) o también por controlador individualmente. </p>
<pre class="brush: python; title: ; notranslate">
# import routes from all controllers
all:
    resource: annotations:*/Controller
</pre>
</li>
</ul>
<p>En resumen, un montón de potentes y jugosas novedades que nos harán sin duda la vida mucho más fácil desde un punto de vista logístico. El Routing de Symfony, que ya era de por sí una pequeña maravilla, ha ganado enteros en donde más fallaba: a nivel organizativo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lostiemposcambian.com/blog/php/configuracion-routing-symfony2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Acortar urls con bit.ly con ActionScript 3.0 en tiempo de escritura</title>
		<link>http://www.lostiemposcambian.com/blog/flash/acortar-urls-con-bit-ly-con-actionscript-3-0-en-tiempo-de-escritura/</link>
		<comments>http://www.lostiemposcambian.com/blog/flash/acortar-urls-con-bit-ly-con-actionscript-3-0-en-tiempo-de-escritura/#comments</comments>
		<pubDate>Sun, 29 May 2011 23:28:00 +0000</pubDate>
		<dc:creator>elad</dc:creator>
				<category><![CDATA[flash]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[bit.ly]]></category>
		<category><![CDATA[goo.gl]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://www.lostiemposcambian.com/blog/?p=2894</guid>
		<description><![CDATA[<a href="http://www.lostiemposcambian.com/blog/flash/acortar-urls-con-bit-ly-con-actionscript-3-0-en-tiempo-de-escritura/"><img class="alignnone size-full wp-image-452 border" title="acortar urls bit.ly flash actionscrip3  en tiempo de escritura" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/05/acortar-url-bitly-flash-as3-tiempo-escritura-real.jpg" width="539" height="130" /></a>

<p>
Ayer contábamos como <a href="http://www.lostiemposcambian.com/blog/flash/acortar-urls-con-bitly-con-flash-actionscript3-y-obtener-estadisticas/" >acortar una url con el más famoso shortener bit.ly y ActionScript 3.0</a>. Continuando un poco con esta línea de post vamos a ver cómo <em>acortar urls mientras el usuario escribe en un campo de texto</em> (para twittear por ejemplo).
</p>]]></description>
			<content:encoded><![CDATA[<p>
Ayer contábamos como <a href="http://www.lostiemposcambian.com/blog/flash/acortar-urls-con-bitly-con-flash-actionscript3-y-obtener-estadisticas/" >acortar una url con el más famoso shortener bit.ly y ActionScript 3.0</a>. Continuando un poco con esta línea de post vamos a ver cómo <em>acortar urls mientras el usuario escribe en un campo de texto</em> (para twittear por ejemplo).</p>
<p>Para probar este ejemplo hay que <strong>escribir un texto que contenga una url</strong> (por ejemplo: <em>http://www.lostiemposcambian.com</em>)
</p>
<p style="border: 1px solid #CCCCCC;">

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_acortar-url-shorten-bitly-flash-as3-textarea_change-data_1219184730"
			class="flashmovie"
			width="539"
			height="130">
	<param name="movie" value="http://www.lostiemposcambian.com/blog/posts/acortar-url-as3/bitly/change/acortar-url-shorten-bitly-flash-as3-textarea_change-data.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://www.lostiemposcambian.com/blog/posts/acortar-url-as3/bitly/change/acortar-url-shorten-bitly-flash-as3-textarea_change-data.swf"
			name="fm_acortar-url-shorten-bitly-flash-as3-textarea_change-data_1219184730"
			width="539"
			height="130">
	<!--<![endif]-->
		<br />
<a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p style="background-color: #f5f5f5; text-align: center; padding: 10px 10px 10px 10px;"><a href="http://www.lostiemposcambian.com/blog/posts/acortar-url-as3/bitly/acortar-url-shorten-bitly-flash-as3-textarea_change.zip" target="_blank"><img title="download código fuente" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2010/09/bt_download.jpg" alt="" width="232" height="32" /></a></p>
<p>Para esta tarea detectamos el cambio en campo de texto mediante <strong>addEventListener(Event.CHANGE, change_handler);</strong><br />
y buscamos mediante expresiones regulares las palabras que sean direcciones web (urls) y que no sean direcciones acortados con bit.ly
</p>
<pre class="brush: as3; title: ; notranslate">

[...]

function change_handler(event:Event):void
{
       //expresión regular para encontrar una url válida
	var regex:RegExp = /(http[s]?:\/\/[\S]+)\s/ig;

       //obtenemos en un array las palabras que coinciden con la expresión regular
	var urls:Array = text_ta.text.match(regex);

	if(urls.length &gt; 0)
	{
		var total:int = urls.length;
		for(var i:int=0; i&lt; total; i++){
                     //si no es una url bit.ly la acortamos...
                     if(urls[i].indexOf(&quot;bit.ly&quot;) == -1) {
                             shortenerURL(urls[i]);
                     }
		}
     }
}
</pre>
<p>Donde el método  <strong>shortenerURL(urls);</strong> es prácticamente igual al método que acortaba la url <strong>shortenclick_handler</strong> en el <a href="http://www.lostiemposcambian.com/blog/flash/acortar-urls-con-bitly-con-flash-actionscript3-y-obtener-estadisticas/" >ejemplo anterior</a> con la diferencia que ahora cuando acabe de acortar la url hará un reemplazando la url larga por la acortada. Para eso nos hemos guardado la url que vamos acortar en la variable <em>url_actual</em>.
</p>
<pre class="brush: as3; title: ; notranslate">

[...]
function complete_handler(event:Event):void
{
       //cogemos la url acortada y la limpiamos de saltos de linea
	var shortURL:String = String(event.target.data).split(&quot;\n&quot;).join(&quot;&quot;);

        //reemplazamos la url larga por la acortada y añadimos un espacio para continuar escribiendo
        text_ta.text = text_ta.text.replace(url_actual, shortURL)+&quot; &quot;;
	info_lb.text = &quot;&quot;;

}
</pre>
<p>De esta forma tenemos una cómoda forma de escribir texto, por ejemplo <strong>para twittear</strong>, sin tener que estar convirtiendo la url como otra tarea aparte. De esta misma manera lo hace la aplicación de escritorio <a href="http://www.tweetdeck.com" target="_blank">TweetDeck</a> que sirve para gestionar cuentas de Twitter; esta aplicación esta desarrollada en <em>Adobe Air y ActionScript</em> 3.0</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lostiemposcambian.com/blog/flash/acortar-urls-con-bit-ly-con-actionscript-3-0-en-tiempo-de-escritura/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acortar urls con bit.ly y Flash ActionScript 3.0. Obtener estadísticas de urls acortadas</title>
		<link>http://www.lostiemposcambian.com/blog/flash/acortar-urls-con-bitly-con-flash-actionscript3-y-obtener-estadisticas/</link>
		<comments>http://www.lostiemposcambian.com/blog/flash/acortar-urls-con-bitly-con-flash-actionscript3-y-obtener-estadisticas/#comments</comments>
		<pubDate>Sun, 29 May 2011 21:47:45 +0000</pubDate>
		<dc:creator>elad</dc:creator>
				<category><![CDATA[flash]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[bit.ly]]></category>
		<category><![CDATA[goo.gl]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://www.lostiemposcambian.com/blog/?p=2753</guid>
		<description><![CDATA[<a href="http://www.lostiemposcambian.com/blog/flash/acortar-urls-con-bitly-con-flash-actionscript3-y-obtener-estadisticas/"><img class="alignnone size-full wp-image-452 border" title="acortar urls y estadísticas bit.ly flash actionscrip3" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/05/acortar-url-bitly-flash-as3.jpg" alt="acortar urls y estadísticas bit.ly flash actionscrip3" width="539" height="130" /></a>

Mediante ActionScript 3.0 y las APIs de los acortadores de urls (url shortener) como son <a href="http://www.bit.ly" target="_blank">bit.ly</a> o <a href="http://www.goo.gl" target="_blank">goo.gl</a> (el oficial de <a href="http://www.google.com" target="_blank">Google</a>) podemos realizar la sencilla tarea de reducir nuestras direcciones webs en los mínimos carácteres posibles.

Pero, <em>¿qué es un acortador de direcciones?</em> Un acortador de direcciones es un servicio que traduce una dirección de una página web normal en una dirección codificada con un número reducido de carácteres. Esto es debido a que en <a href="http://www.twitter.com" target="_blank"><strong>Twitter</strong></a> sólo podemos utilizar <strong>140 carácteres</strong> en cada tweet y para poder compartir urls necesitamos que nos ocupe lo mínimo posible ;)

]]></description>
			<content:encoded><![CDATA[<p>Mediante ActionScript 3.0 y las APIs de los acortadores de urls (url shortener) como son <a href="http://www.bit.ly" target="_blank">bit.ly</a> o <a href="http://www.goo.gl" target="_blank">goo.gl</a> (el oficial de <a href="http://www.google.com" target="_blank">Google</a>) podemos realizar la sencilla tarea de reducir nuestras direcciones webs en los mínimos carácteres posibles.</p>
<p>Pero, <em>¿qué es un acortador de direcciones?</em> Un acortador de direcciones es un servicio que traduce una dirección de una página web normal en una dirección codificada con un número reducido de carácteres. Esto es debido a que en <a href="http://www.twitter.com" target="_blank"><strong>Twitter</strong></a> sólo podemos utilizar <strong>140 carácteres</strong> en cada tweet y para poder compartir urls necesitamos que nos ocupe lo mínimo posible <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Hay muchos servicios de este estilo como podéis ver en este otro post: <a href="http://elgeek.com/16-sitios-para-acortar-urls" target="_blank">16 sitios para acortar urls</a>. El más famoso es <a href="http://www.bit.ly" target="_blank">bit.ly</a>.</p>
<p>Este es un post vamos a acortar una url con ActionScript 3.0 y ver que posibilidades nos dan los acortadores de url que nos permiten incluso obtener <strong>estadísticas</strong> de estos enlaces breves.</p>
<p>
<span style="color: #008998;"><strong>Acotar url con ActionScript 3.0 y bit.ly</strong></span>
</p>
<p style="border: 1px solid #CCCCCC;">

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_acortar-url-shorten-bitly-flash-as3-data_376252583"
			class="flashmovie"
			width="539"
			height="130">
	<param name="movie" value="http://www.lostiemposcambian.com/blog/posts/acortar-url-as3/bitly/acortar-url-shorten-bitly-flash-as3-data.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://www.lostiemposcambian.com/blog/posts/acortar-url-as3/bitly/acortar-url-shorten-bitly-flash-as3-data.swf"
			name="fm_acortar-url-shorten-bitly-flash-as3-data_376252583"
			width="539"
			height="130">
	<!--<![endif]-->
		<br />
<a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p style="background-color: #f5f5f5; text-align: center; padding: 10px 10px 10px 10px;"><a href="http://www.lostiemposcambian.com/blog/posts/acortar-url-as3/bitly/acortar-url-shorten-bitly-flash-as3.zip" target="_blank"><img title="download código fuente" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2010/09/bt_download.jpg" alt="" width="232" height="32" /></a></p>
<p>
Para poder utilizar la <a href="http://code.google.com/p/bitly-api/wiki/ApiDocumentation" target="_blank">API de bit.ly</a> lo primero que tenemos que hacer es <a href="http://code.google.com/p/bitly-api/wiki/ApiDocumentation#Getting_Started" target="_blank">obtener una <strong>API Key</strong></a> como en todas las APIs web 2.0. Primero <a href="http://bit.ly/a/sign_up" target="_blank">te registras en bit.ly</a> y luego <a href="http://bit.ly/a/your_api_key" target="_blank">solicitas las API Key</a>. Mediante el login y la apikey podremos hacer solicitudes a la API.</p>
<p>En este caso para acortar una url utilizaremos el método <a href="http://code.google.com/p/bitly-api/wiki/ApiDocumentation#/v3/shorten" target="_blank"><strong>shorten</strong></a></p>
<p>Después tan sólo hay que llamar al método mediante <em>URLLoader</em> pasando por <strong>GET</strong> los parámetros adecuados: <strong>login, longUrl, apiKey, format</strong>. Donde tenemos varios formatos:<em> txt (texto plano), XML o JSON</em>. En el ejemplo utilizaremos simplemente el texto plano.</p>
<pre class="brush: as3; title: ; notranslate">
//variables
var LOGIN_SHORTENER:String = &quot;TU LOGIN&quot;;
var APIKEY_SHORTENER:String = &quot;TU APIKEY&quot;;
var FORMAT_SHORTENER:String = &quot;txt&quot;; //xml / json / txt

//datos de carga
var datos:URLLoader = new URLLoader();
datos.addEventListener(Event.COMPLETE,complete_handler);

[...]

         //expresion regular que nos dice si la url es una url correcta
          var regex:RegExp = /^http(s)?:\/\/((\d+\.\d+\.\d+\.\d+)|(([\w-]+\.)+([a-z,A-Z][\w-]*)))(:[1-9][0-9]*)?(\/([\w-.\/:%+@&amp;=]+[\w- .\/?:%+@&amp;=]*)?)?(#(.*))?$/i;

          if(regex.test(url_ti.text)) {
	        //es una url correcta y no es del acortador bit.ly
         	 if(url_ti.text.indexOf(&quot;bit.ly&quot;) == -1) {
                      var url_bitly:URLRequest = new URLRequest(&quot;http://api.bitly.com/v3/shorten&quot;);
                      url_bitly.method = URLRequestMethod.GET;

	             var vars:URLVariables = new URLVariables();
	             vars.longUrl = url_ti.text; //url a enviar
	             vars.login = LOGIN_SHORTENER;
	             vars.apiKey = APIKEY_SHORTENER;
	             vars.format = FORMAT_SHORTENER;

	             url_bitly.data = vars;

                     //hacemos la petición a la url con los parametros por GET
	             datos.load(url_bitly);
         }

[...]

function complete_handler(event:Event):void
{
       //al ser el format txt nos devuelve la cadena plana
	var shortURL:String = String(event.target.data);
	result_lb.text = shortURL; //donde result_lb es donde mostramos el resultado
}
</pre>
<p>
Como curiosidad también hemos añadido la funcionalidad de <strong>copiar esa url al portapapeles desde Flash.</strong></p>
<pre class="brush: as3; title: ; notranslate">
function copyclick_handler(event:MouseEvent):void
{
	if(result_lb.text != &quot;&quot;)
	{
		System.setClipboard(result_lb.text);
	}
}
</pre>
</p>
<p>
Si queremos hacer esta labor de acotar una url desde <strong>servidor con un lenguaje PHP</strong> tenemos un claro ejemplo en el blog de blog.unijimpe.net: <a href="http://blog.unijimpe.net/acortar-urls-con-php-y-apibitly/" target="_blank">Acortar urls con PHP y API bit.ly</a>
</p>
<p>
<span style="color: #008998;"><strong>Estadísticas en una url acortada</strong></span>
</p>
<p style="border: 1px solid #CCCCCC;">

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_estadisticas-clicks-referers-bitly-flash-as3-data_1220992256"
			class="flashmovie"
			width="539"
			height="350">
	<param name="movie" value="http://www.lostiemposcambian.com/blog/posts/acortar-url-as3/bitly/estadisticas-clicks-referers-bitly-flash-as3-data.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://www.lostiemposcambian.com/blog/posts/acortar-url-as3/bitly/estadisticas-clicks-referers-bitly-flash-as3-data.swf"
			name="fm_estadisticas-clicks-referers-bitly-flash-as3-data_1220992256"
			width="539"
			height="350">
	<!--<![endif]-->
		<br />
<a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p style="background-color: #f5f5f5; text-align: center; padding: 10px 10px 10px 10px;"><a href="http://www.lostiemposcambian.com/blog/posts/acortar-url-as3/bitly/estadisticas-clicks-referers-bitly-flash-as3.zip" target="_blank"><img title="download código fuente" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2010/09/bt_download.jpg" alt="" width="232" height="32" /></a></p>
<p>
Por otro lado gracias a los acortadores y a sus APIs también podemos conocer las estadísticas de clicks de estas urls acortadas así como desde que fuente<em> (referrer) </em>se ha realizado el click. El método es <a href="http://code.google.com/p/bitly-api/wiki/ApiDocumentation#/v3/referrers " target="_blank">referrers</a>.<br />
Se le envia la<strong> url acortada</strong> y devuelve un XML como indica en la documentación oficial:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;response&gt;
  &lt;status_code&gt;200&lt;/status_code&gt;
  &lt;data&gt;
    &lt;short_url&gt;http://bit.ly/hbt0d7&lt;/short_url&gt;
    &lt;global_hash&gt;hDna9J&lt;/global_hash&gt;
    &lt;user_hash&gt;hbt0d7&lt;/user_hash&gt;
    &lt;referrers&gt;
      &lt;referrer&gt;http://twitter.com/&lt;/referrer&gt;
      &lt;clicks&gt;19&lt;/clicks&gt;
    &lt;/referrers&gt;
    &lt;referrers&gt;
      &lt;referrer&gt;direct&lt;/referrer&gt;
      &lt;clicks&gt;16&lt;/clicks&gt;
    &lt;/referrers&gt;
    &lt;referrers&gt;
      &lt;referrer&gt;http://td.partners.bit.ly/&lt;/referrer&gt;
      &lt;clicks&gt;6&lt;/clicks&gt;
    &lt;/referrers&gt;
    &lt;referrers&gt;
      &lt;referrer&gt;http://twitter.com/eladnts&lt;/referrer&gt;
      &lt;clicks&gt;4&lt;/clicks&gt;
    &lt;/referrers&gt;
    &lt;referrers&gt;
      &lt;referrer&gt;http://mobile.twitter.com/perex/following&lt;/referrer&gt;
      &lt;clicks&gt;1&lt;/clicks&gt;
    &lt;/referrers&gt;
    &lt;referrers&gt;
      &lt;referrer&gt;http://www.lostiemposcambian.com/blog/tag/nitsnets/&lt;/referrer&gt;
      &lt;clicks&gt;1&lt;/clicks&gt;
    &lt;/referrers&gt;
    &lt;referrers&gt;
      &lt;referrer&gt;http://www.lostiemposcambian.com/blog/web-2-0/frameworks-php-symfony-vs-codeigniter-casos-de-exito/&lt;/referrer&gt;
      &lt;clicks&gt;1&lt;/clicks&gt;
    &lt;/referrers&gt;
  &lt;/data&gt;
  &lt;status_txt&gt;OK&lt;/status_txt&gt;
&lt;/response&gt;
</pre>
<p>En el ejemplo ponemos la url comprimida de la <a href="http://www.lostiemposcambian.com/blog/web-2-0/industrializacion-en-la-web-conferencia-adwe/">Industrialización en la web</a> y vemos que la fuente desde donde más se ha pinchado ha sido twitter <img src='http://www.lostiemposcambian.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>
<span style="color: #008998;"><strong>Montar un propio acortador de urls</strong></span><br />
Incluso si no quieres depender de un servicio externo para acortar las urls podriamos incluso llegar a crear nuestro propio acortador de urls como se puede apreciar en <a href="http://www.neoteo.com/monta-tu-propio-acortador-de-url-atajos-url" target="_blank">&#8220;Monta tu propio acortador de url&#8221;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lostiemposcambian.com/blog/flash/acortar-urls-con-bitly-con-flash-actionscript3-y-obtener-estadisticas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vídeo hacia atrás (backwards) en Flash</title>
		<link>http://www.lostiemposcambian.com/blog/flash/video-hacia-atras-backwards-en-flash/</link>
		<comments>http://www.lostiemposcambian.com/blog/flash/video-hacia-atras-backwards-en-flash/#comments</comments>
		<pubDate>Thu, 26 May 2011 09:20:39 +0000</pubDate>
		<dc:creator>danii</dc:creator>
				<category><![CDATA[flash]]></category>
		<category><![CDATA[flv]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.lostiemposcambian.com/blog/?p=2805</guid>
		<description><![CDATA[<a href="http://www.lostiemposcambian.com/blog/flash/video-hacia-atras-backwards-en-flash">
<img src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/05/walking-backwards1.jpg" alt="" title="walking-backwards" width="539" height="229"  class="alignnone size-full wp-image-452 border" /></a>

Existen determinadas situaciones en las que podemos querer reproducir una película Flash en dos sentidos, "hacia delante" (es decir normal) pero también "hacia atrás" (<em>backwards</em>), por ejemplo si tenemos una transición complicada de entrada y queremos que nos sirva también de salida. Pero, <strong>¿y si tenemos esta transición en formato vídeo?</strong>

En condiciones normales, Flash nos ofrece la potencia de reproducir una línea de tiempo hacia atrás utilizando el método <a href="http://livedocs.adobe.com/flash/9.0_es/ActionScriptLangRefV3/flash/display/MovieClip.html#prevFrame()" target="_blank">prevFrame</a>. Sin embargo, si incluimos un video sobre la línea de tiempo e intentamos reproducirla hacia atrás utilizando ActionScript, es muy probable que nos encontremos con que se reproduce mal e incluso va dando saltos.]]></description>
			<content:encoded><![CDATA[<p>Existen determinadas situaciones en las que podemos querer reproducir una película Flash en dos sentidos, &#8220;hacia delante&#8221; (es decir normal) pero también &#8220;hacia atrás&#8221; (<em>backwards</em>), por ejemplo si tenemos una transición complicada de entrada y queremos que nos sirva también de salida. Pero, <strong>¿y si tenemos esta transición en formato vídeo?</strong></p>
<p>En condiciones normales, Flash nos ofrece la potencia de reproducir una <strong>línea de tiempo hacia atrás</strong> utilizando el método <a href="http://livedocs.adobe.com/flash/9.0_es/ActionScriptLangRefV3/flash/display/MovieClip.html#prevFrame()" target="_blank">prevFrame</a>. Sin embargo, si incluimos un video sobre la línea de tiempo e intentamos reproducirla hacia atrás utilizando ActionScript, es muy probable que nos encontremos con que se reproduce mal e incluso va dando saltos.</p>
<p>La raíz de este problema se encuentra en la estructura interna de <strong>keyframes</strong> (fotogramas clave) del propio vídeo. Un archivo de vídeo digital comprimido sólo almacena los cambios en la imagen que se producen entre un frame y otro frame, pero no es así con los keyframes, que se almacenan como imágenes nuevas y completas. Por tanto, dependiendo de la cantidad de movimiento (o cambios de plano) que incluya el vídeo, necesitaremos más keyframes (esto es cierto incluso aunque se vaya a reproducir sólo en sentido normal, of course), y para que un vídeo se reproduzca correctamente tanto &#8220;hacia delante&#8221; como &#8220;hacia atrás&#8221;, necesitamos un mayor número de keyframes. Como regla, con una <strong>distancia entre keyframes de 2</strong> (keyframes cada 2 frames) el vídeo se reproducirá perfectamente en ambos sentidos, pero se incrementará notablemente el tamaño del archivo (aunque seguirá siendo sensiblemente menos que dos vídeos independientes)</p>
<p>Desde <a href="http://www.adobe.com/es/products/creativesuite.html?sdid=GNOAS&#038;skwcid=TC%7c22747%7cadobe%2520creative%2520suite%7c%7cS%7cb%7c8039937320" target="_blank"><strong>Flash Media Encoder</strong></a> que viene con el Adobe Creative Suite se puede cambiar dicha distancia entre keyframes accediendo en el panel de <i>Ajustes / Pestaña de la derecha de Video / Ajustes avanzados / Definir distancia del fotograma clave</i></p>
<p><img src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/05/flashmediaencoder-distancia-keyframes.jpg" alt="flash media encoder distancia fotogramas keyframes" title="flash media encoder distancia fotogramas keyframes" width="539" height="226"  class="alignnone size-full wp-image-452 border" /></p>
<p>He preparado una pequeña demo con un vídeo de yo mismo (bueno, más bien mis pies) caminando por mi estudio, en la que he incluido las dos versiones: primero, sin meter más keyframes (podemos ver claramente como al reproducirse hacia atrás, el vídeo va a trompicones) y otra reduciendo notablemente la distancia entre keyframes a 6 (es decir, keyframes cada 6 frames) en el que veréis como mis gráciles pies van hacia atrás mucho más elegantemente. </p>
<p style="border: 1px solid #CCCCCC;">

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_video_backwards_1028066298"
			class="flashmovie"
			width="539"
			height="350">
	<param name="movie" value="http://www.lostiemposcambian.com/blog/posts/video-backwards/video_backwards.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://www.lostiemposcambian.com/blog/posts/video-backwards/video_backwards.swf"
			name="fm_video_backwards_1028066298"
			width="539"
			height="350">
	<!--<![endif]-->
		
<p><a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p style="background-color: #f5f5f5; text-align: center; padding: 10px 10px 10px 10px;"><a href="http://www.lostiemposcambian.com/blog/posts/video-backwards/video_backwards.fla" target="_blank"><img title="download código fuente" src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2010/09/bt_download.jpg" alt="" width="232" height="32" /></a></p>
<p>Por supuesto, lo ideal es buscar un compromiso entre reproducción óptima y peso. Por ejemplo, en la demo la diferencia de peso entre un vídeo y otro es de apenas 30 kb, así que creo que compensa sobradamente. Yo he encontrado que, en general, para vídeos a <strong>24 frames por segundo (fps)</strong>, con <strong>keyframes cada 6 frames</strong> suele ser suficiente y no supone un incremento demasiado elevado del tamaño del archivo de video. Leí en un artículo de la <a target="_blank" href="http://www.webdesignermag.co.uk/">revista Web Designer</a> que era conveniente que la distancia entre keyframes fuese un número divisor del número de frames por segundo que tuviese el vídeo, y aunque el autor no justificaba de ninguna manera el porqué yo siempre intento seguir esta regla. Así que por ejemplo si en vez de 24 fps tenemos un vídeo de <strong>15 o 20 fps</strong>, sería conveniente que la distancia entre keyframes fuese de <strong>5</strong>. </p>
<p>Esto nos ahorrará el tener que incluir dos vídeos (uno para cada sentido) con el consiguiente ahorro de nuestro tiempo a la hora de prepararlos, y también, ya más a largo plazo, de ancho de banda y de tiempo de espera para el usuario. </p>
<p><h3><span style="color: #FF6600;">Utilizado en: </span><span style="color: #999999;">OCB Blackthinking</span></h3>
<p>Como apunte de <strong>know-how</strong> propio, es así como hicimos el 360º interactivo de la isla en el site de <a href="http://www.lostiemposcambian.com/blog/flash/nitsnets-gana-su-primer-fwa-con-ocb-blackthinking/" target="_blank">OCB Blackthinking</a>, una de las muchas <em>features</em> ocultas o semi-ocultas que tiene esa web y que, si no llega a ser por esto, nos hubiera supuesto aún más quebraderos de cabeza!
</p>
<p>
<a href="http://www.lostiemposcambian.com/blog/flash/nitsnets-gana-su-primer-fwa-con-ocb-blackthinking/" target="_blank"><img src="http://www.lostiemposcambian.com/blog/wp-content/uploads/2011/05/ocb-360-island.jpg" alt="" title="ocb-360-island" width="539" height="172" class="alignnone size-full wp-image-452 border" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lostiemposcambian.com/blog/flash/video-hacia-atras-backwards-en-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

