<?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>Blog de Manel Pérez</title>
	<atom:link href="http://manelperez.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://manelperez.com</link>
	<description>Programación, SEO e Internet</description>
	<lastBuildDate>Fri, 05 Apr 2013 19:45:55 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Cómo instalar Guest Additions en una Debian corriendo en VirtualBox?</title>
		<link>http://manelperez.com/linux/como-instalar-guest-additions-debian-virtualbox/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-instalar-guest-additions-debian-virtualbox</link>
		<comments>http://manelperez.com/linux/como-instalar-guest-additions-debian-virtualbox/#comments</comments>
		<pubDate>Fri, 05 Apr 2013 19:45:55 +0000</pubDate>
		<dc:creator>Manel Pérez Mata</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[VirtualBox]]></category>

		<guid isPermaLink="false">http://manelperez.com/?p=785</guid>
		<description><![CDATA[<p>VirtualBox es una excelente herramienta para virtualizar sistemas operativos x86/amd64. Una vez instalado y configurado tu sistema operativo puede interesarte instalar las Guest Additions que son un paquete de librerías y controladores proporcionados por VirtualBox que le permiten mejorar la virtualización del sistema operativo. Algunas de las mejoras que presentan las Guest Additions de Virtualbox [...]</p><p>The post <a href="http://manelperez.com/linux/como-instalar-guest-additions-debian-virtualbox/">Cómo instalar Guest Additions en una Debian corriendo en VirtualBox?</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></description>
			<content:encoded><![CDATA[<p><strong>VirtualBox</strong> es una excelente herramienta para virtualizar sistemas operativos x86/amd64.</p>
<p>Una vez instalado y configurado tu sistema operativo puede interesarte instalar las <strong>Guest Additions</strong> que son un paquete de librerías y controladores proporcionados por VirtualBox que le permiten mejorar la virtualización del sistema operativo.</p>
<p>Algunas de las mejoras que presentan las Guest Additions de Virtualbox son:</p>
<ul>
<li>Integración del mouse en el sistema operativo virtualizado permitiendo moverlo libremente dentro y fuera de él.</li>
<li>Mejoras en el soporte de vídeo.</li>
<li>Nos permite compartir carpetas entre nuestro sistema operativo real y el virtualizado.</li>
<li>Portapapeles compartido entre los dos sistemas operativos.</li>
</ul>
<div><strong>Cómo podemos instalar las Guest Additions en una Debian corriendo en Virtualbox?</strong></div>
<div></div>
<div>Por suerte VirtualBox tiene preparado un pequeño sistema para facilitar la instalación de estas herramientas. Únicamente deberás seguir los siguientes pasos una vez tengas configurada tu Debian:</div>
<ol>
<li>Encender la máquina virtual.</li>
<li>Accede a ella con un usuario con permisos de root.</li>
<li>Haz update de los repositorios con: <em>apt-get update</em>;</li>
<li>Actualiza a los últimos parches de seguridad con: <em>apt-get upgrade</em>;</li>
<li>Instala los paquetes necesarios para el correcto funcionamiento de las Guest Additions con el comando: <em>apt-get install build-essential module-assistant</em>;</li>
<li>Configura tu sistema para permitir instalar modulos compilados lanzando el comando: <em>m-a prepare</em>;</li>
<li>Una vez hecho esto, haz click en el menú <strong>Devices</strong> the tu VirtualBox y elige la opción del sub-menú <strong>Install Guest Additions…</strong> Esto preparará una unidad que podrás montar desde Debian.</li>
<li>Monta la unidad con el comando: <em>mount /media/cdrom</em>.</li>
<li>Ahora sólo nos queda correr el script que instalará las Guest Additions lanzando: <em>sh /media/cdrom/VBoxLinuxAdditions.run</em></li>
</ol>
<div><em><br />
</em></div>
<p>The post <a href="http://manelperez.com/linux/como-instalar-guest-additions-debian-virtualbox/">Cómo instalar Guest Additions en una Debian corriendo en VirtualBox?</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://manelperez.com/linux/como-instalar-guest-additions-debian-virtualbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usar registro SPF para no ser detectado como SPAM</title>
		<link>http://manelperez.com/dns/usar-registro-spf-para-no-ser-detectado-como-spam/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=usar-registro-spf-para-no-ser-detectado-como-spam</link>
		<comments>http://manelperez.com/dns/usar-registro-spf-para-no-ser-detectado-como-spam/#comments</comments>
		<pubDate>Mon, 01 Apr 2013 08:32:44 +0000</pubDate>
		<dc:creator>Manel Pérez Mata</dc:creator>
				<category><![CDATA[DNS]]></category>
		<category><![CDATA[correo]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://manelperez.com/?p=783</guid>
		<description><![CDATA[<p>Cuando configuras un servidor hay un tema que suele dar bastante quebraderos de cabeza y es el de como configurarlo para que los mensajes enviados desde él no sean configurados como SPAM. En mi caso, utilizo Google Apps como servidor de correo y además, el formulario de contacto de esta web también envía mails desde [...]</p><p>The post <a href="http://manelperez.com/dns/usar-registro-spf-para-no-ser-detectado-como-spam/">Usar registro SPF para no ser detectado como SPAM</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></description>
			<content:encoded><![CDATA[<p>Cuando configuras un servidor hay un tema que suele dar bastante quebraderos de cabeza y es el de como configurarlo para que los mensajes enviados desde él no sean configurados como SPAM.</p>
<p>En mi caso, utilizo Google Apps como servidor de correo y además, el formulario de contacto de esta web también envía mails desde el dominio manelperez.com, por ejemplo, contact@manelperez.com</p>
<p>Tras las primeras pruebas detecté que los mensajes enviados desde el formulario de contacto eran marcados como SPAM y tras buscar un poco de información, encontré la solución en los registros SPF configurables en tu zona DNS.</p>
<p>Un registro SPF (Sender Policy Framework) informa a un servidor de correo que recibe un mail cuales son las direcciones IP autorizadas para enviar correos desde el dominio recibido, de este modo, cuando llega un mail desde contact@manelperez.com a una dirección de correo de yahoo, el servidor de yahoo consultará las DNS para el dominio manelperez.com, comprobará si la IP desde la que se envió el correo está recogida dentro de las IPs permitidas identificadas en el registro SPF y si lo está, lo marcará como seguro.</p>
<p><strong>Como configurar un registro SPF?</strong></p>
<p>Configurar un registro SPF es tan sencillo como añadir un registro del tipo TXT en tu zona DNS con una sintaxis específica.</p>
<p>Si quieres permitir que tanto los servidores de google (recuerda que en mi caso utilizo Google Apps) como la IP 125.125.125.1 sean marcados como servidores seguros para enviar mails, deberás añadir un registro TXT con el siguiente valor:</p>
<p><strong>v=spf1 include:_spf.google.com ip4:125.125.125.1 ~all</strong></p>
<p>De este modo, ayudaremos a los servidores de correo a detectar los correos enviados desde Google y desde la IP 125.125.125.1 como válidos.</p>
<p>The post <a href="http://manelperez.com/dns/usar-registro-spf-para-no-ser-detectado-como-spam/">Usar registro SPF para no ser detectado como SPAM</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://manelperez.com/dns/usar-registro-spf-para-no-ser-detectado-como-spam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Error con setlocale()&#8230; devuelve false</title>
		<link>http://manelperez.com/programacion/setlocale-devuelve-false/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=setlocale-devuelve-false</link>
		<comments>http://manelperez.com/programacion/setlocale-devuelve-false/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 21:36:34 +0000</pubDate>
		<dc:creator>Manel Pérez Mata</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.manelperez.com/?p=768</guid>
		<description><![CDATA[<p>Los usuarios de Ubuntu, pueden encontrarse con un problema al hacer una llamada a la función setlocale() encargada de asignar el idioma correcto para, por ejemplo, llamar a la función getText() y que recoja las traducciones en el idioma correcto. El problema está en que únicamente podemos cargar los idiomas que están presentes en el [...]</p><p>The post <a href="http://manelperez.com/programacion/setlocale-devuelve-false/">Error con setlocale()&#8230; devuelve false</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-770" src="http://www.manelperez.com/wp-content/uploads/manelperez/2010/09/i18n.png" alt="i18n" width="128" height="128" />Los usuarios de Ubuntu, pueden encontrarse con un problema al hacer una llamada a la función setlocale() encargada de asignar el idioma correcto para, por ejemplo, llamar a la función getText() y que recoja las traducciones en el idioma correcto.</p>
<p>El problema está en que únicamente podemos cargar los idiomas que están presentes en el sistema operativo y si intentamos cargar uno diferente, <em>setlocale</em>() nos devolverá siempre <em>false</em>.</p>
<p>Podemos saber los idiomas cargados en el sistema operativo mediante el comando:</p>
<blockquote><p><strong>locale -a</strong></p></blockquote>
<p>Esto nos devolverá un listado similar a este:</p>
<blockquote><p><strong>C<br />
en_GB.utf8<br />
en_IN<br />
en_NG<br />
en_US.utf8<br />
POSIX</strong></p></blockquote>
<p>Si estámos intentando cargar el idioma es_ES (como era mi caso), le resultará imposible&#8230; la solución, instalar los idiomas que necesitamos lanzando el comando:</p>
<blockquote><p>apt-get install language-pack-es-base</p></blockquote>
<p>Posteriormente, reiniciaremos Apache:</p>
<blockquote><p>/etc/init.d/apache2 reload</p></blockquote>
<p>Y le indicaremos a nuestro programa que cargue el idioma con el mismo nombre que lo encontramos en nuestro sistema, es decir, en mi caso:</p>
<blockquote><p>setlocale( LC_MESSAGES, &#8220;es_ES.UTF8&#8243; );</p></blockquote>
<p>Y con esto conseguiremos que nuestro programa quede internacionalizado de manera correcta.</p>
<p>The post <a href="http://manelperez.com/programacion/setlocale-devuelve-false/">Error con setlocale()&#8230; devuelve false</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://manelperez.com/programacion/setlocale-devuelve-false/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Error SVN Working Copy locked y cleanup</title>
		<link>http://manelperez.com/programacion/error-svn-working-copy-locked-y-cleanup/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=error-svn-working-copy-locked-y-cleanup</link>
		<comments>http://manelperez.com/programacion/error-svn-working-copy-locked-y-cleanup/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 21:23:30 +0000</pubDate>
		<dc:creator>Manel Pérez Mata</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://www.manelperez.com/?p=760</guid>
		<description><![CDATA[<p>En alguna ocasión me he encontrado con que no puedo hacer update de un proyecto porque SVN indica el error: Working copy xxxxxxxx locked Please execute &#8220;Cleanup&#8221; command Pero cuando lanzao el comando cleanup también devuelve un error: Cleanup failed to process the following paths: xxxxxx Con lo que aparentemente, la única solución que queda [...]</p><p>The post <a href="http://manelperez.com/programacion/error-svn-working-copy-locked-y-cleanup/">Error SVN Working Copy locked y cleanup</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></description>
			<content:encoded><![CDATA[<p>En alguna ocasión me he encontrado con que no puedo hacer update de un proyecto porque SVN indica el error:</p>
<blockquote><p>Working copy xxxxxxxx locked Please execute &#8220;Cleanup&#8221; command</p></blockquote>
<p>Pero cuando lanzao el comando cleanup también devuelve un error:</p>
<blockquote><p>Cleanup failed to process the following paths: xxxxxx</p></blockquote>
<p>Con lo que aparentemente, la única solución que queda es hacer un checkout nuevo e intentar no perder los cambios, sin embargo, existe otra solución:</p>
<ol>
<li>Copia los archivos editados en otra carpeta para evitar perder los cambios</li>
<li>Borra la carpeta que esté causando el problema</li>
<li>Ahora podrás hacer update</li>
<li>Copia los archivos editados en la carpeta (no copies las carpetas enteras porque contienen directorios .svn que volverán a darte problemas)</li>
<li>Por último, haz commit</li>
</ol>
<p>Espero os sea de utilidad.</p>
<p>The post <a href="http://manelperez.com/programacion/error-svn-working-copy-locked-y-cleanup/">Error SVN Working Copy locked y cleanup</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://manelperez.com/programacion/error-svn-working-copy-locked-y-cleanup/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Aprender a programar en 21 días</title>
		<link>http://manelperez.com/programacion/aprender-a-programar-en-21-dias/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=aprender-a-programar-en-21-dias</link>
		<comments>http://manelperez.com/programacion/aprender-a-programar-en-21-dias/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 21:43:38 +0000</pubDate>
		<dc:creator>Manel Pérez Mata</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Humor]]></category>

		<guid isPermaLink="false">http://www.manelperez.com/?p=753</guid>
		<description><![CDATA[<p>Via &#124; Abstruse Goose</p><p>The post <a href="http://manelperez.com/programacion/aprender-a-programar-en-21-dias/">Aprender a programar en 21 días</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: left"><a href="http://www.manelperez.com/wp-content/uploads/manelperez/2010/06/aprende-a-programar-en-21-dias.png"><img class="aligncenter size-full wp-image-754" src="http://www.manelperez.com/wp-content/uploads/manelperez/2010/06/aprende-a-programar-en-21-dias.png" alt="Aprende a programar en 21 dias" width="595" height="510" /></a>Via | <a rel="nofollow" href="http://abstrusegoose.com/249" target="_blank">Abstruse Goose</a></p>
<p>The post <a href="http://manelperez.com/programacion/aprender-a-programar-en-21-dias/">Aprender a programar en 21 días</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://manelperez.com/programacion/aprender-a-programar-en-21-dias/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smarty3 y autoload</title>
		<link>http://manelperez.com/programacion/smarty3-y-autoload/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=smarty3-y-autoload</link>
		<comments>http://manelperez.com/programacion/smarty3-y-autoload/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 07:41:32 +0000</pubDate>
		<dc:creator>Manel Pérez Mata</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Smarty]]></category>

		<guid isPermaLink="false">http://www.manelperez.com/?p=741</guid>
		<description><![CDATA[<p>Uno de los errores comunes al implementar Smarty3 es: Fatal error: Class &#8216;Smarty_Internal_Wrapper&#8217; not found Fatal error: Class &#8216;Smarty_Internal_Register&#8217; not found Fatal error: Class &#8216;Smarty_Internal_Template&#8217; not found Estos se deban, probablemente, a que en tu aplicación estás utilizando la función __autoload también necesaria por Smarty3. La solución a este problema pasa por utilizar la función [...]</p><p>The post <a href="http://manelperez.com/programacion/smarty3-y-autoload/">Smarty3 y autoload</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-74 alignright" src="http://www.manelperez.com/wp-content/uploads/manelperez/2009/05/logo_smarty.gif" alt="Smarty Logo" width="250" height="64" /></p>
<p>Uno de los errores comunes al <strong>implementar Smarty3</strong> es:</p>
<blockquote><p>Fatal error: Class &#8216;Smarty_Internal_Wrapper&#8217; not found</p>
<p>Fatal error: Class &#8216;Smarty_Internal_Register&#8217; not found</p>
<p>Fatal error: Class &#8216;Smarty_Internal_Template&#8217; not found</p></blockquote>
<p>Estos se deban, probablemente, a que en tu aplicación estás utilizando la función <strong>__autoload</strong> también necesaria por Smarty3. La solución a este problema pasa por utilizar la función que PHP nos brinda <strong>spl_autoload_register</strong>.</p>
<p>En una aplicación, sólo puede existir una llamada a la función __autload, sin embargo, con spl_autoload_register podemos añadir tantos manejadores como queramos y estos se irán ejecutando en el orden en el que los hayamos registrado.</p>
<p>Un ejemplo sencillo de su uso sería:</p>
<pre class="brush: php;">

class AutoloadHandler
{
static public function launch( $classname )
{
print '[['. $name .']]';
}
}

spl_autoload_register( 'AutoloadHandler::launch' );

new ThisClassNotExists();

</pre>
<p>El resultado de ejecutar este script sería algo así:</p>
<blockquote><p>[[ThisClassNotExists]]</p>
<p>Fatal error: Class &#8216;ThisClassNotExists&#8217; not found in &#8230;</p></blockquote>
<p>El cual nos indica que está llamando de manera correcta al autoload, pero al no estar implementado de manera correcta y no existir la clase &#8216;ThisClassNotExists&#8217; nos devuelve un error.</p>
<p>En definitiva, <strong>para solventar el problema</strong>, no será necesario que modifiques el código Smarty, pues este ya está utilizando de manera correcta spl_autoload_register, lo que debes hacer es <strong>sustituir tu __autoload</strong> por una clase con una función &#8216;launch&#8217; (llámala como quieras) y registrarla mediante:</p>
<pre class="brush: php;">
spl_autoload_register( 'MyAutoloadHandler::launch' );
</pre>
<p>The post <a href="http://manelperez.com/programacion/smarty3-y-autoload/">Smarty3 y autoload</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://manelperez.com/programacion/smarty3-y-autoload/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smarty3 y gettext</title>
		<link>http://manelperez.com/programacion/smarty3-y-gettext/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=smarty3-y-gettext</link>
		<comments>http://manelperez.com/programacion/smarty3-y-gettext/#comments</comments>
		<pubDate>Sat, 26 Jun 2010 07:39:32 +0000</pubDate>
		<dc:creator>Manel Pérez Mata</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.manelperez.com/?p=732</guid>
		<description><![CDATA[<p>Si estás utilizando Smarty2 y te has decidido a dar el salto a Smarty3 para aprovecharte de sus nuevas funcionalidades (como por ejemplo la nada despreciable opción de herencia en templates), verás que existen algunas incompatibilidades, por ejemplo, se han decidido por seguir el estandar camelCase en el nombre de las funciones, utilizan getters y [...]</p><p>The post <a href="http://manelperez.com/programacion/smarty3-y-gettext/">Smarty3 y gettext</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></description>
			<content:encoded><![CDATA[<p>Si estás utilizando Smarty2 y te has decidido a dar el salto a Smarty3 para aprovecharte de sus nuevas funcionalidades (como por ejemplo la nada despreciable opción de herencia en templates), verás que existen algunas incompatibilidades, por ejemplo, se han decidido por seguir el estandar camelCase en el nombre de las funciones, utilizan getters y setters para los atributos o han cambiado la manera de registrar bloques.</p>
<p>En el caso del popular plugin <strong>smarty-gettext</strong>, si tenemos personalizada la llamada al traductor con, por ejemplo &#8216;{t}&#8217; como es mi caso, nos encontraremos con un bonito error:</p>
<blockquote><p>function call &#8216;register_block&#8217; is unknown or deprecated</p></blockquote>
<p>Esto es debido a que la forma correcta de registrar bloques en Smarty3 es:</p>
<pre class="brush: php;">

$this-&gt;register-&gt;block('t', 'translate');

</pre>
<p>en lugar de:</p>
<pre class="brush: php;">

$this-&gt;register_block( 't', 'translate' );

</pre>
<p>Una vez hecho esto, el siguiente error que nos deja Smarty es:</p>
<blockquote><p>Plugin &#8220;t&#8221; not callable</p></blockquote>
<p>En lugar del antiguo &#8216;translate&#8217;, el segundo parámetro deberá ser el nombre correcto de la función, es decir &#8216;smarty_translate&#8217;:</p>
<pre class="brush: php;">

$this-&gt;register-&gt;block('t', 'smarty_translate');

</pre>
<p>de este modo solventaremos el problema y podremos seguir disfrutando de nuestro plugin de traducción.</p>
<p>The post <a href="http://manelperez.com/programacion/smarty3-y-gettext/">Smarty3 y gettext</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://manelperez.com/programacion/smarty3-y-gettext/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony: Upgrade de 1.2.x a 1.4 con PEAR</title>
		<link>http://manelperez.com/programacion/symfony-upgrade-de-1-2-x-a-1-4-con-pear/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=symfony-upgrade-de-1-2-x-a-1-4-con-pear</link>
		<comments>http://manelperez.com/programacion/symfony-upgrade-de-1-2-x-a-1-4-con-pear/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 17:55:15 +0000</pubDate>
		<dc:creator>Manel Pérez Mata</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.manelperez.com/?p=722</guid>
		<description><![CDATA[<p>Antes de empezar a hacer el upgrade de symfony debemos asegurarnos que los plugins utilizados actualmente en el proyecto son compatibles con la versión 1.4, en caso de no ser compatibles, tenemos tres opciones: Buscar un plugin similar que sí sea compatible. Modificar nuestra aplicación para que no utilice dicho plugin. Si no podemos prescindir [...]</p><p>The post <a href="http://manelperez.com/programacion/symfony-upgrade-de-1-2-x-a-1-4-con-pear/">Symfony: Upgrade de 1.2.x a 1.4 con PEAR</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></description>
			<content:encoded><![CDATA[<p>Antes de empezar a hacer el <strong>upgrade de symfony</strong> debemos asegurarnos que los plugins utilizados actualmente en el proyecto son compatibles con la <strong>versión 1.4</strong>, en caso de no ser compatibles, tenemos tres opciones:</p>
<ol>
<li>Buscar un plugin similar que sí sea compatible.</li>
<li>Modificar nuestra aplicación para que no utilice dicho plugin.</li>
<li>Si no podemos prescindir de él, habrá que esperar a que saquen la compatibilidad o hackearlo nosotros mismos (lo qual podría ser muy fácil o muy difícil en función del tipo de problema).</li>
</ol>
<p>Pasos a seguir para subir de versión:</p>
<p>1) Update de los canales de pear</p>
<p style="padding-left: 30px;"><em>sudo pear update-channels</em></p>
<p>2) Upgrade de symfony a la versión 1.3</p>
<p style="padding-left: 30px;"><em>sudo pear upgrade -f symfony/symfony-1.3.0</em></p>
<p>3) Validamos que no estamos usando métodos deprecated (estós están eliminados en la <strong>versión 1.4</strong>)</p>
<p style="padding-left: 30px;"><em>symfony project:validate</em></p>
<p>En caso de obtener errores del validador, los solventaremos antes de hacer el upgrade siguiendo instrucciónes en la página <a title="Symfony deprecations and removals in 1.3" href="http://www.symfony-project.org/tutorial/1_4/en/deprecated" target="_blank">Deprecations and removals in 1.3</a></p>
<p>4) Upgrade del projecto a la versión 1.3</p>
<p style="padding-left: 30px;"><em>symfony project:upgrade1.3</em></p>
<p>5) Upgrade de los plugins a la última versión</p>
<p style="padding-left: 30px;"><em>symfony plugin:upgrade [plugin]</em></p>
<p>6) Upgrade de symfony a la última versión</p>
<p style="padding-left: 30px;"><em>sudo pear upgrade symfony/symfony</em></p>
<p>7) Limpiamos la caché antes de probar</p>
<p style="padding-left: 30px;"><em>symfony cc</em></p>
<p>Ahora deberíamos tener nuestro proyecto updateado a la última versión estable de symfony <img src='http://manelperez.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>The post <a href="http://manelperez.com/programacion/symfony-upgrade-de-1-2-x-a-1-4-con-pear/">Symfony: Upgrade de 1.2.x a 1.4 con PEAR</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://manelperez.com/programacion/symfony-upgrade-de-1-2-x-a-1-4-con-pear/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony i18n con gettext</title>
		<link>http://manelperez.com/programacion/symfony-i18n-con-gettext/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=symfony-i18n-con-gettext</link>
		<comments>http://manelperez.com/programacion/symfony-i18n-con-gettext/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 14:26:01 +0000</pubDate>
		<dc:creator>Manel Pérez Mata</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.manelperez.com/?p=716</guid>
		<description><![CDATA[<p>Symfony permite varios métodos para internazionalizar nuestra aplicación. Por defecto, utilizan el formato XLIFF sin embargo, personalmente me gusta más gettext. ¿Cómo configurar symfony para usar gettext? Para configurar symfony para que utilice gettext seguiremos los siguientes pasos: 1) Activamos el módulo I18N modificando el archivo settings.yml: #apps/&#60;appName&#62;/config/settings.yml all: .settings: charset: utf-8 i18n: on standard_helpers: [...]</p><p>The post <a href="http://manelperez.com/programacion/symfony-i18n-con-gettext/">Symfony i18n con gettext</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></description>
			<content:encoded><![CDATA[<p>Symfony permite varios métodos para <strong>internazionalizar</strong> nuestra aplicación. Por defecto, utilizan el <a title="Formato XLIFF" href="http://es.wikipedia.org/wiki/XLIFF" target="_blank">formato XLIFF</a> sin embargo, personalmente me gusta más <a title="Gettext" href="http://es.wikipedia.org/wiki/Gettext" target="_blank">gettext</a>.</p>
<p><strong>¿Cómo configurar symfony para usar gettext?</strong></p>
<p>Para configurar symfony para que utilice <strong>gettext</strong> seguiremos los siguientes pasos:</p>
<p>1) Activamos el módulo I18N modificando el archivo <strong>settings.yml</strong>:</p>
<pre class="brush: php;">#apps/&lt;appName&gt;/config/settings.yml
all:
  .settings:
    charset:                utf-8
    i18n:                   on
    standard_helpers:       [ [TUS_HELPERS_ACTIVADOS]..., I18N]</pre>
<p>2) Abrimos el archivo <strong>factories.yml</strong> y añadimos la entrada i18n:</p>
<pre class="brush: php;">#apps/&lt;appName&gt;/config/factories.yml
all:
  i18n:
    class: sfI18N
    param:
      default_culture:  en_US
      source:           gettext&lt;/pre&gt;
</pre>
<p>3) Crearemos una carpeta i18n dentro de <em>apps/<appName>/</em>:</p>
<pre class="brush: php;">apps/&lt;appName&gt;/i18n/&lt;lang&gt;</pre>
<p>Donde &lt;lang&gt; será el idioma en dos letras (en, es, fr&#8230;) y dentro tendremos los ficheros messages.po y messages.mo.</p>
<p>Ahora podemos utilizar la función __( &#8216;texto_a_traducir&#8217; ) con doble <em>underscore</em> [ _ ] en lugar del simple utilizado normalmente.</p>
<p><strong>¿Cómo generar automáticamente nuestros ficheros po y mo?</strong></p>
<p>Symfony trae una serie de herramientas que nos permiten generar los archivos po y mo de manera automática. Invocando el comando:</p>
<p><code>symfony i18n:extract frontend en --auto-save</code></p>
<p>Se recorrerá todos los archivos php de nuestra aplicación (código y templates) y sacará los textos que encuentre en las funciones __().</p>
<p>También se puede utilizar el mismo comando de la siguiente manera:</p>
<p><code>symfony i18n:extract frontend en --auto-delete</code></p>
<p>para eliminar las cadenas de texto que ya no existen.</p>
<p>The post <a href="http://manelperez.com/programacion/symfony-i18n-con-gettext/">Symfony i18n con gettext</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://manelperez.com/programacion/symfony-i18n-con-gettext/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Pasar segundos a horas:minutos:segundos</title>
		<link>http://manelperez.com/programacion/pasar-segundos-a-horas-minutos-segundos/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pasar-segundos-a-horas-minutos-segundos</link>
		<comments>http://manelperez.com/programacion/pasar-segundos-a-horas-minutos-segundos/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 21:34:31 +0000</pubDate>
		<dc:creator>Manel Pérez Mata</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Script]]></category>

		<guid isPermaLink="false">http://www.manelperez.com/?p=711</guid>
		<description><![CDATA[<p>Una sencilla función que dado un número de segundos, nos devuelve el tiempo en formato hh:mm:ss protected function makeTimeFromSeconds( $total_seconds ) { $horas              = floor ( $total_seconds / 3600 ); $minutes            = ( ( $total_seconds / 60 ) % 60 ); $seconds            = ( $total_seconds % 60 ); [...]</p><p>The post <a href="http://manelperez.com/programacion/pasar-segundos-a-horas-minutos-segundos/">Pasar segundos a horas:minutos:segundos</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></description>
			<content:encoded><![CDATA[<p>Una sencilla función que dado un número de segundos, nos devuelve el tiempo en formato hh:mm:ss</p>
<pre class="brush: php;">

protected function makeTimeFromSeconds( $total_seconds )
{
    $horas              = floor ( $total_seconds / 3600 );
    $minutes            = ( ( $total_seconds / 60 ) % 60 );
    $seconds            = ( $total_seconds % 60 );

    $time['horas']      = str_pad( $horas, 2, &quot;0&quot;, STR_PAD_LEFT );
    $time['minutes']    = str_pad( $minutes, 2, &quot;0&quot;, STR_PAD_LEFT );
    $time['seconds']    = str_pad( $seconds, 2, &quot;0&quot;, STR_PAD_LEFT );

    $time               = implode( ':', $time );

    return $time;
}

</pre>
<p>Espero os sea de utilidad.</p>
<p>The post <a href="http://manelperez.com/programacion/pasar-segundos-a-horas-minutos-segundos/">Pasar segundos a horas:minutos:segundos</a> appeared first on <a href="http://manelperez.com">Blog de Manel Pérez</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://manelperez.com/programacion/pasar-segundos-a-horas-minutos-segundos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
