<?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>AlvaroVeliz</title>
	<atom:link href="http://blog.alvaroveliz.cl/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.alvaroveliz.cl</link>
	<description>Recetas de Desarrollo</description>
	<lastBuildDate>Thu, 02 Sep 2010 22:35:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Instalar plugins en WordPress con un solo &#8220;click&#8221;</title>
		<link>http://blog.alvaroveliz.cl/2010/09/instalar-plugins-en-wordpress-con-solo-un-click/</link>
		<comments>http://blog.alvaroveliz.cl/2010/09/instalar-plugins-en-wordpress-con-solo-un-click/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 07:47:32 +0000</pubDate>
		<dc:creator>alvaroveliz</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.alvaroveliz.cl/?p=172</guid>
		<description><![CDATA[Cuando tienes un blog de WordPress en tu dominio personal siempre tienes la posibilidad de cambiar los themes (como en mi caso, que dicho sea de paso fué actualizado), instalar plugins, entre otras cosas. Pero el problema está en que por defecto WordPress no viene con la posibilidad de hacerlo automáticamente, por lo tanto, incurrimos [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2010%2F09%2Finstalar-plugins-en-wordpress-con-solo-un-click%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2010%2F09%2Finstalar-plugins-en-wordpress-con-solo-un-click%2F&amp;source=alvaroveliz&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Cuando tienes un blog de <strong>WordPress</strong> en tu dominio personal siempre tienes la posibilidad de cambiar los themes (como en mi caso, que dicho sea de paso fué actualizado), instalar plugins, entre otras cosas.</p>
<p>Pero el problema está en que por defecto WordPress no viene con la posibilidad de hacerlo automáticamente, por lo tanto, incurrimos a subirlos <abbr title="Mediante FTP">&#8220;a mano&#8221;</abbr> al hosting, luego descomprimirlo y posteriormente activarlo y configurarlo.</p>
<p>Este problema puede ser solucionado con 3 simples pasos&#8230;<span id="more-172"></span></p>
<h2>Primer paso</h2>
<p>Dar permisos de escritura (777) a la carpeta &#8220;wp-content&#8221;</p>
<h2>Segundo paso</h2>
<p>Modificar el filtro &#8220;<em>filesystem_method</em>&#8221; editando el archivo &#8220;<strong>wp-config.php</strong>&#8221; y agregando las siguientes lineas al final del archivo:</p>
<pre class="brush: php;"> if(is_admin()) {
  add_filter('filesystem_method', create_function('$a', 'return &quot;direct&quot;;' ));
  define( 'FS_CHMOD_DIR', 0751 );
} </pre>
<h2>Tercer paso</h2>
<p>Los engañé, no existe un tercer paso.</p>
<p>Con esto ya podremos instalar themes, actualizar e instalar plugins automáticamente.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvaroveliz.cl/2010/09/instalar-plugins-en-wordpress-con-solo-un-click/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial: Crear un Plugin de jQuery (aSliderText)</title>
		<link>http://blog.alvaroveliz.cl/2010/05/tutorial-crear-un-plugin-de-jquery/</link>
		<comments>http://blog.alvaroveliz.cl/2010/05/tutorial-crear-un-plugin-de-jquery/#comments</comments>
		<pubDate>Wed, 26 May 2010 15:00:03 +0000</pubDate>
		<dc:creator>alvaroveliz</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Destacados]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[setBio]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.alvaroveliz.cl/?p=144</guid>
		<description><![CDATA[Luego de terminar la primera versión de setBio comenzamos a mejorar la aplicación, partiendo por el holder! El holder (el home cuando no estás logeado en la aplicación) tiene dos listas de biografías en la parte inferior de la página, ahí quize innovar implementando un plugin de jQuery que hiciera el efecto &#8220;slide&#8221; para cada [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2010%2F05%2Ftutorial-crear-un-plugin-de-jquery%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2010%2F05%2Ftutorial-crear-un-plugin-de-jquery%2F&amp;source=alvaroveliz&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Luego de terminar la primera versión de <a href="http://setbio.com"><strong>setBio</strong></a> comenzamos a mejorar la aplicación, partiendo por el holder!<br />
El holder (el home cuando no estás logeado en la aplicación) tiene dos listas de biografías en la parte inferior de la página, ahí quize innovar implementando un plugin de jQuery que hiciera el efecto &#8220;slide&#8221; para cada biografía.</p>
<p>El tema es que no encontré el plugin, es decir, lo encontré&#8230;pero eran demasiado para una función tan simple. Es por eso que tomé la decisión de hacerlo a mi modo, pero para hacerlo interesante me propuse aprender como es la <strong>creación de un plugin de jQuery</strong>.</p>
<p><span id="more-144"></span></p>
<h2>Idea principal</h2>
<p>Para crear el <strong>plugin de jQuery</strong> hice algunas pruebas &#8220;en duro&#8221; (hardcode) en el <a href="http://api.jquery.com/ready/"><em>document ready</em></a>.</p>
<p>La idea principal fué al siguiente:</p>
<ul>
<li>Sacar el último elemento de una lista (UL-LI) y luego dejarlo como primer elemento</li>
<li>Realizar la función anterior cada cierto tiempo utilizando <a href="http://www.w3schools.com/jsref/met_win_setinterval.asp">setInterval</a></li>
</ul>
<p>El html es una lista simple como la siguiente:</p>
<pre class="brush: xml;">
&lt;ul id=&quot;biographies&quot;&gt;
  &lt;li&gt;Lorem ipsum dolor sit am...&lt;/li&gt;
  &lt;li&gt;Lorem ipsum dolor sit am...&lt;/li&gt;
  &lt;li&gt;Lorem ipsum dolor sit am...&lt;/li&gt;
  &lt;li&gt;Lorem ipsum dolor sit am...&lt;/li&gt;
  &lt;li&gt;Lorem ipsum dolor sit am...&lt;/li&gt;
  &lt;li&gt;Lorem ipsum dolor sit am...&lt;/li&gt;
  &lt;li&gt;Lorem ipsum dolor sit am...&lt;/li&gt;
  &lt;li&gt;Lorem ipsum dolor sit am...&lt;/li&gt;
  &lt;li&gt;Lorem ipsum dolor sit am...&lt;/li&gt;
  &lt;li&gt;Lorem ipsum dolor sit am...&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>y el código que hace el efecto slider es el siguiente:</p>
<pre class="brush: jscript;">
$(document).ready(function(){
  // Agrego un overflow para ocultar algunos resultados
  $('#biographies').css('height', 470).css('overflow', 'hidden');
  setInterval(&quot;sliderText()&quot;, 5000);
});

function sliderText() {
  $('#biographies').prepend('&lt;li&gt;' + $('li:last', $('#biographies')).html() + '&lt;/li&gt;');
  $('li:first-child', $('#biographies')).hide().fadeIn('slow');
  $('li:last', $('#biographies')).remove();
}
</pre>
<h2>Creando el plugin</h2>
<p>Ahora, para convertir esto en plugin no hubo demasiada ciencia. <strong>jQuery</strong> nos dice cómo es que se debe crear un plugin en su sitio web y al final nos da la clave de <a href="http://docs.jquery.com/Plugins/Authoring#Putting_It_All_Together"><strong>cómo debemos comenzar</strong></a></p>
<p>Utilizando esta información nos resulta algo como lo siguiente:</p>
<pre class="brush: jscript;">
(function($){
 	$.fn.extend({
 		aSliderText: function(options) {
			var defaults = {
				updateTime: 6000,
				height: 0,
				element: 'li'
			}
			var options = $.extend(defaults, options);

    	return this.each(function() {
				var o = options;
				var obj = $(this);

				if (o.height &gt; 0) {
					obj.css('height', o.height).css('overflow', 'hidden');
				}

	 			var updateSlider = function() {
					obj.prepend('&lt;'+o.element+'&gt;' + $(o.element+':last', obj).html() + '&lt;/'+o.element+'&gt;');
					$(o.element + ':first-child', obj).hide().fadeIn('slow');
					$(o.element + ':last', obj).remove();
	 			};

				window.setInterval(updateSlider, options.updateTime);
    	});

    }
	});
})(jQuery);
</pre>
<p>Acá utilicé un truco para crear el setInterval e utilizar la función de jQuery. Se entrega como parametro una función como tal, es por eso que creamos la variable updateSlider como función.</p>
<p>Luego, se utiliza el plugin del siguiente modo:</p>
<pre class="brush: jscript;">
$('#biographies').aSliderText({updateTime:7000, height: 560});
</pre>
<h2>Descarga y Demo</h2>
<p>El plugin está bajo la <a href="http://www.opensource.org/licenses/mit-license.php">Licencia MIT</a> que puede ser descargado acá: <a href="http://alvaroveliz.cl/aslidertext/jquery.aslidertext.zip">jQuery aSliderText v0.1</a> y si quieren ver el <strong>DEMO</strong>, revisen aquí: <a href="http://alvaroveliz.cl/aslidertext/">jQuery aSliderText DEMO</a></p>
<p><a href="http://blog.alvaroveliz.cl/wp-content/uploads/2010/05/jqueryplugin.png" class="thickbox"><img class="alignright size-medium  wp-image-160" style="margin-left: 10px; margin-right: 10px;" title="jQuery plugins" src="http://blog.alvaroveliz.cl/wp-content/uploads/2010/05/jqueryplugin-300x217.png" alt="" width="300" height="217" /></a></p>
<p>También pueden visitar la página de plugin en <a href="http://plugins.jquery.com/project/aSliderText"><strong>jQuery Plugins</strong></a></p>
<p>Aún estoy haciendo pruebas con este plugin con el objetivo de publicar una versión más estable, así que si lo descargan deben saber que aún puede tener bugs o no funcionar con versiones antiguas de jQuery.</p>
<p>Saludos y suerte con esos <strong>plugins</strong>!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvaroveliz.cl/2010/05/tutorial-crear-un-plugin-de-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les presento &#8220;setBio.com&#8221;</title>
		<link>http://blog.alvaroveliz.cl/2010/05/setbio/</link>
		<comments>http://blog.alvaroveliz.cl/2010/05/setbio/#comments</comments>
		<pubDate>Tue, 25 May 2010 15:00:42 +0000</pubDate>
		<dc:creator>alvaroveliz</dc:creator>
				<category><![CDATA[Aplicaciones]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Personales]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[setBio]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://blog.alvaroveliz.cl/?p=127</guid>
		<description><![CDATA[setBio es una aplicación que permite que tus amigos te escriban una biografía que defina tu perfil en Twitter. Cómo nace la idea? La idea nace de la necesidad de aquellas personas que no tienen la capacidad de definirse a sí mismos o que simplemente no están interesados en escribir alguna información que los describa. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2010%2F05%2Fsetbio%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2010%2F05%2Fsetbio%2F&amp;source=alvaroveliz&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><strong><a href="http://setbio.com">setBio</a></strong> es una aplicación que permite que tus amigos te escriban una biografía que defina tu perfil en <a href="http://twitter.com">Twitter</a>.</p>
<p><a href="http://setbio.com"><img class="aligncenter size-medium wp-image-128" title="setBio" src="http://blog.alvaroveliz.cl/wp-content/uploads/2010/05/setbio-300x83.png" alt="Deja que tus seguidores te describan" width="300" height="83" /></a></p>
<h3>Cómo nace la idea?</h3>
<p>La idea nace de la necesidad de aquellas personas que no tienen la capacidad de definirse a sí mismos o que simplemente no están interesados en escribir alguna información que los describa. Junto a <a href="http://carloselias.cl">Carlos Elías</a> desarrollamos el concepto, lo comenzamos hace 3 meses y se terminó en 3 días. Yo desarrollé la aplicación y él creo el diseño.<span id="more-127"></span></p>
<h3>Cómo se ocupa?</h3>
<p>Es bien simple, debes ingresar a la aplicación con tu cuenta <a href="http://setbio.com/account/signup">Twitter</a>, luego presionar el boton &#8220;Escribir una Bio&#8221; y rellenar el formulario para enviar biografías a tus amigos. El formulario te permitirá seleccionar el amigo al cual quieres escribirle la biografía y definir un mensaje para que le avises a través de Twitter.</p>
<p>Cuando tu amigo reciba el mensaje e ingrese, podrá ver las biografías que le hayan enviado y también podrá compartir biografías con sus propios amigos.</p>
<h3>Por qué es útil?</h3>
<p>Sabes por qué es útil? Pues porque Twitter utiliza la Biografía del usuario como descripción del perfil (a nivel de página) y eso permite la indexación de tu perfil de Twitter en los buscadores en base a lo que dice tu descripción.</p>
<p>Por ejemplo, veamos el perfil de Twitter de <a href="http://twitter.com/edoapp">@edoApp</a></p>
<p style="text-align: left;"><img class="size-full wp-image-129 aligncenter" style="border: 1px solid black;" title="Perfil de edo en Twitter" src="http://blog.alvaroveliz.cl/wp-content/uploads/2010/05/edoapp1.png" alt="" width="251" height="228" /></p>
<p>El código que encontramos es el siguiente:</p>
<pre class="brush: xml;">
&lt;meta content=&quot;Un pequeño muy bien educado, te ayudará a editar tus sitios web de forma muy rápida. — @alvaroveliz&quot; name=&quot;description&quot; /&gt;
</pre>
<p><strong>Y ESTO QUE SIGNIFICA?</strong>.<br />
Significa que mientras mejor esté descrito el <strong>meta description</strong> de la página del perfil, mejor será indexada. Es como hacer <abbr title="Search Engine Optimization">SEO</abbr> con la ayuda de tus amigos&#8230;.se entiende?</p>
<h3>Cómo ayudar?</h3>
<p>No se preocupen, no les voy a pedir donaciones, solamente necesito que me ayuden utilizando la aplicación, enviando sus comentarios, sugerencias y errores a <a href="http://setbio.com">@setBio</a>&#8230;AH! y claro, <strong>envíando todas las biografías que quieran!</strong></p>
<p>Muchas gracias por utilizar la aplicación, sinceramente. <img src='http://blog.alvaroveliz.cl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvaroveliz.cl/2010/05/setbio/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Twitter en sidebar de Firefox sin extensiones</title>
		<link>http://blog.alvaroveliz.cl/2010/05/twitter-en-sidebar-de-firefox-sin-extensiones/</link>
		<comments>http://blog.alvaroveliz.cl/2010/05/twitter-en-sidebar-de-firefox-sin-extensiones/#comments</comments>
		<pubDate>Tue, 11 May 2010 17:32:07 +0000</pubDate>
		<dc:creator>alvaroveliz</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://blog.alvaroveliz.cl/?p=114</guid>
		<description><![CDATA[Una forma muy simple de usar Twitter en Firefox sin instalar extensiones es sacando el provecho de su versión mobile: Ingresa con tu cuenta a http://m.twitter.com Arrastra la pestañana a tus favoritos Presiona el botón derecho en el favorito arrastrado y seleciona la opción &#8220;Propiedades&#8221;, ahí seleciona &#8220;Cargar este marcador en el panel lateral&#8221; Ahora [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2010%2F05%2Ftwitter-en-sidebar-de-firefox-sin-extensiones%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2010%2F05%2Ftwitter-en-sidebar-de-firefox-sin-extensiones%2F&amp;source=alvaroveliz&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Una forma muy simple de usar Twitter en Firefox sin instalar extensiones es sacando el provecho de su versión mobile:</p>
<p><strong>Ingresa con tu cuenta a <a href="http://m.twitter.com">http://m.twitter.com</a></strong></p>
<p style="text-align: center;"><a href="http://blog.alvaroveliz.cl/wp-content/uploads/2010/05/mobile.png" class="thickbox"><img class="size-medium wp-image-116 aligncenter" title="Twitter mobile" src="http://blog.alvaroveliz.cl/wp-content/uploads/2010/05/mobile-169x300.png" alt="" width="155" height="274" /></a></p>
<p><strong>Arrastra la pestañana a tus favoritos</strong></p>
<p style="text-align: center;"><a href="http://blog.alvaroveliz.cl/wp-content/uploads/2010/05/marcador.png" class="thickbox"><img class="size-medium wp-image-115 aligncenter" title="Arrastrar marcador" src="http://blog.alvaroveliz.cl/wp-content/uploads/2010/05/marcador-300x143.png" alt="" width="210" height="100" /></a></p>
<p><strong>Presiona el botón derecho en el favorito arrastrado y seleciona la opción &#8220;Propiedades&#8221;, ahí seleciona &#8220;Cargar este marcador en el panel lateral&#8221;</strong></p>
<p style="text-align: center;"><a href="http://blog.alvaroveliz.cl/wp-content/uploads/2010/05/propiedades.png" class="thickbox"><img class="size-medium wp-image-117 aligncenter" title="Propiedades de  marcador" src="http://blog.alvaroveliz.cl/wp-content/uploads/2010/05/propiedades-300x224.png" alt="" width="300" height="224" /></a></p>
<p><strong>Ahora cierra la pestaña de twitter mobile y presiona el marcador </strong></p>
<p style="text-align: center;"><a href="http://blog.alvaroveliz.cl/wp-content/uploads/2010/05/sidebar.png" class="thickbox"><img class="size-medium wp-image-118 aligncenter" title="Sidebar firefox" src="http://blog.alvaroveliz.cl/wp-content/uploads/2010/05/sidebar-132x300.png" alt="" width="132" height="300" /></a></p>
<p>Fácil no? <img src='http://blog.alvaroveliz.cl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvaroveliz.cl/2010/05/twitter-en-sidebar-de-firefox-sin-extensiones/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TOL: Tweet out Loud</title>
		<link>http://blog.alvaroveliz.cl/2010/04/tol-tweet-out-loud/</link>
		<comments>http://blog.alvaroveliz.cl/2010/04/tol-tweet-out-loud/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 18:18:07 +0000</pubDate>
		<dc:creator>alvaroveliz</dc:creator>
				<category><![CDATA[Aplicaciones]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[tol]]></category>

		<guid isPermaLink="false">http://blog.alvaroveliz.cl/?p=109</guid>
		<description><![CDATA[Ayer, fué un día de revelación y motivación. Me disponía a irme a la Universidad cuándo de la nada se me ocurrió mezclar Twitter con un TTS, es decir, crear una aplicación leyera los tweets. Lo encontré entretenido, así que en el camino modelé y diseñe la solución a mi problema. Ya estando en clases, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2010%2F04%2Ftol-tweet-out-loud%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2010%2F04%2Ftol-tweet-out-loud%2F&amp;source=alvaroveliz&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Ayer, fué un día de revelación y motivación. Me disponía a irme a la Universidad cuándo de la nada se me ocurrió mezclar Twitter con un <a href="http://es.wikipedia.org/wiki/Conversor_texto-voz">TTS</a>, es decir, crear una aplicación leyera los tweets. Lo encontré entretenido, así que en el camino modelé y diseñe la solución a mi problema.</p>
<p>Ya estando en clases, el profesor nos hablaba sobre &#8220;<em>recursos, requerimientos y bloqueos</em>&#8221; mientras yo programaba usando <a href="http://kohanaphp.com/">Kohana</a> lo que iba a ser mi aplicación. Cuando terminaron las clases ya tenía el <strong>50%</strong> de la aplicación, podía hacer un registro y login con Twitter usando <a href="http://es.wikipedia.org/wiki/OAuth">oAuth</a>. Llamé a mi amigo <a href="http://carloselias.cl">Carlos Elías</a> para que pensara en una &#8220;<strong>UI</strong>&#8221; para la aplicación.</p>
<p>A las 12 de la noche estaba lista la interfaz y solo faltaba coordinar el <a href="http://lifehacker.com/5426797/google-translate-url-generates-instant-text+to+speech-mp3-files">TTS de Google Translate</a> con el player de <a href="http://googlesystem.blogspot.com/2006/07/embed-mp3-files-into-your-website.html">Google Reader</a>.</p>
<p>Hoy, 16 de Abril de 2010, he lanzado <a href="http://utolus.com">TOL: Tweet out Loud</a> en versión beta.</p>
<p>Los invito a usarla!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvaroveliz.cl/2010/04/tol-tweet-out-loud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial: Crear una aplicación para Facebook (FBML)</title>
		<link>http://blog.alvaroveliz.cl/2010/03/tutorial-crear-una-aplicacion-para-facebook-fmbl-2/</link>
		<comments>http://blog.alvaroveliz.cl/2010/03/tutorial-crear-una-aplicacion-para-facebook-fmbl-2/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 14:00:20 +0000</pubDate>
		<dc:creator>alvaroveliz</dc:creator>
				<category><![CDATA[Destacados]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[fracework]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.alvaroveliz.cl/?p=68</guid>
		<description><![CDATA[Una vez estaba en la cocina preparándome un café cuando de repente me bajó la inspiración y decidí hacer una aplicación Facebook. La investigación fue ardua, hice las pruebas de concepto respectivas y logré mi cometido. Sin embargo, por cosas de tiempo no  terminé la aplicación para variar y quedó stand by hasta el próximo [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2010%2F03%2Ftutorial-crear-una-aplicacion-para-facebook-fmbl-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2010%2F03%2Ftutorial-crear-una-aplicacion-para-facebook-fmbl-2%2F&amp;source=alvaroveliz&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Una vez estaba en la cocina preparándome un café cuando de repente me bajó la inspiración y decidí hacer una aplicación <strong>Facebook</strong>. La investigación fue ardua, hice las <a href="http://blog.alvaroveliz.cl/2009/11/las-pruebas-de-concepto-en-el-desarrollo-de-software/" target="_self">pruebas de concepto</a> respectivas y logré mi cometido. Sin embargo, por cosas de tiempo no  terminé la aplicación <span style="text-decoration: line-through;">para variar</span> y quedó <em>stand by</em> hasta el próximo semestre.</p>
<p>Hace unos días, me pidieron ayuda para hacer lo mismo usando lenguaje <strong>FBML</strong> y recordé lo que ya había realizado. Pero como la memoria es frágil decidí utilizar a nuestro amigo Google para resolver algunas dudas que tenía. Para mi sorpresa, no encontré lo que necesitaba, así que por lo tanto decidí hacer un Tutorial en <strong>lenguaje humano</strong> para que todos <span style="text-decoration: line-through;">los desarrolladores</span> entendamos como es que debemos hacer una aplicación para Facebook compatible con la versión actual. Así que, manos a la obra!<br />
<span id="more-68"></span></p>
<h2>Como funciona una aplicacion Facebook?</h2>
<p><strong>Facebook</strong> soporta dos formatos de aplicaciones externas, aplicaciones creadas usando <a href="http://wiki.developers.facebook.com/index.php/FBML" target="_self"><strong>FBML</strong></a> y las que usan <span style="text-decoration: line-through;">el no estandar</span> iframe. Para este tutorial nos enfocaremos en la creación de aplicaciones usando <strong>FBML</strong>, ya que es una opción importante cuando se necesita usar las gráficas y herramientas de Facebook nativas.</p>
<p>Antes de seguir les recomiendo leer el <a href="http://developers.facebook.com/get_started.php?tab=tutorial">Tutorial que Facebook dispone como introducción</a> para que entiendan con mayor claridad, luego de eso, sigan con la este tutorial.</p>
<h2>Ingredientes</h2>
<ul>
<li>Tener conocimientos de HTML, CSS y de PHP</li>
<li>Contar con un hosting y dominio para subir la aplicación</li>
<li>Librerias cliente PHP de Facebook &#8211; <a href="http://svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz">Que puedes descargar aquí</a></li>
<li>Ser parte de Facebook Developers &#8211; Si no eres parte, debes ingresar en <a href="http://www.facebook.com/developers/">App Developers</a></li>
<li>Un objetivo de aplicación, por ejemplo: &#8220;Una aplicación para mostrar <strong>mi último mensaje de twitter</strong>!&#8221;</li>
</ul>
<h2>Creando la aplicacion</h2>
<p>Como ya contamos con todos estos nuestros ingredientes podemos comenzar con la <strong>creación de la aplicación</strong>.</p>
<p>Lo primero en el menú es <a href="http://www.facebook.com/developers/createapp.php">Configurar una nueva aplicación</a>, esto lo podemos hacer en la App de Developers de Facebook  haciendo click en el botón &#8220;<strong>+ Configurar una nueva aplicación</strong>&#8221; o, si estás más atento, haciendo click en el link anterior.<br />
Acá entraré en detalle para guiarlos mejor:</p>
<ul>
<li>Escribimos el nombre de nuestra aplicación y aceptamos los términos y condiciones.<br />
<a class="thickbox" href="http://blog.alvaroveliz.cl/wp-content/uploads/2010/03/Paso1_fb.png"><img class="size-medium wp-image-84 alignnone" style="border: 1px solid #dddddd; padding: 4px;" title="Paso 1 - Creación Facebook App" src="http://blog.alvaroveliz.cl/wp-content/uploads/2010/03/Paso1_fb-300x139.png" alt="" width="300" height="139" /></a></li>
<li>La siguiente pantalla nos entrega información relacionada con nuestra aplicación y que ocuparemos para el desarrollo: <strong>Application ID, API Key, Secret</strong>. Estos valores son los que nos identifican con Facebook como aplicación y que nos permite interactuar con Facebook y los usuarios. Estos datos son sumamente importantes y nunca deben ser revelados, bueno, el nombre sí.<br />
<a class="thickbox" href="http://blog.alvaroveliz.cl/wp-content/uploads/2010/03/Paso2_fb.png"><img class="size-medium wp-image-85 alignnone" style="border: 1px solid #dddddd; padding: 4px;" title="Paso 2 - Creación facebook app" src="http://blog.alvaroveliz.cl/wp-content/uploads/2010/03/Paso2_fb-300x209.png" alt="" width="300" height="209" /></a></li>
<li>A la izquierda tenemos un menú de configuración donde nos enfocaremos en los siguientes puntos: <strong>&#8220;Auth (Autencación)&#8221;</strong>, &#8220;<strong>Profiles (Perfiles)</strong>&#8220;, &#8220;<strong>Advanced (Avanzado)</strong>&#8221; y &#8220;<strong>Canvas (Lienzo)</strong>&#8220;.</li>
<li>En  <strong>&#8220;Auth (Autencación)&#8221; </strong>seleccionamos &#8220;Disponible para usuarios&#8221; y en Post-Authorize Callback URL escribimos la URL de retorno, es decir, &#8220;<strong>http://apps.facebook.com/ultimotwitterupdate/</strong>&#8220;</li>
<li>En &#8220;<strong>Profiles (Perfiles)</strong>&#8221; debemos escribir el <em>Tab Name</em> y el <em>Tab URL.</em><br />
En el Tab Name debemos escribir un nombre de no más de 16 caracteres (&#8220;<strong>Ultimo Update</strong>&#8220;) y en el Tab URL debemos definir la URL donde se encuentra la vista de nuestra aplicación para los perfiles (&#8220;<strong>tab</strong>&#8220;).<br />
El Profile Box es la forma en que se mostrara en las cajas del perfil por defecto, por ejemplo &#8220;<strong>Narrow</strong>&#8220;.</li>
<li>La seccion de &#8220;<strong>Advanced (Avanzado)</strong>&#8221; nos sirve para dejar nuestra aplicación en &#8220;<strong>Sandbox Mode</strong>&#8221; y así solo los desarrolladores podrán verla. Debemos activar esta opción antes de seguir.</li>
<li>En la sección &#8220;<strong>Canvas (Lienzo)</strong>&#8221; se define la URL que contiene el despliegue (layout) de la aplicación y de donde Facebook debe obtenerlo para mostrarlo. Para configurarlo vamos a escribir &#8220;<strong>ultimotwitterupdate</strong>&#8221; en la URL de la página y <strong>http://www.midominio.com/ultimotwitterupdate/</strong> en <strong>Canvas Callback URL</strong>. Para ver los cambios realizados debemos desarrollar en forma local y subir mediante FTP.<br />
Luego, en la sección donde dice &#8220;<strong>Render Method (Método de renderización)</strong>&#8221; debemos seleccionar <strong>FBML</strong>, los otros datos quedan por defecto.</li>
<li>Guardamos los cambios.</li>
</ul>
<h2>A ensuciarse las manos</h2>
<p>Ahora es cuando viene la parte mas entretenida de la historia, el desarrollo de la aplicación.</p>
<p>Pero, un momento&#8230;<strong>no tengo idea de que debe hacer la aplicación</strong>! Mejor investigo todo lo necesario en base al objetivo planteado y luego, defino la conclusión.</p>
<p>El proceso anteriormente nombrado dio como resultado dos objetivos más específicos:</p>
<ul>
<li><strong>&#8220;Debo usar la API de Twitter para traer el último mensaje de un usuario en formato JSON&#8221;</strong><br />
Pero, y cómo? Del siguiente modo, usamos la API de Twitter para llegar a la información de algún usuario:<br />
<em>http://api.twitter.com/1/statuses/user_timeline.json?screen_name=<strong>USUARIO_TWITTER</strong>&amp;count=1</em></li>
<li><strong>&#8220;El usuario Facebook elige el nombre de usuario y se almacena en una base de datos (SQLite)&#8221;.</strong><br />
Listo! Ahora que tengo claro lo que debo hacer voy a dedicarme al layout en Facebook, porque si quiero realizar la aplicación primero debo saber verla funcionando.</li>
</ul>
<p>Para esto, tenemos que conocer un poco más de <strong>FBML</strong>, así que les dejo la misión de leer sobre este lenguaje en el <a href="http://wiki.developers.facebook.com/index.php/Main_Page" target="_self">Wiki de Facebook</a>.</p>
<h3>Preparar bien la mesa</h3>
<p>Antes de partir con el sitio debemos configurar un archivo que permita la comunicación entre Facebook y la aplicación. Dicho archivo se llama &#8220;<strong>xd_receiver.htm</strong>&#8221; y es un archivo que va en la raiz del sitio. Su contenido es el siguiente:</p>
<pre class="brush: xml;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; &gt;
&lt;head&gt;
&lt;title&gt;Cross-Domain Receiver Page&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;script src=&quot;http://static.ak.facebook.com/js/api_lib/v0.4/XdCommReceiver.js?2&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Si quieren leer más sobre esto pueden hacerlo en el <a href="http://wiki.developers.facebook.com/index.php/Cross_Domain_Communication_Channel">Wiki de Facebook: Cross-Domain Communication Channel</a></p>
<h3>&#8220;Aunque no venia preparado&#8221;</h3>
<p>Ahora viene lo importante. Yo sé que ustedes esperan que explique todo el código de conexión y de configuración para la App Facebook, pero les quiero contar que me adelanté y les traje una especie de <em>framework</em> que les facilitará muchas de las tareas. Este <em>framework</em> se creó en base a otras aplicaciones que tenía desarrolladas y que me hicieron pensar en la <strong>real ayuda</strong> de este tutorial, su nombre es &#8220;<strong>Fracework</strong>&#8221; y lo pueden revisar en: <a href="http://code.google.com/p/fracework/">http://code.google.com/p/fracework/</a></p>
<p>Esta suerte de <em>framework, </em>permite configurar la aplicación y crear las vistas. Probablemente cuando lo vean no va a ser lo que esperan <span style="text-decoration: line-through;">a nivel de código</span>, pero estoy seguro que les va a ser muy útil.</p>
<p>El contenido de <strong>Fracework</strong> tiene la siguiente estructura de archivos:</p>
<ul>
<li>client/ : Libreria cliente PHP de Facebook</li>
<li>config/ : Archivo de configuraciones de la aplicación</li>
<li>includes/ : Conexión con facebook, instancia de clase clientes</li>
<li>modules/ : Modulos de la aplicación</li>
<li>views/ : Vistas de la aplicación</li>
<li>index.php : Archivo que muestra las distintas vistas</li>
<li>xd_receiver.htm : Cross-Domain Communication Channel</li>
</ul>
<p>Para utilizarlo solo deben descomprimir el archivo en la carpeta de la aplicación y comenzar a desarrollar.</p>
<h3>Configuracion</h3>
<p>En la carpeta &#8220;<strong>config</strong>&#8220;, de nuestra aplicación, nos encontramos con el archivo de configuraciones de la aplicación &#8220;<strong>facebook.php</strong>&#8220;, acá editamos los datos de nuestra aplicación y guardamos:</p>
<pre class="brush: php;">&lt;?php
/**
* Facebook App client
* @author @alvaroveliz
**/

$fb_apikey        = '...'; // Configurar API KEY
$fb_secret        = '...'; // Secret Key
$app_callbackurl  = 'http://www.midominio.com/ultimotwitterupdate/'; // APP Canvas URL
$canvas_url       = 'http://apps.facebook.com/ultimotwitterupdate/'; // Canvas URL

?&gt;</pre>
<p>Recuerdan que les comente en la creación de la aplicación sobre los datos &#8220;importantes&#8221;, bueno, acá es donde se deben configurar.</p>
<h3>Hello World</h3>
<p>En la carpeta &#8220;<strong>views</strong>&#8221; encontramos 3 archivos:</p>
<ul>
<li>default.php: Vista general de la aplicación</li>
<li>profile.php: Vista de caja caja en el perfil</li>
<li>global.php: Vista de tab  (cuadro) en el perfil (narrow y wide)</li>
<li>Las vistas personalizadas se agregan en la carpeta &#8220;views&#8221; y se ven usando el parámetro &#8220;section&#8221;. Por ejemplo &#8220;index.php?section=help&#8221; mostrará la vista help.php</li>
</ul>
<p>Ahora, para hacer la prueba de &#8220;Hello world&#8221;, editamos el archivo <strong>default.php</strong> y agregamos &#8220;&lt;h1&gt;Hello facebook app&lt;/h1&gt;&#8221; como dice el código:</p>
<pre class="brush: xml;">&lt;fb:fbml version=&quot;1.0&quot;&gt;
&lt;h1&gt;Hello facebook app&lt;/h1&gt;
&lt;/fb:fbml&gt;</pre>
<p>Subimos al servidor nuestra aplicación y vamos a la dirección http://apps.facebook.com/ultimotwitterupdate/, en esta dirección vamos a ver nuestra aplicación creada, pero antes debemos agregarla a nuestro perfil.</p>
<p>Luego de agregarla, la aplicación nos mostrará el siguiente resultado:</p>
<p><a class="thickbox" href="http://blog.alvaroveliz.cl/wp-content/uploads/2010/03/develop_fb.png"><img class="alignnone size-medium wp-image-86" style="border: 1px solid #dddddd; padding: 4px;" title="Facebook App Hello World" src="http://blog.alvaroveliz.cl/wp-content/uploads/2010/03/develop_fb-300x158.png" alt="" width="300" height="158" /></a></p>
<h3>Agregando el boton para perfil</h3>
<p>Como ya tenemos nuestra aplicación andando, podemos agregar un código FBML que nos permitirá llegar más lejos aún. Por ejemplo, con la siguiente linea podremos agregar un botón que permitirá agregar nuestra aplicación como caja en el perfil.</p>
<p>Editamos el archivo de vistas &#8220;<strong>default.php</strong>&#8221; y agregamos:</p>
<pre class="brush: xml;">&lt;fb:add-section-button section=&quot;profile&quot; /&gt;</pre>
<p>Esto nos da el siguiente resultado:</p>
<p><a class="thickbox" href="http://blog.alvaroveliz.cl/wp-content/uploads/2010/03/dev2_popup.png"><img class="alignnone size-medium wp-image-87" style="padding: 4px;" title="Facebook app Agregar a perfil" src="http://blog.alvaroveliz.cl/wp-content/uploads/2010/03/dev2_popup-300x212.png" alt="" width="300" height="212" /></a> <a class="thickbox" href="http://blog.alvaroveliz.cl/wp-content/uploads/2010/03/dev2_fb.png"><img class="alignnone size-medium wp-image-88" style="padding: 4px;" title="Facebook app Cuadros" src="http://blog.alvaroveliz.cl/wp-content/uploads/2010/03/dev2_fb-300x119.png" alt="" width="300" height="119" /></a></p>
<h3>&#8220;Guayerfreims&#8221;</h3>
<p>Ahora que tenemos andando la aplicación, nos vamos a enfocar en nuestro ejemplo.</p>
<p>El layout de nuestro ejemplo debe preguntar cual es el nick del usuario en twitter, para que traiga dinámicamente el último update, luego deberá mostrarlo. (Como consideración, el usuario no debe tener sus updates protegidos)</p>
<p>Está sería la disposición del despliegue:</p>
<p><a class="thickbox" href="http://blog.alvaroveliz.cl/wp-content/uploads/2010/03/wireframe_facebook_1.jpg"><img class="alignnone size-medium wp-image-91" style="padding: 4px;" title="Facebook app Wireframe 1" src="http://blog.alvaroveliz.cl/wp-content/uploads/2010/03/wireframe_facebook_1-225x300.jpg" alt="" width="225" height="300" /></a> <a class="thickbox" href="http://blog.alvaroveliz.cl/wp-content/uploads/2010/03/wireframe_facebook_2.jpg"><img class="alignnone size-medium wp-image-92" style="padding: 4px;" title="Facebook app Wireframe 2" src="http://blog.alvaroveliz.cl/wp-content/uploads/2010/03/wireframe_facebook_2-225x300.jpg" alt="" width="225" height="300" /></a></p>
<h3>El modelo de datos</h3>
<p>Luego que hicimos nuestros layouts en papel, nos debemos enfocar en el modelo de datos. En nuestra base de datos debemos guardar la información que nos permita relacionar usuario de facebook y usuario twitter, esta podría ser la mejor opción: &#8220;id de usuario de facebook&#8221;, &#8220;nombre usuario de twitter&#8221;, &#8220;mensaje ultimo update&#8221;, &#8220;fecha y hora de ultima consulta&#8221;.</p>
<p>La única tabla que necesito la nombraremos como &#8220;<strong>last_updates</strong>&#8220;:</p>
<ul>
<li>id:integer(11), PK</li>
<li>facebook_user:integer(11)</li>
<li>twitter_username:varchar(30)</li>
<li>last_update:varchar(140)</li>
<li>last_query:datetime</li>
</ul>
<p>La instrucción SQL sería del siguiente modo:</p>
<pre class="brush: sql;">CREATE  TABLE &quot;last_updates&quot; (&quot;id&quot; INTEGER PRIMARY KEY  NOT NULL , &quot;facebook_user&quot; INTEGER NOT NULL , &quot;twitter_username&quot; VARCHAR(30) NOT NULL , &quot;last_update&quot; VARCHAR(140) NOT NULL , &quot;last_query&quot; DATETIME NOT NULL )</pre>
<h3>El código da App</h3>
<p>De acuerdo a los &#8220;<em>wireframes</em>&#8221; el código de la vista por defecto será del siguiente modo:</p>
<p><strong>Vista default.php</strong></p>
<pre class="brush: xml;">&lt;fb:fbml version=&quot;1.0&quot;&gt;

	&lt;fb:dashboard&gt;
		&lt;fb:help href=&quot;index.php?section=help&quot;&gt;Ayuda&lt;/fb:help&gt;
	&lt;/fb:dashboard&gt;

	Ingrese el nick del usuario (el usuario no debe tener los updates protegidos)
	&lt;br /&gt;
	&lt;form name=&quot;save_user&quot; method=&quot;post&quot; action=&quot;&quot;&gt;
		&lt;input type=&quot;text&quot; id=&quot;twitter_user&quot; name=&quot;twitter_user&quot; size=&quot;20&quot; /&gt; &lt;input type=&quot;submit&quot; value=&quot;Definir usuario&quot; /&gt;
	&lt;/form&gt;

	&lt;div id=&quot;update-quote&quot;&gt;
	&lt;/div&gt;

	&lt;br /&gt;
	&lt;fb:add-section-button section=&quot;profile&quot; /&gt;

&lt;/fb:fbml&gt;</pre>
<p><strong>Vista global.php</strong></p>
<pre class="brush: xml;">&lt;fb:narrow&gt;

	&lt;div id=&quot;update-quote&quot;&gt;
		Narrow View
	&lt;/div&gt;

&lt;/fb:narrow&gt;

&lt;fb:wide&gt;

	&lt;div id=&quot;update-quote&quot;&gt;
		Wide View
	&lt;/div&gt;

&lt;fb:wide&gt;</pre>
<p><strong>Vista profile.php</strong></p>
<pre class="brush: xml;">&lt;div id=&quot;update-quote&quot;&gt;
&lt;/div&gt;</pre>
<p>Con un poco de estilos podríamos llegar a nuestro objetivo con mayor efectividad, pero por el momento solo haré el ejemplo con una aplicación <span style="text-decoration: line-through;">casi</span> por defecto.</p>
<h3>El módulo &#8220;app.php&#8221;</h3>
<p>Para habilitar los módulos que vamos creando, se debe editar el archivo &#8220;config/app.php&#8221; y agregar al arreglo el nombre de la app, por ejemplo:</p>
<pre class="brush: php;">$modules = array(
'app', // Modulo de Aplicacion
);</pre>
<p>Este módulo se encarga de realizar todas las conexiones con Twitter y la base de datos para almacenar la información.A grandes rasgos se compone de funciones como:</p>
<ul>
<li>get_twitter_data : Que obtiene la información de Twitter usando cURL</li>
<li>set_user_data : Que guarda la información del usuario que agrego la aplicación</li>
<li>get_user_data : Que obtiene la información de un usuario</li>
<li>update_user_data  : Que actualiza la información del usuario utilizando la información de Twitter.</li>
</ul>
<h3>A probar la aplicación</h3>
<p>Luego, que está todo listo, subo a producción y hago las pruebas necesarias para evitar errores. No está demás decir que a medida que realizo el diseño y el desarrollo siempre se deben hacer updates, porque es como estar trabajando a ciegas.</p>
<p>Para probar la aplicación ingresen a: <a href="http://app.facebook.com/ultimotwitterupdate/">http://apps.facebook.com/ultimotwitterupdate/</a></p>
<h2>Deje reposar 5 minutos y sirva</h2>
<p>Luego de todo este desarrollo podemos sacar como conclusión que <strong>Facebook</strong> es una de las Redes Sociales más potentes por la facilidad en que se pueden desarrollar aplicaciones y la capacidad de integración que se puede obtener.</p>
<p>Si bien el desarrollo no es muy cómodo, es muy simple la forma en que se pueden agregar elementos propios de Facebook, esto lo hace una herramienta ágil.</p>
<p>Finalmente, les dejo la misión de leer mucho sobre lo nuevo que se viene para el desarrollo de aplicaciones en Facebook y además de que le pierdan el miedo a crear aplicaciones nuevas.</p>
<p>Muchas gracias por su tiempo, espero que este <em>plato</em> haya sido de su agrado.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">http://www.facebook.com/developers/F</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvaroveliz.cl/2010/03/tutorial-crear-una-aplicacion-para-facebook-fmbl-2/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Tutorial: Configurar Apache 2.+ con VirtualHost</title>
		<link>http://blog.alvaroveliz.cl/2010/03/tutorial-configurar-apache-con-virtualhost/</link>
		<comments>http://blog.alvaroveliz.cl/2010/03/tutorial-configurar-apache-con-virtualhost/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 16:50:11 +0000</pubDate>
		<dc:creator>alvaroveliz</dc:creator>
				<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://blog.alvaroveliz.cl/?p=71</guid>
		<description><![CDATA[Una de las cosas más cómodas que tiene Apache 2.+ es el módulo de host virtuales (VirtualHost), puesto que con éste módulo podemos simular con mejor calidad un servidor de producción. Por ejemplo, digamos que quiero subir un Blog de WordPress a una dirección http://www.miblogdewordpress.com pero aún no cuento con el Hosting ni el dominio. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2010%2F03%2Ftutorial-configurar-apache-con-virtualhost%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2010%2F03%2Ftutorial-configurar-apache-con-virtualhost%2F&amp;source=alvaroveliz&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Una de las cosas más cómodas que tiene Apache 2.+ es el módulo de host virtuales (VirtualHost), puesto que con éste módulo podemos simular con mejor calidad un servidor de producción.</p>
<p>Por ejemplo, digamos que quiero subir un Blog de WordPress a una dirección http://www.miblogdewordpress.com pero aún no cuento con el Hosting ni el dominio. En este caso es cuando podemos utilizar nuestro módulo de VirtualHost y personalizar la dirección que aún no existe.</p>
<h2>Configurar Apache</h2>
<p>Lo primero es configurar Apache 2.+ habilitando este módulo (por lo general viene habilitado por defecto):</p>
<pre class="brush: bash;">sudo a2enmod vhost_alias</pre>
<p>Luego se debe crear nuestro nuevo &#8220;sitio&#8221; creando el archivo de configuración necesario, pero como somos inteligentes vamos a copiar el sitio por defecto y configurarlo. Todo esto ocurre en la carpeta de apache2 que para nuestro ejemplo será &#8220;/etc/apache2/sites-available/&#8221;:</p>
<pre class="brush: bash;">sudo cp default miblogdewordpress
sudo vim miblogdewordpress</pre>
<p>Al editar este archivo nos encontramos con lo siguiente:</p>
<pre class="brush: bash;">&lt;VirtualHost *:80&gt;
ServerAdmin webmaster@localhost

DocumentRoot /var/www
&lt;Directory /&gt;
Options FollowSymLinks
AllowOverride None
&lt;/Directory&gt;
&lt;Directory /var/www/&gt;
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
&lt;/Directory&gt;

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
&lt;Directory &quot;/usr/lib/cgi-bin&quot;&gt;
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
&lt;/Directory&gt;

ErrorLog /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined

Alias /doc/ &quot;/usr/share/doc/&quot;
&lt;Directory &quot;/usr/share/doc/&quot;&gt;
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
&lt;/Directory&gt;

&lt;/VirtualHost&gt;</pre>
<p>Lo que debemos hacer es agregar una línea que defina el nombre del servidor, y luego recortar la configuración con lo necesario:</p>
<pre class="brush: bash;">
&lt;VirtualHost *:80&gt;
  ServerAdmin webmaster@localhost
  ServerName www.miblogdewordpress.com

  DocumentRoot /var/www/miblogdewordpress/
  &lt;Directory /&gt;
    Options FollowSymLinks
    AllowOverride None
  &lt;/Directory&gt;
  &lt;Directory /var/www/miblogdewordpress/&gt;
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  &lt;/Directory&gt;

  ErrorLog /var/log/apache2/miblogdewordpress-error.log
  LogLevel warn
  CustomLog /var/log/apache2/miblogdewordpress-access.log combined
</pre>
<p>Si se dan cuenta, lo que hice fue agregar &#8220;ServerName&#8221; y especificar donde tengo mis documentos &#8220;/var/www/miblogdewordpress/&#8221; en el DocumentRoot y además en el &#8220;Directory&#8221;. Finalmente, especifiqué un archivo de logs y acceso para el dominio en anteponiendo &#8220;miblogdewordpress-&#8221; en los archivos de &#8220;ErrorLog&#8221; y &#8220;CustomLog&#8221;.</p>
<p>Lo siguiente es ahora, activar nuestro sitio y recargar las configuraciones de Apache:</p>
<pre class="brush: bash;">sudo a2ensite miblogdewordpress
sudo /etc/init.d/apache2 reload</pre>
<p>El comando a2ensite utiliza como parámetro el nombre del archivo que acabamos de crear, es decir, &#8220;miblogdeworpress&#8221;.</p>
<p>Luego de que tenemos nuestro Apache configurado, terminamos el trabajo configurando el host local.</p>
<h2>Configurar tabla de Hosts</h2>
<p>La tabla de host es muy simple de configurar, solo debemos agregar nuestro dominio creado apuntado a &#8220;localhost&#8221;. Para esto, editamos &#8220;/etc/hosts&#8221; y agregamos la siguiente linea:</p>
<pre class="brush: bash;">127.0.0.1    www.miblogdewordpress.com</pre>
<p>Para probarlo entramos por nuestro explorador a http://www.miblogdewordpress.com y estará listo para utilizar.</p>
<p>Cabe mencionar que cuando se suba a producción debemos eliminar esta linea de la tabla de host para no resolver el sitio que tenemos en nuestro servidor.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvaroveliz.cl/2010/03/tutorial-configurar-apache-con-virtualhost/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>RiP! : A remix manifesto</title>
		<link>http://blog.alvaroveliz.cl/2009/11/rip-a-remix-manifesto/</link>
		<comments>http://blog.alvaroveliz.cl/2009/11/rip-a-remix-manifesto/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 15:00:19 +0000</pubDate>
		<dc:creator>alvaroveliz</dc:creator>
				<category><![CDATA[Música]]></category>
		<category><![CDATA[Derechos de Autor]]></category>

		<guid isPermaLink="false">http://blog.alvaroveliz.cl/?p=44</guid>
		<description><![CDATA[Eran las 3 a.m. más o menos y hacía zapping en el cable cuando me topé con un documental en el i-Sat que se llamaba &#8220;RiP! : A remix manifesto&#8220;. Comencé a verlo porque había un dj haciendo remixes muy buenos (su nombre es &#8220;Girl Talk&#8220;) y hablaban de algo que está muy de moda [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2009%2F11%2Frip-a-remix-manifesto%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2009%2F11%2Frip-a-remix-manifesto%2F&amp;source=alvaroveliz&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Eran las 3 a.m. más o menos y hacía zapping en el cable cuando me topé con un documental en el i-Sat que se llamaba &#8220;<a title="RiP!: A Remix Manifesto" rel="homepage" href="http://ripremix.com" target="_blank">RiP! : A remix manifesto</a>&#8220;. Comencé a verlo porque había un dj haciendo remixes muy buenos (su nombre es &#8220;<a title="Girl Talk" rel="homepage" href="http://en.wikipedia.org/wiki/Girl_Talk_(musician)" target="_blank">Girl Talk</a>&#8220;) y hablaban de algo que está muy de moda hoy en nuestro Chilito: &#8220;<strong>Los derechos de autor</strong>&#8220;.<a href="http://blog.alvaroveliz.cl/wp-content/uploads/2009/11/rip_logo_v2.png"><img class="size-full wp-image-45 alignright" style="margin-left: 10px; margin-right: 10px;" title="RIP: A remix manifesto" src="http://blog.alvaroveliz.cl/wp-content/uploads/2009/11/rip_logo_v2.png" alt="RIP: A remix manifesto" width="243" height="220" /></a></p>
<p>Este documental está tan bien hecho que a medida que lo vas viendo te vas dando cuenta que el problema global está centralizado en unas pocas personas y empresas, (Spoiler alert&#8230;) por ejemplo sale <abbr title="mejor lo tacho sino me puede demandar"><span style="text-decoration: line-through;">Lars</span></abbr> el batero de Metallica despotricando en contra de <a title="Napster" rel="wikipedia" href="http://en.wikipedia.org/wiki/Napster" target="_blank">Napster</a> y quienes descargamos música de Internet, hay una mención a Walt Disney donde lo muestran como un copión (remixer), entre otras cosas bien interesantes.</p>
<p>Si quieren ver  la realidad del sistema en que nos encontramos les recomiendo sin dudas este documental, y si sienten las ganas de hacer remix del documental pueden hacerlo sin sentirse criminales.</p>
<h2>Links relacionados</h2>
<ul>
<li><a href="http://www.youtube.com/watch?v=zdwN6rRU0Xk" target="_blank">Documental en youtube (parte 1)</a> (son 9 partes y van apareciendo en el player)</li>
<li><a href="http://www.myspace.com/girltalk" target="_blank">MySpace de Girl Talk</a></li>
</ul>
<p style="text-align: center;"><p><a href="http://blog.alvaroveliz.cl/2009/11/rip-a-remix-manifesto/"><em>Pinche aquí para ver el vídeo</em></a></p></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvaroveliz.cl/2009/11/rip-a-remix-manifesto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Las pruebas de concepto en el desarrollo de software</title>
		<link>http://blog.alvaroveliz.cl/2009/11/las-pruebas-de-concepto-en-el-desarrollo-de-software/</link>
		<comments>http://blog.alvaroveliz.cl/2009/11/las-pruebas-de-concepto-en-el-desarrollo-de-software/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 13:10:10 +0000</pubDate>
		<dc:creator>alvaroveliz</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Experiencias]]></category>

		<guid isPermaLink="false">http://blog.alvaroveliz.cl/?p=23</guid>
		<description><![CDATA[Se han dado cuenta que en algún momento de la vida han tenido que probar algo antes de comprarlo? Por alguna razón en especial necesitan saber si ese pantalón de pitillo les viene bien y optan por darle una prueba antes de pagarlo. En ese momento, sin saberlo, experimentaron una prueba de concepto con ese [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2009%2F11%2Flas-pruebas-de-concepto-en-el-desarrollo-de-software%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2009%2F11%2Flas-pruebas-de-concepto-en-el-desarrollo-de-software%2F&amp;source=alvaroveliz&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Se han dado cuenta que en algún momento de la vida han tenido que <abbr title="user, saborear, experimentar, etc">probar</abbr> algo antes de comprarlo? Por alguna razón en especial necesitan saber si ese pantalón <span style="text-decoration: line-through;">de pitillo</span> les viene bien y optan por darle una prueba antes de pagarlo. En ese momento, sin saberlo, <strong>experimentaron una prueba de concepto</strong> con ese pantalón.</p>
<p>Las pruebas de concepto como tal son una <strong>demostración</strong> a menor escala de una idea cualquiera (independiente de como se concrete la idea o como les quede el pantalón), son como una fotografía en miniatura de la idea.</p>
<p>En el desarrollo de software, y en general en la Ingeniería de Software, las pruebas de concepto son uno de los métodos más efectivos, para saber cuando la idea se está llevando por buen camino.</p>
<h3>Y, ¿Por qué son tan efectivas? les cuento&#8230;</h3>
<p><a href="http://blog.alvaroveliz.cl/wp-content/uploads/2009/11/screenshot_001.png"><img class="alignright size-full wp-image-38" style="margin-left: 20px; margin-right: 10px;" title="Geek Jeans" src="http://blog.alvaroveliz.cl/wp-content/uploads/2009/11/screenshot_001.png" alt="Geek Jeans" width="250" height="341" /></a>Ocurre que cuando necesitas crear un <strong>producto de software</strong> no sólo debes tener la idea, las herramientas, y las habilidades, sino que también debes tener un método que te de la seguridad que vas a poder llegar a desarrollar un buen producto sin perder la cabeza en el intento.</p>
<p>El método usado en la creación de un producto se basa en cuatro pasos secuenciales (<strong>Análisis</strong>, <abbr title="...de la solución de desarrollo">Diseño</abbr>, Implementación y Pruebas), y ustedes ya podrán imaginarse donde es que hacemos la prueba de concepto.</p>
<p>Vuelvo al ejemplo, antes de probarme ese pantalón lo primero que hice fue pensar en todas las ocasiones en que lo podría usar, digo, es eso en lo que se piensa cuando se compra algo no? Y es así que sin tener que probarme nada ya tenía realizado todo un <strong><abbr title="vieron que sirven las negritas">análisis</abbr></strong> en torno a algo que eventualmente podría comprar.</p>
<p>Algo similar pasa cuando se necesita crear un producto de software, se debe pasar por el mismo análisis antes de diseñarlo contemplando las distintas variables externas que van a afectar al producto desde el ambiente que lo rodea.</p>
<p>Las pruebas de concepto en este campo son clave para adelantar el paisaje que nos espera en el futuro, por lo general son desarrollos de corto alcance y que describen la idea de una forma resumida, donde sólo se incluyen <abbr title="les suena la palabra Must?">las piezas más importantes del producto</abbr>.</p>
<p>Es muy probable que en este tipo de pruebas se pierda el rumbo y que el desarrollo se alargue más allá de lo planificado, es por eso que debemos ser cautelosos y definir claramente los los objetivos de la <strong><abbr title="Proof of concept">PoC</abbr></strong>, definiendo cada uno de los puntos a <strong>experimentar</strong>, ya que acotando los objetivos es la única forma de obtener información relevante de una prueba de concepto.</p>
<p>En resumen, lo importante es lograr definir claramente el &#8220;por qué&#8221; de nuestra prueba de concepto, luego implementarla en un corto plazo y finalmente obtener toda la información relevante que de ésta se espere.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvaroveliz.cl/2009/11/las-pruebas-de-concepto-en-el-desarrollo-de-software/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Firma Twitter para foros IPB con PHP + GD + SimplePie</title>
		<link>http://blog.alvaroveliz.cl/2009/11/firma-twitter-para-foros-ipb-con-php-gd-simplepie/</link>
		<comments>http://blog.alvaroveliz.cl/2009/11/firma-twitter-para-foros-ipb-con-php-gd-simplepie/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 23:09:51 +0000</pubDate>
		<dc:creator>alvaroveliz</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://blog.alvaroveliz.cl/?p=29</guid>
		<description><![CDATA[Hace mucho tiempo que circulo por foros de internet, el que más visito es Tarreo y como usa Invision Power Board, no puedo poner una firma con imágenes dinámicas. Es por esto que tuve que acudir a una solución, hacer una imágen dinámica que pudiera ser vista en cualquier foro invision protegido. Para lograr este [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2009%2F11%2Ffirma-twitter-para-foros-ipb-con-php-gd-simplepie%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.alvaroveliz.cl%2F2009%2F11%2Ffirma-twitter-para-foros-ipb-con-php-gd-simplepie%2F&amp;source=alvaroveliz&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Hace mucho tiempo que circulo por foros de internet, el que más visito es <a href="http://tarreo.com/foro" target="_blank">Tarreo</a> y como usa <a href="http://www.invisionpower.com/" target="_blank">Invision Power Board</a>, no puedo poner una firma con imágenes dinámicas. Es por esto que tuve que acudir a una solución, hacer una imágen dinámica que pudiera ser vista en cualquier foro invision protegido.</p>
<p>Para lograr este objetivo necesitaremos los siguientes <strong>ingredientes</strong>:</p>
<ul>
<li>Tener cuenta <a href="http://twitter.com" target="_blank">Twitter</a> (publica, con protección de twitts no sirve)</li>
<li>Saber <a class="zem_slink" title="PHP" rel="homepage" href="http://www.php.net/">PHP</a></li>
<li>Conocer la librería GD (para PHP)</li>
<li>SimplePie</li>
<li>Servidor para hostear la imagen (con soporte curl)</li>
<li>Conocer de .htaccess</li>
</ul>
<p><span id="more-29"></span>La idea es utilizar <a href="http://simplepie.org/" target="_blank">SimplePie</a> para que se lea el <a class="zem_slink" title="RSS" rel="wikipedia" href="http://en.wikipedia.org/wiki/RSS">RSS</a> de mi cuenta para que con PHP + GD se genere una imagen dinámica, luego con el .htaccess se redireccionan todos los archivos .jpg a.php (esta es la joda para tinelli)</p>
<p><strong>Preparación</strong>:</p>
<ol>
<li>Descargar el amigable <a href="http://github.com/rmccue/simplepie/downloads" target="_blank">SimplePie</a> de su sitio web (vamos a utilizar el archivo <strong>simplepie.inc.php</strong> solamente)</li>
<li>Creamos el archivo twitter.php (con vim, gedit, eclipse, textmate o lo que se les ocurra) con el siguiente código:
<pre class="brush: php;">&lt;?php
require 'simplepie.inc.php';
// Configuraciones
$feed_url    = &quot;http://twitter.com/statuses/user_timeline/MI_RSS_DEL_TIMELINE.rss&quot;;
$feed        = new SimplePie($feed_url);
// Configuraciones de la imagen
$im          = imagecreatetruecolor(320, 60);
$text_color  = imagecolorallocate($im, 0, 0, 0);
$tw_color    = imagecolorallocate($im, 56, 204, 255);
$bg_color    = imagecolorallocate($im, 255, 255, 255);
// Despliegue
imagefilledrectangle($im, 1, 1, 318, 58, $bg_color);
imagestring($im, 2, 5, 5, 'Twitter', $tw_color);
// Me traigo el ultimo tweet
foreach ($feed-&gt;get_items(0, 1) as $item)
{
   $twitt = $item-&gt;get_title();
}
// Lo corto y le hago wordwrap
$twitt = wordwrap($twitt, 58, '\n');
$twitt_texts = explode('\n', $twitt);
foreach ($twitt_texts as $i =&gt;; $t)
{
   imagestring($im, 1, 55, 14*($i+1), $t, $text_color);
}
// Muestro la imagen
header('Content-type: image/jpeg');
imagejpeg($im, NULL, 100);
imagedestroy($im);
?&gt;</pre>
</li>
<li>Luego, debemos redireccionar los request a archivos JPG a PHP utilizando un .htaccess
<pre>RewriteEngine On
RewriteRule ^(.*\.jpg(/.*)?)$ twitter.php [L,QSA]</pre>
</li>
<li>Ahora lo subes a tu servidor y lo revisas, deberia ser algo como:<br />
<img class="alignnone" title="Firma twitter" src="http://hypn.eianes.com/twitter_firma/firma.jpg" alt="" width="320" height="60" /></li>
</ol>
<p>Deje cocinar a fuego lento.<br />
Sirva acompañado con galletas de salvado.</p>
<p>Claramente podemos aplicarnos mucho más en el código, pero esto salio de improviso y fue relativamente rápido.</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 336px; width: 1px; height: 1px;">
<pre>&lt;?php
require 'simplepie.inc.php';
// Configuraciones
$feed_url    = "http://twitter.com/statuses/user_timeline/MI_RSS_DEL_TIMELINE.rss";
$feed        = new SimplePie($feed_url);
// Configuraciones de la imagen
$im          = imagecreatetruecolor(320, 60);
$text_color  = imagecolorallocate($im, 0, 0, 0);
$tw_color    = imagecolorallocate($im, 56, 204, 255);
$bg_color    = imagecolorallocate($im, 255, 255, 255);
// Despliegue
imagefilledrectangle($im, 1, 1, 318, 58, $bg_color);
imagestring($im, 2, 5, 5, 'Twitter', $tw_color);
// Me traigo el ultimo tweet
foreach ($feed-&gt;get_items(0, 1) as $item)
{
   $twitt = $item-&gt;get_title();
}
// Lo corto y le hago wordwrap
$twitt = wordwrap($twitt, 58, '\n');
$twitt_texts = explode('\n', $twitt);
foreach ($twitt_texts as $i =&gt;; $t)
{
   imagestring($im, 1, 55, 14*($i+1), $t, $text_color);
}
// Muestro la imagen
header('Content-type: image/jpeg');
imagejpeg($im, NULL, 100);
imagedestroy($im);
?&gt;</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvaroveliz.cl/2009/11/firma-twitter-para-foros-ipb-con-php-gd-simplepie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
