<?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>mjcarrascosa.com &#187; Herramientas</title>
	<atom:link href="http://mjcarrascosa.com/category/herramientas/feed/" rel="self" type="application/rss+xml" />
	<link>http://mjcarrascosa.com</link>
	<description>Desarrollo web y otras hierbas</description>
	<lastBuildDate>Fri, 08 Jul 2011 07:41:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Como evitar el hotlinking</title>
		<link>http://mjcarrascosa.com/como-evitar-el-hotlinking/</link>
		<comments>http://mjcarrascosa.com/como-evitar-el-hotlinking/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 14:07:41 +0000</pubDate>
		<dc:creator>Manuel Jesús Carrascosa de la Blanca</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[hotlinking]]></category>
		<category><![CDATA[mod_rewrite]]></category>

		<guid isPermaLink="false">http://mjcarrascosa.com/?p=687</guid>
		<description><![CDATA[El hotlinking es un grave problema puesto que consume parte del ancho de banda de nuestros servidores, y este ancho de banda se paga. Mediante mod_rewrite de apache podemos solucionar este problema de varias formas: Evitando que determinados sitios puedan hacer hotlinking (enemigos específicos). Permitir el hotlinking solo a sitios determinados (lista de amigos). Lo [...]]]></description>
			<content:encoded><![CDATA[<p>El hotlinking es un grave problema puesto que consume parte del ancho de banda de nuestros servidores, y este ancho de banda se paga. Mediante mod_rewrite de apache podemos solucionar este problema de varias formas:</p>
<ol>
<li>Evitando que determinados sitios puedan hacer hotlinking (enemigos específicos).</li>
<li>Permitir el hotlinking solo a sitios determinados (lista de amigos).</li>
</ol>
<p>Lo que vamos a hacer en ambos casos es reescribir la dirección solicitada, desde un sitio que no tenga permiso para hacer hotlinking, por otra imagen distinta, o bien una pequeña e invisible (lo más recomendable para minimizar el consumo de transferencia) o bien por una imagen que advierta de que se está haciendo hotlinking (la versión vengadora). Vamos ahora con el primer método:</p>
<p><strong>1-. Evitando que determinados sitios puedan hacer hotlinking (enemigos específicos):</strong></p>
<p>Para implementar este método vamos a añadir lo siguiente a nuestro archivo .htaccess:</p>
<pre class="brush:text">RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http://(.+\.)?enemigo1\.es/ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(.+\.)?enemigo2\.org/ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(.+\.)?enemigo3\.com/ [NC]
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /imagenes/hotlinking.jpg [L]
</pre>
<p>De esta forma evitamos que pueda hacer hotlinking desde los dominios especificados. Para ello le indicamos que cuando se referencie a una imagen (jpg, gif, bmp o png) de nuestro servidor desde los dominios indicados se les envíe el contenido de otra dirección, en nuestro caso la imagen que queremos mostrar cuando se haga hotlinking.</p>
<p><strong>2-. Permitir el hotlinking solo a stios determinados (lista de amigos):</strong></p>
<pre class="brush:text">RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?misitio\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?amigo1\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?amigo2\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /imagenes/hotlinking.jpg [L]
</pre>
<p>De esta forma rescribimos la dirección para todas las referencias a nuestras imágenes desde cualquier sitio, salvo para los indicados en la lista (donde deberemos incluir también nuestro sitio).</p>
]]></content:encoded>
			<wfw:commentRss>http://mjcarrascosa.com/como-evitar-el-hotlinking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 Test ¿Cómo de bien soporta HTML5 tu navegador?</title>
		<link>http://mjcarrascosa.com/html5-test-%c2%bfcomo-de-bien-soporta-html5-tu-navegador/</link>
		<comments>http://mjcarrascosa.com/html5-test-%c2%bfcomo-de-bien-soporta-html5-tu-navegador/#comments</comments>
		<pubDate>Thu, 06 May 2010 22:05:53 +0000</pubDate>
		<dc:creator>Manuel Jesús Carrascosa de la Blanca</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[HTML 5]]></category>
		<category><![CDATA[Test]]></category>

		<guid isPermaLink="false">http://mjcarrascosa.com/?p=633</guid>
		<description><![CDATA[HTML5 Test es un test que nos permite saber que funcionalidades de HTML5 soporta nuestro navegador. Los resultados para los navegadores que tengo instalados son: Navegador Versión Resultado Google Chrome 4.1 118 Opera 10.53 102 Mozilla Firefox 3.6.3 101 Safari 4.0.5 70 Internet Explorer 8 19 Por supuesto estos valores depenederán de las versiones instaladas [...]]]></description>
			<content:encoded><![CDATA[<p><a title="HTML5 Test" href="http://html5test.com/">HTML5 Test</a> es un test que nos permite saber que funcionalidades de <strong>HTML5</strong> soporta nuestro navegador.</p>
<p><a href="http://mjcarrascosa.com/wp-content/uploads/2010/05/html5testFirefox_3_6_3.jpg"><img class="aligncenter size-full wp-image-634" title="HTML5 Test" src="http://mjcarrascosa.com/wp-content/uploads/2010/05/html5testFirefox_3_6_3.jpg" alt="" width="600" height="303" /></a></p>
<p>Los resultados para los navegadores que tengo instalados son:</p>
<table style="border: 1px solid #000000;" border="1" align="center">
<tbody>
<tr>
<th>Navegador</th>
<th>Versión</th>
<th>Resultado</th>
</tr>
<tr>
<td>Google Chrome</td>
<td style="text-align: right;">4.1</td>
<td style="text-align: right;">118</td>
</tr>
<tr>
<td>Opera</td>
<td style="text-align: right;">10.53</td>
<td style="text-align: right;">102</td>
</tr>
<tr>
<td>Mozilla Firefox</td>
<td style="text-align: right;">3.6.3</td>
<td style="text-align: right;">101</td>
</tr>
<tr>
<td>Safari</td>
<td style="text-align: right;">4.0.5</td>
<td style="text-align: right;">70</td>
</tr>
<tr>
<td>Internet Explorer</td>
<td style="text-align: right;">8</td>
<td style="text-align: right;">19</td>
</tr>
</tbody>
</table>
<p>Por supuesto estos valores depenederán de las versiones instaladas de cada navegador.</p>
]]></content:encoded>
			<wfw:commentRss>http://mjcarrascosa.com/html5-test-%c2%bfcomo-de-bien-soporta-html5-tu-navegador/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Invitaciones para Google Wave</title>
		<link>http://mjcarrascosa.com/invitaciones-para-google-wave/</link>
		<comments>http://mjcarrascosa.com/invitaciones-para-google-wave/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 09:18:38 +0000</pubDate>
		<dc:creator>Manuel Jesús Carrascosa de la Blanca</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[google wave]]></category>
		<category><![CDATA[invitaciones]]></category>

		<guid isPermaLink="false">http://mjcarrascosa.com/?p=467</guid>
		<description><![CDATA[La semana pasada me invitaron a Google Wave, la novedosa herramienta de Google. Después de repartir algunas invitaciones entre los amigos me quedan otras cinco. Si queréis alguna solo tenéis que poner un comentario pidiendola. ACTUALIZACIÓN (16/09/2009): Ya no me queda ninguna invitación. Repartí tres aquí, una a un compañero de trabajo y otra a [...]]]></description>
			<content:encoded><![CDATA[<p>La semana pasada me invitaron a <a title="Google Wave" href="http://wave.google.com">Google Wave</a>, la novedosa herramienta de Google. Después de repartir algunas invitaciones entre los amigos me quedan otras cinco. Si queréis alguna solo tenéis que poner un comentario pidiendola.</p>
<p><strong>ACTUALIZACIÓN (16/09/2009):</strong></p>
<p>Ya no me queda ninguna invitación. Repartí tres aquí, una a un compañero de trabajo y otra a un amigo. Cuando vuelva a tener volveré a indicarlo.</p>
]]></content:encoded>
			<wfw:commentRss>http://mjcarrascosa.com/invitaciones-para-google-wave/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Como genera Gravatar la URL del avatar</title>
		<link>http://mjcarrascosa.com/como-genera-gravatar-la-url-del-avatar/</link>
		<comments>http://mjcarrascosa.com/como-genera-gravatar-la-url-del-avatar/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 21:17:27 +0000</pubDate>
		<dc:creator>Manuel Jesús Carrascosa de la Blanca</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Gravatar]]></category>

		<guid isPermaLink="false">http://mjcarrascosa.com/?p=464</guid>
		<description><![CDATA[Esto no es ningún secreto, de hecho viene en su propia página, pero es bastante interesante: La url base es http://www.gravatar.com/avatar.php. Para el parámetro gravatar_id se genera un hash para la dirección de correo. Este hash es el resumen MD5 de la dirección en minúsculas y sin espacios a los lados. Podemos añadirle un parámetro [...]]]></description>
			<content:encoded><![CDATA[<p>Esto no es ningún secreto, de hecho <a title="Gravatar: How the URL is constructed" href="http://en.gravatar.com/site/implement/url">viene en su propia página</a>, pero es bastante interesante:</p>
<ol>
<li>La url base es <strong>http://www.gravatar.com/avatar.php</strong>.</li>
<li>Para el parámetro gravatar_id se genera un hash para la dirección de correo. Este hash es el resumen MD5 de la dirección en minúsculas y sin espacios a los lados.</li>
<li>Podemos añadirle un parámetro &#8220;size&#8221; o &#8220;s&#8221; para indicar el tamaño, entre 1 y 512. Si no se indica por defecto será 80.</li>
<li>Añadimos el rating con el parámetro &#8220;rating&#8221; o &#8220;r&#8221;. Puede ser g, pg, r o x. Si no se añade se asumirá g.</li>
<li>Se agrega la ruta de la imagen por defecto. Esta ruta será la imagen que se mostrará cuando no haya avatar en Gravatar. Este campo puede tener ciertos valores (identicon, monsterid o wavatar) que producirán un avatar dinámico. Si no se especifica se mostrará la G azul de Gravatar.</li>
</ol>
<p>Con esto nos podemos hacer una función como la siguiente:</p>
<pre class="brush:php">function gravatar($email, $size = NULL, $rating = NULL, $default = NULL)
{
 $base =  'http://www.gravatar.com/avatar.php?gravatar_id=';

 $base.= md5(trim(strtolower($email)));

 if($size != NULL)
 $base.= '&amp;s='.$size;

 if($rating != NULL)
 $base.= '&amp;r='.$rating;

 if($default != NULL)
 $base.= '&amp;d='.urlencode($default);

 return $base;
}</pre>
<p>Aunque también <a title="Clase para Gravatar" href="http://www.phpclasses.org/browse/package/4227.html">hay una clase</a> en PHP Classes que podemos usar para generar las rutas de los avatares.</p>
]]></content:encoded>
			<wfw:commentRss>http://mjcarrascosa.com/como-genera-gravatar-la-url-del-avatar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducción a CKFinder</title>
		<link>http://mjcarrascosa.com/introduccion-a-ckfinder/</link>
		<comments>http://mjcarrascosa.com/introduccion-a-ckfinder/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 22:37:35 +0000</pubDate>
		<dc:creator>Manuel Jesús Carrascosa de la Blanca</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Librerías]]></category>
		<category><![CDATA[CKFinder]]></category>
		<category><![CDATA[librería]]></category>

		<guid isPermaLink="false">http://mjcarrascosa.com/?p=437</guid>
		<description><![CDATA[CKFinder es un navegador de archivos basado en AJAX muy potente y fácil de usar. Su sencilla interfaz lo hace intuitivo y rápido de aprender a todo tipo de usuarios, desde los avanzados a los noveles. Lo podemos descargar desde su página web, donde está preparado para varios lenguajes y/o tecnologías: PHP, ASP, ASP.Net y [...]]]></description>
			<content:encoded><![CDATA[<p><a title="CKFinder" href="http://ckfinder.com/">CKFinder</a> es un navegador de archivos basado en AJAX muy potente y fácil de usar. Su sencilla interfaz lo hace intuitivo y rápido de aprender a todo tipo de usuarios, desde los avanzados a los noveles. Lo podemos descargar desde su página web, donde está preparado para varios lenguajes y/o tecnologías: PHP, ASP, ASP.Net y ColdFusion.</p>
<div id="attachment_438" class="wp-caption aligncenter" style="width: 512px"><a href="http://mjcarrascosa.com/wp-content/uploads/2009/12/ckfinder.jpg"><img class="size-full wp-image-438" title="CKFinder Demo" src="http://mjcarrascosa.com/wp-content/uploads/2009/12/ckfinder.jpg" alt="Así se ve CKFinder" width="502" height="237" /></a><p class="wp-caption-text">Así se ve CKFinder</p></div>
<p>Básicamente esto es lo que dice la <a title="What is CKFinder" href="http://ckfinder.com/what-is-ckfinder">web de CKFinder</a>. También nos aparece el típico listado de características, de las cuales las más destacables son:</p>
<ul>
<li>Navegador en árbol.</li>
<li>Thumbnails de alta calidad.</li>
<li>Multilenguaje.</li>
<li>Menús contextuales.</li>
<li>Control total por parte del desarrollador.</li>
<li>Control total para el usuario.</li>
<li>Ligero.</li>
<li>Respuesta rápida, sin refrescos.</li>
<li>Subida segura de archivos.</li>
<li>Código fuente completo incluido.</li>
<li><strong>Fácil integración con el editor CKEditor.</strong></li>
</ul>
<p>Observaréis que la última característica la he puesto en negrita. Esto es así porque esta herramienta nos va a servir para añadir algunas opciones nuevas a nuestros editores basados en CKEditor, lo que veremos en la próxima entrega del tutorial de CKEditor.</p>
]]></content:encoded>
			<wfw:commentRss>http://mjcarrascosa.com/introduccion-a-ckfinder/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

