<?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>Leandro.vc Blog</title>
	<atom:link href="http://blog.leandro.vc/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.leandro.vc</link>
	<description>Blog de tecnología y empleo</description>
	<lastBuildDate>Mon, 16 Jan 2012 16:06:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Optimizar la velocidad de carga de sitios web según las recomendaciones de Yahoo!</title>
		<link>http://blog.leandro.vc/2012/01/16/optimizar-la-velocidad-de-sitios-web/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=optimizar-la-velocidad-de-sitios-web</link>
		<comments>http://blog.leandro.vc/2012/01/16/optimizar-la-velocidad-de-sitios-web/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 15:43:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[código]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[configuración]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[YSlow]]></category>

		<guid isPermaLink="false">http://blog.leandro.vc/?p=263</guid>
		<description><![CDATA[El otro día estuve leyendo el libro High Performance Web Sites y me pareció exactamente el mismo contenido que las recomendaciones que da Yahoo! para sacar una buena puntuación con su herramienta YSlow. A continuación, paso a comentar cuáles son estas reglas y las veo yo, según mi experiencia. Los comentarios a estas reglas son [...]]]></description>
			<content:encoded><![CDATA[<p>El otro día estuve leyendo el libro <a href="http://shop.oreilly.com/product/9780596529307.do" title="High Performance Websites" target="_blank">High Performance Web Sites</a> y me pareció exactamente el mismo contenido que las recomendaciones que da Yahoo! para sacar una buena puntuación con su herramienta <a href="http://es.wikipedia.org/wiki/YSlow" title="YSlow" target="_blank">YSlow</a>.</p>
<p>A continuación, paso a comentar cuáles son estas reglas y las veo yo, según mi experiencia. Los comentarios a estas reglas son para sitios pequeños y para sitios en servidores dedicados con acceso sólo al <em>.htaccess</em>. Si tienes una web en una instancia de <a href="http://www.linode.com" title="Linode" target="_blank">Linode</a> o <a href="http://aws.amazon.com/" title="AWS" target="_blank">Amazon</a>, no te digo que estas reglas no sirvan, pero tienes a tu disposición herramientas potentísimas como <a href="http://varnish-cache.org" title="Varnish" target="_blank">Varnish</a> para acelerar tu sitio de mejor modo. Del mismo modo voy a comentar estas reglas desde el punto de vista de alguien que tiene un sitio pequeño/mediano. Si trabajas en Tuenti, seguramente deberías hacer las cosas de otra forma.</p>
<ul>
<li>
<h3>1. Cuantas menos peticiones HTTP, mejor</h3>
<p>para iconos y pequeñas imágenes se recomienda el uso de imágenes <em>inline</em></li>
<li>
<h3>2.<s><font color="red">Usa un CDN</s></font></h3>
<p>Esto es ridículo para un sitio pequeño y está fuera de lugar</li>
<li>
<h3>3. Añade un &#8220;ExpiresHeader&#8221; a tu .htaccess</h3>
<p>Aquí caemos en el debate de que si añades a todos los elementos un expire en el futuro lejano, cuando cambies un js o un css, el usuario no pillará los cambios a no ser que cada vez le cambies de nombre al fichero</li>
<li>
<h3>4. Usa compresión</h3>
<p>         <em>AddOutputFilterByType DEFLATE text/html text/css</em></li>
<li>
<h3>5. Hojas de estilo al principio</h3>
<p><em><code>[link]</code>dentro de <code>[head]</code></em></li>
<li>
<h3>6. Scripts JS al final</h3>
</li>
<li>
<h3>7.<s><font color="red">Evita las expresiones CSS</s></font></h3>
<p>Tranquilo, no lo hace casi nadie</li>
<li>
<h3>8. JS y CSS en ficheros externos</h3>
<p>No tengo muy claro en qué medida acelera la carga, pero pondrá orden en tu vida</li>
<li>
<h3>9. Pocas búsquedas al DNS</h3>
<p>Poner un <em>TTL</em> y controlar el <em>Keep-Alive</em> </li>
<li>
<h3>10. Optimiza tu JS</h3>
<p>La herramienta que usa todo el mundo es <a href="http://www.crockford.com/javascript/jsmin.html" title="JSMin" target="_blank">JSMin</a></li>
<li>
<h3>11. Evita los redirect</h3>
<p>301, 302, etc .. en general, ralentizan todos</li>
<li>
<h3>12. Evita scripts duplicados</h3>
<p>Revisa también llamadas a ficheros que ya no usas </li>
<li>
<h3>13. Configura los ETags</h3>
<p>Yo prefiero quitarlos con <em>FileEtag none</em></li>
<li>
<h3>14. Haz Ajax cacheable</h3>
<p>De nuevo, atención al <em>Expires</em></li>
</ul>
<p>Con sólo seguir unas pocas de estas recomendaciones el tiempo de carga de la página se puede reducir entre un 40 y un 60%</p>
<p>Para acabar os dejo unos enlaces para profundizar en el tema:<br />
- <a href="https://developers.google.com/pagespeed/" title="pagespeed" target="_blank">https://developers.google.com/pagespeed/</a><br />
- <a href="http://gtmetrix.com/" title="gtmetrix" target="_blank">http://gtmetrix.com/</a><br />
- <a href="http://webperformanceoptimization.es" title="web performance optimization" target="_blank">http://webperformanceoptimization.es</a></p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2012/01/16/optimizar-la-velocidad-de-sitios-web/" target="_blank"><img src="http://blog.leandro.vc/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2012/01/16/optimizar-la-velocidad-de-sitios-web/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.leandro.vc/2012/01/16/optimizar-la-velocidad-de-sitios-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Empleos en linux</title>
		<link>http://blog.leandro.vc/2011/12/17/empleos-en-linux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=empleos-en-linux</link>
		<comments>http://blog.leandro.vc/2011/12/17/empleos-en-linux/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 22:03:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Sin categoría]]></category>

		<guid isPermaLink="false">http://blog.leandro.vc/?p=252</guid>
		<description><![CDATA[Vía Ubuntizandoelplaneta encuentro esta infografía que muestra una estadística sobre el mercado laboral de Linux reuniendo datos de jobs.linux.com, herramienta de la Linux Foundation que permite buscar y encontrar trabajos relacionados con Linux Share on Facebook]]></description>
			<content:encoded><![CDATA[<p>Vía <a href="http://www.ubuntizandoelplaneta.com">Ubuntizandoelplaneta</a> encuentro esta infografía que muestra una estadística sobre el mercado laboral de Linux reuniendo datos de <a href="http://jobs.linux.com">jobs.linux.com</a>, herramienta de la <a href="Linux Foundation">Linux Foundation</a> que permite buscar y encontrar trabajos relacionados con Linux<br />
 <a href="http://blog.leandro.vc/wp-content/uploads/2011/12/linux-trabajo-infografia.png"><img src="http://blog.leandro.vc/wp-content/uploads/2011/12/linux-trabajo-infografia.png" alt="" title="linux-trabajo-infografia" width="525" height="1055" class="alignnone size-full wp-image-253" /></a></p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/12/17/empleos-en-linux/" target="_blank"><img src="http://blog.leandro.vc/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/12/17/empleos-en-linux/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.leandro.vc/2011/12/17/empleos-en-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>administrando drupal en remoto con drush</title>
		<link>http://blog.leandro.vc/2011/11/26/administrando-drupal-remoto-drush/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=administrando-drupal-remoto-drush</link>
		<comments>http://blog.leandro.vc/2011/11/26/administrando-drupal-remoto-drush/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 19:34:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[código]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[software libre]]></category>
		<category><![CDATA[consola]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[drush]]></category>
		<category><![CDATA[remoto]]></category>

		<guid isPermaLink="false">http://blog.leandro.vc/?p=231</guid>
		<description><![CDATA[Drush es una excelente herramienta para administrar Drupal desde la consola. Lo mejor es que desde nuestra consola local podemos administrar Drúpales remotos. No hace falta entrar por SSH. Primero instalamos drush. Como tiene paquete de PEAR, a mi me gusta instalarlo así. Hacemos pear channel-discover pear.drush.org pear install drush/drush Bajar Drupal e instalarlo desde [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Drush</strong> es una excelente herramienta para administrar <strong>Drupal</strong> desde la consola. Lo mejor es que desde nuestra consola local podemos administrar Drúpales remotos. No hace falta entrar por <em>SSH</em>.<br />
Primero instalamos <strong>drush</strong>. Como tiene paquete de <em>PEAR</em>, a mi me gusta instalarlo así. Hacemos<br />
<code><br />
pear channel-discover pear.drush.org<br />
pear install drush/drush<br />
</code></p>
<p>Bajar Drupal e instalarlo desde la consola:<br />
1. Bajamos el código<br />
   <code>drush dl drupal</code><br />
2. Hacemos una instalación estándar<br />
   <code>drush si standard --db-url=mysql://admin:admin@localhost/drupal7</code><br />
3. Si tenemos alguna duda el comando help es nuestro amigo<br />
   <code>drush help dl</code></p>
<p>Para administrar Drúpales remotos podemos teclear:<br />
<code>drush site-alias @self --full</code> en el directorio local donde tengamos instalado drupal<br />
Esto nos proporciona un código como el siguiente:<br />
<code><br />
<?php<br />
$aliases['local'] = array (<br />
'root' => '/var/www/html/dev',<br />
'uri' => 'http://dev.com',<br />
);<br />
</code><br />
Bien, este código lo pegamos en el fichero<br />
<cite>~/.drush/aliases.drushrc.php</cite><br />
(si no tenemos el directorio <em>.drush</em>, lo creamos)<br />
A continuación vamos a crear tantos arrays como éste como sitios remotos tengamos, por ejemplo añadimos al fichero otro array tal que<br />
<code><br />
<?php<br />
$aliases['remoto'] = array (<br />
'root' => '/var/www/miweb',<br />
'uri' => 'http://mi-super-web.com',<br />
);<br />
</code></p>
<p>Vale, ahora drush se encarga de acceder al sitio «remoto» por medio de SSH por medio de vuestra clave RSA. Si no la tenéis creada, la creáis y después sólo queda añadir vuestra clave para que el servidor remoto deje actuar a <strong>drush</strong>.<br />
Dejar claro que <strong>Drush</strong> para operar en remoto utiliza SIEMPRE claves <em>SSH</em>.<br />
Lo normal es bajarse el paquete <strong>drush_extras</strong> de la web de Drupal y descomprimirlo en ~/.drush <em>Drush_extras</em> nos proporciona el comando <em>pushkey</em>.<br />
Por lo tanto, debemos ejecutar el siguiente comando:<br />
<code><br />
drush pushkey usuario@servidor<br />
</code><br />
En mi caso, utilizo los servicios de la nube de <strong>Amazon</strong>, por lo que puse en usuario el usuario que normalmente uso para entrar con SSH en el servidor y en la parte del servidor puse el nombre de Host que tengo en<br />
<em>~/.ssh/config</em><br />
Este comando no retorna nada. Si no os da error, ha funcionado.<br />
A partir de aquí podéis acceder al servidor remoto con drush con la siguiente sintaxis<br />
<code><br />
drush @servidor comando<br />
</code><br />
Pongo a continuación algunos comandos, de los mas usados:<br />
<code><br />
drush @servidor status<br />
</code><br />
muestra el estado de Drupal, da la siguiente salida<br />
<a href="http://blog.leandro.vc/wp-content/uploads/2011/11/drush2.png"><img src="http://blog.leandro.vc/wp-content/uploads/2011/11/drush2-300x226.png" alt="drush muestra el estado del drupal en el servidor remoto" title="drush @servidor status" width="300" height="226" class="alignnone size-medium wp-image-238" /></a><br />
<code><br />
drush sql-cli<br />
</code><br />
nos abre una sesión de mysql con el usuario de drupal<br />
<code><br />
drush sql-sync @maquina-desde @maquina-hacia<br />
</code><br />
sincroniza las bases de datos de dos máquinas<br />
<code><br />
drush @servidor vs maintenance_mode 1<br />
</code><br />
para poner el servidor en mantenimiento con drush<br />
«vs» es «variable-set» y «vg», «variable-get»<br />
<code><br />
drush ws<br />
</code><br />
muestra el watchdog de nuestro Drupal, como véis aquí<br />
<a href="http://blog.leandro.vc/wp-content/uploads/2011/11/drush.png"><img src="http://blog.leandro.vc/wp-content/uploads/2011/11/drush.png" alt="visualizando el watchdog de drupal con drush" title="drupal watchdog en drush" width="628" height="172" class="alignnone size-full wp-image-242" /></a><br />
Y ya me he aburrido de poner comandos, pero existen muchos más y muy útiles. Podéis comprobarlo vosotros mismos en <a href="http://drush.ws/" title="la documentación de drush" target="_blank">la documentación de Drush</a>.</p>
<p>Toda esta información y mucha mas nos fué ofrecida por <a href="https://twitter.com/#!/drupalero" target="_blank">Manuee</a> en la charla del de la <a href="http://drupalmadrid.org" title="Asociación Drupal Madrid" target="_blank">Asociación Drupal Madrid</a> el día 24 de Noviembre de 2011. Si vives en Madrid, las <a href="http://groups.drupal.org/node/186679" title="charla de drush en madrid de la Asociación Drupal Madrid" target="_blank">charlas</a> de <a href="https://twitter.com/#!/drupal_madrid" title="Asociación Drupal Madrid" target="_blank">Drupal Madrid</a> son una excelente forma de aprender y de hacer <em>networking</em>. ¡Aprovecha la oportunidad!</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/11/26/administrando-drupal-remoto-drush/" target="_blank"><img src="http://blog.leandro.vc/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/11/26/administrando-drupal-remoto-drush/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.leandro.vc/2011/11/26/administrando-drupal-remoto-drush/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comandos útiles de PHP desde la línea de comandos</title>
		<link>http://blog.leandro.vc/2011/11/25/comandos-utiles-de-php-desde-la-linea-de-comandos/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=comandos-utiles-de-php-desde-la-linea-de-comandos</link>
		<comments>http://blog.leandro.vc/2011/11/25/comandos-utiles-de-php-desde-la-linea-de-comandos/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 19:05:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[código]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[software libre]]></category>
		<category><![CDATA[cli]]></category>
		<category><![CDATA[comandos]]></category>
		<category><![CDATA[consola]]></category>

		<guid isPermaLink="false">http://blog.leandro.vc/?p=223</guid>
		<description><![CDATA[PHP resulta muy útil desde la línea de comandos. ¿Para qué? Pues para ejecutarlo desde el cron, como proceso batch o para ejecutar un demonio (daemon). Si bien debemos tener en cuenta algunas diferencias que existen en la consola comparado con cuando PHP nos llega a través de un servidor web: no hay sesiones, ni [...]]]></description>
			<content:encoded><![CDATA[<p>PHP resulta muy útil desde la línea de comandos.<br />
¿Para qué? Pues para ejecutarlo desde el <em>cron</em>, como proceso <em>batch</em> o para ejecutar un demonio (<em>daemon</em>).<br />
Si bien debemos tener en cuenta algunas diferencias que existen en la consola comparado con cuando PHP nos llega a través de un servidor web: no hay sesiones, ni cookies ni <em>timeouts</em>.</p>
<p>Los argumentos se pasan de la siguiente manera:
<p><code>php fichero.php arg1 arg2</code><br />
Además contamos con las siguientes variables y funciones:<br />
<code>$argc</code>: número de argumentos<br />
<code>$argv</code>: los argumentos pasados en un array (el propio fichero php ocupa la primera posición)<br />
<a title="getopt" href="http://es.tldp.org/Paginas-manual/man-pages-es-1.28/man3/getopt.3.html" target="_blank"><code>getopt</code></a>: para manejar los argumentos</p>
<p>A su vez, el binario de PHP desde la consola nos ofrece las siguientes funcionalidades:<br />
<code>php -a</code> → shell interactiva [con tab completion :-) ]<br />
<code>php -r</code> → ejecuta código Ejemplo:   <code>php  -­‐r  "echo  date('Y-­‐m-­‐d  H:i:s');</code>&#8221;<br />
<code>php -i</code> → ofrece información del php.ini [Ejemplo: <code>php -i | grep "log_errors" </code>]<br />
<code>php -l</code> → chequea errores de sintaxis (lo uso a diario)<br />
<code>php -m</code> → da una lista de los módulos incluídos en tu distribución de PHP<br />
<code>php -s</code> →  resaltado de sintaxis (utilísimo para formatear código en html) [Ejemplo: <code>php -s hola.php &gt; hola.html</code>]<br />
<code>php -v</code> → información de la versión de PHP<br />
<code>php --rf</code> → da una pequeña referencia sobre la función que le pases [Ejemplo: <code>php --rf print_r</code>]<br />
<code>php --ri</code> → información sobre la extensión que le pases [Ejemplo: <code>php --ri pdo</code>]</p>
<p>Recuerda que con PHP desde la consola ya no estás recluído en /var/www, sino que puedes ejecutar cualquier script desde cualquier lugar! Incluso con el shebang adecuado (<code>#!/usr/bin/php</code>) puedes ejecutar con PHP un fichero sin extensión .php</p>
<p>Échale un ojo, ¡hay gente que con scripts de PHP para consola maneja hilos!</p>
<p>Esta información la aprendí en la <a title="PHPConference" href="http://phpconference.es/" target="_blank">PHPConference 2011 </a>de Barcelona en la charla de <a title="Thijs Feryn" href="http://blog.feryn.eu/" target="_blank">Thijs Feryn</a> y me ha encantado compartirla con vosotros :-)</p>
<p><a title="PHP CLI" href="http://www.slideshare.net/combell/cli-the-other-sapi-pbc11" target="_blank">La presentación que dio Thijs está aquí</a></p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/11/25/comandos-utiles-de-php-desde-la-linea-de-comandos/" target="_blank"><img src="http://blog.leandro.vc/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/11/25/comandos-utiles-de-php-desde-la-linea-de-comandos/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.leandro.vc/2011/11/25/comandos-utiles-de-php-desde-la-linea-de-comandos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Módulo 11870 para Drupal 7</title>
		<link>http://blog.leandro.vc/2011/11/07/modulo-11870-para-drupal-7/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=modulo-11870-para-drupal-7</link>
		<comments>http://blog.leandro.vc/2011/11/07/modulo-11870-para-drupal-7/#comments</comments>
		<pubDate>Sun, 06 Nov 2011 22:10:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Sin categoría]]></category>

		<guid isPermaLink="false">http://blog.leandro.vc/?p=214</guid>
		<description><![CDATA[Aquí teneis un módulo para Drupal 7 que muestra en un bloque cualquier cosa que podéis elegir a buscar en la API de 11870 que resulte cerca de la geolocalización por IP del visitante de vuestro sitio. Advierto que no es el típico módulo de subir y echar a correr, porque necesita un poco de [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://leandro.org/piezas/onceocho.tar.gz" title="Módulo de 11870 para Drupal 7">Aquí</a> teneis un módulo para Drupal 7 que muestra en un bloque cualquier cosa que podéis elegir a buscar en la API de 11870 que resulte cerca de la geolocalización por IP del visitante de vuestro sitio.<br />
<img src="http://leandro.org/img/mod-11870.png" alt="Vista del bloque" /><br />
Advierto que no es el típico módulo de subir y echar a correr, porque necesita un poco de configuración. Resumiendo, para hacerlo funcionar necesitaréis:</p>
<ul>
<li><a href="http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz">la base de datos en binario de Maxmind</a> (para geolocalizar las ips)</li>
<li>una user key de Google Maps</li>
<li>token y secret de usuarios en el API de 11870</li>
</ul>
<p>y poco mas. Se configura todo en 10 minutos.<br />
La instalación es la acostumbrada: subís el módulo, lo habilitáis, lo configuráis (tiene pantalla de configuración) y lo añadís a vuestro theme como bloque.<br />
<img src="http://leandro.org/img/mod-11870-2.png" alt="Pantalla de configuración del módulo" /><br />
La salida del html del bloque está <em>harcodeada</em> en el código. A partir de aquí sois libres para modificarlo/mejorarlo como queráis.</p>
<p>Podéis ver un ejemplo funcionando (restaurante vegetariano cercano) en mi web personal <a href="http://leandro.org" title="Mi web personal">http://leandro.org</a><br />
<em>Bon apetit!</em> :)</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/11/07/modulo-11870-para-drupal-7/" target="_blank"><img src="http://blog.leandro.vc/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/11/07/modulo-11870-para-drupal-7/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.leandro.vc/2011/11/07/modulo-11870-para-drupal-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La POO no siempre es una buena idea para PHP</title>
		<link>http://blog.leandro.vc/2011/10/29/la-poo-no-siempre-es-una-buena-idea-para-php/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=la-poo-no-siempre-es-una-buena-idea-para-php</link>
		<comments>http://blog.leandro.vc/2011/10/29/la-poo-no-siempre-es-una-buena-idea-para-php/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 18:19:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[POO PHP código]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[POO]]></category>

		<guid isPermaLink="false">http://blog.leandro.vc/?p=201</guid>
		<description><![CDATA[Bueno, escribo esto porque estoy harto de que cada dos por tres aparezca un «listo» diciendo que para «hacer las cosas bien» en PHP hay que usar el modelo mental de la Programación Orientada a Objetos. Bueno, iré por partes: 1. PHP no está diseñado ni pensado para trabajar con el paradigma de POO. Está [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, escribo esto porque estoy harto de que cada dos por tres aparezca un «listo» diciendo que para «hacer las cosas bien» en PHP hay que usar el modelo mental de la Programación Orientada a Objetos.<br />
Bueno, iré por partes:<br />
1. PHP no está diseñado ni pensado para trabajar con el paradigma de POO. Está diseñado a imagen de C, no de Java. Eso que quede claro. Que el objeto <a href="http://php.net/manual/es/class.datetime.php">DateTime</a> sea eso, un objeto (desde 2004), es una excepción, la mayoría de las funciones de PHP son funciones, no métodos de clases. Otra cosa, es que, dadas las reclamaciones de gente «pro POO» se le haya añadido soporte para objetos. Nada mas.<br />
2. Llevo muchísimo tiempo viendo ejemplos de código de <a href="http://toys.lerdorf.com/">Rasmus Lerdorf</a>, <a href="http://blog.tabini.ca/">Marco Tabini</a>, etc, gente que realmente es buena y dirige el propio desarrollo de PHP y, muchas veces, no se molestan en usar POO. PHP es rápido y directo, muchas veces no hace falta más que un pensamiento procedural.<br />
Hay un dicho que dice «si funciona, no lo toques» pues yo tengo otro: «si funciona, no me importa cómo lo hayas hecho» </p>
<p>[<em>Ahora, si tu eres tan listo que te consideras capacitado para superar el trabajo de Rasmus y demás, creo que la discusión está de mas ...</em>]</p>
<p>3. no nos engañemos, PHP ha tenido y tiene éxito porque es rápido y se pueden hacer ñapas. Veamos como se resuelve un bug en RoR: el gurú de turno tardará 10 minutos, si, pero, si es como debe ser, se pasará 2 días haciendo tests unitarios. Veamos en java: tardará mas forzosamente porque tiene que lidiar con el obligatorio andamiaje de objetos con el que capean a diario. En PHP se tarda 10 minutos y en otros 5 está en producción. Es así, PHP es guarro y efectivo, por eso ha triunfado.<br />
Ojo, no estoy diciendo que la POO sea una mala idea. Al contrario, digo que no siempre es adecuada para PHP. Lo entiendo como lo más adecuado para un framework (<a href="http://framework.zend.com/">Zend</a>, <a href="http://codeigniter.com/">CodeIgniter</a> &#8230;) o una librería, pero se me ocurren muchos casos en los que no merece la pena.<br />
Por ejemplo: cualquier tarea de sistemas, scripts de control o monitorización, micro-sites, una página personal, etc. Veamos en detalle el ejemplo de un micro-site comercial que vivirá lo que dura una campaña (unos meses) Pues no merece la pena usar POO, es más, ni siquiera plantillas. Señores, si no vas a reutilizar el código, las líneas van a ser pocas y no va a haber mantenimiento la POO no merece la pena. La POO se inventó para equipos de desarrollo de muchas personas donde se iba a reutilizar el código en el futuro ¿Sois pocos desarrollando? ¿No vas a reutilizar el código? Pues no uses POO, está claro.</p>
<p>El problema es que eres una persona (con o sin carrera) que se cree inteligente y le gusta admirar las cosas complejas. Empezaste a programar en un numeroso equipo picando Java. Te metieron a fuego en la cabeza cosas como patrones de diseño, closures, namespaces y cosas de esas &#8230; y ahora, claro, llegas a PHP y pretendes hacer lo que sabes hacer.<br />
Para eso está Java, no trabajes con PHP: serás mas feliz.</p>
<p>¿De verdad el patrón fachada, por ejemplo, es necesario en PHP? ¿Sólo porque viste que era lo mas usado en Java ahora tienes que repetirlo en PHP aunque sea con calzador? ¿Hay alguna razón objetiva para ello?<br />
¿De verdad te merece la pena complicarte la vida y tardar más sólo para satisfacer tus exigencias estéticas o académicas?<br />
¿Por qué hacer las cosas bien es hacerlas como se hace en un entorno empresarial?<br />
Me gustaría saber, en serio, de dónde vienen estas ideas.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/10/29/la-poo-no-siempre-es-una-buena-idea-para-php/" target="_blank"><img src="http://blog.leandro.vc/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/10/29/la-poo-no-siempre-es-una-buena-idea-para-php/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.leandro.vc/2011/10/29/la-poo-no-siempre-es-una-buena-idea-para-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>El mito de que una coca-cola tiene siete cucharadas de azúcar es falso.</title>
		<link>http://blog.leandro.vc/2011/09/22/el-mito-de-que-una-coca-cola-tiene-siete-cucharadas-de-azucar-es-falso/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=el-mito-de-que-una-coca-cola-tiene-siete-cucharadas-de-azucar-es-falso</link>
		<comments>http://blog.leandro.vc/2011/09/22/el-mito-de-que-una-coca-cola-tiene-siete-cucharadas-de-azucar-es-falso/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 17:56:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Sin categoría]]></category>
		<category><![CDATA[coca coca-cola azúcar cucharada]]></category>

		<guid isPermaLink="false">http://blog.leandro.vc/?p=195</guid>
		<description><![CDATA[Sí, amigos, tiene exactamente 35 gr de azúcar, o sea, lo que viene a ser una cucharada sopera, no siete. Lo que equivale a unas dos piezas de fruta. Ni tanto ni tan calvo. Share on Facebook]]></description>
			<content:encoded><![CDATA[<p>Sí, amigos, tiene exactamente 35 gr de azúcar, o sea, lo que viene a ser <b>una</b> cucharada sopera, no siete. Lo que equivale a unas dos piezas de fruta. <a href="http://blog.leandro.vc/wp-content/uploads/2011/08/azucar.jpg"><img src="http://blog.leandro.vc/wp-content/uploads/2011/08/azucar-300x186.jpg" alt="" title="azucar" width="300" height="186" class="aligncenter size-medium wp-image-198" /></a><i>Ni tanto ni tan calvo</i>.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/09/22/el-mito-de-que-una-coca-cola-tiene-siete-cucharadas-de-azucar-es-falso/" target="_blank"><img src="http://blog.leandro.vc/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/09/22/el-mito-de-que-una-coca-cola-tiene-siete-cucharadas-de-azucar-es-falso/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.leandro.vc/2011/09/22/el-mito-de-que-una-coca-cola-tiene-siete-cucharadas-de-azucar-es-falso/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google admite que cede datos de usuarios europeos a la CIA</title>
		<link>http://blog.leandro.vc/2011/08/11/google-admite-que-cede-datos-de-usuarios-europeos-a-la-cia/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=google-admite-que-cede-datos-de-usuarios-europeos-a-la-cia</link>
		<comments>http://blog.leandro.vc/2011/08/11/google-admite-que-cede-datos-de-usuarios-europeos-a-la-cia/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 08:53:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Sin categoría]]></category>
		<category><![CDATA[CIA]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[privacidad]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://blog.leandro.vc/?p=186</guid>
		<description><![CDATA[http://alt1040.com/2011/08/google-primera-compania-en-admitir-la-entrega-de-datos-de-sus-usuarios-europeos-a-las-agencias-de-inteligencia-de-estados-unidos Hoy en día todos compartimos media vida (la digital) con empresas privadas como Facebook, Google, Apple o Microsoft. Estas empresas venden o ceden gratuitamente nuestros datos e información al mejor postor o a los gobiernos. Ya lo advirtió Richard Stallman hace un par de años: «Uno de los peligros del sistema de software privativo, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://alt1040.com/2011/08/google-primera-compania-en-admitir-la-entrega-de-datos-de-sus-usuarios-europeos-a-las-agencias-de-inteligencia-de-estados-unidos">http://alt1040.com/2011/08/google-primera-compania-en-admitir-la-entrega-de-datos-de-sus-usuarios-europeos-a-las-agencias-de-inteligencia-de-estados-unidos</a></p>
<p>Hoy en día todos compartimos media vida (la digital) con empresas privadas como Facebook, Google, Apple o Microsoft. Estas empresas venden o ceden gratuitamente nuestros datos e información al mejor postor o a los gobiernos.<br />
Ya lo advirtió <a href="http://stallman.org">Richard Stallman</a> hace un par de años: «Uno de los peligros del sistema de software privativo, es que se usa para conocer datos de los usuarios y controlarlos: &#8220;<a href="http://www.publico.es/ciencias/69347/stallman-contra-el-gran-hermano">Los usuarios aceptan lo que debería ser un escándalo</a>&#8220;»</p>
<p>Precaución, amigos!</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/08/11/google-admite-que-cede-datos-de-usuarios-europeos-a-la-cia/" target="_blank"><img src="http://blog.leandro.vc/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/08/11/google-admite-que-cede-datos-de-usuarios-europeos-a-la-cia/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.leandro.vc/2011/08/11/google-admite-que-cede-datos-de-usuarios-europeos-a-la-cia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Actualizar MantisBT con ficheros patch</title>
		<link>http://blog.leandro.vc/2011/06/29/actualizar-mantisbt-ficheros-patch/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=actualizar-mantisbt-ficheros-patch</link>
		<comments>http://blog.leandro.vc/2011/06/29/actualizar-mantisbt-ficheros-patch/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 09:43:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Sin categoría]]></category>

		<guid isPermaLink="false">http://blog.leandro.vc/?p=190</guid>
		<description><![CDATA[En el trabajo teníamos la versión 1.2.4 de Mantis y en su web he encontrado una manera de actualizarlo a 1.2.5 rápida y fácil. 1. hacemos una copia de seguridad: cp -r mantis mantis-1.2.4 2. a) ahora nos bajamos el repo de desarrollo de mantis y hacemos un diff entre las 2 últimas versiones: git [...]]]></description>
			<content:encoded><![CDATA[<p>En el trabajo teníamos la versión 1.2.4 de Mantis y en su web he encontrado una manera de actualizarlo a 1.2.5 rápida y fácil.<br />
1. hacemos una copia de seguridad:</p>
<p><em>cp -r mantis mantis-1.2.4</em></p>
<p>2. a) ahora nos bajamos el repo de desarrollo de mantis y hacemos un diff entre las 2 últimas versiones:</p>
<p><em>git clone https://github.com/mantisbt/mantisbt.git<br />
git diff &#8211;no-prefix release-1.2.4..release-1.2.5 > mantis-1.2.4-to-1.2.5.patch</em></p>
<p>b) si ya tenemos descargado el repo, simplemente actualizamos haciendo un <strong>pull</strong>:</p>
<p><em>git pull<br />
git diff &#8211;no-prefix release-1.2.4..release-1.2.5 > mantis-1.2.4-to-1.2.5.patch</em></p>
<p>3. por último aplicamos el parche al código original:</p>
<p><em>cd /tu/directorio/de/mantis<br />
patch -p0 < mantis-1.2.4-to-1.2.5.patch</em></p>
<p>4. ¡Hecho!</p>
<p><cite><br />
<a href="http://www.mantisbt.org/blog/?p=132&#038;cpage=1#comment-12927">nota original de Wim Leers</a><br />
</cite></p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/06/29/actualizar-mantisbt-ficheros-patch/" target="_blank"><img src="http://blog.leandro.vc/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/06/29/actualizar-mantisbt-ficheros-patch/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.leandro.vc/2011/06/29/actualizar-mantisbt-ficheros-patch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Avatares en Psi+ para el roster de muc</title>
		<link>http://blog.leandro.vc/2011/06/22/avatares-en-psi-para-el-roster-de-muc/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=avatares-en-psi-para-el-roster-de-muc</link>
		<comments>http://blog.leandro.vc/2011/06/22/avatares-en-psi-para-el-roster-de-muc/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 08:43:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[jabber]]></category>
		<category><![CDATA[software libre]]></category>

		<guid isPermaLink="false">http://blog.leandro.vc/?p=181</guid>
		<description><![CDATA[A partir de la versión 0.15.40 de Psi+ (liberada hace unos días) es posible visualizar el avatar de los participantes en las salas de charla. Para ello hay que marcar a TRUE la siguiente opción: options.ui.muc.userlist.avatars.show Share on Facebook]]></description>
			<content:encoded><![CDATA[<p>A partir de la versión 0.15.40 de <a href="http://code.google.com/p/psi-dev/">Psi+</a> (liberada hace unos días) es posible visualizar el avatar de los participantes en las salas de charla.<br />
Para ello hay que marcar a TRUE la siguiente opción:</p>
<blockquote><p>options.ui.muc.userlist.avatars.show</p></blockquote>
<p><a href="http://blog.leandro.vc/wp-content/uploads/2011/06/psiplus.png"><img src="http://blog.leandro.vc/wp-content/uploads/2011/06/psiplus.png" alt="avatares en salas de charla" title="psiplus" width="108" height="290" class="aligncenter size-full wp-image-187" /></a></p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/06/22/avatares-en-psi-para-el-roster-de-muc/" target="_blank"><img src="http://blog.leandro.vc/wp-content/plugins/add-to-facebook-plugin/facebook_share_icon.gif" alt="Share on Facebook" title="Share on Facebook" /></a><a href="http://www.facebook.com/share.php?u=http://blog.leandro.vc/2011/06/22/avatares-en-psi-para-el-roster-de-muc/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.leandro.vc/2011/06/22/avatares-en-psi-para-el-roster-de-muc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

