<?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>Pedro Ventura | Programación Web PHP, Tutoriales y Manuales de Cakephp, Sistemas linux, mejoras SEO, Wordpress, Proyectos personales y freelance </title>
	<atom:link href="http://www.pedroventura.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pedroventura.com</link>
	<description>Portfolio Profesional y Blog</description>
	<lastBuildDate>Sat, 04 Feb 2012 10:50:33 +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>Leer pdf online en WordPress mediante Google Docs</title>
		<link>http://www.pedroventura.com/blog_programacion/wordpress/leer-pdf-online-en-wordpress-mediante-google-docs/</link>
		<comments>http://www.pedroventura.com/blog_programacion/wordpress/leer-pdf-online-en-wordpress-mediante-google-docs/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 02:30:21 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=3523</guid>
		<description><![CDATA[Esta es definitivamente la manera más fácil de visualizar un archivo PDF en nuestro sitio web. El PDF se carga a través de Google Docs y luego aparece en un iframe, en la web. Para empezar a mostrar pdf y leerlos online copia y pega el siguiente código en tu archivo functions.php de tu tema de wordpress function leer_pdf_online($attr, $url) { return '&#60;iframe src=&#34;http://docs.google.com/viewer?url=' . $url . '&#38;embedded=true&#34; style=&#34;width:' .$attr['width']. '; height:' .$attr['height']. ';&#34; frameborder=&#34;0&#34;&#62;Esto cargará un iframe&#60;/iframe&#62;'; } add_shortcode('embedpdfonline', 'leer_pdf_online'); A continuación, utilice la siguiente sintaxis para mostrar un PDF. Podrás especificar el ancho y alto que ocupará el iframe. Entre las etiquetas [embedpdfonline][/embedpdf] tendrás que especificar la url completa del pdf que quieres mostrar y listo. Se cargará un iframe generado por Google Docs donde podremos leer el pdf online mas o menos como si se tratara del Adobe reader. Incluye el siguiente código en cualquier parte de tu artículo o página de WordPress donde quieras mostrar el pdf [embedpdfonline width=&#34;500px&#34; height=&#34;400px&#34;]http://www.pedroventura.com/archivos/guia_optimizacion_motores_busqueda.pdf[/embedpdf] Ejemplo de leer un pdf online, para ello utilizaré unas de las guías de referencia que podréis encontrar en mi blog: Guia SEO de Google &#160; Este código funciona mediante Shortcodes de la API de WordPress. [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/wordpress/seguridad-en-wordpress-elimina-el-meta-con-la-version-de-wordpress/' rel='bookmark' title='Seguridad en WordPress, elimina el meta con la version de wordpress'>Seguridad en WordPress, elimina el meta con la version de wordpress</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/leer-el-correo-mediante-telnet-puerto-110-acceso-al-servidor-pop3/' rel='bookmark' title='Leer el correo mediante telnet puerto 110 (Acceso al servidor POP3)'>Leer el correo mediante telnet puerto 110 (Acceso al servidor POP3)</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/convertir-pagina-web-a-pdf/' rel='bookmark' title='Convertir pagina web a pdf'>Convertir pagina web a pdf</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/social-media/anadir-el-boton-me-gusta-like-de-facebook-en-tu-blog-wordpress/' rel='bookmark' title='Añadir el boton &#8220;me gusta&#8221; &#8220;like&#8221; de Facebook en tu blog wordpress'>Añadir el boton &#8220;me gusta&#8221; &#8220;like&#8221; de Facebook en tu blog wordpress</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/crear-archivos-pdf-con-cakephp/' rel='bookmark' title='Crear archivos PDF con CakePHP'>Crear archivos PDF con CakePHP</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Esta es definitivamente la manera más fácil de visualizar un archivo PDF en nuestro sitio web. El PDF se carga a través de Google Docs y luego aparece en un iframe, en la web.</p>
<p>Para empezar a mostrar pdf y leerlos online copia y pega el siguiente código en tu archivo functions.php de tu tema de wordpress</p>
<pre class="brush: php; title: ;">
function leer_pdf_online($attr, $url) {
    return '&lt;iframe src=&quot;http://docs.google.com/viewer?url=' . $url . '&amp;embedded=true&quot; style=&quot;width:' .$attr['width']. '; height:' .$attr['height']. ';&quot; frameborder=&quot;0&quot;&gt;Esto cargará un iframe&lt;/iframe&gt;';
}
add_shortcode('embedpdfonline', 'leer_pdf_online');
</pre>
<p>A continuación, utilice la siguiente sintaxis para mostrar un PDF. Podrás especificar el ancho y alto que ocupará el iframe. Entre las etiquetas [embedpdfonline][/embedpdf] tendrás que especificar la url completa del pdf que quieres mostrar y listo. Se cargará un iframe generado por Google Docs donde podremos leer el pdf online mas o menos como si se tratara del Adobe reader.</p>
<p>Incluye el siguiente código en cualquier parte de tu artículo o página de WordPress donde quieras mostrar el pdf</p>
<pre class="brush: plain; title: ;">
[embedpdfonline width=&quot;500px&quot; height=&quot;400px&quot;]http://www.pedroventura.com/archivos/guia_optimizacion_motores_busqueda.pdf[/embedpdf]
</pre>
<p>Ejemplo de leer un pdf online, para ello utilizaré unas de las guías de referencia que podréis encontrar en mi blog:<br />
<a href="http://www.pedroventura.com/guias-de-referencia/guia-seo-de-google/" target="_blank">Guia SEO de Google</a></p>
<iframe src="http://docs.google.com/viewer?url=http://www.pedroventura.com/archivos/guia_optimizacion_motores_busqueda.pdf&embedded=true" style="width:500px; height:400px;" frameborder="0">Your browser should support iFrame to view this PDF document</iframe>
<p>&nbsp;</p>
<p>Este código funciona mediante <em>Shortcodes </em>de la API de WordPress. Básicamente es un conjunto de funciones que crean macros de código para usar en el contenido de los artículos</p>
<p>Documentación de la API de Shortcode de WordPress <a href="http://codex.wordpress.org/Shortcode_API" target="_blank" rel="nofollow">http://codex.wordpress.org/Shortcode_API</a></p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> leer pdf online, wordpress org comentarios en pdf</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/wordpress/seguridad-en-wordpress-elimina-el-meta-con-la-version-de-wordpress/' rel='bookmark' title='Seguridad en WordPress, elimina el meta con la version de wordpress'>Seguridad en WordPress, elimina el meta con la version de wordpress</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/leer-el-correo-mediante-telnet-puerto-110-acceso-al-servidor-pop3/' rel='bookmark' title='Leer el correo mediante telnet puerto 110 (Acceso al servidor POP3)'>Leer el correo mediante telnet puerto 110 (Acceso al servidor POP3)</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/convertir-pagina-web-a-pdf/' rel='bookmark' title='Convertir pagina web a pdf'>Convertir pagina web a pdf</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/social-media/anadir-el-boton-me-gusta-like-de-facebook-en-tu-blog-wordpress/' rel='bookmark' title='Añadir el boton &#8220;me gusta&#8221; &#8220;like&#8221; de Facebook en tu blog wordpress'>Añadir el boton &#8220;me gusta&#8221; &#8220;like&#8221; de Facebook en tu blog wordpress</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/crear-archivos-pdf-con-cakephp/' rel='bookmark' title='Crear archivos PDF con CakePHP'>Crear archivos PDF con CakePHP</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/wordpress/leer-pdf-online-en-wordpress-mediante-google-docs/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Detectar iPad con PHP o Javascript</title>
		<link>http://www.pedroventura.com/blog_programacion/php/detectar-ipad-con-php-o-javascript/</link>
		<comments>http://www.pedroventura.com/blog_programacion/php/detectar-ipad-con-php-o-javascript/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 09:30:59 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[librerias y funciones]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=3431</guid>
		<description><![CDATA[Si hace unos días escribía un artículo sobre como redireccionar una web en función del dispositivo móvil, ya sea iPad, iPhone o cualquier otro smartphone, hoy explicaré más en concreto como saber si se está visitando una web desde un iPad. Detectar iPad mediante PHP Detectar si es un iPad es muy sencillo, no es más complicado que saber si está desde un pc, mac o lo que sea. Para ello usaremos la variable de servidor USER_AGENT, $_SERVER['HTTP_USER_AGENT'] que es lo que el navegador envía al servidor para identificarse. En esta variable de servidor contiene bastante información acerca del usuario, como por ejemplo el sistema operativo que está usando y su versión, el motor de navegador y su versión, y otros datos de idioma y geoposicionamiento básico, etc. En mi caso la información que está enviando es la siguiente (desde mi navegador de mi pc con Linux): [HTTP_USER_AGENT] =&#62; Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 En el caso de que estemos visitando nuestra web desde un iPad será algo similar a lo siguiente: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; es) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10 Con toda esta información ya podemos realizar una [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/sysadmin/directiva-htaccess-para-redireccionar-web-en-dispositivo-movil/' rel='bookmark' title='Directiva htaccess para redireccionar web en dispositivo móvil'>Directiva htaccess para redireccionar web en dispositivo móvil</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/parseando-xml-con-php-lo-mas-facil-y-simple/' rel='bookmark' title='Parseando XML con PHP. Lo más fácil y simple'>Parseando XML con PHP. Lo más fácil y simple</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/comprobar-extensiones-de-una-imagen-subida-con-php/' rel='bookmark' title='Obtener la extension de un archivo subido con php'>Obtener la extension de un archivo subido con php</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/mostrar-los-mensajes-de-error-del-php-por-pantalla-con-error_reporting/' rel='bookmark' title='mostrar los mensajes de error del php por pantalla con error_reporting'>mostrar los mensajes de error del php por pantalla con error_reporting</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/crear-marcas-de-agua-con-php/' rel='bookmark' title='crear marcas de agua con php'>crear marcas de agua con php</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Si hace unos días escribía un artículo sobre como <a href="http://www.pedroventura.com/blog_programacion/sysadmin/directiva-htaccess-para-redireccionar-web-en-dispositivo-movil/" target="_blank">redireccionar una web en función del dispositivo móvil</a>, ya sea iPad, iPhone o cualquier otro smartphone, hoy explicaré más en concreto como saber si se está visitando una web desde un iPad.</p>
<p><strong>Detectar iPad mediante PHP</strong></p>
<p>Detectar si es un iPad es muy sencillo, no es más complicado que saber si está desde un pc, mac o lo que sea. Para ello usaremos la variable de servidor USER_AGENT, $_SERVER['HTTP_USER_AGENT'] que es lo que el navegador envía al servidor para identificarse. En esta variable de servidor contiene bastante información acerca del usuario, como por ejemplo el sistema operativo que está usando y su versión, <a href="http://www.pedroventura.com/blog_programacion/internet/motores-de-navegadores-web-gecko-trident-webkit-y-otros/" target="_blank">el motor de navegador</a> y su versión, y otros datos de idioma y geoposicionamiento básico, etc.</p>
<p>En mi caso la información que está enviando es la siguiente (desde mi navegador de mi pc con Linux):</p>
<pre class="brush: plain; title: ;">
[HTTP_USER_AGENT] =&gt; Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
</pre>
<p>En el caso de que estemos visitando nuestra web desde un iPad será algo similar a lo siguiente:</p>
<pre class="brush: plain; title: ;">

Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; es) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10
</pre>
<p>Con toda esta información ya podemos realizar una simple expresión regular y comprobar si el usuario está navegando desde un iPad. En PHP se haría de la siguiente manera:</p>
<pre class="brush: php; title: ;">
function detectar_iPad() {
return (bool) strpos($_SERVER['HTTP_USER_AGENT'],'iPad');
}
</pre>
<p>Si devuelve <em>true</em> es que es un iPad.</p>
<p><strong>Detectar iPad mediante Javascript</strong></p>
<pre class="brush: plain; title: ;">

function isIPad(){

    if(navigator.userAgent.match(/iPad/i) != null){
        return true;
    }else{ return false;}
}
</pre>
<p><strong>Detectar iPad mediante Apache, directiva en .htaccess</strong></p>
<p>Y la forma de hacer esto a nivel global es metiendo una directiva de Apache, de esta manera no lo tendremos que hacer ni con php ni con Javascript.</p>
<pre class="brush: plain; title: ;">
RewriteCond %{HTTP_USER_AGENT} ^.*iPad.*$
RewriteRule ^(.*)$ http://ipad.dominio.com [R=301]
</pre>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> detectar informacion del usuario por php, detectar ipad con javascript, detectar web si es ipad, javascript ipad, ssi detectar ipad</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/sysadmin/directiva-htaccess-para-redireccionar-web-en-dispositivo-movil/' rel='bookmark' title='Directiva htaccess para redireccionar web en dispositivo móvil'>Directiva htaccess para redireccionar web en dispositivo móvil</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/parseando-xml-con-php-lo-mas-facil-y-simple/' rel='bookmark' title='Parseando XML con PHP. Lo más fácil y simple'>Parseando XML con PHP. Lo más fácil y simple</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/comprobar-extensiones-de-una-imagen-subida-con-php/' rel='bookmark' title='Obtener la extension de un archivo subido con php'>Obtener la extension de un archivo subido con php</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/mostrar-los-mensajes-de-error-del-php-por-pantalla-con-error_reporting/' rel='bookmark' title='mostrar los mensajes de error del php por pantalla con error_reporting'>mostrar los mensajes de error del php por pantalla con error_reporting</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/crear-marcas-de-agua-con-php/' rel='bookmark' title='crear marcas de agua con php'>crear marcas de agua con php</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/php/detectar-ipad-con-php-o-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mejoras SEO para ofrecer un contenido en multi-idioma etiqueta hreflang</title>
		<link>http://www.pedroventura.com/blog_programacion/seo/mejoras-seo-para-ofrecer-un-contenido-en-multi-idioma-etiqueta-hreflang/</link>
		<comments>http://www.pedroventura.com/blog_programacion/seo/mejoras-seo-para-ofrecer-un-contenido-en-multi-idioma-etiqueta-hreflang/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 09:30:54 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=3422</guid>
		<description><![CDATA[Desde el blog de webmaster, Google nos propone una mejora para optimizar los sites que ofrecen el mismo contenido en diferentes idiomas. Con lo que podremos mejorar la gestión del contenido en varios idiomas. Ahora bien esto se aplica en dos casos: En sitios web que se orienten a varias regiones y que usen prácticamente el mismo contenido (por ejemplo, páginas web en inglés que se orienten a Australia, a Canadá y a EE.UU. y que solo se diferencien en los precios) En sitios web orientados a varias regiones que incluyan contenido completamente traducido o que muestren un contenido monolingüe con diferencias notables enfocado a varias regiones (por ejemplo, la página web de un producto en alemán, en francés y en inglés). Para indicar el idioma y la ubicación hay que agregar el atributo hreflang al elemento de enlace rel=&#8221;alternate&#8221; de la etiqueta html &#60;/link&#62; Ejemplos: &#60;link rel=&#34;alternate&#34; hreflang=&#34;es&#34; href=&#34;http://www.dominio.com/&#34; /&#62; &#60;link rel=&#34;alternate&#34; hreflang=&#34;es-ES&#34; href=&#34;http://es-es.dominio.com/&#34; /&#62; &#60;link rel=&#34;alternate&#34; hreflang=&#34;es-MX&#34; href=&#34;http://es-mx.dominio.com/&#34; /&#62; &#60;link rel=&#34;alternate&#34; hreflang=&#34;en&#34; href=&#34;http://en.dominio.com/&#34; /&#62; El atributo hreflang permite especificar el idioma o el país, y la URL asociada. Éstas URLs asociadas o alternativas nos permiten consolidar los indicadores de estas páginas y ofrecer la URL adecuada a los usuarios [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/linux/utilizar-mod_deflate-para-comprimir-contenido-web-desede-apache/' rel='bookmark' title='Utilizar mod_deflate para comprimir contenido Web desede Apache'>Utilizar mod_deflate para comprimir contenido Web desede Apache</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/google-io-lanzamientos-y-mejoras-previstas/' rel='bookmark' title='Google I/O Lanzamientos y mejoras previstas'>Google I/O Lanzamientos y mejoras previstas</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/como-vaciar-o-eliminar-el-contenido-de-un-archivo-existente-en-unix-linux/' rel='bookmark' title='Como vaciar o eliminar el contenido de un archivo existente en UNIX / Linux'>Como vaciar o eliminar el contenido de un archivo existente en UNIX / Linux</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/mejoras-en-google-friend-connect/' rel='bookmark' title='Mejoras en Google Friend Connect'>Mejoras en Google Friend Connect</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/seo/plugin-cache-en-wordpress-mejora-la-velocidad-de-tu-blog-y-el-seo/' rel='bookmark' title='plugin cache en wordpress. Mejora la velocidad de tu blog… y el SEO'>plugin cache en wordpress. Mejora la velocidad de tu blog… y el SEO</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Desde el blog de webmaster, Google nos propone una mejora para optimizar los sites que ofrecen el mismo contenido en diferentes idiomas. Con lo que podremos mejorar la gestión del contenido en varios idiomas.</p>
<p>Ahora bien esto se aplica en dos casos:</p>
<ul>
<li>En sitios web que se orienten a varias regiones y que usen prácticamente el mismo contenido (por ejemplo, páginas web en inglés que se orienten a Australia, a Canadá y a EE.UU. y que solo se diferencien en los precios)</li>
<li>En sitios web orientados a varias regiones que incluyan contenido completamente traducido o que muestren un contenido monolingüe con diferencias notables enfocado a varias regiones (por ejemplo, la página web de un producto en alemán, en francés y en inglés).</li>
</ul>
<p>Para indicar el idioma y la ubicación hay que agregar el atributo hreflang al elemento de enlace rel=&#8221;alternate&#8221; de la etiqueta html &lt;/link&gt;</p>
<p>Ejemplos:</p>
<pre class="brush: plain; title: ;">

&lt;link rel=&quot;alternate&quot; hreflang=&quot;es&quot; href=&quot;http://www.dominio.com/&quot; /&gt;
&lt;link rel=&quot;alternate&quot; hreflang=&quot;es-ES&quot; href=&quot;http://es-es.dominio.com/&quot; /&gt;
&lt;link rel=&quot;alternate&quot; hreflang=&quot;es-MX&quot; href=&quot;http://es-mx.dominio.com/&quot; /&gt;
&lt;link rel=&quot;alternate&quot; hreflang=&quot;en&quot; href=&quot;http://en.dominio.com/&quot; /&gt;
</pre>
<p>El atributo hreflang permite especificar el idioma o el país, y la URL asociada. Éstas URLs asociadas o alternativas nos permiten consolidar los indicadores de estas páginas y ofrecer la URL adecuada a los usuarios que hagan una búsqueda. Estas URL pueden pertenecer al mismo sitio o a otro dominio.</p>
<p>Para páginas que su contenido es prácticamente el mismo, cosa que está mal valorada por Google y que perjudica en el posicionamiento, también habrá que incluir la etiqueta rel=&#8221;canonical&#8221;, de esta manera en la búsqueda siempre se indica una url o un site como predefinido (al que quieres darle más prioridad) y al que apuntan el resto de páginas con contenido similar.</p>
<pre class="brush: plain; title: ;">

&lt;link rel=&quot;canonical&quot; hreflang=&quot;es&quot; href=&quot;http://www.dominio.com/&quot; /&gt;
&lt;link rel=&quot;alternate&quot; hreflang=&quot;es-ES&quot; href=&quot;http://es-es.dominio.com/&quot; /&gt;
&lt;link rel=&quot;alternate&quot; hreflang=&quot;es-MX&quot; href=&quot;http://es-mx.dominio.com/&quot; /&gt;
</pre>
<p><strong>Nota de Google</strong></p>
<blockquote><p>Cuando Google detecte un grupo de páginas con una única URL canónica, nuestros algoritmos mostrarán el título y un fragmento de la versión canónica en los resultados de búsqueda. Por tanto, te recomendamos que no incluyas contenido específico de una región en el título ni en las etiquetas de metadescripción de la URL canónica. Por ejemplo, utiliza &#8220;Example Widget Inc&#8221; en lugar de &#8220;Example Widget USA Inc&#8221; o &#8220;Example Widget UK&#8221;.</p></blockquote>
<p>Valores que puede tomar el atributo &#8220;hreflang&#8221;</p>
<p>El valor del atributo hreflang identifica el idioma y, opcionalmente, la región de una URL alternativa. Por ejemplo:</p>
<p>es: contenido en español, independientemente de la región<br />
es-MX: contenido en español para usuarios mexicanos<br />
es-ES: contenido en español para usuarios españoles</p>
<p>Referencia de interés.</p>
<p><a href="http://googlewebmaster-es.blogspot.com/2011/12/nuevo-marcado-para-contenido.html" rel="nofollow" target="_blank">http://googlewebmaster-es.blogspot.com/2011/12/nuevo-marcado-para-contenido.html</a></p>
<p><a href="http://support.google.com/webmasters/bin/answer.py?hl=es&#038;answer=189077" target="_blank" rel="nofollow">http://support.google.com/webmasters/bin/answer.py?hl=es&#038;answer=189077</a></p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> el mejor plugin multi idioma para wordpress seo, link hreflang seo, optimizar seo para diferentes idiomas, rel=alternate hreflang=es, seo multiidioma</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/linux/utilizar-mod_deflate-para-comprimir-contenido-web-desede-apache/' rel='bookmark' title='Utilizar mod_deflate para comprimir contenido Web desede Apache'>Utilizar mod_deflate para comprimir contenido Web desede Apache</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/google-io-lanzamientos-y-mejoras-previstas/' rel='bookmark' title='Google I/O Lanzamientos y mejoras previstas'>Google I/O Lanzamientos y mejoras previstas</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/como-vaciar-o-eliminar-el-contenido-de-un-archivo-existente-en-unix-linux/' rel='bookmark' title='Como vaciar o eliminar el contenido de un archivo existente en UNIX / Linux'>Como vaciar o eliminar el contenido de un archivo existente en UNIX / Linux</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/mejoras-en-google-friend-connect/' rel='bookmark' title='Mejoras en Google Friend Connect'>Mejoras en Google Friend Connect</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/seo/plugin-cache-en-wordpress-mejora-la-velocidad-de-tu-blog-y-el-seo/' rel='bookmark' title='plugin cache en wordpress. Mejora la velocidad de tu blog… y el SEO'>plugin cache en wordpress. Mejora la velocidad de tu blog… y el SEO</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/seo/mejoras-seo-para-ofrecer-un-contenido-en-multi-idioma-etiqueta-hreflang/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Directiva htaccess para redireccionar web en dispositivo móvil</title>
		<link>http://www.pedroventura.com/blog_programacion/sysadmin/directiva-htaccess-para-redireccionar-web-en-dispositivo-movil/</link>
		<comments>http://www.pedroventura.com/blog_programacion/sysadmin/directiva-htaccess-para-redireccionar-web-en-dispositivo-movil/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 09:30:54 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[navegadores]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=3406</guid>
		<description><![CDATA[Ya es sabido que es muy importante el diseño y desarrollo de nuestro site para integrarlo en dispositivos móviles como iPads, iPhones y el resto de smartphones. Hay que elaborar un diseño más fácil para que sea legible y se pueda usar en múltiples resoluciones. Teniendo ésto en cuento y previamente haber hecho adaptaciones para los dispositivos móviles, incluyo una redirección de apache que se puede incluir en el htaccess de nuestro desarrollo para llevar a cabo la redirección del dispositivo móvil del que venga y así redirigir a una versión móvil más optima para el usuario de teléfono o dispositivo móvil. RewriteEngine On RewriteCond %{REQUEST_URI} !^/m/.*$ RewriteCond %{HTTP_ACCEPT} &#34;text/vnd.wap.wml&#124;application/vnd.wap.xhtml+xml&#34; [NC,OR] RewriteCond %{HTTP_USER_AGENT} &#34;acs&#124;alav&#124;alca&#124;amoi&#124;audi&#124;aste&#124;avan&#124;benq&#124;bird&#124;blac&#124;blaz&#124;brew&#124;cell&#124;cldc&#124;cmd-&#34; [NC,OR] RewriteCond %{HTTP_USER_AGENT} &#34;dang&#124;doco&#124;eric&#124;hipt&#124;inno&#124;ipaq&#124;java&#124;jigs&#124;kddi&#124;keji&#124;leno&#124;lg-c&#124;lg-d&#124;lg-g&#124;lge-&#34; [NC,OR] RewriteCond %{HTTP_USER_AGENT} &#34;maui&#124;maxo&#124;midp&#124;mits&#124;mmef&#124;mobi&#124;mot-&#124;moto&#124;mwbp&#124;nec-&#124;newt&#124;noki&#124;opwv&#34; [NC,OR] RewriteCond %{HTTP_USER_AGENT} &#34;palm&#124;pana&#124;pant&#124;pdxg&#124;phil&#124;play&#124;pluc&#124;port&#124;prox&#124;qtek&#124;qwap&#124;sage&#124;sams&#124;sany&#34; [NC,OR] RewriteCond %{HTTP_USER_AGENT} &#34;sch-&#124;sec-&#124;send&#124;seri&#124;sgh-&#124;shar&#124;sie-&#124;siem&#124;smal&#124;smar&#124;sony&#124;sph-&#124;symb&#124;t-mo&#34; [NC,OR] RewriteCond %{HTTP_USER_AGENT} &#34;teli&#124;tim-&#124;tosh&#124;tsm-&#124;upg1&#124;upsi&#124;vk-v&#124;voda&#124;w3cs&#124;wap-&#124;wapa&#124;wapi&#34; [NC,OR] RewriteCond %{HTTP_USER_AGENT} &#34;wapp&#124;wapr&#124;webc&#124;winw&#124;winw&#124;xda&#124;xda-&#34; [NC,OR] RewriteCond %{HTTP_USER_AGENT} &#34;up.browser&#124;up.link&#124;windowssce&#124;iemobile&#124;mini&#124;mmp&#34; [NC,OR] RewriteCond %{HTTP_USER_AGENT} &#34;symbian&#124;midp&#124;wap&#124;phone&#124;pocket&#124;mobile&#124;pda&#124;psp&#34; [NC] #------------- The line below excludes the iPad RewriteCond %{HTTP_USER_AGENT} !^.*iPad.*$ #------------- RewriteCond %{HTTP_USER_AGENT} !macintosh [NC] #*SEE NOTE BELOW RewriteRule ^(.*)$ /m/ [L,R=302] Otra versión en htaccess que redirecciona en función del navegador web es la que he visto en la herramienta http://detectmobilebrowsers.com/ En esta herramienta podemos ver diferentes manera de redireccionar en función [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/detectar-ipad-con-php-o-javascript/' rel='bookmark' title='Detectar iPad con PHP o Javascript'>Detectar iPad con PHP o Javascript</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/sysadmin/htaccess-redireccionamiento-con-barra-a-sin-barra/' rel='bookmark' title='htaccess redireccionamiento con barra a sin barra'>htaccess redireccionamiento con barra a sin barra</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/software/firefox-y-el-cacheo-de-las-redirecciones-301-de-htaccess/' rel='bookmark' title='Firefox y el cacheo de las redirecciones 301 de .htaccess'>Firefox y el cacheo de las redirecciones 301 de .htaccess</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/que-significa-cada-parametro-en-las-directiva-logformat-de-httpd-conf/' rel='bookmark' title='Que significa cada parámetro % en las directiva LogFormat de httpd.conf'>Que significa cada parámetro % en las directiva LogFormat de httpd.conf</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/acid3-el-test-para-los-navegadores-web/' rel='bookmark' title='Acid3. El test para los navegadores web'>Acid3. El test para los navegadores web</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Ya es sabido que es muy importante el diseño y desarrollo de nuestro site para integrarlo en dispositivos móviles como iPads, iPhones y el resto de smartphones. Hay que elaborar un diseño más fácil para que sea legible y se pueda usar en múltiples resoluciones. Teniendo ésto en cuento y previamente haber hecho adaptaciones para los dispositivos móviles, incluyo una redirección de apache que se puede incluir en el htaccess de nuestro desarrollo para llevar a cabo la redirección del dispositivo móvil del que venga y así redirigir a una versión móvil más optima para el usuario de teléfono o dispositivo móvil.</p>
<pre class="brush: plain; title: ;">
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/m/.*$
RewriteCond %{HTTP_ACCEPT} &quot;text/vnd.wap.wml|application/vnd.wap.xhtml+xml&quot; [NC,OR]
RewriteCond %{HTTP_USER_AGENT} &quot;acs|alav|alca|amoi|audi|aste|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-&quot; [NC,OR]
RewriteCond %{HTTP_USER_AGENT} &quot;dang|doco|eric|hipt|inno|ipaq|java|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-&quot; [NC,OR]
RewriteCond %{HTTP_USER_AGENT}  &quot;maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|opwv&quot; [NC,OR]
RewriteCond %{HTTP_USER_AGENT} &quot;palm|pana|pant|pdxg|phil|play|pluc|port|prox|qtek|qwap|sage|sams|sany&quot; [NC,OR]
RewriteCond %{HTTP_USER_AGENT} &quot;sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo&quot; [NC,OR]
RewriteCond %{HTTP_USER_AGENT} &quot;teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|w3cs|wap-|wapa|wapi&quot; [NC,OR]
RewriteCond %{HTTP_USER_AGENT} &quot;wapp|wapr|webc|winw|winw|xda|xda-&quot; [NC,OR]
RewriteCond %{HTTP_USER_AGENT} &quot;up.browser|up.link|windowssce|iemobile|mini|mmp&quot; [NC,OR]
RewriteCond %{HTTP_USER_AGENT} &quot;symbian|midp|wap|phone|pocket|mobile|pda|psp&quot; [NC]
#------------- The line below excludes the iPad
RewriteCond %{HTTP_USER_AGENT} !^.*iPad.*$
#-------------
RewriteCond %{HTTP_USER_AGENT} !macintosh [NC] #*SEE NOTE BELOW
RewriteRule ^(.*)$ /m/ [L,R=302]
</pre>
<p>Otra versión en htaccess que redirecciona en función del navegador web es la que he visto en la herramienta <a href="http://detectmobilebrowsers.com/" target="_blank" rel="nofollow">http://detectmobilebrowsers.com/</a></p>
<p>En esta herramienta podemos ver diferentes manera de redireccionar en función del navegador web del dispositivo móvil, y se puede hacer en muchos lenguajes, tipo python, perl, JSP, Javascript, php, etc.. también hay una directiva para el servidor nginx.</p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> código para redirecionar a un dispositivo móvil una pagina web, web en dispositivos moviles, web a movil htaccess, redirigir web móvil, redireccionar web ipad y iphone, redireccionar web a moviles, redireccionar version movil javascript, redireccionar html a version para movil, redireccion java dispositivo movil, htaccess movil</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/detectar-ipad-con-php-o-javascript/' rel='bookmark' title='Detectar iPad con PHP o Javascript'>Detectar iPad con PHP o Javascript</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/sysadmin/htaccess-redireccionamiento-con-barra-a-sin-barra/' rel='bookmark' title='htaccess redireccionamiento con barra a sin barra'>htaccess redireccionamiento con barra a sin barra</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/software/firefox-y-el-cacheo-de-las-redirecciones-301-de-htaccess/' rel='bookmark' title='Firefox y el cacheo de las redirecciones 301 de .htaccess'>Firefox y el cacheo de las redirecciones 301 de .htaccess</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/que-significa-cada-parametro-en-las-directiva-logformat-de-httpd-conf/' rel='bookmark' title='Que significa cada parámetro % en las directiva LogFormat de httpd.conf'>Que significa cada parámetro % en las directiva LogFormat de httpd.conf</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/acid3-el-test-para-los-navegadores-web/' rel='bookmark' title='Acid3. El test para los navegadores web'>Acid3. El test para los navegadores web</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/sysadmin/directiva-htaccess-para-redireccionar-web-en-dispositivo-movil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RabbitVCS herramienta para control de versiones con Subversion y Git para Linux</title>
		<link>http://www.pedroventura.com/blog_programacion/linux/rabbitvcs-herramienta-para-control-de-versiones-con-subversion-y-git-para-linux/</link>
		<comments>http://www.pedroventura.com/blog_programacion/linux/rabbitvcs-herramienta-para-control-de-versiones-con-subversion-y-git-para-linux/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 09:52:53 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=3370</guid>
		<description><![CDATA[Sin duda el mejor cliente SVN. He probado KDESVN, SVN Workbench, RapidSVN y SmartSVN. Sin duda RabbitVCS es, personalmente, el mejor cliente con soporte Subversión para Linux. Es lo más parece al TortoiseSVN de windows, que está muy bien logrado y muy fácil de usar. RabbitVCS ofrece integración para el administrador de ficheros (File Manager) de Nautilus y Thunar. También para el editor de texto Gedit. Y como he comentado ofrece soporte para Subversión y Git. Integración con Nautilus Integración con Gedit Integración con Thunar Ejecución en linea de comandos Navegar en el repositorio de Subversion Git LOG En definitiva incluye una completa gama de funcionalidades y recursos. Instalación en Ubuntu Añadir el repositorio sudo add-apt-repository ppa:rabbitvcs/ppa Añadir en source. En el archivo /etc/apt/sources.list deb http://ppa.launchpad.net/rabbitvcs/ppa/ubuntu **DISTRIBUTION** main en **DISTRIBUTION** hay que agregar la distribución de tu versión de ubuntu entre las disponible que soporta RabbitVCS, en el siguiente enlace se puede ver las distintas distribución soportas por el software http://ppa.launchpad.net/rabbitvcs/ppa/ubuntu/dists/ Actualizar los repositorios de software con sudo apt-get update Terminar la instalación con sudo apt-get install rabbitvcs-core rabbitvcs-nautilus rabbitvcs-thunar rabbitvcs-gedit rabbitvcs-cli Como yo tengo, a día de hoy, Ubuntu 11.10 de 64bits no me funcionaba este último paso, por [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/linux/memcached-tool-herramienta-para-visualizar-el-uso-de-la-cache-en-ram-con-memcached/' rel='bookmark' title='memcached tool. Herramienta para visualizar el uso de la cache en ram con memcached'>memcached tool. Herramienta para visualizar el uso de la cache en ram con memcached</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/gestion-de-proyecto/subversion-post-commit-hook-actualizar-los-archivos-despues-de-enviar-un-commit-de-subversion/' rel='bookmark' title='Subversion post-commit hook. Actualizar los archivos después de enviar un commit de subversion'>Subversion post-commit hook. Actualizar los archivos después de enviar un commit de subversion</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/firewall-basico-en-linux-para-bloquear-ips-a-servicios-con-hosts-allow-y-hosts-deny/' rel='bookmark' title='firewall básico en linux para bloquear ips a servicios con hosts.allow y hosts.deny'>firewall básico en linux para bloquear ips a servicios con hosts.allow y hosts.deny</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/software/pero-es-que-no-hay-un-ide-de-php-optimo-para-linux/' rel='bookmark' title='Pero es que no hay un IDE de PHP óptimo para Linux??!'>Pero es que no hay un IDE de PHP óptimo para Linux??!</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/nomenclatura-para-discos-duros-y-particiones-de-linux/' rel='bookmark' title='Nomenclatura para discos duros y particiones de linux'>Nomenclatura para discos duros y particiones de linux</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Sin duda el mejor cliente SVN. He probado KDESVN, SVN Workbench, RapidSVN y SmartSVN. Sin duda RabbitVCS es, personalmente, el mejor cliente con soporte Subversión para Linux. Es lo más parece al TortoiseSVN  de windows, que está muy bien logrado y muy fácil de usar. </p>
<p>RabbitVCS ofrece integración para el administrador de ficheros (File Manager) de Nautilus y Thunar. También para el editor de texto Gedit. Y como he comentado ofrece soporte para Subversión y <a href="http://www.pedroventura.com/guias-de-referencia/guia-referencia-comandos-github/" target="_blank">Git</a>.</p>
<p><strong>Integración con Nautilus</strong></p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/context_menu-300x202.png" alt="" title="context_menu" width="300" height="202" class="aligncenter size-medium wp-image-3372" /></p>
<p><strong>Integración con Gedit</strong></p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/gedit-git-300x292.png" alt="" title="gedit-git" width="300" height="292" class="aligncenter size-medium wp-image-3373" /></p>
<p><strong>Integración con Thunar</strong></p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/thunar-git-300x272.png" alt="" title="thunar-git" width="300" height="272" class="aligncenter size-medium wp-image-3374" /></p>
<p><strong>Ejecución en linea de comandos</strong></p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/command-line-300x251.png" alt="" title="command-line" width="300" height="251" class="aligncenter size-medium wp-image-3375" /></p>
<p><strong>Navegar en el repositorio de Subversion</strong></p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/nautilus-svn-300x241.png" alt="" title="nautilus-svn" width="300" height="241" class="aligncenter size-medium wp-image-3376" /></p>
<p><strong>Git LOG</strong></p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/git-log-300x228.png" alt="" title="git-log" width="300" height="228" class="aligncenter size-medium wp-image-3377" /></p>
<p>En definitiva incluye una completa gama de funcionalidades y recursos.</p>
<p><strong>Instalación en Ubuntu</strong></p>
<p>Añadir el repositorio</p>
<pre class="brush: plain; title: ;">
sudo add-apt-repository ppa:rabbitvcs/ppa
</pre>
<p>Añadir en source. En el archivo /etc/apt/sources.list</p>
<pre class="brush: plain; title: ;">
deb http://ppa.launchpad.net/rabbitvcs/ppa/ubuntu **DISTRIBUTION** main
</pre>
<p>en **DISTRIBUTION** hay que agregar la distribución de tu versión de ubuntu entre las disponible que soporta RabbitVCS, en el siguiente enlace se puede ver las distintas distribución soportas por el software <a href="http://ppa.launchpad.net/rabbitvcs/ppa/ubuntu/dists/" target="_blank" rel="nofollow">http://ppa.launchpad.net/rabbitvcs/ppa/ubuntu/dists/</a></p>
<p>Actualizar los repositorios de software con</p>
<pre class="brush: plain; title: ;">
sudo apt-get update
</pre>
<p>Terminar la instalación con </p>
<pre class="brush: plain; title: ;">
sudo apt-get install rabbitvcs-core rabbitvcs-nautilus rabbitvcs-thunar rabbitvcs-gedit rabbitvcs-cli
</pre>
<p>Como yo tengo, a día de hoy, Ubuntu 11.10 de 64bits no me funcionaba este último paso, por lo que el último paso no lo llegué a realizar directamente desde consola sino que una vez hecho el update fui a &#8220;Centro de Software de Ubuntu&#8221; y lo instalé a través del panel.</p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/Selección_005-300x187.png" alt="" title="Selección_005" width="300" height="187" class="aligncenter size-medium wp-image-3381" /></p>
<p>Luego se instala la versión Nautilus 3 extension for RabbitVCS, pedirá las dependencias y se instala el paquete rabbitvcs-core y rabbitvcs-cli. Aunque éstos se pueden instalar anteriormente desde consola. El único problema puede venir a la hora de instalar el cliente para Nautilus si tienes la última versión de éste administrador de archivos.</p>
<p>Recomiendo a todo el quiera a probarlo y usarlo, como he dicho personalmente es el que más me ha gustado y más funcionalidades tiene así como un interfaz gráfico bastante bueno.</p>
<p>Para instalar RabbitVCS en otras distribuciones de Linx tipo Fedora, Debian, CentOS, etc.. en la página oficial hay un tutorial para cada una de ellas: <a href="http://www.rabbitvcs.org/" target="_blank" rel="nofollow">http://www.rabbitvcs.org/</a></p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> dependencias rabbitvcs, gestion de versiones de software, integracion nautilus svn, rabbitvcs configurar</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/linux/memcached-tool-herramienta-para-visualizar-el-uso-de-la-cache-en-ram-con-memcached/' rel='bookmark' title='memcached tool. Herramienta para visualizar el uso de la cache en ram con memcached'>memcached tool. Herramienta para visualizar el uso de la cache en ram con memcached</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/gestion-de-proyecto/subversion-post-commit-hook-actualizar-los-archivos-despues-de-enviar-un-commit-de-subversion/' rel='bookmark' title='Subversion post-commit hook. Actualizar los archivos después de enviar un commit de subversion'>Subversion post-commit hook. Actualizar los archivos después de enviar un commit de subversion</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/firewall-basico-en-linux-para-bloquear-ips-a-servicios-con-hosts-allow-y-hosts-deny/' rel='bookmark' title='firewall básico en linux para bloquear ips a servicios con hosts.allow y hosts.deny'>firewall básico en linux para bloquear ips a servicios con hosts.allow y hosts.deny</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/software/pero-es-que-no-hay-un-ide-de-php-optimo-para-linux/' rel='bookmark' title='Pero es que no hay un IDE de PHP óptimo para Linux??!'>Pero es que no hay un IDE de PHP óptimo para Linux??!</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/nomenclatura-para-discos-duros-y-particiones-de-linux/' rel='bookmark' title='Nomenclatura para discos duros y particiones de linux'>Nomenclatura para discos duros y particiones de linux</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/linux/rabbitvcs-herramienta-para-control-de-versiones-con-subversion-y-git-para-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10 Herramientas online para ayudar y crear código HTML5</title>
		<link>http://www.pedroventura.com/blog_programacion/internet/10-herramientas-online-para-ayudar-y-crear-codigo-html5/</link>
		<comments>http://www.pedroventura.com/blog_programacion/internet/10-herramientas-online-para-ayudar-y-crear-codigo-html5/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 09:00:30 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=3343</guid>
		<description><![CDATA[HTML5 cada vez es mas usado e integrado por aplicaciones online y sobre todo para dispositivos móviles. Ya hace tiempo escribí un par de artículos sobre algunos ejemplo y opiniones sobre HTML5. También expliqué como preparar una aplicación para identificar la geolocalización de un usuario mediante las API de HTML5 de Geolocalización. Hoy indicaré 10 herramientas online para simplificar y ayudar a la creación de nuestro código html5, muy útiles para principiantes y como repaso para los que ya han hecho algo en HTML5. Initializr Es un generador de plantillas HTML5 con el que podrás crear nuevos proyectos web basados en HTML5 Boilerplate. Initializr generará una plantilla vacía y customizable lista para empezar a desarrollar tu aplicación. Visitar: Initialzr HTML5demos Quieres saber si Firefox soporta el nuevo canvas de HTML5? o si en Safari funciona el cliente de chat de HTML5? Desde el site de HTML5demos podrás saber al momento que propiedades o funcionalidades se pueden usar en cada navegador Visitar: HTML5 demos HTML5 Tracker Quieres estar al tanto de que pasa con HTML5? Permanece pendiente de las últimas revisiones usando este tracker. Vistar: HTML5 Tracker HTML5 visual cheat sheet, Guía de referencia HTML5 Tener una guía de referencia de [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/internet/crear-un-portafolio-online-con-electrofolio/' rel='bookmark' title='Crear un portafolio online con Electrofolio'>Crear un portafolio online con Electrofolio</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/html5-geolocalizacion-de-un-usuario/' rel='bookmark' title='HTML5 Geolocalizacion de un usuario'>HTML5 Geolocalizacion de un usuario</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/empezando-con-html-5-tutoriales-ejemplos-y-opiniones/' rel='bookmark' title='empezando con html 5. Tutoriales, ejemplos y opiniones'>empezando con html 5. Tutoriales, ejemplos y opiniones</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/google-y-html5-otra-genial-animacion-esta-vez-en-honor-a-julio-verne/' rel='bookmark' title='Google y HTML5. Otra genial animación esta vez en honor a Julio Verne'>Google y HTML5. Otra genial animación esta vez en honor a Julio Verne</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/crear-un-sitemap-para-videos/' rel='bookmark' title='crear un sitemap para videos'>crear un sitemap para videos</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>HTML5 cada vez es mas usado e integrado por aplicaciones online y sobre todo para dispositivos móviles. Ya hace tiempo escribí un par de artículos sobre <a href="http://www.pedroventura.com/blog_programacion/internet/empezando-con-html-5-tutoriales-ejemplos-y-opiniones/" title="empezando con html 5. Tutoriales, ejemplos y opiniones" target="_blank">algunos ejemplo y opiniones sobre HTML5</a>. También expliqué como preparar una aplicación para identificar la geolocalización de un usuario mediante las <a href="http://www.pedroventura.com/blog_programacion/internet/html5-geolocalizacion-de-un-usuario/" title="HTML5 Geolocalizacion de un usuario" target="_blank">API de HTML5 de Geolocalización</a>.</p>
<p>Hoy indicaré 10 herramientas online para simplificar y ayudar a la creación de nuestro código html5, muy útiles para principiantes y como repaso para los que ya han hecho algo en HTML5.</p>
<p><strong>Initializr</strong></p>
<p>Es un generador de plantillas HTML5 con el que podrás crear nuevos proyectos web basados en HTML5 <a href="http://html5boilerplate.com/" target="_blank" rel="nofollow">Boilerplate</a>. Initializr generará una plantilla vacía y customizable lista para empezar a desarrollar tu aplicación.</p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/initializr-300x192.png" alt="" title="initializr" width="300" height="192" class="aligncenter size-medium wp-image-3352" /></p>
<p>Visitar: <a href="http://www.initializr.com/" target="_blank" rel="nofollow">Initialzr</a></p>
<p><strong>HTML5demos</strong></p>
<p>Quieres saber si Firefox soporta el nuevo canvas de HTML5?  o si en Safari funciona el cliente de chat de HTML5?</p>
<p>Desde el site de HTML5demos podrás saber al momento que propiedades o funcionalidades se pueden usar en cada navegador</p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/html5demos-300x192.png" alt="" title="html5demos" width="300" height="192" class="aligncenter size-medium wp-image-3348" /></p>
<p>Visitar: <a href="http://html5demos.com/" target="_blank" rel="nofollow">HTML5 demos</a></p>
<p><strong>HTML5 Tracker</strong></p>
<p>Quieres estar al tanto de que pasa con HTML5? Permanece pendiente de las últimas revisiones usando este tracker.</p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/html5tracker-300x192.png" alt="" title="html5tracker" width="300" height="192" class="aligncenter size-medium wp-image-3351" /></p>
<p>Vistar: <a href="http://html5.org/tools/web-apps-tracker" target="_blank" rel="nofollow">HTML5 Tracker</a></p>
<p><strong>HTML5 visual cheat sheet, Guía de referencia HTML5</strong></p>
<p>Tener una guía de referencia de las etiquetas y atributos siempre ayuda y es algo que siempre deberíamos tener a mano por si acaso.</p>
<p><a href="http://www.pedroventura.com/guias-de-referencia/html-5-cheat-sheet-pdf-etiquetas-de-referencia/" title="HTML 5 Cheat Sheet (PDF) Etiquetas de referencia. " target="_blank">Ver guía de referencia HTML5</a></p>
<p>Otra formato de Guía de referencia: <a href="http://www.pedroventura.com/wp-content/plugins/download-monitor/download.php?id=23" target="_blank" rel="nofollow">HTML5-Visual-Cheat-Sheet-Reloaded1.pdf</a> 	</p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/html5cheatsheet-300x192.png" alt="" title="html5cheatsheet" width="300" height="192" class="aligncenter size-medium wp-image-3347" /></p>
<p>Otro formato adiccional lo he encontrado en flickr <a href="http://www.flickr.com/photos/antoniolupetti/3894233282/sizes/l/" target="_blank" rel="nofollow">http://www.flickr.com/photos/antoniolupetti/3894233282/sizes/l/</a></p>
<p><strong>Switch To HTML5</strong></p>
<p>Switch To HTML5 es un generador de plantillas básico pero eficaz. Si estás empezando un nuevo proyecto desde 0, sin duda deberías probarlo antes de empezar y generar una plantilla que se adapta a lo que necesites y lo que ofrece esta herramienta.</p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/switchtohtml5-300x192.png" alt="" title="switchtohtml5" width="300" height="192" class="aligncenter size-medium wp-image-3354" /></p>
<p>Vistar: <a href="http://switchtohtml5.com/" target="_blank" rel="nofollow">Switch To HTML5</a></p>
<p><strong>Cross browser HTML5 forms</strong></p>
<p>Los formularios son una parte muy importante de cualquier web. HTML5 ofrece calendarios, muestras de color,sliding widgets, validaciones del lado del cliente y muchas más herramientas, pero hay un problema: Muchos navegadores no soportan todas las funcionalidades de HTML5, con esta web podrás aprender como crear formularios HTML5 que son perfectamente compatibles entre los navegadores.</p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/crossbrowserhtml5-300x192.png" alt="" title="crossbrowserhtml5" width="300" height="192" class="aligncenter size-medium wp-image-3345" /></p>
<p>Visitar: <a href="http://www.useragentman.com/blog/2010/07/27/cross-browser-html5-forms-using-modernizr-webforms2-and-html5widgets/" target="_blank" rel="nofollow">Cross browser HTML5 forms</a></p>
<p><strong>HTML5 Test</strong></p>
<p>Tu navegador está preparado para HTML5? Con HTML5 Test lo sabrás. Esta herramienta te permitirá obtener un completo reporte de las diferentes funcionalidades que soporta tu navegador tipo, vídeo, audio, canvas, etc</p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/html5test-300x208.png" alt="" title="html5test" width="300" height="208" class="aligncenter size-medium wp-image-3350" /></p>
<p>Visita: <a href="http://html5test.com/" target="_blank" rel="nofollow">HTML5 Test</a></p>
<p><strong>HTML5 Canvas Guía de referencia</strong></p>
<p>El elemento canvas es una parte muy importante e interesante de HTML5, ya te permite dibujar en la pantalla.Por lo tanto, es básicamente una lista de los atributos y los métodos del elemento canvas y el contexto de dibujo 2D.</p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/html5canvas-300x224.png" alt="" title="html5canvas" width="300" height="224" class="aligncenter size-medium wp-image-3346" /></p>
<p>Descargar: la guía de <a href="http://www.pedroventura.com/wp-content/plugins/download-monitor/download.php?id=24" title="HTML5 Canvas Cheat Sheet" target="_blank" rel="nofollow">referencia HTML5 Canvas</a></p>
<p><strong>Lime JS</strong></p>
<p>LimeJS es un framework HTML5 para juegos, experiencia nativa de los juegos para todas las pantallas táctiles modernas y navegadores de escritorio.</p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/limejs-300x216.png" alt="" title="limejs" width="300" height="216" class="aligncenter size-medium wp-image-3353" /></p>
<p>Visitar: <a href="http://www.limejs.com/" title="Lime JS" target="_blank" rel="nofollow">Lime JS</a></p>
<p><strong>HTML5 Reset</strong></p>
<p>HTML5 Reset es un conjunto de archivos (HTML, CSS, etc) diseñado para ayudarte a ahorrar tiempo al iniciar nuevos proyectos. </p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/11/html5reset-300x216.png" alt="" title="html5reset" width="300" height="216" class="aligncenter size-medium wp-image-3349" /></p>
<p>Vistar: <a href="http://html5reset.org/" title="HTML5 Reset" target="_blank" rel="nofollow">HTML5 Reset</a></p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> codigo html5 para moviles, que herramientas crean el html5, plantillas html5 tactil, plantilla css vacia para moviles, lista codigos html 5, html5 diseñar, construir platilla con html5, construir plantillas con boilerplate, como generar codigo html 5, comenzar codigo html5</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/internet/crear-un-portafolio-online-con-electrofolio/' rel='bookmark' title='Crear un portafolio online con Electrofolio'>Crear un portafolio online con Electrofolio</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/html5-geolocalizacion-de-un-usuario/' rel='bookmark' title='HTML5 Geolocalizacion de un usuario'>HTML5 Geolocalizacion de un usuario</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/empezando-con-html-5-tutoriales-ejemplos-y-opiniones/' rel='bookmark' title='empezando con html 5. Tutoriales, ejemplos y opiniones'>empezando con html 5. Tutoriales, ejemplos y opiniones</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/google-y-html5-otra-genial-animacion-esta-vez-en-honor-a-julio-verne/' rel='bookmark' title='Google y HTML5. Otra genial animación esta vez en honor a Julio Verne'>Google y HTML5. Otra genial animación esta vez en honor a Julio Verne</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/crear-un-sitemap-para-videos/' rel='bookmark' title='crear un sitemap para videos'>crear un sitemap para videos</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/internet/10-herramientas-online-para-ayudar-y-crear-codigo-html5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Firefox y el cacheo de las redirecciones 301 de .htaccess</title>
		<link>http://www.pedroventura.com/blog_programacion/software/firefox-y-el-cacheo-de-las-redirecciones-301-de-htaccess/</link>
		<comments>http://www.pedroventura.com/blog_programacion/software/firefox-y-el-cacheo-de-las-redirecciones-301-de-htaccess/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 08:00:15 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[htaccess]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=3315</guid>
		<description><![CDATA[A partir de la versión 5 de Firefox, se introdujo una funcionalidad y era la de cachear las redirecciones. Esto personalmente, no me gusta nada y mucho menos si eres un developer y tienes que estar testeando tu aplicación no quieres que se cachen este tipo de eventos. Más adelante explicaré que también es normal que se tengan que cachear este tipo de redirecciones. Si Firefox cachea redirecciones a nivel de .htaccess, renderizará las viejas redirecciones en vez de las nuevas actualizadas en el .htaccess. Ahora bien cual es el problema? Pues que como no tengas esto en cuenta puedes estar trabajando en tu código y estar el tiempo que sea hasta que te des cuenta que tan solo se trata de vaciar la cache de firefox, puede ser una tonteria pero me ha pasado en un par de ocasiones estar mas de media hora trabajando y al final darme cuenta que es el cacheo de las redirecciones en firefox y cabrearme bastante!! Seguro que a mas de uno le ha pasado. Lo explicaré con un ejemplo Vamos a decir que tenemos la url /tienda/categoria1-categoria2-subcategoria1-subcategoria2-c-10_10.html (este es un formato presente en las url de oscommerce) Hago una redireccion a una [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/sysadmin/htaccess-redireccionamiento-con-barra-a-sin-barra/' rel='bookmark' title='htaccess redireccionamiento con barra a sin barra'>htaccess redireccionamiento con barra a sin barra</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/sysadmin/proteger-carpeta-con-htaccess-y-htpasswd/' rel='bookmark' title='Proteger carpeta con htaccess y .htpasswd'>Proteger carpeta con htaccess y .htpasswd</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/sysadmin/directiva-htaccess-para-redireccionar-web-en-dispositivo-movil/' rel='bookmark' title='Directiva htaccess para redireccionar web en dispositivo móvil'>Directiva htaccess para redireccionar web en dispositivo móvil</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/seo/errores-404-perjudican-como-tratar-y-gestionar-los-errores-404-de-las-urls/' rel='bookmark' title='Errores 404. ¿Perjudican? Como tratar y gestionar los errores 404 de las urls.'>Errores 404. ¿Perjudican? Como tratar y gestionar los errores 404 de las urls.</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/http-status-codigos-de-respuesta-de-las-cabeceras/' rel='bookmark' title='HTTP status códigos de respuesta de las cabeceras'>HTTP status códigos de respuesta de las cabeceras</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>A partir de la versión 5 de Firefox, se introdujo una funcionalidad y era la de cachear las redirecciones. Esto personalmente, no me gusta nada y mucho menos si eres un developer y tienes que estar testeando tu aplicación no quieres que se cachen este tipo de eventos. Más adelante explicaré que también es normal que se tengan que cachear este tipo de redirecciones.</p>
<p>Si Firefox cachea redirecciones a nivel de .htaccess, renderizará las viejas redirecciones en vez de las nuevas actualizadas en el .htaccess.</p>
<p>Ahora bien cual es el problema? Pues que como no tengas esto en cuenta puedes estar trabajando en tu código y estar el tiempo que sea hasta que te des cuenta que tan solo se trata de vaciar la cache de firefox, puede ser una tonteria pero me ha pasado en un par de ocasiones estar mas de media hora trabajando y al final darme cuenta que es el cacheo de las redirecciones en firefox y cabrearme bastante!!</p>
<p>Seguro que a mas de uno le ha pasado.</p>
<p><strong>Lo explicaré con un ejemplo</strong></p>
<p>Vamos a decir que tenemos la url /tienda/categoria1-categoria2-subcategoria1-subcategoria2-c-10_10.html (este es un formato presente en las url de oscommerce)</p>
<p>Hago una redireccion a una url nueva y mejor para SEO, con el siguiente formato /tienda/categoria1-categoria2/subcategoria1-subcategoria2</p>
<p>Para ello creo una simple redireccion a nivel de .htaccess (esta redirección contiene un error)</p>
<pre class="brush: plain; title: ;">
RewriteRule ^tienda/([a-z]+)-([a-z]+)-([a-z]+)-([a-z]+)-c-([0-9]+)_([0-9]+).html$ http://%{HTTP_HOST}/tienda/$1-$2-$3/$4 [R=301,L]
</pre>
<p>Pruebo la redireccion que he creado en el navegador y la url vieja me está redirigiendo al siguiente tipo de url nueva<br />
/tienda/categoria1-categoria2-subcategoria1/subcategoria2 upss esta url está mal no es lo que quería!! tendré que cambiarlo.</p>
<p>Volvemos al .htaccess y lo cambiamos por el patrón correcto</p>
<pre class="brush: plain; title: ;">
RewriteRule ^tienda/([a-z]+)-([a-z]+)-([a-z]+)-([a-z]+)-c-([0-9]+)_([0-9]+).html$ http://%{HTTP_HOST}/tienda/$1-$2/$3-$4 [R=301,L]
</pre>
<p>Introduzco la url vieja y me sigue redirigiendo a la url anterior cuyo formato era /tienda/categoria1-categoria2-subcategoria1/subcategoria2.</p>
<p>Vaya que estará pasando? vuelvo a .htaccess y sigo haciendo cambios, ninguno funciona, sigue rediriendigo a la misma url por mas cambios que hago, después de un rato ya caigo, maldito cacheo!! En el Menu de firefox > Herramientas > Limpiar el historial reciente y seleccionar cache, pulsar el botón &#8220;limpiar ahora&#8221;. </p>
<p>Ahora ya redirige a mi url nueva y mejorada.</p>
<p><strong>Conclusión</strong></p>
<p>Como he puesto en el título del artículo esto tan sólo ocurre con las redirecciones tipo 301, por lo menos es con las que he llegado a probar. Si el tipo es 302,304 o un 307 no me ha cacheado la redirección.</p>
<p>Mas allá de que el problema sea de Firefox, ya que las pruebas que he hecho con Chrome e IE 8 no me ha cacheado la redireción, las redirecciones 301 son un tipo de redireccion permanente por lo que tiene sentido que sean cacheadas, ver un <a target="_blank" href="http://www.pedroventura.com/blog_programacion/php/http-status-codigos-de-respuesta-de-las-cabeceras/">listado de los posibles tipos de códigos para los status de las peticiones http</a>.</p>
<p>Para evitar esto habrá que ver que política se usa en el comportamiento de cache-control <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9" rel="nofollow" title="Definición de cabeceras Cache Control" target="_blank">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9</a> metiendo un tiempo de cacheo muy breve o directamente un Cache-Control: no-cache.</p>
<p>La otra solución es vaciar siempre la cache del navegador cuando se hacen pruebas con redirecciones 301.</p>
<p>Para hacerlo más rápido se puede instalar la extensión &#8220;clear cache button&#8221;</p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/10/cache.png" alt="" title="extension firefox clear cache button" width="335" height="68" class="aligncenter size-full wp-image-3322" /></p>
<p>Y meterlo en la barra de navegación para tenerlo siempre accesible</p>
<p><img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/10/botoncache.png" alt="" title="extension firefox clear cache button toolbar" width="199" height="64" class="aligncenter size-full wp-image-3321" /></p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> cache redireccion wordpress, firefox cachea redireccion, htaccess redireccion 301</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/sysadmin/htaccess-redireccionamiento-con-barra-a-sin-barra/' rel='bookmark' title='htaccess redireccionamiento con barra a sin barra'>htaccess redireccionamiento con barra a sin barra</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/sysadmin/proteger-carpeta-con-htaccess-y-htpasswd/' rel='bookmark' title='Proteger carpeta con htaccess y .htpasswd'>Proteger carpeta con htaccess y .htpasswd</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/sysadmin/directiva-htaccess-para-redireccionar-web-en-dispositivo-movil/' rel='bookmark' title='Directiva htaccess para redireccionar web en dispositivo móvil'>Directiva htaccess para redireccionar web en dispositivo móvil</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/seo/errores-404-perjudican-como-tratar-y-gestionar-los-errores-404-de-las-urls/' rel='bookmark' title='Errores 404. ¿Perjudican? Como tratar y gestionar los errores 404 de las urls.'>Errores 404. ¿Perjudican? Como tratar y gestionar los errores 404 de las urls.</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/http-status-codigos-de-respuesta-de-las-cabeceras/' rel='bookmark' title='HTTP status códigos de respuesta de las cabeceras'>HTTP status códigos de respuesta de las cabeceras</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/software/firefox-y-el-cacheo-de-las-redirecciones-301-de-htaccess/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mantener session PHP cuando se cambia entre HTTP a HTTPS. Evitar perder session</title>
		<link>http://www.pedroventura.com/blog_programacion/php/mantener-session-php-cuando-se-cambia-entre-http-a-https-evitar-perder-session/</link>
		<comments>http://www.pedroventura.com/blog_programacion/php/mantener-session-php-cuando-se-cambia-entre-http-a-https-evitar-perder-session/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 08:18:01 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[librerias y funciones]]></category>
		<category><![CDATA[navegadores]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=3291</guid>
		<description><![CDATA[Desde hace un tiempo que estaba teniendo un problema en mi aplicación en una zona restringida para los administradores y redactores de la web (no se trata de este blog). Los administradores y los redactores accedían a esta sección de la web para gestionar toda la aplicación, así como crear contenido, etc,&#8230; el problema es que tras navegar por la aplicación interna, realizar diferentes acciones, crear contenido, editar o lo que necesitaran hacer llegaba un momento que la aplicación se deslogueaba. Porqué? El problema reside en la session que se crea bajo HTTP o HTTPS no son iguales. De manera que una session creada bajo HTTP como la siguiente &#60;?php $_SESSION['user'] = 'pedro'; ?&#62; bajo HTTPS si queremos hacer un print_r o un var_dump, no tiene valor, no existe. &#60;?php var_dump($_SESSION['user']); ?&#62; Sessión creada bajo HTTP creada con CakePHP Ahora bien, porque se deslogueaba? Normalmente los paneles de control o herramientas de gestión internas y privadas, la cuenta de facebook, etc,.. tienen el login inicial y sucesivas comprobaciones de las credenciales a lo largo de la conexión por medio de la sessión. Pues bién en mi caso había ciertas llamadas bajo http o algunos elementos que incluía por ejemplo un [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/cakephp-cannot-send-session-cache-limiter-headers-already-sent/' rel='bookmark' title='error con sessiones: Cannot send session cache limiter – headers already sent'>error con sessiones: Cannot send session cache limiter – headers already sent</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/cakephp-aumentar-el-tiempo-de-session-timeout/' rel='bookmark' title='Cakephp aumentar el tiempo de session timeout'>Cakephp aumentar el tiempo de session timeout</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/cakephp-funcion-para-bloquear-ips-y-evitar-spam/' rel='bookmark' title='cakephp funcion para bloquear ips y evitar spam'>cakephp funcion para bloquear ips y evitar spam</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/enviar-que-se-descarguen-tu-web-y-bloquear-otros-crawlers-desde-robots-txt/' rel='bookmark' title='Evitar que se descarguen tu web y bloquear otros crawlers desde robots.txt'>Evitar que se descarguen tu web y bloquear otros crawlers desde robots.txt</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/mostrar-los-mensajes-de-error-del-php-por-pantalla-con-error_reporting/' rel='bookmark' title='mostrar los mensajes de error del php por pantalla con error_reporting'>mostrar los mensajes de error del php por pantalla con error_reporting</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Desde hace un tiempo que estaba teniendo un problema en mi aplicación en una zona restringida para los administradores y redactores de la web (no se trata de este blog).</p>
<p>Los administradores y los redactores accedían a esta sección de la web para gestionar toda la aplicación, así como crear contenido, etc,&#8230; el problema es que tras navegar por la aplicación interna, realizar diferentes acciones, crear contenido, editar o lo que necesitaran hacer llegaba un momento que la aplicación se deslogueaba. Porqué?</p>
<p>El problema reside en la session que se crea bajo HTTP o HTTPS no son iguales.<br />
De manera que una session creada bajo HTTP como la siguiente</p>
<pre class="brush: php; title: ;">
&lt;?php   $_SESSION['user'] = 'pedro'; ?&gt;
</pre>
<p>bajo HTTPS si queremos hacer un print_r o un var_dump, no tiene valor, no existe.</p>
<pre class="brush: php; title: ;">
&lt;?php   var_dump($_SESSION['user']); ?&gt;
</pre>
<p>Sessión creada bajo HTTP creada con CakePHP</p>
<p><img class="aligncenter size-full wp-image-3292" title="session http" src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/09/session.png" alt="" width="388" height="75" /></p>
<p>Ahora bien, porque se deslogueaba?</p>
<p>Normalmente los paneles de control o herramientas de gestión internas y privadas, la cuenta de facebook, etc,.. tienen el login inicial y sucesivas comprobaciones de las credenciales a lo largo de la conexión por medio de la sessión. Pues bién en mi caso había ciertas llamadas bajo http o algunos elementos que incluía por ejemplo un .css o un .js que no existían y daban como resultado un error 404 pero bajo http, lo que pasaba es que la conexión http me estaba sobrescribiendo la session de https y cuando el panel de control interno quería comprobar de nuevo las credenciales mediante la sessión, esta se había sobrescrito y estaba vacía de manera que como sistema de seguridad se deslogueaba.</p>
<p><strong>Solución 1. La más rápida</strong></p>
<p>La solución más sencilla a priori es obtener el id de session que se asigna mediante <em>session_start()</em> y pasarla por url. Ejemplo http://www.example.com/index.php?sid=123 => https://secure.example.com/login.php?sid=123<br />
Esto no es ni siquiera recomendable. Lo comento porque lo he visto en muchos blogs y foros. Y personalmente no enviaría el id de session por url, porque puede dar lugar a ataques de tipo <a href="http://en.wikipedia.org/wiki/Session_fixation" target="_blank" rel="nofollow">Session fixation</a>. (Más sobre <a href="http://www.pedroventura.com/wp-content/plugins/download-monitor/download.php?id=21" title="Session Fixation" target="_blank">Session Fixation Vulnerability</a>). A parte parece una chapuza o un parche, y si parece una chapuza entonces es que lo es.</p>
<p>Creo que nunca lo he hecho hasta el momento y es posible que no lo haga.</p>
<p><strong>Solución 2. Usar sólo cookies bajo HTTPS</strong></p>
<ul>
<li>Cuando usas <em>session_start()</em> se genera una cookie con el ID de session y se almacena en el navegador del usuario. La session ID es solicitada, por lo que el script PHP puede identificar la session del usuario.</li>
<li>
Se puede establecer la configuración de la session con parámetros en el PHP para restringir la cookie de session para que solo se solicite en peticiones bajo HTTPS. Esto hace que el ID de session se envíe encriptado, pero que no funcione la session en peticiones bajo HTTP. Lo que tampoco es algo productivo.</li>
</ul>
<p>Para ello tendremos que añadir una directiva de PHP al código.<br />
session.cookie_secure especifica si las cookies deberían enviarse sólo sobre conexiones seguras. Por defecto es off.</p>
<pre class="brush: php; title: ;">
if (env('HTTPS')) {
        ini_set('session.cookie_secure', 1);
}
</pre>
<p>De esta manera forzamos a que las cookies se envíen siempre encriptadas.</p>
<p>O para forzar que sea en toda la aplicación, habría que poner la directiva session.cooke_secure a 1 en cualquier archivo de configuración principal para que herede toda la aplicación.</p>
<p><strong>Solución 3. Usar sólo cookies bajo HTTP</strong></p>
<p>Sería el caso contrario al anterior, el problema es que el id de session no estaría encriptado y sería un nivel que quitamos de seguridad, a la aplicación.</p>
<p>Bastaría con forzar el mismo parámetro anterior a 0.</p>
<pre class="brush: php; title: ;">
ini_set('session.cookie_secure', 0);
</pre>
<p>Como yo uso mucho el framework CakePHP también he querido probar esta solución.<br />
Habría que comentar la linea 420 en /cake/lib/session.php, la linea sería la siguiente:ini_set(&#8216;session.cookie_secure&#8217;, 1);</p>
<pre class="brush: php; title: ;">
if (env('HTTPS')) {
        ini_set('session.cookie_secure', 1);
}
</pre>
<p><strong>Una solución mejor</strong></p>
<p>Quizá la mejor solución es manejar sessiones bajo HTTP y HTTPS pero para eso se requiere que el login, paneles de control de usuario y demás información personal se lleve a cabo bajo HTTPS de manera que toda la información sensible esté en la cookie encriptada y usar una session PHP normal para el resto de datos en general, sin restricciones ni seguridad.</p>
<p>De entre todo el código que he hecho y que he visto, podría como posibles soluciones las siguientes.</p>
<pre class="brush: php; title: ;">

session_start();
setcookie(session_name(), session_id(), NULL, NULL, NULL, 0);
setcookie(session_name(), session_id(), NULL, NULL, NULL, 1);
</pre>
<p>Con lo cual creamos dos cookies de sessiones una para HTTP y otra para HTTPS</p>
<pre class="brush: php; title: ;">
&lt;?php
$secure = array_key_exists('HTTPS', $_SERVER);
$cookie = false;

// existing session
if(array_key_exists('PHPSESSID', $_COOKIE))
{
$cookie = setcookie('PHPSESSID', $_COOKIE['PHPSESSID'], NULL, NULL, NULL, (int) !$secure);
}
session_start();

// new session
if(!$cookie)
{
setcookie(session_name(), session_id(), NULL, NULL, NULL, (int) !$secure);
}
?&gt;
</pre>
<p>De todas maneras este artículo está abierto a sugerencias y comentarios, no estaría mal saber como otros desarrolladores gestionan este problema.</p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> evitar que entren por url session php, https con php</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/cakephp-cannot-send-session-cache-limiter-headers-already-sent/' rel='bookmark' title='error con sessiones: Cannot send session cache limiter – headers already sent'>error con sessiones: Cannot send session cache limiter – headers already sent</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/cakephp-aumentar-el-tiempo-de-session-timeout/' rel='bookmark' title='Cakephp aumentar el tiempo de session timeout'>Cakephp aumentar el tiempo de session timeout</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/cakephp-funcion-para-bloquear-ips-y-evitar-spam/' rel='bookmark' title='cakephp funcion para bloquear ips y evitar spam'>cakephp funcion para bloquear ips y evitar spam</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/enviar-que-se-descarguen-tu-web-y-bloquear-otros-crawlers-desde-robots-txt/' rel='bookmark' title='Evitar que se descarguen tu web y bloquear otros crawlers desde robots.txt'>Evitar que se descarguen tu web y bloquear otros crawlers desde robots.txt</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/mostrar-los-mensajes-de-error-del-php-por-pantalla-con-error_reporting/' rel='bookmark' title='mostrar los mensajes de error del php por pantalla con error_reporting'>mostrar los mensajes de error del php por pantalla con error_reporting</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/php/mantener-session-php-cuando-se-cambia-entre-http-a-https-evitar-perder-session/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Expresiones regulares en javacript. Teoría y ejemplos</title>
		<link>http://www.pedroventura.com/blog_programacion/javascript/expresiones-regulares-en-javacript-teoria-y-ejemplos/</link>
		<comments>http://www.pedroventura.com/blog_programacion/javascript/expresiones-regulares-en-javacript-teoria-y-ejemplos/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 05:00:34 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[expresiones regulares]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=3232</guid>
		<description><![CDATA[El siguiente artículo es una adaptación de uno de los capítulos de expresiones regulares del libro de O&#8217;reilly Javascript Cookbook. Por lo que algunos nombres, y ejemplos de frases los he conservado en inglés. También he eliminado algunas secciones, en este artículo tan sólo se conservar al rededor de 1/3 de todo el contenido original, conservando la teoría más básico y algunos ejemplos prácticos. Introducción Las expresiones regulares son patrones de búsqueda que se pueden utilizar para encontrar el texto que coincide con un patrón determinado. Por ejemplo, en el último capítulo, buscamos la  subcadena Cookbook dentro de una cadena más larga: var testValue = &#34;This is the Cookbook's test string&#34;; var subsValue = &#34;Cookbook&#34;; var iValue = testValue(subsValue); devuelve el valor 12 que es el indice de la subcadena Este fragmento de código funcionó porque estábamos buscando una coincidencia exacta. Pero lo que si queremos una búsqueda más general? Por ejemplo, queremos buscar para Cook y la palabra Book, en cadenas como “Joe’s Cooking Book” o “JavaScript Cookbook”? Cuando estamos en busca de cadenas que coinciden con un patrón en lugar de una cadena exacta, tenemos que usar expresiones regulares. Podemos tratar de hacerlo con las funciones de String [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/expresiones-regulares-php/' rel='bookmark' title='expresiones regulares php'>expresiones regulares php</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/expresiones-regulares-y-uso-del-enrutador-routes-php-de-cakephp/' rel='bookmark' title='Expresiones regulares y uso del enrutador routes.php de CakePHP'>Expresiones regulares y uso del enrutador routes.php de CakePHP</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/expresiones-regulares-para-parsear-un-rss-o-xml/' rel='bookmark' title='expresiones regulares para parsear un RSS o XML'>expresiones regulares para parsear un RSS o XML</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/empezando-con-html-5-tutoriales-ejemplos-y-opiniones/' rel='bookmark' title='empezando con html 5. Tutoriales, ejemplos y opiniones'>empezando con html 5. Tutoriales, ejemplos y opiniones</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/como-usar-grep-comando-de-busqueda-linux/' rel='bookmark' title='Como usar grep. Comando de búsqueda linux'>Como usar grep. Comando de búsqueda linux</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>El siguiente artículo es una adaptación de uno de los capítulos de expresiones regulares del libro de O&#8217;reilly Javascript Cookbook. Por lo que algunos nombres, y ejemplos de frases los he conservado en inglés. También he eliminado algunas secciones, en este artículo tan sólo se conservar al rededor de 1/3 de todo el contenido original, conservando la teoría más básico y algunos ejemplos prácticos.</p>
<p style="text-align: center;"><img class="size-full wp-image-3213 aligncenter" title="Javascript cookbook expresiones regulares" src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/07/cat.gif" alt="" width="180" height="236" /></p>
<h4>Introducción</h4>
<p>Las expresiones regulares son patrones de búsqueda que se pueden utilizar para encontrar el texto que coincide con un patrón determinado. Por ejemplo, en el último capítulo, buscamos la  subcadena Cookbook dentro de una cadena más larga:</p>
<pre class="brush: jscript; title: ;">var testValue = &quot;This is the Cookbook's test string&quot;;
var subsValue = &quot;Cookbook&quot;;

var iValue = testValue(subsValue); </pre>
<p>devuelve el valor 12 que es el indice de la subcadena</p>
<p>Este fragmento de código funcionó porque estábamos buscando una coincidencia exacta. Pero lo que si queremos una búsqueda más general? Por ejemplo, queremos buscar para <em> Cook</em> y la palabra <em>Book</em>, en cadenas como “Joe’s Cooking Book” o “JavaScript Cookbook”?</p>
<p>Cuando estamos en busca de cadenas que coinciden con un patrón en lugar de una cadena exacta, tenemos que usar expresiones regulares.<br />
Podemos tratar de hacerlo con las funciones de String funciones, pero al final, es realmente fácil de usar expresiones regulares, aunque la sintaxis y el formato es un poco extraño y no necesariamente &#8220;amigable&#8221;.</p>
<h4>Una expresion regular literal</h4>
<p>RegExp puede ser un literal y un objeto. Para crear un literal RegExp, se utiliza la siguiente sintaxis:</p>
<pre class="brush: jscript; title: ;">var re = /regular expression/;</pre>
<p>El patrón de expresión regular se encuentra entre la apertura y el cierre de las barras diagonales. Tenga en cuenta que este modelo no es una cadena: no desea utilizar comillas simples o dobles alrededor del patrón, a menos que las propias citas son parte de la estructura de partido.</p>
<p>Las expresiones regulares se componen de caracteres, ya sea solo o en combinación con caracteres especiales, que proporcionan para ajustar más complejo. Por ejemplo, la siguiente es una expresión regular para un patrón que coincida con una cadena que contiene la palabra <em>Shelley</em> y la palabra <em>Powers</em>, en ese orden y separados por uno o más espacios en blanco:</p>
<pre class="brush: jscript; title: ;">var re = /Shelley\s+Powers/;</pre>
<p>Los caracteres especiales en este ejemplo son la barra invertida (\), que tiene dos fines: o bien se utiliza con un carácter regular, para indicar que se trata de un carácter especial, o se usa con un carácter especial, como el signo más (+ ), para indicar que el caracter debe ser tratada literalmente. En este caso, la barra invertida se utiliza con &#8220;s&#8221;, que transforma la letra s de un carácter especial la designación de un espacio en blanco, como un espacio, tabulación, avance de línea, etc. El carácter especial \s es seguido por el signo más, \s+, que es una señal para que coincida con el carácter anterior (en este ejemplo, un espacio en blanco) una o más veces. Esta expresion regular funcionará con:</p>
<pre class="brush: jscript; title: ;">Shelley Powers</pre>
<p>Pero también con la siguiente cadena</p>
<pre class="brush: jscript; title: ;">Shelley     Powers</pre>
<p>No funcionará con el siguiente texto</p>
<pre class="brush: jscript; title: ;">ShelleyPowers</pre>
<p>No importa la cantidad de espacio en blanco entre Shelley y Powers, por el uso de \s+. Sin embargo, el uso del signo más se requieren por lo menos un espacio en blanco.</p>
<p>A continuación una tabla con la mayoría de los caracteres especiales en las aplicaciones de JavaScript.</p>
<h5>Caracteres especiales para las expresiones regulares con Javascript</h5>
<table width="100%" border="1" cellspacing="0">
<colgroup span="3">
<col />
<col />
<col /></colgroup>
<thead>
<tr>
<th scope="col" valign="top">Caracter</th>
<th scope="col" valign="top">Coincidencia/Patrón</th>
<th scope="col" valign="top">Ejemplo</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top">^</td>
<td valign="top">Busca la coincicencia al inicio de la cadena</td>
<td valign="top">/^Esto/ coincidiría en: &#8220;Esto es una cadena&#8221;</td>
</tr>
<tr>
<td valign="top">$</td>
<td valign="top">Coincidencia con el final del input o del texto</td>
<td valign="top">/final?/ coincidiría con: &#8220;Esto es el final&#8221;</td>
</tr>
<tr>
<td valign="top">*</td>
<td valign="top">Coincide ninguna o muchas veces</td>
<td valign="top">/mi*/ coincidiría con: &#8220;miiiii&#8221; y tambien con &#8220;mi&#8221;</td>
</tr>
<tr>
<td valign="top">?</td>
<td valign="top">Coincide cero o una vez</td>
<td valign="top">/ap?/ coincidiría con: &#8220;apple&#8221;</td>
</tr>
<tr>
<td valign="top">+</td>
<td valign="top">Coincide una o muchas veces</td>
<td valign="top">/ap+/ coincidiría con: &#8220;apple&#8221;</td>
</tr>
<tr>
<td valign="top">{n}</td>
<td valign="top">Coincidiría exactamente n veces</td>
<td valign="top">/ap{2}/ coincidiría con: &#8220;apple&#8221; pero no con &#8220;apie&#8221;</td>
</tr>
<tr>
<td valign="top">{n,}</td>
<td valign="top">Coincidiría n o mas veces</td>
<td valign="top">/ap{2,}/ coincidiría con todas las p en: &#8220;apple&#8221; y &#8220;appple&#8221; pero no en &#8220;apie&#8221;</td>
</tr>
<tr>
<td valign="top">{n,m}</td>
<td valign="top">Coincidiría al menos n y como máximo m veces</td>
<td valign="top">/ap{2,4}/</td>
</tr>
<tr>
<td valign="top">.</td>
<td valign="top">Para cualquier caracter salvo salto de linea</td>
<td valign="top">/a.e/ coincide con &#8220;ape&#8221; y &#8220;axe&#8221;</td>
</tr>
<tr>
<td valign="top">[...]</td>
<td valign="top">Cualquier caracter dentro de los parentesis</td>
<td valign="top">/a[px]e/ coincidiría “ape” y “axe” pero no “ale”</td>
</tr>
<tr>
<td valign="top">[^...]</td>
<td valign="top">Cualquier caracter menos los que están entre paréntesis</td>
<td valign="top">/a[^px]/ coincidiría “ale” pero no “axe” o “ape”</td>
</tr>
<tr>
<td valign="top">\b</td>
<td valign="top">Coincide con el primer límite de la palabra</td>
<td valign="top">/\bno/ coincidiría con el primer “no” en la palabra “nono”</td>
</tr>
<tr>
<td valign="top">\B</td>
<td valign="top">Coincide con el último límite de la palabra</td>
<td valign="top">/\Bno/ coincide con el ultimo “no” en “nono”</td>
</tr>
<tr>
<td valign="top">\d</td>
<td valign="top">Para dígitos de 0 a 9</td>
<td valign="top">/\d{3}/ coincide 123 en “Now in 123”</td>
</tr>
<tr>
<td valign="top">\D</td>
<td valign="top">Cualquier caracter no digito</td>
<td valign="top">/\D{2,4}/ coincide con “Now &#8221; en “Now in 123”</td>
</tr>
<tr>
<td valign="top">\w</td>
<td valign="top">Cualquier caracter que sea una letra, digito o barra baja</td>
<td valign="top"></td>
</tr>
<tr>
<td valign="top">\W</td>
<td valign="top">Lo contraio a lo anterior</td>
<td valign="top">\/W/ Coincidiría “%” en “100%”</td>
</tr>
<tr>
<td valign="top">\n</td>
<td valign="top">Para los saltos de linea</td>
<td></td>
</tr>
<tr>
<td valign="top">\s</td>
<td valign="top">Un solo espacio en blanco</td>
<td></td>
</tr>
<tr>
<td valign="top">\S</td>
<td valign="top">Un solo caracter pero que no sea un espacio en blanco</td>
<td></td>
</tr>
<tr>
<td valign="top">\t</td>
<td valign="top">Una tabulacion</td>
<td></td>
</tr>
<tr>
<td valign="top">(x)</td>
<td valign="top">paréntesis de captura</td>
<td valign="top">Recuerda los caracteres coincidentes</td>
</tr>
</tbody>
</table>
<h4></h4>
<h4>Una expresión regular con Object</h4>
<p>La expresión regular es un objeto de JavaScript, así como un literal, por lo que también se pueden crear con un constructor, de la siguiente manera:</p>
<pre class="brush: jscript; title: ;">var re = new RegExp(&quot;Shelley\s+Powers&quot;);</pre>
<p>Cuándo usar cada tipo? El literal RegExp se compila cuando el script se evalúa, por lo que debe utilizar un literal RegExp cuando sabes que la expresión no va a cambiar. Una versión compilada es más eficiente. Utilice el constructor cuando cambia la expresión o se va a construir o asignar en tiempo de ejecución.</p>
<h2 style="font-size: 14px;">Ejemplo: Probar si existe una cadena</h2>
<p>Vamos a comprobar si una cadena está contenida en otra cadena.<br />
Utilizar una expresión regular JavaScript para definir un patrón de búsqueda, y luego aplicar el patrón contra de la cadena a buscar, mediante el método RegExp. Haremos que coincida con cualquiera cadena que tenga las dos palabras Cook y Book en ese orden:</p>
<p>Solución.</p>
<pre class="brush: jscript; title: ;">var cookbookString = new Array();

cookbookString[0] = &quot;Joe's Cooking Book&quot;;
cookbookString[1] = &quot;Sam's Cookbook&quot;;
cookbookString[2] = &quot;JavaScript CookBook&quot;;
cookbookString[3] = &quot;JavaScript BookCook&quot;;

// patrón de búsqueda
var pattern = /Cook.*Book/;
for (var i = 0; i &lt; cookbookString.length; i++)
alert(cookbookString[i] + &quot; &quot; + pattern.test(cookbookString[i]));
</pre>
<p>La primera y tercera cadenas tiene un resultado positivo, mientras que la segundo y cuarta no.</p>
<p>El método de prueba RegExp toma dos parámetros: la cadena de prueba, y un modificador opcional. Se aplica la expresión regular con la cadena y devuelve true si hay una coincidencia, falso si no hay.</p>
<p>En el ejemplo, el patrón es la palabra Cook y la palabra Book, que aparecen en algún lugar en la cadena, la palabra Book después de la palabra Cook. Puede haber el númro de caracteres que sea entre las dos palabras, incluyendo que no haya nada indicados por los carácteres espciales, punto (.) y el asterisco (*)</p>
<p>El decimal en las expresiones regulares es un carácter especial que coincide con cualquier carácter excepto el carácter de nueva línea. En el patrón de ejemplo, el decimal es seguido por un asterisco, que coincide con el carácter anterior cero o más veces. Combinados, generan un patrón de coincidencia con cero o más de cualquier carácter, excepto una línea nueva.</p>
<h2 style="font-size: 14px;">Ejemplo: Comprobando las coincidencias entre mayúsculas &#8211; minúsculas en una cadena</h2>
<p>Quieres comprobar si una cadena está contenida en otra cadena, pero no importar si el caracter mayuscula-minuscula.<br />
Para ello, a la hora de crear la expresion regular, hay que utilizar el indicador para ignorar (i) al final de la expresion regular.</p>
<pre class="brush: jscript; title: ;">var cookbookString = new Array();

cookbookString[0] = &quot;Joe's Cooking Book&quot;;
cookbookString[1] = &quot;Sam's Cookbook&quot;;
cookbookString[2] = &quot;JavaScript CookBook&quot;;
cookbookString[3] = &quot;JavaScript cookbook&quot;;
// patrón de busqueda
var pattern = /Cook.*Book/i;
for (var i = 0; i &lt; cookbookString.length; i++) {
alert(cookbookString[i] + &quot; &quot; + pattern.test(cookbookString[i],i));
}
</pre>
<p>Los cuatro patrones coindicen.</p>
<h4>Flags o indicadores de las expresiones regulares</h4>
<table width="100%" border="1" cellspacing="0">
<colgroup span="2">
<col />
<col /></colgroup>
<thead>
<tr>
<th scope="col" valign="top">Flag</th>
<th scope="col" valign="top">Significado</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top">g</td>
<td valign="top">Coincidencia global: comprueba en toda la cadena, en lugar de detenerse cuando encuentra la primera coincidencia.</td>
</tr>
<tr>
<td valign="top">i</td>
<td valign="top">ignora el caso</td>
</tr>
<tr>
<td valign="top">m</td>
<td valign="top"><a name="line in"></a>Se aplica comenzar y terminar la línea de caracteres especiales (^ y $, respectivamente) a cada línea en una cadena de varias líneas</td>
</tr>
</tbody>
</table>
<h2 style="font-size: 14px;">Ejemplo: Encontrar y destacar todas las instancias de un patrón</h2>
<p>Quieres encontrar todas las instancias de un patrón dentro de una cadena. Para ello hay que utilizar el método exec en la expresión regular con el flag (g).<br />
Vamos a decir como ejemplo cualquier palabra que empieza con t y termina con e y nos dará igual el numero de caracteres entre ellos.</p>
<pre class="brush: jscript; title: ;">
var searchString = &quot;Now is the time and this is the time and that is the time&quot;;
var pattern = /t\w*e/g;
var matchArray;

var str = &quot;&quot;;
while((matchArray = pattern.exec(searchString)) != null) {
  str+=&quot;at &quot; + matchArray.index + &quot; we found &quot; + matchArray[0] + &quot;
&quot;;
}
document.getElementById(&quot;results&quot;).innerHTML=str;
</pre>
<p>El metodo exec de la expresion regular, devuelve null si no se encuentra la coincidencia, o un array con la información encontrada. En el array se encuentra el valor actual que ha encontrado, el índice de la cadena donde se encuentra la coincidencia,cualquier coincidencias de subcadenas entre paréntesis, y la cadena original.</p>
<h2 style="font-size: 14px;">Ejemplo: Reemplazar un patrón por una nueva cadena</h2>
<p>Para ello hay que usar el metodo replace del objeto String con una expresión regular.</p>
<pre class="brush: jscript; title: ;">
var searchString = &quot;Now is the time, this is the time&quot;;
var re = /t\w{2}e/g;
var replacement = searchString.replace(re, &quot;place&quot;);
alert(replacement); // Now is the place, this is the place
</pre>
<h2 style="font-size: 14px;">Ejemplo: Intercambio de palabras en una cadena usando paréntesis de captura</h2>
<p>Hay que usar paréntesis de captura y una expresión regular para encontrar y recordar los dos nombres de la cadena, y revertirlos.</p>
<p>En el ejemplo vamos a intercambiar el nombre de orden, poniendo el nombre al final y el apellido primero.</p>
<pre class="brush: jscript; title: ;">

var name = &quot;Pedro Ventura&quot;;
var re = /^(\w+)\s(\w+)$/;
var newname = name.replace(re,&quot;$2, $1&quot;);
</pre>
<p>Los paréntesis de captura nos permitirá no sólo para que coincida con los patrones preestablecidos en una cadena, sino que además hace referencia al subcadenas coincidentes. Las cadenas coincidentes son referenciadas numericamente de izquierda a derecha y son representadas con el uso de &#8220;$1&#8243; y &#8220;$2&#8243; en el método replace de String.</p>
<p>Como las dos palabras están separadas por un espacio, es facil de crear la expresión regular, que recoge el nombre (las dos palabras), y el nombre será accesible usando &#8220;$1&#8243; y el apellido con &#8220;$2&#8243;.</p>
<h5>Patrones especiales para String.replace</h5>
<table width="100%" border="1" cellspacing="0">
<colgroup span="2">
<col />
<col /></colgroup>
<thead>
<tr>
<th scope="col" valign="top">Patrón</th>
<th scope="col" valign="top">Propósito</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top">$$</td>
<td valign="top">Permite remplazar literalmente el signo dolar($)</td>
</tr>
<tr>
<td valign="top">$&amp;</td>
<td valign="top">Inserta la subcadena coincidente</td>
</tr>
<tr>
<td valign="top">$`</td>
<td valign="top">Inserta parte de la cadena antes de la coincidencia</td>
</tr>
<tr>
<td valign="top">$’</td>
<td valign="top">Inserta parte de la cadena después de la coincidencia</td>
</tr>
<tr>
<td valign="top">$n</td>
<td valign="top">Inserta todos los valores capturados por parentesis en la expresión regular.</td>
</tr>
</tbody>
</table>
<h2 style="font-size: 14px;">Ejemplo: Reemplazar HTML Tgas por sus respectivas entidades</h2>
<p>A modo simple, convertiremos los guiones de las etiquetas (&lt;&gt;) en sus rectivas entidades &amp;lt;&amp;gt;</p>
<pre class="brush: jscript; title: ;">
var pieceOfHtml = &quot;&lt;p&gt;This is a &lt;span&gt;paragraph&lt;/span&gt;&lt;/p&gt;&quot;;
pieceOfHtml = pieceOfHtml.replace(/&lt;/g,&quot;&amp;lt;&quot;);
pieceOfHtml = pieceOfHtml.replace(/&gt;/g,&quot;&amp;gt;&quot;);
document.getElementById(&quot;searchResult&quot;).innerHTML = pieceOfHtml;
</pre>
<blockquote><p>
Añado el siguiente enlace <a href="http://xregexp.com/" title="librería de expresiones regulares en javascript" rel="nofollow">http://xregexp.com/</a> que es una librería de expresiones regulares en javascript bastante buena.
</p></blockquote>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> expresiones regulares javascript, buscar letras en un string javascript expresiones regulares, jquery replace expresion regular acentos, expresiones regulares para el uso de caracteres especiales en java, expresiones regulares javascript ejemplos, expresiones regulares javascript 2011, expresiones regulares borrar ceros por la izquierda, expresion regular para acentos java script, expresion regular numero seguridad social java, expresion regular javascript</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/expresiones-regulares-php/' rel='bookmark' title='expresiones regulares php'>expresiones regulares php</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/expresiones-regulares-y-uso-del-enrutador-routes-php-de-cakephp/' rel='bookmark' title='Expresiones regulares y uso del enrutador routes.php de CakePHP'>Expresiones regulares y uso del enrutador routes.php de CakePHP</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/expresiones-regulares-para-parsear-un-rss-o-xml/' rel='bookmark' title='expresiones regulares para parsear un RSS o XML'>expresiones regulares para parsear un RSS o XML</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/empezando-con-html-5-tutoriales-ejemplos-y-opiniones/' rel='bookmark' title='empezando con html 5. Tutoriales, ejemplos y opiniones'>empezando con html 5. Tutoriales, ejemplos y opiniones</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/como-usar-grep-comando-de-busqueda-linux/' rel='bookmark' title='Como usar grep. Comando de búsqueda linux'>Como usar grep. Comando de búsqueda linux</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/javascript/expresiones-regulares-en-javacript-teoria-y-ejemplos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Integración Amazon S3 en wordpress  + W3 Total Cache</title>
		<link>http://www.pedroventura.com/blog_programacion/wordpress/integracion-amazon-s3-en-wordpress-w3-total-cache/</link>
		<comments>http://www.pedroventura.com/blog_programacion/wordpress/integracion-amazon-s3-en-wordpress-w3-total-cache/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 09:54:13 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[cache]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=3254</guid>
		<description><![CDATA[Hace algo más de 3 semanas que he contratado el servicio de Amazon Simple Storage Service (Amazon S3). Lo conocía desde hace bastante tiempo pero nunca lo he llegado a probar. Ahora por temas laborales estoy trasteando y probándolo para mi uso y disfrute personal pero también como I+D para una futura integración en la empresa. Para integrar S3 en WordPress es super sencillo. Tan sólo necesitas instalar el plugin W3 Total Cache. En uno de mis artículos comentaba la importancia de tener varios sistemas de cache, entre ellos cachear las páginas para que éstas se sirvan más rápido y para WordPress hay bastantes plugins de cacheo. El que yo estaba usando se llama Quick Cache pero llega un momento que ese plugin no da para más y no es hasta recomendable instalarlo. Leer el artículo:  plugin cache en wordpress. Mejora la velocidad de tu blog… y el SEO Pues a partir de tener la limitación y las restricciones del plugin Quick Cache decidí pasarme a W3 Total Cache, recomendado y usado por sites tales como: mattcutts.com, mashable.com, smashingmagazine.com, makeuseof.com, yoast.com, kiss925.com, pearsonified.com, lockergnome.com, johnchow.com, ilovetypography.com, webdesignerdepot.com, css-tricks.com y otros muchos. Desde que tenía ese plugin instalado mejoró aún más [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/seo/plugin-cache-en-wordpress-mejora-la-velocidad-de-tu-blog-y-el-seo/' rel='bookmark' title='plugin cache en wordpress. Mejora la velocidad de tu blog… y el SEO'>plugin cache en wordpress. Mejora la velocidad de tu blog… y el SEO</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/problema-en-cachehelper-crea-archivos-de-cache-que-pueden-entrar-en-conflicto/' rel='bookmark' title='problema en CacheHelper, crea archivos de caché que pueden entrar en conflicto'>problema en CacheHelper, crea archivos de caché que pueden entrar en conflicto</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/sysadmin/como-especificar-la-expiracion-de-imagenes-en-la-cache-del-navegador/' rel='bookmark' title='Cómo especificar la expiración de imágenes en la caché del navegador'>Cómo especificar la expiración de imágenes en la caché del navegador</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/wordpress/configura-ftp-en-wordpress-para-actualizar-automaticamente/' rel='bookmark' title='Configura FTP en wordpress para actualizar automaticamente'>Configura FTP en wordpress para actualizar automaticamente</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/social-media/facebook-mejora-la-integracion-de-los-comentarios-para-web-externas-o-blogs/' rel='bookmark' title='Facebook mejora la integración de los comentarios para web externas o blogs'>Facebook mejora la integración de los comentarios para web externas o blogs</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Hace algo más de 3 semanas que he contratado el servicio de Amazon Simple Storage Service (Amazon S3).</p>
<p><a href="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/07/logo_aws.gif"><img class="aligncenter size-full wp-image-3256" title="logo_aws" src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/07/logo_aws.gif" alt="" width="164" height="60" /></a></p>
<p>Lo conocía desde hace bastante tiempo pero nunca lo he llegado a probar. Ahora por temas laborales estoy trasteando y probándolo para mi uso y disfrute personal <img src='http://blogpv2011.s3.amazonaws.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  pero también como I+D para una futura integración en la empresa.</p>
<p>Para integrar S3 en WordPress es super sencillo. Tan sólo necesitas instalar el plugin <a href="http://wordpress.org/extend/plugins/w3-total-cache/" rel="nofollow" target="_blank">W3 Total Cache</a>.</p>
<p>En uno de mis artículos comentaba la importancia de tener varios sistemas de cache, entre ellos cachear las páginas para que éstas se sirvan más rápido y para WordPress hay bastantes plugins de cacheo. El que yo estaba usando se llama <a href="http://www.pedroventura.com/blog_programacion/seo/plugin-cache-en-wordpress-mejora-la-velocidad-de-tu-blog-y-el-seo/">Quick Cache</a> pero llega un momento que ese plugin no da para más y no es hasta recomendable instalarlo. Leer el artículo:  plugin cache en wordpress. <a href="http://www.pedroventura.com/blog_programacion/seo/plugin-cache-en-wordpress-mejora-la-velocidad-de-tu-blog-y-el-seo/">Mejora la velocidad de tu blog… y el SEO</a></p>
<p>Pues a partir de tener la limitación y las restricciones del plugin Quick Cache decidí pasarme a W3 Total Cache, recomendado y usado por sites tales como: mattcutts.com, mashable.com, smashingmagazine.com, makeuseof.com, yoast.com, kiss925.com, pearsonified.com, lockergnome.com, johnchow.com, ilovetypography.com, webdesignerdepot.com, css-tricks.com y otros muchos.</p>
<p>Desde que tenía ese plugin instalado mejoró aún más el tiempo de respuesta y la carga de las páginas. Ojala tuviera en el servidor compartido instalado memcached y entonces la velocidad y el rendimiento sería muchísimo mejor, pero bueno con un buen sistema de cacheo en disco tampoco esta mal.</p>
<p>Volviendo al tema de s3 y la integración de este servicio de AWS en WordPress, estuve buscando algunos plugins para integrar todo el blog con S3, hasta que descubrí que el propio plugin de W3 Total Cache trae un sistema de integración con diferentes plataformas CDN, entre ellas S3 de AWS. De manera que enviar &#8220;todo&#8221;  tu blog a S3 es &#8220;coser y cantar&#8221;. Una vez que configuras tu cuenta y tu bucket, se muestran varios links donde puedes enviar a S3 toda tu galería de fotos, tus css, tus js, tus templates, los archivos wp-includes, los elementos cacheados por el propio plugin tales como css y js comprimidos y optimizados</p>
<p><a href="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/07/cabecera_cache.png"><img class="aligncenter size-full wp-image-3255" title="cabecera_cache" src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/07/cabecera_cache.png" alt="" width="525" height="129" /></a></p>
<p>En conclusión que he vuelto a mejorar la velocidad de carga de las páginas, aunque de momento no podré solventar el problema de la lentitud de respuesta del servidor compartido. Con esta integración mejoro ligeramente el SEO, ya que uno de los factores a tener en cuenta es que los elementos estáticos como CSS, JS y sobre todo imágenes se puedan cargar desde diferentes servidores. Es una mejora que se incluye en las recomendaciones de Page Speed y es algo que también resulta obvio, ya que si distribuyes la carga de los elementos por varios servidores, éstos estarán menos sobrecargados, la respuesta será más rápida y en definitiva la carga de la página mucho mayor. A mayor velocidad de carga de la página mejor experiencia del usuario. Mejor experiencia de usuario, mejor valorados por el Sr. Google.</p>
<p>Otro factor interesante para contratar S3 son sus precios:</p>
<p><strong>Fijación de precios de almacenamiento</strong></p>
<table>
<thead>
<tr>
<th></th>
<th>Almacenamiento estándar</th>
<th>Almacenamiento de redundancia reducida</th>
</tr>
</thead>
<tbody>
<tr>
<td>Primer TB/mes</td>
<td>$0,140 por GB</td>
<td>$0,093 por GB</td>
</tr>
<tr>
<td>Siguientes 49 TB/mes</td>
<td>$0,125 por GB</td>
<td>$0,083 por GB</td>
</tr>
<tr>
<td>Siguientes 450 TB/mes</td>
<td>$0,110 por GB</td>
<td>$0,073 por GB</td>
</tr>
<tr>
<td>Siguientes 500 TB/mes</td>
<td>$0,095 por GB</td>
<td>$0,063 por GB</td>
</tr>
<tr>
<td>Siguientes 4000 TB/mes</td>
<td>$0,080 por GB</td>
<td>$0,053 por GB</td>
</tr>
<tr>
<td>Por encima de 5000 TB/mes</td>
<td>$0,055 por GB</td>
<td>$0,037 por GB</td>
</tr>
</tbody>
</table>
<p><strong>Fijación de precios de solicitud</strong></p>
<table>
<thead>
<tr>
<th>Esquema de precios</th>
</tr>
</thead>
<tbody>
<tr>
<td>Solicitudes para PONER, COPIAR, PUBLICAR o LISTAR</td>
<td>$0,01 por cada 1.000 solicitudes</td>
</tr>
<tr>
<td>OBTENER y todas las demás solicitudes †</td>
<td>$0,01 por cada 10.000 solicitudes</td>
</tr>
</tbody>
<tbody>
<tr>
<td colspan="3"><code>†</code> No se cobrarán las solicitudes eliminadas</td>
</tr>
</tbody>
</table>
<p><strong>Fijación de precios de transferencia de datos</strong></p>
<table>
<thead>
<tr>
<th></th>
<th>Esquema de precios</th>
</tr>
</thead>
<tbody>
<tr>
<th colspan="2">Transferencia entrante de datos</th>
</tr>
<tr>
<td>Todas las transferencias de datos entrantes</td>
<td>$0,000 por GB</td>
</tr>
</tbody>
<tbody>
<tr>
<th colspan="2">Transferencia saliente de datos</th>
</tr>
<tr>
<td>Primer GB/mes</td>
<td>$0,000 por GB</td>
</tr>
<tr>
<td>Hasta 10 TB/mes</td>
<td>$0,120 por GB</td>
</tr>
<tr>
<td>Siguientes 40 TB/mes</td>
<td>$0,090 por GB</td>
</tr>
<tr>
<td>Siguientes 100 TB/mes</td>
<td>$0,070 por GB</td>
</tr>
<tr>
<td>Siguientes 350 TB/mes</td>
<td>$0,050 por GB</td>
</tr>
</tbody>
</table>
<p>Más info en: <a href="http://aws.amazon.com/es/s3/" rel="nofollow" target="_blank">http://aws.amazon.com/es/s3/</a></p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> CONFIGURAR AMAZON S3 CON WORDPRESS, integrar amazon con wordpress, utilizar amazon s3 wordpress</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/seo/plugin-cache-en-wordpress-mejora-la-velocidad-de-tu-blog-y-el-seo/' rel='bookmark' title='plugin cache en wordpress. Mejora la velocidad de tu blog… y el SEO'>plugin cache en wordpress. Mejora la velocidad de tu blog… y el SEO</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/problema-en-cachehelper-crea-archivos-de-cache-que-pueden-entrar-en-conflicto/' rel='bookmark' title='problema en CacheHelper, crea archivos de caché que pueden entrar en conflicto'>problema en CacheHelper, crea archivos de caché que pueden entrar en conflicto</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/sysadmin/como-especificar-la-expiracion-de-imagenes-en-la-cache-del-navegador/' rel='bookmark' title='Cómo especificar la expiración de imágenes en la caché del navegador'>Cómo especificar la expiración de imágenes en la caché del navegador</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/wordpress/configura-ftp-en-wordpress-para-actualizar-automaticamente/' rel='bookmark' title='Configura FTP en wordpress para actualizar automaticamente'>Configura FTP en wordpress para actualizar automaticamente</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/social-media/facebook-mejora-la-integracion-de-los-comentarios-para-web-externas-o-blogs/' rel='bookmark' title='Facebook mejora la integración de los comentarios para web externas o blogs'>Facebook mejora la integración de los comentarios para web externas o blogs</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/wordpress/integracion-amazon-s3-en-wordpress-w3-total-cache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic (Feed is rejected)
Page Caching using disk: enhanced
Database Caching 67/225 queries in 1.142 seconds using disk: basic
Object Caching 3700/4014 objects using disk: basic
Content Delivery Network via Amazon Web Services: S3: blogpv2011.s3.amazonaws.com

Served from: www.pedroventura.com @ 2012-02-06 21:00:19 -->
