<?xml version="1.0" encoding="UTF-8" ?>
	<rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"> 
	<channel>
		<title>Blog de Imaginanet S.L. Programacion web y marketing online.</title>
		<link>http://www.imaginanet.com/blog.html</link>
		<description>Blog de Imaginanet. Artículos especializados en soluciones y desarrollo Web 2.0. así como en buscadores web.</description>
		<lastBuildDate>Wed, 10 Mar 2010 06:12:40 +0100</lastBuildDate> 
		<generator>imaginaCMS</generator>
		<language>es</language>
		<sy:updatePeriod>weekly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
		<image> 
		    <title>Blog de Imaginanet S.L. Programacion web y marketing online.</title> 
		    <url>http://www.imaginanet.com/logo.png</url> 
		    <link>http://www.imaginanet.com/blog.html</link> 
		    <width>144</width> 
		    <height>53</height> 
	    </image>
	    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://www.imaginanet.com/feeds.htm" />
	    <feedburner:browserFriendly>
	    	Este es un feed de contenido XML. Para visualizarlo es necesario un programa de lectura de noticias y desde feedburner, el feed est sujeto a los derechos de autor y a un uso responsable. 
	    	/
	    	This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.
	    </feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" />
			
		<item>
			<title>Cómo utilizar PayPal para realizar compras en tu web</title>
			<link>http://www.imaginanet.com/blog/como-utilizar-paypal-para-realizar-compras-en-tu-web.html</link>
			<guid>http://www.imaginanet.com/blog/como-utilizar-paypal-para-realizar-compras-en-tu-web.html</guid>
			<comments>http://www.imaginanet.com/blog/como-utilizar-paypal-para-realizar-compras-en-tu-web.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Wed, 17 Feb 2010 09:32:57 +0100</pubDate>
					<category><![CDATA[XHTML]]></category>
					<description><![CDATA[Vamos a explicar c&oacute;mo llamar al API de PayPal para realizar pagos en tu p&aacute;gina web. En primer lugar deberemos crear una cuenta como desarrollador de PayPal Sandbox (https://developer.paypal.com/) que usaremos para verificar que lo hacemos de manera correcta antes de hacerlo funcionar en nuestra p&aacute;gina...]]></description>
			<content:encoded><![CDATA[><p>Vamos a explicar c&oacute;mo llamar al <strong>API de PayPal</strong> para realizar pagos en tu p&aacute;gina web. En primer lugar deberemos crear una cuenta como desarrollador de <strong>PayPal Sandbox</strong> (<a href="https://developer.paypal.com/">https://developer.paypal.com/</a>) que usaremos para verificar que lo hacemos de manera correcta antes de hacerlo funcionar en nuestra p&aacute;gina web.</p>
<p>Tras hacerla y meternos en nuestra cuenta de desarrollador, deberemos seleccionar la opci&oacute;n <em>Create a preconfigured buyer or seller account</em> donde rellenaremos con nuestros datos el formulario teniendo en cuenta que debe ser una cuenta de vendedor.</p>
<p>Una vez creada, entraremos a nuestro listado de cuentas de PayPal Sandbox. Estas cuentas no son cuentas reales de PayPal y s&oacute;lo funcionar&aacute;n dentro de su Sandbox. Para entrar en ella pulsaremos el bot&oacute;n de <em>Enter Sandbox Test Site</em> y podremos introducir el usuario y contrase&ntilde;a para esta cuenta de prueba. Una vez dentro podemos observar que es como si fuera una cuenta de PayPal  pero los pagos que se hagan a ella no ser&aacute;n reales.</p>
<h4>Ejemplo de pago con el API de PayPal</h4>
<p>Para realizar el pago utilizaremos un documento HTML en el que le pasaremos los par&aacute;metros que PayPal necesita (importe, c&oacute;digo de venta, etc.) y otros opcionales como los datos del usuario que compra para que le aparezcan rellenados en el formulario de pago. Un ejemplo ser&iacute;a el siguiente:</p>
<pre class="code">&lt;html&gt;

&lt;head&gt;

&lt;title&gt;Ejemplo de pago mediante la API de PayPal&lt;/title&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;form name='formTpv' method='post' action='https://www.sandbox.paypal.com/cgi-bin/webscr'&gt;

	&lt;input type='hidden' name='cmd' value='_xclick'&gt;
	&lt;input type='hidden' name='business' value='mi_cuenta_sandbox@mi_pagina.com'&gt;
	&lt;input type='hidden' name='item_name' value='Nueva compra en mi web'&gt;
	&lt;input type='hidden' name='item_number' value='VENTA-X2561'&gt;
	&lt;input type='hidden' name='amount' value='10.15'&gt;
	&lt;input type='hidden' name='page_style' value='primary'&gt;
	&lt;input type='hidden' name='no_shipping' value='1'&gt;
	&lt;input type='hidden' name='return' value='http://mi_pagina/exito.html'&gt;
	&lt;input type='hidden' name='rm' value='2'&gt;
	&lt;input type='hidden' name='cancel_return' value='http://mi_pagina/cancelada.html'&gt;
	&lt;input type='hidden' name='no_note' value='1'&gt;
	&lt;input type='hidden' name='currency_code' value='EUR'&gt;
	&lt;input type='hidden' name='cn' value='PP-BuyNowBF'&gt;
	&lt;input type='hidden' name='custom' value=''&gt;
	&lt;input type='hidden' name='first_name' value='NOMBRE'&gt;
	&lt;input type='hidden' name='last_name' value='APELLIDOS'&gt;
	&lt;input type='hidden' name='address1' value='DIRECCI&Oacute;N'&gt;
	&lt;input type='hidden' name='city' value='POBLACI&Oacute;N'&gt;
	&lt;input type='hidden' name='zip' value='C&Oacute;DIGO POSTAL'&gt;
	&lt;input type='hidden' name='night_phone_a' value=''&gt;
	&lt;input type='hidden' name='night_phone_b' value='TEL&Eacute;FONO'&gt;
	&lt;input type='hidden' name='night_phone_c' value=''&gt;
	&lt;input type='hidden' name='lc' value='es'&gt;
	&lt;input type='hidden' name='country' value='ES'&gt;
&lt;/form&gt;
&lt;script type='text/javascript'&gt;
	document.formTpv.submit();
&lt;/script&gt;

&lt;/body&gt;

&lt;/html&gt;
</pre>
<p>La direcci&oacute;n de llamada del formulario de pruebas es <span style="text-decoration: underline;">https://www.sandbox.paypal.com/cgi-bin/webscr</span> pero al pasar a ventas reales deberemos indicar <span style="text-decoration: underline;">https://www.paypal.com/cgi-bin/webscr</span></p>
<p>Como podemos ver, existente multitud de par&aacute;metros en el formulario que son f&aacute;ciles de ver cuales son su prop&oacute;sito (nombre, direcci&oacute;n, etc.). A continuaci&oacute;n detallamos los m&aacute;s importantes o que podemos tener duda de qu&eacute; son realmente:</p>
<ul>
<li><strong>business:</strong> indicaremos la cuenta de PayPal asociada al vendedor. Mientras estemos de pruebas indicaremos la cuenta de pruebas del Sandbox, pero para ventas reales deberemos indicar nuestra cuenta de vendedor.</li>
<li><strong>item_name:</strong> t&iacute;tulo que aparecer&aacute; en la pantalla de pago.</li>
<li><strong>item_number:</strong> c&oacute;digo de la venta, actuar&aacute; como identificador &uacute;nico de cada venta.</li>
<li><strong>amount:</strong> importe a pagar, donde si hay decimales no podr&aacute;n indicarse con una coma ni con m&aacute;s de dos n&uacute;meros.</li>
<li><strong>return:</strong> p&aacute;gina de vuelta a nuestra web indicando &eacute;xito en el pago.</li>
<li><strong>cancel_return:</strong> p&aacute;gina de vuelta a nuestra web indicando que no se realiz&oacute; el pago por que el usuario lo cancel&oacute;.</li>
<li><strong>currency_code:</strong> c&oacute;digo de la moneda usada en el pago. Para el caso del euro es EUR.</li>
<li><strong>lc:</strong> idioma de la pantalla de pago.</li>
<li><strong>country:</strong> c&oacute;digo ISO del pa&iacute;s del cliente.</li>
</ul>
<ul>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=27</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/como-utilizar-paypal-para-realizar-compras-en-tu-web.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Usando AJAX: Un simple ejemplo con PHP y jQuery.</title>
			<link>http://www.imaginanet.com/blog/usando-ajax-un-simple-ejemplo-con-php-y-jquery.html</link>
			<guid>http://www.imaginanet.com/blog/usando-ajax-un-simple-ejemplo-con-php-y-jquery.html</guid>
			<comments>http://www.imaginanet.com/blog/usando-ajax-un-simple-ejemplo-con-php-y-jquery.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Wed, 10 Feb 2010 10:48:36 +0100</pubDate>
					<category><![CDATA[jQuery]]></category>
					<category><![CDATA[Ajax]]></category>
					<description><![CDATA[Descrito de una manera muy resumida, AJAX es una tecnolog&iacute;a que nos permite realizar acciones en una p&aacute;gina web que necesiten respuesta del servidor sin recargarla. Con ello conseguimos que nuestra web sea din&aacute;mica y por tanto obtener un dise&ntilde;o m&aacute;s atractivo. Algunos ejemplos de lo que podemos...]]></description>
			<content:encoded><![CDATA[>Descrito de una manera muy resumida, <a href="http://es.wikipedia.org/wiki/AJAX">AJAX</a> es una tecnolog&iacute;a que nos permite realizar acciones en una p&aacute;gina web que necesiten respuesta del servidor sin recargarla. Con ello conseguimos que nuestra web sea din&aacute;mica y por tanto obtener un dise&ntilde;o m&aacute;s atractivo. Algunos ejemplos de lo que podemos hacer:                 
<ul>
<li>Un enlace que compruebe si un valor existe ya en una base de datos.</li>
<li>Completar un campo de texto de b&uacute;squeda con valores sugeridos por nuestra web.</li>
<li>Un chat web</li>
<li>etc.</li>
</ul>
<p>En este art&iacute;culo vamos a describir como realizar una sencilla llamada AJAX a una fichero externo que ejecutar&aacute; un proceso (una suma entre dos valores enviados mediante POST) y nos devolver&aacute; la salida correspondiente apoy&aacute;ndonos con la librer&iacute;a <a href="http://jquery.com/">jQuery</a>, que aunque no es necesario su uso, lo haremos sobre ella para aprovechar la potencia que nos proporciona. Se podr&iacute;a decir que es el t&iacute;pico <em>Hola mundo</em> en AJAX.</p>
<p>El c&oacute;digo se compone de dos archivos: un archivo donde mostraremos los formularios con datos de entrada y otro con el archivo de procesamiento.</p>
<p>A continuaci&oacute;n mostramos el c&oacute;digo del fichero de entrada de datos (habr&aacute; que tener cuidado con escribir correctamente la ruta a la librer&iacute;a jQuery):</p>
<pre class="code">&lt;html&gt;

&lt;head&gt;

&lt;title&gt;Ejemplo sencillo de AJAX&lt;/title&gt;

&lt;script type="text/javascript" src="/js/jquery.js"&gt;&lt;/script&gt;

&lt;script&gt;
function realizaProceso(valorCaja1, valorCaja2){
        var parametros = {
                "valorCaja1" : valorCaja1,
                "valorCaja2" : valorCaja2
        };
        $.ajax({
                data:  parametros,
                url:   'ejemplo_ajax_proceso.php',
                type:  'post',
                beforeSend: function () {
                        $("#resultado").html("Procesando, espere por favor...");
                },
                success:  function (response) {
                        $("#resultado").html(response);
                }
        });
}
&lt;/script&gt;

&lt;/head&gt;

&lt;body&gt;

Introduce valor 1

&lt;input type="text" name="caja_texto" id="valor1" value="0"/&gt; 


Introduce valor 2

&lt;input type="text" name="caja_texto" id="valor2" value="0"/&gt;

Realiza suma

&lt;input type="button" href="javascript:;" onclick="realizaProceso($('#valor1').val(), $('#valor2').val());return false;" value="Calcula"/&gt;

&lt;br/&gt;

Resultado: &lt;span id="resultado"&gt;0&lt;/span&gt;

&lt;/body&gt;

&lt;/html&gt;

</pre>
<p>&nbsp;</p>
<p>En este c&oacute;digo, utilizamos los id de las cajas de texto para pasarle sus valores a la funci&oacute;n <em>realizaProceso</em>. En esta funci&oacute;n recogemos los valores de entrada en un array parametros y enviamos mediante AJAX especificando el par&aacute;metro <em>data</em> (datos que mandamos), <em>url</em> (direcci&oacute;n del archivo de proceso) y <em>type</em> (POST o GET).</p>
<p>Por &uacute;ltimo vemos que tenemos dos eventos: <em>beforeSend</em> y <em>success</em> donde podemos indicar la acci&oacute;n a realizar mientras se procesan los datos y tras terminar de procesarlos (en este caso jugar con el contenido HTML del id resultado).</p>
<p>Ahora vemos el archivo de procesamiento de datos (<em>ejemplo_ajax_proceso.php</em>) que &uacute;nicamente suma los datos recibidos por POST:</p>
<pre class="code php">
&lt;?php 
$resultado = $_POST['valorCaja1'] + $_POST['valorCaja2']; 
echo $resultado;
?&gt;
</pre>]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=26</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/usando-ajax-un-simple-ejemplo-con-php-y-jquery.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Crear plugins de jquery</title>
			<link>http://www.imaginanet.com/blog/crear-plugins-de-jquery.html</link>
			<guid>http://www.imaginanet.com/blog/crear-plugins-de-jquery.html</guid>
			<comments>http://www.imaginanet.com/blog/crear-plugins-de-jquery.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Sat,  6 Feb 2010 21:09:29 +0100</pubDate>
					<category><![CDATA[JavaScript]]></category>
					<category><![CDATA[jQuery]]></category>
					<description><![CDATA[Jquery es una de las bibliocas javascript m&aacute;s simples e utilizadas. Crear plugins para esta biblioteca es muy sencillo. Vamos a ver los pasos necesarios: 

Primero tenemos que incluir la biblioteca jquery en la cabecera. Nos la descargamos desde su web y la a&ntilde;adimos de la siguiente forma:
			
		


Luego...]]></description>
			<content:encoded><![CDATA[><a href="http://www.jquery.com" target="_blank">Jquery</a> es una de las bibliocas javascript m&aacute;s simples e utilizadas. Crear plugins para esta biblioteca es muy sencillo. Vamos a ver los pasos necesarios:<br /><br /> 
<ul>
<li>Primero tenemos que incluir la biblioteca jquery en la cabecera. Nos la descargamos desde su web y la a&ntilde;adimos de la siguiente forma:<br />
<pre class="code">			<script src="/ruta_a_jquery/jquery.js" type="text/javascript"></script>
		</pre>
</li>
<li>
<p>Luego creamos nuestro archivo del plugin, que luego tambi&eacute;n tendremos que a&ntilde;adirlo en la cabecera para utilizarlo.</p>
<pre class="code">			$.fn.duplicar = function () {
				this.each(function () {
					var html = "<br />"+$(this).html();
					$(this).append(html);
				});
			}
		</pre>
<p>Lo que hace este plugin es duplicar el contenido de los elementos seleccionados.<br /> $.fn es el objeto de jquery que contiene las funciones que nosotros le definimos. Dentro del c&oacute;digo de la funci&oacute;n, el this es un array con los elementos seleccionados con jquery. Con la funci&oacute;n each, recorremos ese array.</p>
</li>
<li> Para utilizarlo:
<pre class="code">			$("div.doble").duplicar();
		</pre>
<p>As&iacute; duplicar&iacute;amos el contenido de todos los divs con la clase "doble"</p>
</li>
</ul>
<p>&Eacute;ste es un ejemplo muy b&aacute;sico. Para m&aacute;s informaci&oacute;n s&oacute;lo hay que pasarse por la web de jquery la cual tiene una bastante buena <a href="http://docs.jquery.com/Main_Page" target="_blank">documentaci&oacute;n</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=25</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/crear-plugins-de-jquery.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Display inline-block e internet explorer.</title>
			<link>http://www.imaginanet.com/blog/display-inline-block-e-internet-explorer.html</link>
			<guid>http://www.imaginanet.com/blog/display-inline-block-e-internet-explorer.html</guid>
			<comments>http://www.imaginanet.com/blog/display-inline-block-e-internet-explorer.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Sat,  6 Feb 2010 19:41:50 +0100</pubDate>
					<category><![CDATA[XHTML]]></category>
					<category><![CDATA[CSS]]></category>
					<category><![CDATA[Internet Explorer]]></category>
					<category><![CDATA[Navegadores]]></category>
					<description><![CDATA[La propiedad display de css (en la versi&oacute;n 2.1), puede contener un valor muy interesante, inline-block. Con este valor conseguimos que el elemento con esa propiedad se comporte como una caja, pero mostrandose en la misma l&iacute;nea, como si tuviese display: inline.
&iquest;Y esto de qu&eacute; nos sirve?, pues si no...]]></description>
			<content:encoded><![CDATA[><p>La propiedad display de css (en la versi&oacute;n 2.1), puede contener un valor muy interesante, <strong>inline-block</strong>. Con este valor conseguimos que el elemento con esa propiedad se comporte como una caja, pero mostrandose en la misma l&iacute;nea, como si tuviese display: inline.</p>
<p>&iquest;Y esto de qu&eacute; nos sirve?, pues si no usamos esta propiedad tendr&iacute;amos que a&ntilde;adirle a la caja un "float: left", por ejemplo, pero esto trae unas consecuencias, a veces, muy molestas. Por ejemplo, si queremos mostrar contenido dividido en cajas y que se muestren filas de 3 cajas, si &eacute;stas var&iacute;an con la altura, pasar&iacute;a esto:</p>
<img src="http://www.imaginanet.com/blog_files/inline-block/confloat.png" alt="con float" />
<p>Esto pasa porque al tener "float:left", las cajas "buscan" el primer espacio disponible a su izquierda. &Eacute;sto podr&iacute;a solucionarse desde el html, a&ntilde;adiendo cada tres cajas un elemento que tenga la propiedad "clear:both". Pero si queremos que el n&uacute;mero de cajas por fila var&iacute;e dependiendo de la anchura de nuestra ventana del navegador, ya no valdr&iacute;a esta soluci&oacute;n. Adem&aacute;s si usamos la propiedad "display: inline-block", podemos alinear las cajas arriba, abajo, al centro , con tan solo cambiar la propiedad vertical-align. Si ponemos "vertical-align:top", tendremos esto:</p>
<img src="http://www.imaginanet.com/blog_files/inline-block/deseable.png" alt="con float" />
<h2>Hacks para conseguir "display: inline-block" en internet explorer 6 y 7</h2>
<p>Nuestros amigos Ie6 e Ie7, como siempre, mostrandonos su tecnolog&iacute;a punta (recordemos que &eacute;sto es CSS 2.1), no implementan esta propiedad completamente.</p>
<p>De todas formas es muy sencillo hacerlo funcionar con un peque&ntilde;o truco. En vez de usar "display: inline-block", tendr&iacute;amos que ponerles "display: inline" y a&ntilde;adirles la propiedad "zoom:1"</p>
<pre class="code">	div.block {
		display: inline-block;
		#display: inline-block;
		_display: inline;
		zoom: 1;
	}
</pre>
<p>La "#" es un hack para que solo aplique esa propiedad IE7 y el "_" para IE6. La propiedad zoom solo la cojeran esos 2 navegadores, puesto que no es est&aacute;ndar, haciendo que el elemento se comporte como una caja.</p>
<a href="http://www.imaginanet.com/blog_files/inline-block/inline-block.htm" target="_blank">Ver ejemplo en funcionamiento.</a><br /> <a href="http://www.imaginanet.com/blog_files/inline-block/inline-block.htm" target="_blank"><img src="http://www.imaginanet.com/blog_files/inline-block/ejemplo.png" alt="con float" /></a>]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=24</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/display-inline-block-e-internet-explorer.html</feedburner:origLink>
		</item>
				
		<item>
			<title>HTML 5 y el famoso tag "video"</title>
			<link>http://www.imaginanet.com/blog/html-5-y-el-famoso-tag-video.html</link>
			<guid>http://www.imaginanet.com/blog/html-5-y-el-famoso-tag-video.html</guid>
			<comments>http://www.imaginanet.com/blog/html-5-y-el-famoso-tag-video.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Thu, 28 Jan 2010 08:27:06 +0100</pubDate>
					<category><![CDATA[HTML5]]></category>
					<category><![CDATA[Navegadores]]></category>
					<description><![CDATA[HTML5 ha llegado, y aunque sea pronto para que el usuario pueda disfrutar de todo su potencial, los programadores hace ya unos meses que podemos ir viendo como ser&aacute;n las webs de dentro de unos a&ntilde;os. El tag &lt;video/&gt; es el que m&aacute;s revuelo est&aacute; teniendo, y no solo por su integraci&oacute;n en sitios...]]></description>
			<content:encoded><![CDATA[>HTML5 ha llegado, y aunque sea pronto para que el usuario pueda disfrutar de todo su potencial, los programadores hace ya unos meses que podemos ir viendo como ser&aacute;n las webs de dentro de unos a&ntilde;os.<br /><br /> El tag &lt;video/&gt; es el que m&aacute;s revuelo est&aacute; teniendo, y no solo por su integraci&oacute;n en sitios como Youtube o Vimeo, sin&oacute; por los est&aacute;ndares soportados por cada navegador.<br /><br /> Mozilla se ha puesto firme al respecto y ha anunciado que no piensa incluir el estandar h264, ya que este no es un codec abierto y existen otros que si lo son y pueden ofrecer mejor calidad.<br /> Esto nos deja en una situaci&oacute;n en la que los navegadores web que actualmente soportan el tag  de HTML5:<br /><br /> &bull;Presto/Opera: HTML5 mediante GStreamer (incluye s&oacute;lo Ogg/Theora).<br /> &bull;WebKit/Chrome: HTML5 mediante ffmpeg (Ogg/Theora y H.264/MP4).<br /> &bull;Gecko/Firefox: HTML5 con Ogg/Theora.<br /> &bull;WebKit/Epiphany: HTML5 mediante GStreamer (Ogg/Theora garantizado).<br /> &bull;WebKit/Safari: HTML5 mediante QuickTime (H.264/MOV/M4V, puede reproducir Ogg/Theora con XiphQT components).<br /><br /> Nos encontramos frente a una guerra en la que empresas como Apple y Microsoft, forman parte de la MPEG-LA, empresa que tiene la patente del codec h264, frente a Mozilla (por el momento) que se ha posicionado en contra de usar una tecnolog&iacute;a propietaria que condicione la red.<br /><br />Por su parte, Youtube no da su brazo a torcer. A pesar de que hay decenas de peticiones y de comentarios pidiendo el soporte de Ogg Theora, no sueltan prenda al respecto.]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=23</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/html-5-y-el-famoso-tag-video.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Menú desplegable con CSS</title>
			<link>http://www.imaginanet.com/blog/menu-desplegable-con-css.html</link>
			<guid>http://www.imaginanet.com/blog/menu-desplegable-con-css.html</guid>
			<comments>http://www.imaginanet.com/blog/menu-desplegable-con-css.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Mon, 28 Dec 2009 18:28:03 +0100</pubDate>
					<category><![CDATA[XHTML]]></category>
					<category><![CDATA[CSS]]></category>
					<description><![CDATA[Vamos a crear un men&uacute; desplegable utilizando &uacute;nicamente CSS. En principio no necesitaremos nada de javascript. Este men&uacute; funcionar&aacute; en las &uacute;ltimas versiones de firefox, chrome, safari, opera, e internet explorer (versi&oacute;n 8). Para que funcione en Internet explorer 7 s&oacute;lo...]]></description>
			<content:encoded><![CDATA[>Vamos a crear un men&uacute; desplegable utilizando &uacute;nicamente <a href="http://www.imaginanet.com/diseno-web/desarrollo-web/maquetacion-html-css.html" target="_blank">CSS</a>. En principio no necesitaremos nada de javascript. Este men&uacute; funcionar&aacute; en las &uacute;ltimas versiones de firefox, chrome, safari, opera, e internet explorer (versi&oacute;n 8). Para que funcione en Internet explorer 7 s&oacute;lo necesitaremos a&ntilde;adir unos peque&ntilde;os <a href="#hacks">hacks</a>. En explorer 6 necesitaremos utilizar javascript, puesto que este navegador no reconoce el selector ":hover" en elementos que no sean "a", los cuales no pueden contener elementos de tipo bloque dentro, si queremos cumplir los est&aacute;ndares, claro. Al final se explican los <a href="#hacks">hacks necesarios</a>.<br /><br /> Para comenzar definimos la estructura del men&uacute;, bas&aacute;ndonos en listas desordenadas (ul, li):<br /><br />
<pre class="code"><ul class="menu">
	<li>
		<a class="item more" href="#">Item 1</a>
		<ul>
			<li>
				<a class="item" href="#">Option 1</a>
			</li>
			<li>
				<a class="item" href="#">Option 2</a>
			</li>
		</ul>
	</li>
</ul>
</pre>
<br /> Cada li tendr&aacute; un "a" con clase "item", y si queremos a&ntilde;adirle un submen&uacute;, un "ul", en este caso le tendremos que a&ntilde;adir la clase more al "a" por cuesti&oacute;n de estilo, as&iacute; mostrar&aacute; una flecha a la derecha, indicando que hay un submen&uacute; oculto. <br /><br /> Ahora tenemos que ocultar los submen&uacute;s desde la hoja de estilos, para eso le a&ntilde;adimos la propiedad "display:none" a los "ul" dentro del "ul" principal: <br /><br />
<pre class="code">ul.menu {
	display: inline-block;
	margin: 0;
	padding: 0;
	list-style-type: none;
	white-space: nowrap;
}
ul.menu ul {
	display: none;
}
ul.menu li {
	position: relative;
	display: inline-block;
}
ul.menu ul li {
	display: block;
}
</pre>
<br /> A los li del primer nivel les aplicamos la propiedad "display: inline-block", para que se muesten en una sola l&iacute;nea, a los dem&aacute;s les ponemos "display:block". El primer ul tiene la propiedad "white-space: nowrap", para forzar a que sus "li" no salten de l&iacute;nea. Ahora ya tenemos los submen&uacute;s ocultos, falta hacerlos aparecer:<br /><br />
<pre class="code">ul.menu &gt; li:hover &gt; ul {
	display: block;
	position: absolute;
	top: 100%;
	left: 0;
}

ul.menu ul li:hover &gt; ul {
	display: block;
	position: absolute;
	top: 0;
	left: 100%;
}
</pre>
<br /> Los submen&uacute;s est&aacute;n posicionados absolutamente con respecto al "li" que los contiene, ya que &eacute;stos est&aacute;n posicionados relativamente. En el caso de los submen&uacute;s del primer nivel los colocamos con "top:100%,left:0", para que salgan justo debajo del item padre. Para los dem&aacute;s submen&uacute;s ponemos "top: 0; left: 100%", con lo que saldr&aacute;n justo a la derecha del item padre.<br /><br /> Al final nos quedar&aacute; algo parecido a esto:<br /><br />
<div><img title="men&uacute; desplegable" src="http://www.imaginanet.com//blog_files/menu-css/captura.png" alt="men&uacute; desplegable" width="370" height="158" /></div>
<br /> <br /><strong></strong>
<h3><strong><a name="hacks"></a></strong>Hacks para Internet explorer 6 y 7:</h3>
<br /> <a href="http://www.imaginanet.com/blog/display-inline-block-e-internet-explorer.html">En Internet explorer 6 y 7, no funciona la propiedad "display: inline-block"</a>, pero con un sencillo truco podemos conseguir el mismo efecto:<br /><br />
<pre class="code">ul.menu li {
	position: relative;
	display: inline-block;
	_display: inline;
	_zoom: 1;
	#display: inline;
	#zoom: 1;
}
</pre>
<br /> Para hacer que los submen&uacute;s aparezcan en internet explorer 6, tendremos que utilizar javascript, como coment&aacute;bamos al principio. Utilizando la librer&iacute;a jquery, por ejemplo, har&iacute;amos lo siguiente:<br /><br />
<pre class="code">$("ul.submenu li").hover(
	function () {
		$(this).addClass("hover");
	},
	function () {
		$(this).removeClass("hover");
	}
);
</pre>
<br /> Como tampoco funciona el selector "&gt;" en IE6, necesitaremos hacer unos cambios en la hoja de estilos: <br /><br />
<pre class="code">ul.menu li.hover ul {
	display: block;
	position: absolute;
	top: 100%;
	left: 0;
}

ul.menu li.hover ul ul {
	display: none;
}

ul.menu ul li.hover ul {
	display: block;
	position: absolute;
	top: 0;
	left: 100%;
}

ul.menu ul li.hover ul ul {
	display: none;
}
</pre>
<br /> Para probar este men&uacute; accede <a href="/blog_files/menu-css/index.htm" target="_blank">aqu&iacute;</a>.<br /> Para descargarte los archivos utilizados haz click <a href="/blog_files/menu-css/menu-css.zip">aqu&iacute;</a>.<br />]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=22</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/menu-desplegable-con-css.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Creando un buscador para tu página usando Yahoo! Query Language</title>
			<link>http://www.imaginanet.com/blog/creando-un-buscador-para-tu-pagina-usando-yahoo-query-language.html</link>
			<guid>http://www.imaginanet.com/blog/creando-un-buscador-para-tu-pagina-usando-yahoo-query-language.html</guid>
			<comments>http://www.imaginanet.com/blog/creando-un-buscador-para-tu-pagina-usando-yahoo-query-language.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Thu, 24 Dec 2009 11:01:31 +0100</pubDate>
					<category><![CDATA[Buscadores]]></category>
					<description><![CDATA[Hace un par de semanas vi un vídeo tutorial en el que se muestra la potencia y la facilidad de uso de Yahoo! Query Language donde creando un código HTML y Javascript muy simple obtiene como respuesta (por cierto una respuesta muy rápida) la búsqueda en los buscadores de Yahoo!, Google y Bing. El vídeo en cuestión es el...]]></description>
			<content:encoded><![CDATA[><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { so-language: zxx } -->
<p style="margin-bottom: 0cm;">Hace un par de semanas vi un <a href="http://ajaxian.com/archives/three-search-engines-one-interface-25-minutes-live-code">vídeo tutorial</a> en el que se muestra la potencia y la facilidad de uso de <a href="http://developer.yahoo.com/yql/">Yahoo! Query Language</a> donde creando un código HTML y Javascript muy simple obtiene como respuesta (por cierto una respuesta muy rápida) la búsqueda en los buscadores de Yahoo!, Google y Bing. El vídeo en cuestión es el siguiente:</p>
<p style="margin-bottom: 0cm;"> </p>
<div>
<object width="400" height="275" data="http://vimeo.com/moogaloop.swf?clip_id=8075850&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" type="application/x-shockwave-flash">
<param name="data" value="http://vimeo.com/moogaloop.swf?clip_id=8075850&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" />
<param name="allowfullscreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=8075850&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" />
</object>
</div>
<p><a href="http://vimeo.com/8075850">Building a search mashup with YQL using Google, Yahoo and Bing - live :)</a> from <a href="http://vimeo.com/user574521">Christian Heilmann</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { so-language: zxx } -->
<p style="margin-bottom: 0cm;">Tras verlo empecé a realizar pruebas con la <a href="http://developer.yahoo.com/yql/console/">consola de YQL</a> para ver que nos permite hacer esta API y realicé la primera consulta:</p>
<pre class="code">select * from search.web(20) where query="PHP";</pre>
Después probé a realizar la misma búsqueda en todos los buscadores:<br />
<pre class="code">select * from query.multi where queries='
  select *  from microsoft.bing.web(20) where query="PHP";
  select *  from search.web(20) where query="PHP";
  select *  from google.search(20) where q="PHP"
'
</pre>
<br />Lo más interesante, es que en la consola nos proporciona <a href="http://query.yahooapis.com/v1/public/yql?q=%09select%20*%20from%20query.multi%20where%20queries%3D'%0A%09%20%20select%20*%20%20from%20microsoft.bing.web(20)%20where%20query%3D%22PHP%22%3B%0A%09%20%20select%20*%20%20from%20search.web(20)%20where%20query%3D%22PHP%22%3B%0A%09%20%20select%20*%20%20from%20google.search(20)%20where%20q%3D%22PHP%22%0A'&format=xml&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys">la dirección para obtener esta consulta</a> y devuelve los datos en formato XML, por lo que hacer una aplicación que realice la llamada y obtenga la respuesta es realmente fácil de realizar.<br /><br />Tras buscar por la documentación no he encontrado ninguna opción de poder filtrar los resultados por país o idioma, por lo que habrá que esperar hasta que añadan esta característica y podamos realizarlas en otros idiomas.<br /><br /> Finalmente, viendo <a href="http://developer.yahoo.com/yql/guide/index.html">la documentación</a> observamos que tiene posibilidades muy variadas como añadir un post a tu blog Wordpress, interactuar con Flickr, con Yahoo! Maps, Amazon o Facebook entre otras, pudiendo usar YQL como API para estos servicios, por lo que es un servicio a tener en cuenta para integrarlo con otro uso que no sea el de realizar búsquedas.<br /><br /> <br />
<p style="margin-bottom: 0cm;"> </p>]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=21</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/creando-un-buscador-para-tu-pagina-usando-yahoo-query-language.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Como usar Google Apps en tu web</title>
			<link>http://www.imaginanet.com/blog/como-usar-google-apps-en-tu-web.html</link>
			<guid>http://www.imaginanet.com/blog/como-usar-google-apps-en-tu-web.html</guid>
			<comments>http://www.imaginanet.com/blog/como-usar-google-apps-en-tu-web.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Thu, 24 Dec 2009 10:41:10 +0100</pubDate>
					<category><![CDATA[Google Apps]]></category>
					<description><![CDATA[Si alguna vez necesitas incluir google apps en tu dominio, aqui tienes una sencilla explicación de como puedes empezar.
1.Regístrate y accede a tu cuenta
En la página  principal de Google Apps, haz clic en "Comparar ediciones y registrarse"  para empezar a utilizar el programa y acceder al panel de  control.Más...]]></description>
			<content:encoded><![CDATA[>Si alguna vez necesitas incluir google apps en tu dominio, aqui tienes una sencilla explicación de como puedes empezar.<br /><br />
<h3 style="font-size: 1.17em;">1.Regístrate y accede a tu cuenta</h3>
En la <a href="http://www.google.com/a/help/intl/en/business/applications.html">página  principal de Google Apps</a>, haz clic en "Comparar ediciones y registrarse"  para empezar a utilizar el programa y acceder al panel de  control.<br /><br /><strong><a href="http://www.google.com/support/a/bin/answer.py?answer=107246">Más  información <br /></a></strong><br />
<h3 style="font-size: 1.17em;">2.Verifica la propiedad del dominio</h3>
Confirma que eres el propietario del dominio con el que te has registrado para  habilitar Google Apps.<br /><br />
<h3 style="font-size: 1.17em;">3.Personaliza Google Apps</h3>
Google Apps permite modificar fácilmente varias configuraciones para aplicarlas  a toda tu organización.<br /><br />
<h3 style="font-size: 1.17em;">4.Crea cuentas de usuario</h3>
En el panel de control, crea tantas cuentas de usuario como necesite tu  organización.<br /><br />
<h3 style="font-size: 1.17em;">5.Migrar datos y activa el correo electrónico</h3>
Configura los registros Mail Exchange (MX) de tu dominio para habilitar la  entrega de correo electrónico.<br /><br />
<h3 style="font-size: 1.17em;">6.Implanta Google Apps</h3>
Ahora que has creado cuentas de usuario y has activado los servicios, ha llegado  el momento de ayudar a tus usuarios para que empiecen a utilizar Google Apps.<br /><br />
<h3 style="font-size: 1.17em;">¿Cómo ver el correo de nuestra cuenta?</h3>
- Podemos usar las funciones de php imap. Aquí va un pequeño ejemplo de como sacar un listado de los últimos 7 mensajes de correo.<br /><br />
<pre class="code php">function fix_text($str)
{
    $subject = '';
    $subject_array = imap_mime_header_decode($str);

    foreach ($subject_array AS $obj)
        $subject .= rtrim($obj->text, "t");

    return $subject;
} 


$mail = imap_open('{imap.gmail.com:993/novalidate-cert/ssl}', 'cuenta de correo', 'contraseña de la cuenta');
$last = imap_num_msg($mail);

echo '<strong><a href="/url_dominio_google/?account_id=cuenta_de_correo" target="_blank">Mensajes de correo ('.$last.') / <span style="color: #e71d02;">Nuevos ('.$nuevos.')</span></a></strong>';

if ($last>7) $ini=($last-7);
else $ini=1;

$nuevos=0;
for ($i=$last;$i>=$ini;$i--){
	$header = imap_header($mail, $i);
	$from=$header->from;
	if (is_array($from)){
	        $de=$from[0]->personal;
	}

	$asunto=fix_text($header->subject);
	$asunto='<span title="'.$asunto.'">'.$asunto."</span>";

	if ($header->Unseen=="U"){
		$de='<strong>'.$de.'</strong>';
		$asunto='<strong>'.$asunto."</strong>";
		$nuevos++;
	}
	echo '<span title="'.$from[0]->personal.'">'.$de.'</span> - '.$asunto.' '.date('d/m', $header->udate);
}

imap_close($mail);<br />
</pre>
En el ejemplo conectamos con la cuenta de correo con la contraseña y obtenemos los últimos 7 mensajes de correo.<br />Luego vamos sacando mensaje a mensaje con el formato html que más no interese.<br />La condición de la linea 32 es para saber si el mensaje ha sido visto por el usuario o todavía no.<br /><br />
<h3 style="font-size: 1.17em;">¿Cómo ver el google calendar?</h3>
Para esta opción hay que tener requerido en nuestro php las librerías de Zend que podemos descargar de la web http://www.zend.com<br />A continuación nos logueamos con nuestro usuario y contraseña de google apps y pedimos la información del tramo de fechas de google calendar que queremos obtener.<br />A continuación tenéis un ejemplo de como obtener los datos de google calendar del mes de enero de 2010<br /> 
<pre class="code php">require_once('Zend/Loader.php');
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');

$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$client = Zend_Gdata_ClientLogin::getHttpClient('usuario google apps', 'contraseña', $service);
$service = new Zend_Gdata_Calendar($client);
$dominioGapps=explode('@','usuario google apps');

echo 'http://www.google.com/calendar/hosted/'.trim($dominioGapps[1]).'/render?account_id='.urlencode('usuario google apps');

$query = $service->newEventQuery();
$query->setUser('id del calendario'); //Tambien se puede poner la opcion 'default' para el calendario común

$query->setVisibility('private');
$query->setProjection('full');
$query->setOrderby('starttime');
//$query->setFutureevents('true');// Retrieve the event list from the calendar server
$query->setStartMin('2010-01-01');
$query->setStartMax('2010-01-30');
try {    
	$eventFeed = $service->getCalendarEventFeed($query);
} catch (Zend_Gdata_App_Exception $e) {
	echo "Error: " . $e->getResponse();
}

foreach ($eventFeed as $event) {
	$valor=$event->when;
	$donde=$event->where;
	$autor=$event->author;
	$categoria=$event->category;
	$idevento=$event->link;
	$diaEvento=$valor[0]->startTime;
	$diaMesEvento = intval(substr($diaEvento,8,2));
	$dias[$diaMesEvento] .= $event->title->text.". Hora: ".substr($diaEvento,11,5)." (".substr($diaEvento,23,6).")n";
	$enlaceEvento[$diaMesEvento]=$idevento[0]->href;
}
</pre>
En este ejemplo obtenemos un array con los eventos que hay por dia]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=20</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/como-usar-google-apps-en-tu-web.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Usando el API de Google Analytics para mejorar nuestra web</title>
			<link>http://www.imaginanet.com/blog/usando-el-api-de-google-analytics-para-mejorar-nuestra-web.html</link>
			<guid>http://www.imaginanet.com/blog/usando-el-api-de-google-analytics-para-mejorar-nuestra-web.html</guid>
			<comments>http://www.imaginanet.com/blog/usando-el-api-de-google-analytics-para-mejorar-nuestra-web.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Wed, 23 Dec 2009 16:11:32 +0100</pubDate>
					<category><![CDATA[Google Analytics]]></category>
					<category><![CDATA[SEO]]></category>
					<description><![CDATA[Desde que Google sacó su herramienta Analytics nos proporcionó una nueva perspectiva gratuita para ver nuestra web desde los ojos de las personas que la visitan permitiéndonos conocer lo que "realmente opinan" los usuarios de tu web.
A primera vista desde el panel de control de Google Analytics, la gran cantidad de opciones y...]]></description>
			<content:encoded><![CDATA[><p>Desde que Google sacó su herramienta <a href="http://www.google.com/analytics/">Analytics</a> nos proporcionó una nueva perspectiva gratuita para ver nuestra web desde los ojos de las personas que la visitan permitiéndonos conocer lo que "realmente opinan" los usuarios de tu web.</p>
<p>A primera vista desde el panel de control de Google Analytics, la gran cantidad de opciones y menús que tenemos resulta hasta confusa para entender realmente que nos están diciendo y más aún para gente inexperta. Así que tras un tiempo trabajando con ella, decidí ponerme manos a la obra para simplificar esta gran herramienta para hacerla un poco más sencilla.</p>
<h3>¿Cómo usar el API?</h3>
<p>En primer lugar, damos por supuesto que tenemos una cuenta de Google Analytics y un sitio web <a href="http://www.google.com/support/googleanalytics/bin/static.py?page=guide.cs&guide=19779&topic=19783">con el código Javascript</a> que nos haga recolectar las estadísticas en nuestra cuenta.</p>
<p>En segundo lugar deberemos elegir unas librerías que nos ayuden a usar el API en función del lenguaje de programación que vayamos a usar. Para ello, podemos encontrar en la <a href="http://code.google.com/intl/es-ES/apis/analytics/docs/gdata/gdataLibraries.html">sección de librerías de Google Analytics</a> una buena cantidad de librerías para diferentes lenguajes (Java, Python, PHP, etc.).</p>
<p>Tras estos dos pasos iniciales, tenemos todo listo para empezar a utilizar el API. Podemos echar un vistazo a la <a href="http://code.google.com/intl/es-ES/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html">documentación del API</a>  y como era de esperar las posibilidades que nos ofrece esta completísima API son muchas.</p>
<p>Lo que más nos interesa es conocer los parámetros con los que podemos utilizarla: <strong>dimensiones</strong> qué es lo que vamos a medir y las <strong>métricas</strong> son en qué unidad lo vamos a medir. Estas dimensiones y métricas las podemos agrupar de la manera que queramos, aunque para obtener unos buenos resultados deberemos hacerlo con sentido y además, podemos hacer el uso de <strong>filtros</strong>, que nos permite filtrar los valores devueltos por una métrica o una dimensión (por ejemplo una dirección web en concreto).</p>
<p>A continuación vamos a hablar de los datos básicos que se desprenden de su uso.</p>
<h3><strong>¿Tiene buen contenido o diseño mi web?</strong></h3>
<p>Tras interpretar los datos que obtenemos, podemos considerar si nuestra web tiene buenos contenidos o no desde dos puntos de vista, globalmente o específicamente para una página determinada.</p>
<p><span style="text-decoration: underline;">Desde el punto de vista global</span>, deberemos prestar atención al grupo de métricas <code>ga:bounces</code> y <code>ga:entrances</code> que nos dirá el tanto por cien de rebote de nuestra web. Este cálculo lo haremos realizando la división de  <code>ga:bounces</code> entre <code>ga:entrances</code> dándonos como resultado el número de cuantas personas abandonan la web tras visitar nuestra página inicial.</p>
<p>Un alto número en el tanto por cien de rebotes nos indica que la página inicial no contiene o no muestra de manera correcta lo que el usuario esperaba encontrar en ella y por tanto vuelve a la página anterior por donde llegó.</p>
<p>Otra valoración que podemos hacer es si estos contenidos globales son interesantes o no para el usuario mediante la métrica <code>ga:timeOnSite</code> que nos proporciona la cantidad de tiempo que estuvo el usuario en nuestra web y la dimensión <code>ga:pageDepth</code>, que nos dice la cantidad media que los usuarios ven cuando entran en nuestra web.</p>
<span style="text-decoration: underline;">Desde el punto de vista específico para una determinada página</span>, si existe un alto número número de rebotes significa que al llegar a esa página es confusa o no tiene interés para el usuario así que deberíamos mejorar los aspectos donde falle. Este cálculo lo realizaremos realizando la división de las dimensiones <code>ga:bounces</code> entre <code>ga:uniquePageviews</code> añadiendo la dimensión <code>ga:pagePath</code> a la consulta.
<h3><strong>¿Son buenas las palabras clave que utilizo para cada página?</strong></h3>
<p>Las palabras claves nos sirven junto al contenido de cada página para describirla de cara a los buscadores. Para ver si las palabras claves que describen nuestras páginas son buenas podemos utilizar las dimensiones <code>ga:source</code> filtrando por <code>ga:pagePath</code>, especificando en esta última la página deseada a comprobar.</p>
<p>Si el resultado que nos devuelve es alto desde los buscadores Google, Yahoo, Bing, etc. significa que de cara a los buscadores las palabras clave describen bien el contenido.</p>
<h3><strong>¿Cuál es el comportamiento de los visitantes de mi web?</strong></h3>
<p>Un valor interesante es el que nos proporciona la dimensión <code>ga:secondPagePath</code>, que nos dice cuál fue la segunda página que visitó el usuario tras ver nuestra web. Ésto nos indica que es lo que más llama la atención en nuestra web pudiendo potenciar otras páginas que deberían tener mejores resultados.</p>
<p>Podemos observar también la navegación que realizan los usuarios para páginas determinadas y ver desde qué página llegaron y a qué página fueron desde ella. En este caso, para saber desde qué página llegaron a otra deberemos usar como parámetros la dimensión <code>ga:previousPagePath</code>,métrica <code>ga:pageviews</code> y el filtro <code>ga:nextPagePath</code> especificando la página objetivo.</p>
<p>Por el contrario, para saber qué página visitaron desde la actual usaremos la dimensión <code>ga:nextPagePath</code>, métrica <code>ga:pageviews</code> y filtro <code>ga:previousPagePath</code> con la página que queremos consultar</p>
<p>Los datos obtenidos nos dirán si la navegación que realiza el usuario es la que esperamos o por el contrario no lo es y por tanto el contenido no le interesa.</p>
<h3><strong>Conclusiones</strong> </h3>
Aunque esta herramienta es muy potente para el marketing web y sólo hemos comentado algunas de las más importantes posibilidades que nos ofrece el API, también nos ofrece muchas más como seguimiento de campañas, comercio electrónico, fidelización de clientes, etc.<br />
<p>Todo estos datos sobre el patrón de comportamiento de los usuarios nos sirve para conseguir un mejor posicionamiento web y por tanto tener más posibilidades de éxito. Estas técnicas <a href="http://www.imaginanet.com/posicionamiento-seo.html">las utilizamos desde Imaginanet</a> para asesorar a nuestros clientes y éstos puedan mejorar sus proyectos para conseguir el éxito deseado.</p>
<p>En próximas entradas, hablaremos de posibilidades más avanzadas que nos ofrece.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { so-language: zxx } -->
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">Desde que Google sacó su herramienta Analytics nos proporcionó una nueva perspectiva para ver nuestra web desde los ojos de las personas que la visitan con un montón de estadísticas de todo tipo. </span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">A primera vista desde el panel de control de Google Analytics, la gran cantidad de opciones y menús que tenemos resulta hasta confusa para entender realmente que nos están diciendo y más aún para gente inexperta. Así que tras un tiempo trabajando con ella, decidí ponerme manos a la obra para simplificar esta gran herramienta para hacerla un poco más sencilla.</span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">En primer lugar eché un vistazo a la documentación del API en la dirección <a href="http://code.google.com/intl/es-ES/apis/analytics/">http://code.google.com/intl/es-ES/apis/analytics/</a></span> <span style="font-family: Verdana,sans-serif;">y como era de esperar las posibilidades que nos ofrece esta completísima API son numerosas. A continuación hablaremos de las conclusiones básicas que podemos obtener con ella, aunque en primer lugar deberemos conocer que estos datos están divididos en dos grupos, dimensiones que es lo que vamos a medir y las métricas, que es en qué unidad lo vamos a medir.</span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">¿Tiene buen contenido o diseño mi web?</span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">Tras interpretar los datos que obtenemos, podemos considerar si nuestra web tiene buenos contenidos o no desde dos puntos de vista, globalmente y específicamente para una página determinada.</span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">Desde el punto de vista global, deberemos prestar atención al grupo de métricas M1. Visitor que nos dirá el tanto por cien de rebote de nuestra web. Este cálculo lo haremos realizando la división de las métricas <code>ga:bounces</code> entre <code>ga:entrances</code> dándonos como resultado el número de cuantas personas abandonan la web tras visitar nuestra página inicial.</span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">Un alto número en el tanto por cien de rebotes nos indica que la página inicial no contiene o no muestra de manera correcta lo que el usuario esperaba encontrar en ella y por tanto se va a otra. </span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">Una vez determinado que el tanto por cien de rebote es lo más bajo posible, podemos estimar si estos contenidos globales son interesantes o no para el usuario mediante la métrica </span><code>ga:timeOnSite</code> que nos proporciona la cantidad de tiempo que estuvo el usuario en nuestra web y la dimensión <span style="font-family: Verdana,sans-serif;"><code>ga:pageDepth</code>, que nos dice la cantidad media que los usuarios ven cuando entran en nuestra web.</span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">Desde el punto de vista específico para una determinada página, si existe un alto número número de rebotes significa que al llegar a esa página es confusa o no tiene interés para el usuario así que deberíamos mejorar los aspectos donde falle.</span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">¿Son buenas las palabras clave que utilizo para cada página?</span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">Las palabras claves nos sirven junto al contenido de cada página para describirla de cara a los buscadores. Para ver si las palabras claves que describen nuestras páginas son buenas podemos utilizar la métrica <code>ga:entrances</code> junto a la dimensión <code>ga:landingPagePath</code> y así indicarnos si hemos conseguido nuevas visitas desde buscadores a una página concreta.</span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">¿Cuál es el comportamiento de los visitantes de mi web?</span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">Un valor interesante es el que nos proporciona la dimensión <code>ga:secondPagePath</code>, que nos dice cuál fue la segunda página que visitó el usuario tras ver nuestra web. Ésto nos indica que es lo que más llama la atención en nuestra web pudiendo potenciar otras páginas que deberían tener mejores resultados.</span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">Podemos observar también la navegación que realizan los usuarios para páginas determinadas y ver desde qué página llegaron y a qué página fueron desde ella. Para ello tenemos que utilizar una gran característica de esta API que son los filtros, que nos permiten obtener una combinación de dimensiones y métras filtrando los resultados para una dimensión o métrica determinada.</span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">En este caso, para saber desde qué página llegaron a otra deberemos usar como parámetros</span></p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">dimensión <code>ga:previousPagePath</code> métrica <code>ga:pageviews</code> </span></p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;"><code>filtro <code>ga:nextPagePath</code> pagina_objetivo.html</code></span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">y para saber qué página visitaron desde la actual</span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;"><code>dimensión <code>ga:nextPagePath</code><br />métrica <code>ga:pageviews</code> </code></span></p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;"><code>filtro <code>ga:previousPagePath%3D~test.html</code></code></span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">Los datos obtenidos nos dirán si la navegación que realiza el usuario es la que esperamos o por el contrario no lo es y por tanto el contenido no le interesa.</span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">Finalmente, debo decir que aunque esta herramienta es muy potente y que sólo hemos comentado algunas de las más importantes posibilidades que nos ofrece el API y que podemos ver todo lo que podemos hacer aquí </span></p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">http://code.google.com/intl/es-ES/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html</span></p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">, nos sirve para conseguir un mejor posicionamiento web y por tanto tener más posibilidades de éxito. Estas técnicas las utilizamos desde Imaginanet para conseguir que nuestros clientes tengan éxito <a href="http://www.imaginanet.com/posicionamiento-seo.html">http://www.imaginanet.com/posicionamiento-seo.html</a></span></p>
<p style="margin-bottom: 0cm;"> </p>
<p style="margin-bottom: 0cm;"><span style="font-family: Verdana,sans-serif;">En próximas entradas, hablaremos de posibilidades más avanzadas que nos ofrece.</span></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=19</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/usando-el-api-de-google-analytics-para-mejorar-nuestra-web.html</feedburner:origLink>
		</item>
				
		<item>
			<title>La vida más fácil con Google Mail (Gmail y Google Apps for your domain)</title>
			<link>http://www.imaginanet.com/blog/la-vida-mas-facil-con-google-mail-gmail-y-google-apps-for-your-domain.html</link>
			<guid>http://www.imaginanet.com/blog/la-vida-mas-facil-con-google-mail-gmail-y-google-apps-for-your-domain.html</guid>
			<comments>http://www.imaginanet.com/blog/la-vida-mas-facil-con-google-mail-gmail-y-google-apps-for-your-domain.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Wed, 16 Dec 2009 11:05:45 +0100</pubDate>
					<category><![CDATA[Google Apps]]></category>
					<description><![CDATA[Acabo de darme cuenta de que en GMail, aparece una novedad en color rojo que dice "&iexcl;Nuevo! Videos de Gmail" y veo que es una campa&ntilde;a que Google est&aacute; haciendo a sus usuarios ense&ntilde;&aacute;ndoles todo lo que pueden hacer con GMail. Podeis verla aqu&iacute;.En los v&iacute;deos se explican las distintas...]]></description>
			<content:encoded><![CDATA[>Acabo de darme cuenta de que en GMail, aparece una novedad en color rojo que dice "&iexcl;Nuevo! Videos de Gmail" y veo que es una campa&ntilde;a que Google est&aacute; haciendo a sus usuarios ense&ntilde;&aacute;ndoles todo lo que pueden hacer con GMail. <a title="Abrir en una ventana nueva" href="http://www.google.es/videosgmail" target="_blank">Podeis verla aqu&iacute;.</a><br /><br />En los v&iacute;deos se explican las distintas maravillas del cliente de correo electr&oacute;nico y del servidor. <br />Valorando todo lo que dicen, realmente es aplicable a Google Apps. Nosotros usamos Google Apps y estamos encantados, pero resulta que somos <a title="Ver servicios de integraci&oacute;n de Google Apps" href="/soluciones-on-line/google-apps.html">integradores de Google Apps</a>&nbsp; - para <a title="Ver soluciones de intranet en las que se puede integrar Google Apps" href="/soluciones-on-line/intranet-extranet/intranet.html">intranets</a>, <a title="Ver soluciones de extranet en las que se puede integrar Google Apps" href="/soluciones-on-line/intranet-extranet/extranet.html">extranets</a>, gestores de contenido, y hasta en <a title="Ver servicios de dise&ntilde;o y programaci&oacute;n de p&aacute;ginas web" href="/diseno-web.html">las p&aacute;ginas web que dise&ntilde;amos y desarrollamos</a> -&nbsp; y los clientes que tambi&eacute;n utilizan Google Apps for your Domain, tambi&eacute;n est&aacute;n muy contentos.<br />Razones que tenemos para ello son las explicadas en esta p&aacute;gina que ha creado Google, pero adem&aacute;s incluimos una serie de ventajas adicionales:<br />- Google Mail. Al poder configurarlo como servidor IMAP, es fant&aacute;stico, te permite sincronizar el correo desde cualquier dispositivo. Cuando leo un email en mi tel&eacute;fono m&oacute;vil, me lo marca como le&iacute;do en el resto de clientes de correo, si env&iacute;o un email, lo veo en la bandeja de enviados de todos mis clientes de correo. Es algo muy c&oacute;modo.<br />- Google Calendar. Permite tener calendarios de empresa para distintas tareas, por ejemplo, podemos tener el calendario de trabajos de dise&ntilde;o web, el cual est&aacute; compartido con dise&ntilde;adores y maquetadores, el calendario de entrega de proyectos que est&aacute; compartido con las personas encargadas de hacer seguimiento de proyectos, ... Adem&aacute;s, con cada cliente compartimos un calendario con los diferentes hitos del proyecto, conforme el proyecto va avanzando, el calendario se actualiza inmediatamente. Y todo sincronizado con el tel&eacute;fono m&oacute;vil, portatil, ...<br />- Google Docs. Qu&eacute; podemos decir de una herramienta ofim&aacute;tica que permite compartir con clientes y compa&ntilde;eros de trabajo hojas de c&aacute;lculo con presupuestos, documentos de texto con el seguimiento o la funcionalidad de un proyecto, etc.<br />- Google Talk. Una herramienta imprescindible en una intranet, permite mantener conversaciones privadas entre usuario y entre distintas sucursales de la empresa, con la gran ventaja de que todo el texto que hemos escrito nos lo env&iacute;a por email a nuestra cuenta de correo y de nuestro compa&ntilde;ero de charlas.<br /><br />...<br /><br />Y lo que cuentan en los v&iacute;deos colgados explican los siguientes temas:<br />- Cadenas de conversaci&oacute;n de Gmail. Aqu&iacute; vemos c&oacute;mo al iniciar un mensaje, las respuestas que este tiene se guardan todas agrupadas de forma que la conversaci&oacute;n est&eacute; toda en el mismo mensaje. Esta utilidad est&aacute; muy bien, aunque a veces genera peque&ntilde;as confusiones, es muy &uacute;til os lo aseguro.<br /> 
<object width="425" height="344" data="http://www.youtube.com/v/2LoeyPlAnvo&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash">
<param name="data" value="http://www.youtube.com/v/2LoeyPlAnvo&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
<param name="src" value="http://www.youtube.com/v/2LoeyPlAnvo&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" />
<param name="allowfullscreen" value="true" />
</object>
<br /><br />- &iquest;No hay conexi&oacute;n a internet? Sin problemas, usando Google Gears podemos trabajar con nuestro Google Mail y cuando tengamos conexi&oacute;n a internet, autom&aacute;ticamente lo detectar&aacute; y recibir&aacute; los mensajes pendientes de recibir, as&iacute; como enviar&aacute; aquellos que est&eacute;n pendientes de env&iacute;o.<br /> 
<object width="425" height="344" data="http://www.youtube.com/v/ymXEr9Zs37w&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash">
<param name="data" value="http://www.youtube.com/v/ymXEr9Zs37w&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
<param name="src" value="http://www.youtube.com/v/ymXEr9Zs37w&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" />
<param name="allowfullscreen" value="true" />
</object>
<br /><br />- AntiSpam. Una aplicaci&oacute;n anti-spam que funciona muy fina.<br /> 
<object width="425" height="344" data="http://www.youtube.com/v/q_CzSr3QL5Y&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash">
<param name="data" value="http://www.youtube.com/v/q_CzSr3QL5Y&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
<param name="src" value="http://www.youtube.com/v/q_CzSr3QL5Y&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" />
<param name="allowfullscreen" value="true" />
</object>
<br /><br />- Chat de video y voz.<br />
<object width="425" height="344" data="http://www.youtube.com/v/Ijy3HMDygzo&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash">
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
<param name="src" value="http://www.youtube.com/v/Ijy3HMDygzo&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" />
<param name="allowfullscreen" value="true" />
</object>]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=18</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/la-vida-mas-facil-con-google-mail-gmail-y-google-apps-for-your-domain.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Texto a voz usando el elemento Audio de HTML5</title>
			<link>http://www.imaginanet.com/blog/texto-a-voz-usando-el-elemento-audio-de-html5.html</link>
			<guid>http://www.imaginanet.com/blog/texto-a-voz-usando-el-elemento-audio-de-html5.html</guid>
			<comments>http://www.imaginanet.com/blog/texto-a-voz-usando-el-elemento-audio-de-html5.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Tue, 15 Dec 2009 11:18:24 +0100</pubDate>
					<category><![CDATA[HTML5]]></category>
					<category><![CDATA[Accesibilidad]]></category>
					<description><![CDATA[Weston Ruter ha creado un mashup que enlaza el soporte de Audio en HTML5 en navegadores modernos (no more Internet Explorer please) con la nueva API de traducción de Google.Hace poco que Google Translate anunció la posibilidad de escuchar traducciones habladas en inglés via texto a voz (TTS - Text To Speech). Buscando en el...]]></description>
			<content:encoded><![CDATA[>Weston Ruter ha creado un mashup que <a title="Abrir en una ventana nueva" href="http://weston.ruter.net/projects/google-tts/" target="_blank">enlaza el soporte de Audio en HTML5</a> en navegadores modernos (no more Internet Explorer please) con la nueva <a title="Abrir en una ventana nueva" href="http://googleblog.blogspot.com/2009/11/new-look-for-google-translate.html" target="_blank">API de traducción de Google</a>.<br /><br />Hace poco que Google Translate anunció la posibilidad de escuchar traducciones habladas en inglés via texto a voz (TTS - Text To Speech). Buscando en el panel de red de Firebug de donde estaban llegando los datos TTS, se ve que el audio está en formato MP3 y se ejecuta con una consulta HTTP GET: http://translate.google.com/translate_tts?tl=en&q=text.<br /><br />Google Translate, advierte de que el servicio sólo está disponible para pequeñas traducciones a inglés, y el servicio web de texto a voz se limita a una cantidad de texto no superior a 100 caracteres.<br /><br />Otra restricción es que el servicio devuelve un error 404 si la petición incluye un Referer en el header (parece ser que el referer debe ser translate.google.com).<br /><br />Según dice Weston Ruter, creó este mashup viendo las limitaciones del web service TTS que sólo puede usarlo Google Translate, para utilizarlo desde cualquier navegador que admita el elemento Audio de HTML5. El mashup web utiliza este último y un atributo rel="noreferrer".<br /><br />Hay otros experimentos de texto a voz, <a title="Abrir en una ventana nueva" href="http://www.clochix.net/post/2009/03/14/Et-en-plus-il-parle" target="_blank">por ejemplo esta página</a>. Ójala que Google haga pública su API de traducción.<br />]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=17</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/texto-a-voz-usando-el-elemento-audio-de-html5.html</feedburner:origLink>
		</item>
				
		<item>
			<title>jQuery ColorPicker. Tres plugins que merece la pena tener en cuenta.</title>
			<link>http://www.imaginanet.com/blog/jquery-colorpicker-tres-plugins-de-jquery-que-merece-la-pena-tener-en-cuenta.html</link>
			<guid>http://www.imaginanet.com/blog/jquery-colorpicker-tres-plugins-de-jquery-que-merece-la-pena-tener-en-cuenta.html</guid>
			<comments>http://www.imaginanet.com/blog/jquery-colorpicker-tres-plugins-de-jquery-que-merece-la-pena-tener-en-cuenta.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Tue, 15 Dec 2009 10:47:35 +0100</pubDate>
					<category><![CDATA[Web 2.0]]></category>
					<category><![CDATA[JavaScript]]></category>
					<category><![CDATA[jQuery]]></category>
					<description><![CDATA[Todos alguna vez, hemos necesitado inclu&iacute;r campos de selecci&oacute;n de color (colorpicker) cuando realizamos zonas de administraci&oacute;n o backOffice.Est&aacute; muy pasado de moda y queda demasiado rudimentario incluir campos de texto donde se introduzca el c&oacute;digo hexadecimal del color deseado, adem&aacute;s,...]]></description>
			<content:encoded><![CDATA[>Todos alguna vez, hemos necesitado inclu&iacute;r campos de selecci&oacute;n de color (colorpicker) cuando realizamos zonas de administraci&oacute;n o backOffice.<br />Est&aacute; muy pasado de moda y queda demasiado rudimentario incluir campos de texto donde se introduzca el c&oacute;digo hexadecimal del color deseado, adem&aacute;s, de esta forma es un poco complicado explicar lo qu&eacute; significa el c&oacute;digo #ff0000. Si queremos hacer las cosas f&aacute;ciles de usar, y proporcionar al usuario algo f&aacute;cil e intuitivo, hay que incluir una aplicaci&oacute;n de selecci&oacute;n de color desde donde el usuario seleccione el color deseado de forma visual.<br /><br />En este art&iacute;culo mencionamos tres plugins de jQuery para la inclusi&oacute;n de un colorPicker en campos de formularios.<br /><br /><a title="Abrir en una ventana nueva" href="http://acko.net/dev/farbtastic" target="_blank">Farbtastic</a> est&aacute; escrito por Steven Writtens con licencia GPL. Si quieres m&aacute;s informaci&oacute;n sobre el plugin, <a title="Abrir en una ventana nueva" href="http://acko.net/dev/farbtastic" target="_blank">pulsa aqu&iacute;</a>. Es muy f&aacute;cil de incluir:<br />1. Incluir los archivos javaScript y CSS en el HTML de tu p&aacute;gina web.<br />
<pre class="code xml">
  <script src="/imaginanet/farbtastic.js" type="text/javascript"></script>
  <link rel="stylesheet" href="farbtastic.css" type="text/css" />
</pre>
<br />2. A&ntilde;adir un elemento que sea el contenedor del gr&aacute;fico y el campo de texto, y asignarles un identificador a cada uno de ellos.<br />
<pre class="code xml"><form>
  <input id="color" name="color" type="text" value="#123456" />
</form>
<div id="colorpicker"></div>
</pre>
3. A&ntilde;adir al evento ready() un controlador que inicializa el color picker y lo enlaza con el campo de texto.<br />
<pre class="code xml">
&lt;script type="text/javascript"&gt;
  $(document).ready(function() {
    $('#colorpicker').farbtastic('#color');
  });
&lt;/script&gt;
</pre>
<a title="Abrir en una ventana nueva" href="http://www.eyecon.ro/colorpicker/" target="_blank">ColorPicker</a>, est&aacute; programado por Stefan Petre. Con dos tipos de licencia, MIT y GPL. Puedes ver su p&aacute;gina web <a title="Abrir en una ventana nueva" href="http://www.eyecon.ro/colorpicker/" target="_blank">pulsando aqu&iacute;</a>.<br />Si quieres ver la gu&iacute;a r&aacute;pida de implementaci&oacute;n, pulsa aqu&iacute;. La inclusi&oacute;n en tu p&aacute;gina web es muy r&aacute;pida, cargas los archivos javaScript y CSS necesarios, creas un campo de texto que sea el que incluya el colorPicker y le asignas un identificador, a continuaci&oacute;n, en el evento ready(), lo inicializamos asign&aacute;ndoselo al identificador del campo creado.<br />
<pre class="code js">$('idCampoDeTexto').ColorPicker();
</pre>
Si queremos activarlo con opciones personalizadas:<br />
<pre class="code js">$('idCampoDeTexto').ColorPicker({option1:val1,opt2:val2,...});
</pre>
<br /><a title="Abrir en una ventana nueva" href="http://www.digitalmagicpro.com/jPicker/" target="_blank">jPicker</a> es una migraci&oacute;n del <a title="Abrir en una ventana nueva" href="http://johndyer.name/post/2007/09/PhotoShop-like-JavaScript-Color-Picker.aspx" target="_blank">plugin escrito para Prototype por John Dyers</a> (fant&aacute;stico plugin). Puedes ver m&aacute;s informaci&oacute;n sobre el plugin en la <a title="Abrir en una ventana nueva" href="http://www.digitalmagicpro.com/jPicker/" target="_blank">p&aacute;gina de jPicker</a>.<br /><br /><br />]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=16</wfw:commentRss>
			<slash:comments>1</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/jquery-colorpicker-tres-plugins-de-jquery-que-merece-la-pena-tener-en-cuenta.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Rendimiento de las URIs con datos</title>
			<link>http://www.imaginanet.com/blog/rendimiento-de-las-uris-con-datos.html</link>
			<guid>http://www.imaginanet.com/blog/rendimiento-de-las-uris-con-datos.html</guid>
			<comments>http://www.imaginanet.com/blog/rendimiento-de-las-uris-con-datos.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Mon, 14 Dec 2009 11:55:47 +0100</pubDate>
					<category><![CDATA[JavaScript]]></category>
					<category><![CDATA[CSS]]></category>
					<category><![CDATA[Navegadores]]></category>
					<description><![CDATA[En el blog de Ravelrumba, han hecho un peque&ntilde;o experimento con URIs de datos y su rendimiento en la carga de una p&aacute;gina web. En el estudio s&oacute;lo se ha utilizado Firefox 3.5 con la cach&eacute; vac&iacute;a.Los resultados no son interesantes por las respuestas que nos proporcionan, sino por las preguntas que...]]></description>
			<content:encoded><![CDATA[>En el <a title="Abrir en una ventana nueva" href="http://www.ravelrumba.com/blog/data-uris-for-css-images-more-tests-more-questions/" target="_blank">blog de Ravelrumba</a>, han hecho un peque&ntilde;o experimento con URIs de datos y su rendimiento en la carga de una p&aacute;gina web. En el estudio s&oacute;lo se ha utilizado Firefox 3.5 con la cach&eacute; vac&iacute;a.<br /><br />Los resultados no son interesantes por las respuestas que nos proporcionan, sino por las preguntas que hacen aparecer al respecto.<br /><br />En el experimento se han usado 31 im&aacute;genes y se han convertido a data URIs con <a title="Abrir en una ventana nueva" href="http://github.com/nzakas/cssembed" target="_blank">CSSEmbed</a>. En un caso adicional, se ha usado <a title="Abrir en una ventana nueva" href="http://duris.ru/" target="_blank">DURIS</a> para separar todas las URIs de datos en un archivo CSS aparte, as&iacute;, la etiqueta &lt;head&gt; se queda mucho m&aacute;s peque&ntilde;a y as&iacute;, carga m&aacute;s r&aacute;pido.<br /><br />Los tres escenarios planteados, llevan a un rendimiento muy parecido (usando HTTPWatch, los tiempos de carga son 1,35 s, 1,13 s y 1,13 s), viendo que los escenarios con data URI son un poco mejores. Es m&aacute;s interesante ver que un usuario que deja un comentario desde Sur&aacute;frica proporciona unos resultados bastante distintos: 4,04 s, 1,44 s, 1,92 s. En este caso, el retardo que existe para cargar 31 im&aacute;genes, puede conllevar estos tiempos de carga.<br /><br />Otro factor importante es la velocidad que percibe el usuario, al fin y al cabo, lo que m&aacute;s tiene que ver con el rendimiento. Los dos escenarios funcionan con la misma velocidad percibida, el segundo de ellos parece ser mejor ya que las im&aacute;genes se cargan en una hoja de estilos al final de la p&aacute;gina, despu&eacute;s de haberse cargado un script.<br /><br />El estudio saca a la luz preguntas sobre la carga de URIs con datos. Otro usuario del web, comenta que ha enviado un gr&aacute;fico que muestra como las URIs a im&aacute;genes tardan m&aacute;s en cargar que las im&aacute;genes descargadas de una forma convencional. Este es el tipo de cosas que ser&iacute;a bueno investigar.<br /><br />En el mismo blog se puede ver un estudio sobre el <a title="Abrir en una ventana nueva" href="http://www.ravelrumba.com/blog/a-look-at-how-browsers-download-and-render-css-background-images/" target="_blank">rendimiento de las im&aacute;genes de fondo</a> en distintos navegadores.]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=14</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/rendimiento-de-las-uris-con-datos.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Google: más búsquedas en tiempo real.</title>
			<link>http://www.imaginanet.com/blog/google-mas-busquedas-en-tiempo-real.html</link>
			<guid>http://www.imaginanet.com/blog/google-mas-busquedas-en-tiempo-real.html</guid>
			<comments>http://www.imaginanet.com/blog/google-mas-busquedas-en-tiempo-real.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Mon, 14 Dec 2009 11:22:11 +0100</pubDate>
					<category><![CDATA[Google]]></category>
					<category><![CDATA[Buscadores]]></category>
					<category><![CDATA[Web 2.0]]></category>
					<description><![CDATA[En abril de este año, Google empezó a mostrar resultados de búsquedas en Twitter en tiempo real y así ver lo que dice la gente en el mismo momento.Ahora, los usuarios podrán ver que en la parte superior de una búsqueda de resultados y siempre que tenga sentido para la búsqueda, actualizaciones en direto de los contenidos...]]></description>
			<content:encoded><![CDATA[>En abril de este año, Google empezó a mostrar resultados de búsquedas en Twitter en tiempo real y así ver lo que dice la gente en el mismo momento.<br />Ahora, los usuarios podrán ver que en la parte superior de una búsqueda de resultados y siempre que tenga sentido para la búsqueda, actualizaciones en direto de los contenidos que la gente escribe en Twitter, FriendFeed, Facebook, MySpace, FriendFeed, Jaiku e Identi.ca.<br /><br />Además, incluirá los artículos que se hayan rastreado para este tema en los medios que rastrea <a title="Abrir en una ventana nueva" href="http://news.google.com/" target="_blank">Google News</a> o el <a title="Abrir en una ventana nueva" href="http://blogsearch.google.com/" target="_blank">buscador de blogs de Google</a>.<br /><br />En <a title="Abrir en una ventana nueva" href="http://www.google.com/trends" target="_blank">Google Trends</a> se ha incluído también esta opción para ver estadísticas de las palabras que más se consultan en el buscador en tiempo real.<br /><br />En el video siguiente se ve como una búsqueda se va llenando de comentarios de Twitter que van dejando los usuarios sobre el tema:<br /><br /> 
<object width="425" height="344" data="http://www.youtube.com/v/WRkYmx4A9Do&color1=0xb1b1b1&color2=0xcfcfcf&hl=en_US&feature=player_embedded&fs=1" type="application/x-shockwave-flash">
<param name="data" value="http://www.youtube.com/v/WRkYmx4A9Do&color1=0xb1b1b1&color2=0xcfcfcf&hl=en_US&feature=player_embedded&fs=1" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
<param name="src" value="http://www.youtube.com/v/WRkYmx4A9Do&color1=0xb1b1b1&color2=0xcfcfcf&hl=en_US&feature=player_embedded&fs=1" />
<param name="allowfullscreen" value="true" />
</object>]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=12</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/google-mas-busquedas-en-tiempo-real.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Google Goggles. Usa imágenes para buscar en la web.</title>
			<link>http://www.imaginanet.com/blog/google-goggles--usa-imagenes-para-buscar-en-la-web-.html</link>
			<guid>http://www.imaginanet.com/blog/google-goggles--usa-imagenes-para-buscar-en-la-web-.html</guid>
			<comments>http://www.imaginanet.com/blog/google-goggles--usa-imagenes-para-buscar-en-la-web-.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Sat, 12 Dec 2009 17:29:13 +0100</pubDate>
					<category><![CDATA[Google]]></category>
					<category><![CDATA[Buscadores]]></category>
					<description><![CDATA[Como una imagen vale más que mil palabras, en Google acaban de lanzar un servicio de búsqueda a partir de una foto. Sácale una foto y te devolverá resultados relacionados con el tema.Sólo funciona en dispositivos con Android y reconoce lugares, obras de arte, logotipos… incluso, si estás en un lugar destacado, sólo has de...]]></description>
			<content:encoded><![CDATA[>Como una imagen vale más que mil palabras, en Google acaban de lanzar un <a title="Abrir en ventana nueva. Google goggles." href="http://www.google.com/mobile/goggles/" target="_blank">servicio de búsqueda a partir de una foto</a>. Sácale una foto y te devolverá resultados relacionados con el tema.<br />Sólo funciona en dispositivos con Android y reconoce lugares, obras de arte, logotipos… incluso, si estás en un lugar destacado, sólo has de activar el GPS, mandar la localización y se te devolverá la información sobre el lugar donde te encuentres..<br /><br />    
<object width="560" height="340" data="http://www.youtube.com/v/Hhgfz0zPmH4&hl=es_ES&fs=1&rel=0" type="application/x-shockwave-flash">
<param name="data" value="http://www.youtube.com/v/Hhgfz0zPmH4&hl=es_ES&fs=1&rel=0" />
<param name="allowFullScreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="src" value="http://www.youtube.com/v/Hhgfz0zPmH4&hl=es_ES&fs=1&rel=0" />
<param name="allowfullscreen" value="true" />
</object>]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=11</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/google-goggles--usa-imagenes-para-buscar-en-la-web-.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Búsquedas personalizadas para todos los usuarios.</title>
			<link>http://www.imaginanet.com/blog/busquedas-personalizadas-para-todos-los-usuarios-.html</link>
			<guid>http://www.imaginanet.com/blog/busquedas-personalizadas-para-todos-los-usuarios-.html</guid>
			<comments>http://www.imaginanet.com/blog/busquedas-personalizadas-para-todos-los-usuarios-.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Mon, 14 Dec 2009 11:34:54 +0100</pubDate>
					<category><![CDATA[Google]]></category>
					<category><![CDATA[SEO]]></category>
					<category><![CDATA[Web 2.0]]></category>
					<description><![CDATA[Hace unos a&ntilde;os, nac&iacute;an las b&uacute;squedas personalizadas de Google, en donde se comenzaba a modificar los resultados en funci&oacute;n de los intereses del usuario. Un a&ntilde;o m&aacute;s tarde, se comenzaba a almacenar y a mostrar el historial de b&uacute;squedas de cada usuario que se hab&iacute;a registrado...]]></description>
			<content:encoded><![CDATA[><p>Hace unos a&ntilde;os, nac&iacute;an las b&uacute;squedas personalizadas de Google, en donde se comenzaba a modificar los resultados en funci&oacute;n de los intereses del usuario. Un a&ntilde;o m&aacute;s tarde, se comenzaba a almacenar y a mostrar el historial de b&uacute;squedas de cada usuario que se hab&iacute;a registrado previamente con una cuenta de usuario de Google.</p>
<p>El buscador ven&iacute;a almacenando, por cuestiones t&eacute;cnicas, las b&uacute;squedas que se realizan desde cada una de las direcciones IP que se conectan al servicio. Sin embargo, la compa&ntilde;&iacute;a ha anunciado oficialmente que el historial de b&uacute;squedas se va a almacenar durante 6 meses para todos los usuarios, y no se relacionar&aacute; con nuestra direcci&oacute;n IP, sino con una 'cookie' de nuestro navegador web, incluso cuando el usuario no dispone de cuenta en Google.</p>
<p>Con esta 'cookie' (que se puede borrar en cualquier momento), Google va a distinguirnos no ya por nuestra direcci&oacute;n IP, sino por el navegador web que utilicemos. De esta manera, aunque nuestro proveedor de Internet nos cambie la direcci&oacute;n IP, o aunque estemos con nuestro port&aacute;til en otro pa&iacute;s, Google va a saber durante 180 d&iacute;as las b&uacute;squedas que hemos realizado.</p>
<p>El objetivo es, seg&uacute;n <a title="Abrir en una ventana nueva" href="http://googleblog.blogspot.com/2009/12/personalized-search-for-everyone.html" target="_blank">este post oficial</a> personalizar nuestras b&uacute;squedas, y ofrecernos los resultados m&aacute;s adecuados a nuestros gustos y preferencias. As&iacute;, por ejemplo, si cuando buscamos 'barcelona' siempre acabamos haciendo click en las p&aacute;ginas de hoteles, la siguiente vez que lo consultemos quiz&aacute; veamos sitios web de hoteles en las primeras posiciones.</p>
<p>Esta nueva caracter&iacute;stica del buscador nos trae consigo de nuevo la duda acerca de si Google va a tener en cuenta estos clicks para modificar los resultados tambi&eacute;n del resto de usuarios y cambiar el posicionamiento general de las b&uacute;squedas. Pero tambi&eacute;n traer&aacute; consigo una importante pol&eacute;mica sobre la privacidad de todos nosotros, puesto que desde ahora, en caso de que queramos cuidar un poco m&aacute;s los datos expuestos ante Google, habr&aacute; que preocuparse de eliminar la 'cookie' de 'google.com' (o el dominio de la versi&oacute;n local que utilicemos).</p>
<p>Para borrar esta 'cookie' existen varias soluciones, para Firefox, est&aacute;n las extensiones '<a title="Abrir en una ventana nueva" href="https://addons.mozilla.org/en-US/firefox/addon/10354" target="_blank">Google-anon</a>' o '<a title="Abrir en una ventana nueva" href="https://addons.mozilla.org/en-US/firefox/addon/1243" target="_blank">Cookie Manager</a>', <a title="Abrir en una ventana nueva" href="http://support.microsoft.com/kb/278835" target="_blank">este link</a> sobre las cookies en MS IExplorer, o <a title="Abrir en una ventana nueva" href="http://www.aboutcookies.org/Default.aspx?page=2" target="_blank">esta p&aacute;gina</a> m&aacute;s gen&eacute;rica sobre 'cookies'.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=13</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/busquedas-personalizadas-para-todos-los-usuarios-.html</feedburner:origLink>
		</item>
				
		<item>
			<title>HighCharts. Un API de gráficos bastante buena.</title>
			<link>http://www.imaginanet.com/blog/highcharts-un-api-de-graficos-bastante-buena.html</link>
			<guid>http://www.imaginanet.com/blog/highcharts-un-api-de-graficos-bastante-buena.html</guid>
			<comments>http://www.imaginanet.com/blog/highcharts-un-api-de-graficos-bastante-buena.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Mon, 14 Dec 2009 15:46:27 +0100</pubDate>
					<category><![CDATA[JavaScript]]></category>
					<category><![CDATA[jQuery]]></category>
					<description><![CDATA[Todos queremos mejores librer&iacute;as javascript de gr&aacute;ficos. Dojo tiene una buena opci&oacute;n que es Protovis, y por ah&iacute; hay muchas librer&iacute;as (deja un comentario con tu favorita).La &uacute;ltima en aparecer es HighCharts que usa tanto jQuery como MooTools para las tareas JavaScript m&aacute;s frecuentes....]]></description>
			<content:encoded><![CDATA[>Todos queremos mejores librer&iacute;as javascript de gr&aacute;ficos. Dojo tiene una buena opci&oacute;n que es <a title="Abrir en una ventana nueva" href="http://vis.stanford.edu/protovis/" target="_blank">Protovis</a>, y por ah&iacute; hay muchas librer&iacute;as (deja un comentario con tu favorita).<br />La &uacute;ltima en aparecer es <a title="Abrir en una ventana nueva" href="http://highcharts.com/" target="_blank">HighCharts</a> que usa tanto jQuery como MooTools para las tareas JavaScript m&aacute;s frecuentes. Adem&aacute;s, Internet Explorer necesita ExCanvas que emula al elemento Canvas.<br />Un ejemplo de gr&aacute;fica:<br />
<pre class="code js">var chart1 = new Highcharts.Chart({
         chart: {
            renderTo: 'chart-container-1',
            defaultSeriesType: 'bar'
         },
         title: {
            text: 'Fruit Consumption'
         },
         xAxis: {
            categories: ['Apples', 'Bananas', 'Oranges]
         },
         yAxis: {
            title: {
               text: 'Fruit eaten'
            }
         },
         series: [{
            name: 'Jane',
            data: [1, 0, 4]
         }, {
            name: 'John',
            data: [5, 7, 3]
         }]
      });
</pre>
<br />Devuelve algo as&iacute;:<br /><br /><img title="HighCharts ejemplo" src="/blog_files/images/highcharts.png" alt="HighCharts ejemplo" />]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=15</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/highcharts-un-api-de-graficos-bastante-buena.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Google Analytics desbloquea la carga de webs lanzando el modo asíncrono (Async Mode)</title>
			<link>http://www.imaginanet.com/blog/google-analytics-desbloquea-la-carga-de-webs-lanzando-el-modo-asincrono-async-mode.html</link>
			<guid>http://www.imaginanet.com/blog/google-analytics-desbloquea-la-carga-de-webs-lanzando-el-modo-asincrono-async-mode.html</guid>
			<comments>http://www.imaginanet.com/blog/google-analytics-desbloquea-la-carga-de-webs-lanzando-el-modo-asincrono-async-mode.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Wed,  2 Dec 2009 16:10:25 +0100</pubDate>
					<category><![CDATA[JavaScript]]></category>
					<category><![CDATA[Google Analytics]]></category>
					<description><![CDATA[Gran noticia la que acabo de leer que Google Analytics lanza un modo de seguimiento as&iacute;ncrono "Google analytics launches Asynchronous Tracking" (click aqu&iacute; para ver art&iacute;culo original).Al fin nuestro navegador no se va a enganchar cargando el c&oacute;digo JavaScript.El sistema har&aacute; que las webs...]]></description>
			<content:encoded><![CDATA[>Gran noticia la que acabo de leer que Google Analytics lanza un modo de seguimiento as&iacute;ncrono "<em>Google analytics launches Asynchronous Tracking</em>" (<a title="Abrir en una ventana nueva" href="http://googlecode.blogspot.com/2009/12/google-analytics-launches-asynchronous.html" target="_blank">click aqu&iacute; para ver art&iacute;culo original</a>).<br /><br />Al fin nuestro navegador no se va a enganchar cargando el c&oacute;digo JavaScript.<br /><br /><strong>El sistema har&aacute; que las webs funcionen m&aacute;s r&aacute;pido:</strong><br />El mayor problema de cargar archivos JavaScript es que bloquea el renderizado de la p&aacute;gina web y la descarga de otros recursos. En el nuevo modelo as&iacute;ncrono de Google Analytics, se utiliza el elemento Script del DOM.<br />Google Analytics, con su archivo ga.js, es un ejemplo perfecto de un script que debiera cargarse de forma as&iacute;ncrona, ya que no a&ntilde;ade contenido alguno a la p&aacute;gina, con lo cual, ser&iacute;a ideal cargarlo sin bloquear las im&aacute;genes y hojas de estilo que har&aacute;n que los usuarios vean lo que realmente han venido a ver: nuestra p&aacute;gina web.<br /><strong><br />Se ha mejorado la estabilidad:</strong><br />&iquest;Qu&eacute; pasa si un script tarda mucho tiempo en cargarse, o falla su carga? El usuario se encuentra ante una p&aacute;gina en blanco, ya que los scripts bloquean el renderizado de la web. Aunque Google Analytics tiene una infraestructura muy grande tras &eacute;l, cualquier recurso, sobre todo de terceros, tiene que a&ntilde;adirse con cautela. Es una gran noticia que GA est&aacute; proporcionando patrones que permite el renderizado de las webs mientras se carga ga.js.&nbsp;<br /><br /><strong>&iquest;Qu&eacute; hay que hacer para incluir ga.js en modo as&iacute;ncrono?</strong> cambia tu script para que sea de la forma siguiente:
<pre class="code js">var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq.push(['_trackPageview']);
(function() {
   var ga = document.createElement('script');
   ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
   ga.setAttribute('async', 'true');
   document.documentElement.firstChild.appendChild(ga);
})();
</pre>
<br /> 
<ul>
<li>L&oacute;gicamente, tienes que sustituir "UA-XXXXX-X" por tu ID.</li>
<li>Al cargarse ga.js de forma as&iacute;ncrona, tiene que existir una forma para que algunas funciones de GA se puedan utilizar cuando el c&oacute;digo se termina de cargar. Esto se hace introduciendo comandos en la cola del objeto de Google Analytics, _gaq.</li>
<li>Una vez que todos los comandos callback se han puesto en cola, se carga el script ga.js. Esto se empaqueta en una funci&oacute;n as&iacute;ncrona para as&iacute; evitar conflictos de namespace.</li>
<li>Se crea un elemento "script" y su fuente "src" se pone al valor correcto de la URL de ga.js. Mirando m&aacute;s alla, en el soporte que se incluye en HTML5 a los scripts as&iacute;ncronos, el atributo "async" se pone a "true", muy bueno! La ventaja m&aacute;s importante es que le dice al navegador que los siguientes scripts se pueden ejecutar de forma inmediata (no tienen que esperar a que se carge ga.js). La &uacute;ltima l&iacute;nea a&ntilde;ade el elemento script al DOM. Esto es lo que ejecuta la descarga de ga.js. En muchos c&oacute;digos se hace document.getElementsByTagName(&rdquo;head&rdquo;)[0].appendChild, pero esto falla si el documento no tiene elemento head. Esta forma de hacerlo, es m&aacute;s robusta.</li>
</ul>
<br />
<p>&nbsp;</p>]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=9</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/google-analytics-desbloquea-la-carga-de-webs-lanzando-el-modo-asincrono-async-mode.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Galería de fotos polaroid, sólo usando CSS 3</title>
			<link>http://www.imaginanet.com/blog/galeria-de-fotos-polaroid--solo-usando-css-3.html</link>
			<guid>http://www.imaginanet.com/blog/galeria-de-fotos-polaroid--solo-usando-css-3.html</guid>
			<comments>http://www.imaginanet.com/blog/galeria-de-fotos-polaroid--solo-usando-css-3.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Wed,  2 Dec 2009 10:55:49 +0100</pubDate>
					<category><![CDATA[Web 2.0]]></category>
					<category><![CDATA[JavaScript]]></category>
					<category><![CDATA[CSS]]></category>
					<category><![CDATA[jQuery]]></category>
					<description><![CDATA[Viendo la galer&iacute;a de fotos con estilo polaroid que han creado en el blog de Tutorialzine, la cual utiliza jQuery y un m&iacute;nimo CSS3, que es una sombra "box-shadow" y una rotaci&oacute;n que utiliza "-webkit-transform". As&iacute; hemos creado una galer&iacute;a de fotos similar pero que &uacute;nicamente utiliza CSS 3,...]]></description>
			<content:encoded><![CDATA[>Viendo la galer&iacute;a de fotos con estilo polaroid que han creado en el <a title="Abrir en ventana nueva" href="http://tutorialzine.com/2009/11/hovering-gallery-css3-jquery/" target="_blank">blog de Tutorialzine</a>, la cual utiliza jQuery y un m&iacute;nimo CSS3, que es una sombra "box-shadow" y una rotaci&oacute;n que utiliza "-webkit-transform". <br />As&iacute; hemos creado una galer&iacute;a de fotos similar pero que &uacute;nicamente utiliza CSS 3, pero aplicando las diferentes opciones que permite este.<br /><br />El c&oacute;digo XHTML creado, &uacute;nicamente consta de una lista de im&aacute;genes (ul &gt; li) con su respectivo pie de imagen:
<pre class="code"><ul class="thumb">
    <li>
        <img src="/imaginanet/images/photo_1.jpg" alt="" width="480" height="340" />Globos
    </li>
    <li>
        <img src="/imaginanet/images/photo_2.jpg" alt="" width="480" height="332" />Coche
    </li>
    <li>
        <img src="/imaginanet/images/photo_3.jpg" alt="" width="480" height="321" />Niebla
    </li>
    <li>
        <img src="/imaginanet/images/photo_4.jpg" alt="" width="480" height="315" />Molino de viento
    </li>
    <li>
        <img src="/imaginanet/images/photo_5.jpg" alt="" width="480" height="324" />Bosque
    </li>
</ul>
</pre>
La hoja de estilos, la teneis <a title="Ver hoja de estilo en ventana nueva" href="/blog_files/css/galeria-polaroid.css" target="_blank">aqu&iacute;</a>, en ella, lo m&aacute;s destacable es:<br />Por un lado, tenemos el contenedor de todas las im&aacute;genes (UL), al cual le aplicamos un gradiente de fondo utilizando "<em>-webkit-gradient</em>" en la propiedad "<em>background</em>" del elemento. Aplicamos un gradiente circular o radial con una posici&oacute;n y tama&ntilde;o, que va de un gris m&aacute;s oscuro, a un gris m&aacute;s claro.
<pre class="code css">ul.thumb {
   position: relative;
   list-style: none;
   background: -webkit-gradient(radial, 45 45, 50, 50 10, 640, from(#555), to(#222)) !important;
   background: #666;
}
</pre>
<br />Tambi&eacute;n tenemos el posicionamiento y la rotaci&oacute;n que damos a cada LI, con su respectiva imagen y texto. Posicionamos el elemento centrado tanto en altura como en anchura, lo redimensionamos y le aplicamos sombra, adem&aacute;s, es importante tener en cuenta que este elemento tiene un efecto "ease-in-out" en el "-webkit-transition" con una duraci&oacute;n de 3 segundos, es el que hace que en WebKit, se amplien y reduzcan con el efecto de zoom . Adem&aacute;s, con el selector "<em>:nth-child()</em>", cambiamos la posici&oacute;n y giramos cada imagen, adem&aacute;s de aplicar a cada imagen una sombra.<br />
<pre class="code css">ul.thumb li {
   position: absolute;
   top: 50%;
   left: 50%;
   padding: 6px 6px 24px 6px;
   background: #FFF;
   width: 150px;
   height: 130px;
   -moz-box-shadow:1px 1px 6px #222;
   -webkit-box-shadow:1px 1px 6px #222;
   box-shadow:1px 1px 6px #222;
   -webkit-transition: all 3s ease-in-out;
   z-index: 0;
}
ul.thumb li img {
   width: 100%;
   height: 100%;
}
ul.thumb li:nth-child(1) {
   margin-top: -130px;
   margin-left: -130px;
   -moz-transform: rotate(30deg);
   -webkit-transform: rotate(30deg);
   transform: rotate(30deg);
}
</pre>
<br />Para terminar, tambi&eacute;n es muy destacable el estilo que aplicamos al estado ":hover" de cada imagen, en este, utilizamos "-webkit-transform" para cambiar la rotaci&oacute;n y poner la imagen completamente horizontal:
<pre class="code css">ul.thumb li:hover{
   font-size: 1.3em;
   z-index: 10;
   width: 480px;
   height: 322px;
   margin-top: -151px;
   margin-left: -240px;
   -moz-box-shadow:8px 8px 24px #111;
   -webkit-box-shadow:8px 8px 24px #111;
   box-shadow:8px 8px 24px #111;
   -moz-transform: rotate(0deg);
   -webkit-transform: rotate(0deg);
   transform: rotate(0deg);
}
</pre>
<br />La galer&iacute;a de fotos <a title="Ver demo de galer&iacute;a" href="/blog_files/galeria-polaroid.htm" target="_blank">podeis visualizarla aqu&iacute;</a> y es &uacute;nicamente funcional desde FireFox 3.5 (no veremos efecto de ampliaci&oacute;n alguno) y desde navegadores utilizando &uacute;ltimas versiones de WebKit, como por ejemplo Safari y Google Chrome (en estos, el efecto de ampliaci&oacute;n funciona gracias a -webkit-transition).<br /><br />La raz&oacute;n por la que no funcionar&aacute; en Internet Explorer (cualquier versi&oacute;n), es que este, ni en su &uacute;ltima versi&oacute;n cumple con el estandar CSS 3, por ejemplo, el selector :nth-child(N) no es reconocido por IE.<br />]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=7</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/galeria-de-fotos-polaroid--solo-usando-css-3.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Lo más buscado durante 2009</title>
			<link>http://www.imaginanet.com/blog/lo-mas-buscado-durante-2009.html</link>
			<guid>http://www.imaginanet.com/blog/lo-mas-buscado-durante-2009.html</guid>
			<comments>http://www.imaginanet.com/blog/lo-mas-buscado-durante-2009.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Wed,  2 Dec 2009 17:39:31 +0100</pubDate>
					<category><![CDATA[Buscadores]]></category>
					<category><![CDATA[Google]]></category>
					<description><![CDATA[Se ha publicado la informaci&oacute;n con las palabras que m&aacute;s se han buscado o consultado en los motores de b&uacute;squeda m&aacute;s populares.Como seguro que a cada uno le interesa una cosa distinta, os dejo una lista de enlaces a cada uno de los casos:AOLAskBingGoogle Espa&ntilde;aGoogleYahoo!Yahoo! Respuestas]]></description>
			<content:encoded><![CDATA[>Se ha publicado la informaci&oacute;n con las palabras que m&aacute;s se han buscado o consultado en los motores de b&uacute;squeda m&aacute;s populares.<br /><br />Como seguro que a cada uno le interesa una cosa distinta, os dejo una lista de enlaces a cada uno de los casos:<br /><a title="Abrir en una ventana nueva" href="http://hot.aol.com/" target="_blank">AOL</a><br /><a title="Abrir en una ventana nueva" href="http://sp.ask.com/2009/topquestions" target="_blank">Ask</a><br /><a title="Abrir en una ventana nueva" href="http://www.bing.com/community/blogs/search/archive/2009/11/30/top-bing-searches-in-2009.aspx" target="_blank">Bing</a><br /><a title="Abrir en una ventana nueva" href="http://www.google.com/intl/es_es/press/zeitgeist2009/index.html" target="_blank">Google Espa&ntilde;a</a><br /><a title="Abrir en una ventana nueva" href="http://www.google.com/intl/en_us/press/zeitgeist2009/index.html" target="_blank">Google</a><br /><a title="Abrir en una ventana nueva" href="http://yearinreview.yahoo.com/" target="_blank">Yahoo!</a><br /><a title="Abrir en una ventana nueva" href="http://yanswersblog.com/index.php/archives/2009/11/30/download-the-2009-answers-highlights-book/" target="_blank">Yahoo! Respuestas</a><br />]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=10</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/lo-mas-buscado-durante-2009.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Aumenta la longitud de búsqueda. Sobre todo en Google.</title>
			<link>http://www.imaginanet.com/blog/aumenta-la-longitud-de-busqueda--sobre-todo-en-google-.html</link>
			<guid>http://www.imaginanet.com/blog/aumenta-la-longitud-de-busqueda--sobre-todo-en-google-.html</guid>
			<comments>http://www.imaginanet.com/blog/aumenta-la-longitud-de-busqueda--sobre-todo-en-google-.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Wed,  2 Dec 2009 12:18:42 +0100</pubDate>
					<category><![CDATA[Buscadores]]></category>
					<category><![CDATA[SEO]]></category>
					<description><![CDATA[En el blog que Alan Long tiene en Hitwise, han sacado un nuevo estudio sobre la longitud de las b&uacute;squedas en los distintos buscadores web.En el informe se ve c&oacute;mo la longitud de las frases de b&uacute;squeda est&aacute; aumentando paulatinamente, y sobre todo, donde m&aacute;s est&aacute; aumentando es en Google....]]></description>
			<content:encoded><![CDATA[>En el blog que <a title="Ver en ventana nueva" href="http://weblogs.hitwise.com/alan-long/2009/11/searches_getting_longer.html" target="_blank">Alan Long tiene en Hitwise</a>, han sacado un nuevo estudio sobre la longitud de las b&uacute;squedas en los distintos buscadores web.<br /><br />En el informe se ve c&oacute;mo la longitud de las frases de b&uacute;squeda est&aacute; aumentando paulatinamente, y sobre todo, donde m&aacute;s est&aacute; aumentando es en Google. Esto &uacute;ltimo nos lleva a pensar si realmente esto est&aacute; asociado a la cada vez menor calidad de los resultados que obtenemos al realizar b&uacute;squedas con el buscador.<br />Y es que la larga cola est&aacute; comenzando a entrar en la mente de los usuarios, que pasan de querer algo poco definido a realizar consultas cada vez m&aacute;s elaboradas para llegar a la informaci&oacute;n que realmente quieren conseguir.<br /><br />El informe, adem&aacute;s de otros detalles, nos revela que la longitud de las consultas ha aumentado poco a poco con el paso del tiempo, y conforme aumenta el n&uacute;mero de personas que se erigen como profetas del posicionamiento en buscadores, y &uacute;nicamente buscan un posicionamiento, pero que para nada creo que se pueda llamar org&aacute;nico, sino posicionamiento que &uacute;nicamente genere tr&aacute;fico. No importa si el tr&aacute;fico generado es de buena, mediana o mala calidad.<br /><br />En mi opini&oacute;n, la longitud de b&uacute;squeda aumenta por una simple raz&oacute;n, los resultados tienen mucho posicionamiento, aunque el posicionamiento lo &uacute;nico que busque sea el click y no el cliente de calidad, esto, hace que los resultados iniciales tengan cada vez menos relevancia, y el usuario cada vez tenga que aumentar el n&uacute;mero de palabras de b&uacute;squeda para hacerla m&aacute;s espec&iacute;fica para lo que est&aacute; buscando.<br /><br />Tengo que decir adem&aacute;s, que es curioso ver c&oacute;mo la calidad del tr&aacute;fico generado por otros buscadores como puede ser Yahoo, es mucho mejor, y los usuarios captados a trav&eacute;s de estos, tienen un perfil de usuario que se ajusta much&iacute;simo mejor al perfil deseado.<br /><br />Para terminar, os incluyo una tabla resumen de las longitudes de b&uacute;squeda:<br /><br /><img title="Longitud de la cadena de b&uacute;squeda, tabla resumen." src="http://www.imaginanet.com/blog_files/images/srchtermlenght_xtended.png" alt="Longitud de la cadena de b&uacute;squeda, tabla resumen." /><br /><br /><br />El siguiente gr&aacute;fico muestra la longitud media de b&uacute;squeda, para todos los buscadores en general:<br /><br /><a onclick="window.open('/blog_files/images/searchtermlength.png','popup','width=849,height=450,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="/blog_files/images/searchtermlength.png"><img title="Longitud de la cadena de b&uacute;squeda, media para todos los buscadores." src="http://www.imaginanet.com/blog_files/images/searchtermlength_small.png" alt="Longitud de la cadena de b&uacute;squeda, media para todos los buscadores." /></a><br /><br /><br />Mientras que en la siguiente, se muestra para los buscadores m&aacute;s importantes. En &eacute;l se puede apreciar c&oacute;mo dependiendo del buscador, hay bastante diferencia en longitudes de cadena de b&uacute;squeda:<br /><br /><a onclick="window.open('/blog_files/images/sengines_length.png','popup','width=849,height=450,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" href="/blog_files/images/sengines_length.png"><img title="Longitud de la cadena de b&uacute;squeda, principales buscadores." src="http://www.imaginanet.com/blog_files/images/sengines_length_sml.png" alt="Longitud de la cadena de b&uacute;squeda, principales buscadores." width="429" height="222" /></a>]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=8</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/aumenta-la-longitud-de-busqueda--sobre-todo-en-google-.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Haciendo páginas web atractivas y usables.</title>
			<link>http://www.imaginanet.com/blog/haciendo-paginas-web-atractivas-y-usables.html</link>
			<guid>http://www.imaginanet.com/blog/haciendo-paginas-web-atractivas-y-usables.html</guid>
			<comments>http://www.imaginanet.com/blog/haciendo-paginas-web-atractivas-y-usables.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Tue, 24 Nov 2009 10:05:37 +0100</pubDate>
					<category><![CDATA[Web 2.0]]></category>
					<category><![CDATA[XHTML]]></category>
					<category><![CDATA[CSS]]></category>
					<category><![CDATA[Ajax]]></category>
					<description><![CDATA[El presente artículo ha sido traducido del publicado en http://www.lazycat.org/postcards/  Diseños abiertos y elegantes, menores costes de ancho de banda y un mantenimiento mucho más fácil. ¿Os gusta la idea? Leed este artículo para conocer pequeños trucos que puedes aplicar al código, diseño y contenidos de tus páginas...]]></description>
			<content:encoded><![CDATA[><p style="display: inline; float: left;"><img style="display: inline; float: left; margin-right: 10px;" title="Haciendo páginas web atractivas y usables." src="/ftp/articulos_web/nakkeTattis.jpg" alt="Haciendo páginas web atractivas y usables." width="232" height="310" /> El presente artículo ha sido traducido del publicado en <a href="http://www.lazycat.org/postcards/">http://www.lazycat.org/postcards/</a><br /> <br /> Diseños abiertos y elegantes, menores costes de ancho de banda y un mantenimiento mucho más fácil.<br /> <br />¿Os gusta la idea? Leed este artículo para conocer pequeños trucos que puedes aplicar al código, diseño y contenidos de tus páginas web, y si alguno de los sitios web que visitas normalmente no da la talla, ¿porqué no comentarles que pueden hacer un cambio limpio, rápido y con muchas ventajas sobre lo que tiene?<br /> <br />Muchas páginas web incluyen enlaces a artículos relacionados y más información. Envíales URLs que creas les puedan ayudar y pienses que son útiles.</p>
<h3>Hojas de estilo alternativas</h3>
Son distintos puntos de vista. Añadir la posibilidad de visualizar una página web en formato impreso, o por ejemplo, en terminales de mano (pocket pc, palm os, ...), hacen que un sitio web sea visible por una mayor audiencia y así, aumente la satisfacción del cliente. De esta forma, los usuarios no tienen porque buscar una versión para imprimir (si existe claro) ya que las hojas de estilo para imprimir se cargan de forma automática en cualquier navegador web. <br /> Si está vendiendose algo, una disposición dedicada a la impresión, ahorra el esfuerzo y coste de crear y mantener archivos PDF independientes. Las hojas de estilo para medio impreso, pueden incluir reglas que impriman las urls junto con los enlaces, expandan los acrónimos y muestren la información de copyright. <br /> Existen hojas de estilo para TV, proyectores, lectores de texto, ... <br />
<h3>Fondos</h3>
Una imagen de fondo puede ser la diferencia entre una página web que atraiga todas las miradas y una página web que genere dolores de tripa. La elección de imagenes que puedan estirarse con el fondo, es esencial, así como el uso de colores apropiados y el hecho de asegurarse de que ls imágenes de fondo permanecen en el fondo.<br /> Si tienes dudas, quítala: un diseño simple y limpio, a veces funciona mejor que un diseño complejo y visualmente rico en grafismos. A veces, una página web diseñada de forma pobre da peor imagen que no tener página web.<br /> Hay que recordad que cualquier elemento puede tener una imagen de fondo o color de fondo si usa CSS, aprovechar esta ventaja permite la construcción de webs ricas en grafismo.<br />
<h3>Elección de los colores</h3>
Con los colores, como con muchas otras cosas, cuanto menos, a veces es mejor. Lo ideal es elegir entre tres y cinco colores para un diseño o para una sección del sitio web si se desea que estas sean distintas.<br /> Hay que ser cuidadoso con las connotaciones de los colores y amoldarlos a la audiencia que se espera atraer. Por ejemplo los visitantes del este pueden estar buscando colores vivos como rojos y amarillos para estar cómodos, por otro lado, los visitantes de occidente los pueden encontrar demasiado chillones para sus ojos e incluso ofencivos. Por ejemplo, Ladbrokes, amolda su esquema de colores a la procedencia de sus visitantes; si quieres una página web global, esta es posible.<br />
<h3>Tablas</h3>
Si todavia alguien está diseñando páginas web con tablas HTML, ¿cuantos años llevas perdido por el mundo? ¿dónde has estado? La comida ya se ha terminado y también te has perdido los postres, esto hace que no conozcas lo fácil y cómodo que puede ser hacer páginas web con CSS (hojas de estilo). Cuando alguien quiere atornillar un tornillo, que usa, ¿un martillo o un destornillador? Por la misma razón, porqué usar tablas HTML para maquetar páginas web. <br /> Es aconsejable diseñar de acuerdo con las especificaciones web estandares del momento, y además, conseguiras mayor control de la maqueta si la haces usando hojas de estilo. Las páginas web modernas estan basadas en los estandards web, cargan mucho más rápido, se ven más bonitas y te harán ahorrar dinero. Si tu jefe se entera de que no has estado cenando, ve pensando la explicación que vas a darle.]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=5</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/haciendo-paginas-web-atractivas-y-usables.html</feedburner:origLink>
		</item>
				
		<item>
			<title>19 consejos para construir páginas web</title>
			<link>http://www.imaginanet.com/blog/19-consejos-para-construir-paginas-web.html</link>
			<guid>http://www.imaginanet.com/blog/19-consejos-para-construir-paginas-web.html</guid>
			<comments>http://www.imaginanet.com/blog/19-consejos-para-construir-paginas-web.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Mon, 23 Nov 2009 20:25:48 +0100</pubDate>
					<category><![CDATA[Web 2.0]]></category>
					<description><![CDATA[Esto significa, que no pretendas re-inventar la navegaci&oacute;n por los sitios web. Pon las cosas a la izquierda, arriba, abajo, donde quieras, pero no reinventes la forma en que la gente interactua con entornos o interfaces digitales si lo que quieres es vender tu marca, tus productos o tus servicios. No confundas al usuario,...]]></description>
			<content:encoded><![CDATA[>Esto significa, que no pretendas re-inventar la navegaci&oacute;n por los sitios web. Pon las cosas a la izquierda, arriba, abajo, donde quieras, pero no reinventes la forma en que la gente interactua con entornos o interfaces digitales si lo que quieres es vender tu marca, tus productos o tus servicios. No confundas al usuario, puede sentirse mal y abandonar la web.<br />
<h3>Introducci&oacute;n</h3>
Este art&iacute;culo se ha extraido del original (<a href="http://www.josiahcole.com/2007/02/14/a-webmasters-19-commandments/">click aqu&iacute;</a>) titulado <a href="http://www.josiahcole.com/2007/02/14/a-webmasters-19-commandments/"><em>19 Things NOT To Do When Building a Website</em></a><em>.</em> El art&iacute;culo es muy did&aacute;ctico y creemos que expone cada uno de los casos con criterio y desde el punto de vista de la usabilidad.<br /> El autor ha recopilado una peque&ntilde;a lista de reglas b&aacute;sicas y fundamentales que todo webmaster debe tener en cuenta a la hora de desarrollas un sitio web que pretenda llegar a su p&uacute;blico con un m&iacute;nimo de &eacute;xito. Esta lista tambi&eacute;n pueden usarla las empresas que esten pensando en la creaci&oacute;n o re-estructuraci&oacute;n de su sitio web.<br />
<h3>No redimensionar la ventana del navegador</h3>
No cambiar el tama&ntilde;o de la ventana del navegador del usuario. Todos sabemos que se puede modificar el tama&ntilde;o de la ventana del usuario, y sabemos lo bien que uno se siente cuando tras poner un peque&ntilde;o trozo de c&oacute;digo Javascript ocurre un <em>milagro</em> que redimensiona la ventana al tama&ntilde;o que queremos, pero NO. Esta mala t&eacute;cnica web se ve en la mayor&iacute;a de casos con sitios web denominados <em>spam</em> o cuando un dise&ntilde;ador gr&aacute;fico no acostumbrado al entorno web, dise&ntilde;a un sitio web, es decir, alguien del sector de la fotograf&iacute;a, video o art&iacute;stico que tambi&eacute;n hace sitios web (ver consejo n&uacute;mero 6 para conocer m&aacute;s cosas sobre estos), pero a decir verdad no tiene idea alguna de c&oacute;mo crear un web exitoso y usable.<br /><img title="No redimensionar la ventana del navegador" src="http://farm1.static.flickr.com/150/391487797_e7749ccade.jpg?v=0" alt="No redimensionar la ventana del navegador" width="325" height="294" /><br />
<h3>Si quieres cargar una home, y a continuaci&oacute;n tu web en un pop-up, para nada te lo recomendamos.</h3>
Si tu web necesita que el visitante carge una p&aacute;gina de inicio y entonces acceda a la verdadera p&aacute;gina web en un pop up (ventana emergente), estas mareando al usuario, le das la bienvenida pero no es as&iacute;, le vuelves a dar la bienvenida. Si tu web no carga de forma inmediata con un inicio que aporte valor al visitante, es muy dificil que espere a que termine tu show de inicio (no le preocupa lo bonita y espectacular que es la p&aacute;gina de introducci&oacute;n). Esta t&eacute;cnica se ve con la mayor&iacute;a de desarrolladores web con Flash, los cuales, por alguna raz&oacute;n piensan que todos los sitios web en flash tienen que abrirse en una ventana emergente (estan dando por hecho que burlan los programas que bloquean ventanas emergentes) y tienen 30 segundos de carga de una introducci&oacute;n como <a href="http://www.2advanced.net/" target="_blank">www.2advanced.net</a><br />
<h3>Si preguntas que versi&oacute;n quieres: versi&oacute;n flash, html, alta resoluci&oacute;n, baja resoluci&oacute;n. Tambi&eacute;n pierdes oportunidad.</h3>
<p>Es como si le preguntases a alguien que quiere entrar en tu tienda, si quiere pasar a la tienda mala o a la buena (pero claro, hay que tener en cuenta que para entrar en la tienda buena hacen falta unas gafas especiales y una peque&ntilde;a espera de 30 segundos... MMM, NO gracias), lo que les estas preguntando es: "&iquest;Quieres irte y comprar en mi competencia? porque te estoy poniendo una muralla que tienes que saltar antes de que conozcas los productos o servicios que te ofrezco.</p>
<h3>Si tienes una web, toda en flash, hazla de nuevo.</h3>
Si tu web est&aacute; toda en Flash, echa a tu dise&ntilde;ador web y si la hiciste t&uacute;, a&ntilde;&aacute;dela a tu curriculum bajo la secci&oacute;n de "Proyectos sin utilidad que he realizado" y empieza de nuevo a hacer la web.&nbsp;<br /> Flash es una herramienta, una herramienta con much&iacute;simas posibilidades como animaciones, v&iacute;deo, carritos de la compra, interfaces, etc, la lista es muy grande pero las cosas en su medida. Esto no quiere decir que tengas que hacer un sitio web todo en Flash y si lo haces tendr&aacute;s una gran desventaja con tu competencia. F&iacute;jate en una cosa, hasta el propietario de Flash, <a href="http://www.adobe.com/">Macromedia/Adobe</a> no tiene su web toda en Flash, &iquest;sabes porqu&eacute;? Quieren hacer negocio y no hacen caso a los <em>dise&ntilde;adores</em>.<br /><img title="No hagas una web toda en flash" src="http://farm1.static.flickr.com/132/391506482_f6a6bdc635.jpg?v=0" alt="No hagas una web toda en flash" width="450" height="415" /><br />
<h3>NO intentes REinventar la navegaci&oacute;n por p&aacute;ginas web</h3>
<p>Situa los elementos gr&aacute;ficos en la zona de tu p&aacute;gina web que quieras, ponlos arriba, a la izquierda, tambi&eacute;n en la parte derecha puedes colocar elementos, pero sobre todo, no inventes la l&oacute;gica de navegaci&oacute;n, esto es, la manera en que las personas interactuan con interfaces digitales, a la misma vez que est&aacute;s intentando vender un producto o servicios. El usuario se confundir&aacute;, se enfadar&aacute;, y se ir&aacute;.</p>
<h3>&nbsp;Este trabajo me va a dar bastantes dolores de cabeza</h3>
<p>Si eres un dise&ntilde;ador gr&aacute;fico, y "de paso ofreces p&aacute;ginas web", estas dando consejos sobre dise&ntilde;o web, a tus clientes de trabajos gr&aacute;ficos impresos, se cauto con este tema. El dise&ntilde;o gr&aacute;fico para impresi&oacute;n se parece al dise&ntilde;o web lo mismo que un anuncio de un coche de carreras a conducir y construir ese coche de carreras. No cometamos errores, el dise&ntilde;o gr&aacute;fico es fant&aacute;stico por si mismo, sabes hacer gr&aacute;ficas perfectas y perfectos slogans para impresi&oacute;n. Un usuario no puede comprarte el producto con un anuncio impreso (por el momento), no pueden comunicarse con tu negocio a trav&eacute;s de un anuncio impreso. Ded&iacute;cate al dise&ntilde;o gr&aacute;fico y no metas tus narices en un medio que no conoces ni entiendes (lo mismo les digo a esos "t&eacute;cnicos" que haces websites "aprovechando la situaci&oacute;n")</p>
<h4>Si una p&aacute;gina de inicio no tiene contenido o cualquier texto Real (no incluido en una imagen) y esto mismo es extensible a todo el sitio web. Contrata a una persona que dote de contenido a la p&aacute;gina web y despide a tu webmaster.</h4>
<p>El contenido es el rey. Los buscadores no indexan gr&aacute;ficos o animaciones flash deslumbrantes, s&oacute;lo indexan texto. Contrata una persona que de contenidos relevantes y vinculados con tu negocio (es b&aacute;sico para tener un buen ranking y poder vender / ofrecer tus productos o servicios a trav&eacute;s de una p&aacute;gina web)</p>
<h4>Si tu p&aacute;gina web no funciona con Firefox, da la bienvenida a la metedura de pata m&aacute;s com&uacute;n de 2007.</h4>
<p>Realmente, Firefox s&oacute;lo genera entre el 10-15% de la cuota de mercado de los navegadores de usuario, pero en el caso de algunos sitios web, esta cuota es mucho m&aacute;s alta, por ejemplo, oomny.com tiene m&aacute;s del 80% de sus usuarios con Firefox. Adem&aacute;s, si quien hizo tu p&aacute;gina web, no la hizo compatible y funcional con Firefox, obviamente no tienen idea de lo que est&aacute;n haciendo y se est&aacute;n saliendo del juego. No hay raz&oacute;n por la que se necesite un sitio web s&oacute;lo compatible y totalmente dependiente de Internet Explorer para que no funcione en Firefox, y francamente, no hay raz&oacute;n alguna para ello. Que un webmaster no conozca Firefox, quiere decir que no est&aacute; en la cultura de Internet y esto puede hacer que tu imagen y la de tu negocio en Internet se vean afectados.</p>
<h3>Este punto es una colecci&oacute;n de peque&ntilde;as cosas que han hecho desaparecer a otros sitios web.</h3>
<p>Son principios b&aacute;sicos pero repetidos, como no mostrar texto parpadeante, no usar Frontpage, no utilizar pop-ups o ventanas emergentes, no hacer texto con scroll, obligar a la descarga de fuentes o tipograf&iacute;as especiales, utilizar introducciones Flash, ...</p>
<h3>Si utilizas m&uacute;sica en tu p&aacute;gina web cerciorarte de que el usuario pueda detenerla,</h3>
<p>y es MEJOR NO cargarla con la p&aacute;gina web sin que la solicite el usuario. Esto mismo, es aplicable al v&iacute;deo con audio, muchos usuarios de p&aacute;ginas web navegan desde su trabajo y no les hace mucha gracia que sus altavoces empiecen a sonar con tu espantosa m&uacute;sica de forma totalmente intrusiva en su ordenador, y m&aacute;s si su jefe est&aacute; pendiente y con ganas de darle a alguien una patada en el trasero.</p>]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=4</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/19-consejos-para-construir-paginas-web.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Activado automático de componentes en IE (Actualización de los cambios en componentes ActiveX de IE)</title>
			<link>http://www.imaginanet.com/blog/activado-automatico-de-componentes-en-ie-actualizacion-de-los-cambios-en-componentes-activex-de-ie.html</link>
			<guid>http://www.imaginanet.com/blog/activado-automatico-de-componentes-en-ie-actualizacion-de-los-cambios-en-componentes-activex-de-ie.html</guid>
			<comments>http://www.imaginanet.com/blog/activado-automatico-de-componentes-en-ie-actualizacion-de-los-cambios-en-componentes-activex-de-ie.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Thu, 29 Oct 2009 13:28:38 +0100</pubDate>
					<category><![CDATA[Internet Explorer]]></category>
					<category><![CDATA[Navegadores]]></category>
					<category><![CDATA[ActiveX]]></category>
					<description><![CDATA[Si miramos a abril de 2006, hicimos un cambio en la forma en que Internet Explorer manejaba los controles incrustados (embed) en bastantes p&aacute;ginas web. Algunos sitios web obligaban a los usuarios a "pulsar para activar" antes de que pudieran interactuar con el control. A dia de hoy, Microsoft ha obtenido la licencia de...]]></description>
			<content:encoded><![CDATA[>Si miramos a abril de 2006, hicimos un cambio en la forma en que Internet Explorer manejaba los controles incrustados (embed) en bastantes p&aacute;ginas web. Algunos sitios web obligaban a los usuarios a "pulsar para activar" antes de que pudieran interactuar con el control. A dia de hoy, Microsoft ha obtenido la licencia de Eolas, eliminando con esta el requisito de Internet Explorer de "pulsa para activar". Por esto, vamos a quitar el comportamiento "pulsar para activar el control" que ahora tiene IE.<br /> <br /> Es importante tener en cuenta que este cambio no necesitar&aacute; que se modifiquen&nbsp;las p&aacute;ginas web existentes hoy en d&iacute;a , ni acciones nuevas a tomar por parte de quienes crean y desarrollan p&aacute;ginas web. Simplemente estamos retrocediendo al comportamiento anterior. Una vez se actualice Internet Explorer, todas las p&aacute;ginas que ahora necesitan del "pulsar para activar" dejar&aacute;n de necesitarlo para que el control se active. Simplemente funcionar&aacute;. <br /> <img src="/ftp/articulos_web/activex_ie/clicktoactivate.png" alt="" /><br />Lo m&aacute;s normal es que actualmente te preguntes para cuando est&aacute; previsto lanzar esta actualizaci&oacute;n.<br /> <br /> La primera versi&oacute;n en pruebas, saldr&aacute; con una actualizaci&oacute;n opcional llamada Activaci&oacute;n de Componentes Autom&aacute;tica para Internet Explorer (Internet Explorer Automatic Component Activation Preview), y estar&aacute; disponible en Diciembre de 2007 en el Centro de Descargas de Microsoft. Adem&aacute;s, este cambio formar&aacute; parte de las pr&oacute;ximas versi&oacute;nes pre-release de Windows Vista SP1 y Windows XP SP3. Despu&eacute;s de haber dado tiempo a que los usuarios se preparen para este cambio, haremos que este comportamiento forme parte de la "Cumulative Update" de Internet Explorer en Abril de 2008, as&iacute;, todos los clientes que instalen esta actualizaci&oacute;n, aplicar&aacute;n este cambio a su IE.<br /> <br /> Si tienes una aplicaci&oacute;n a medida usando WebOC o MSHTML, habr&aacute; algunos cambios que afectar&aacute;n tu aplicaci&oacute;n. Por ejemplo:<br /> - Si la aplicaci&oacute;n usa el flag&nbsp;DOCHOSTUI para el "pulsar para activar", ese comportamiento se respetar&aacute; y tu aplicaci&oacute;n seguir&aacute; necesitando del "pulsar para activar".<br /> - Si la aplicaci&oacute;n usa la clave del registro FEATURE_ENABLE_ACTIVEX_INACTIVE_MODE para optar por el "pulsar para activar", esta clave de registro no ser&aacute; mantenida. Si quieres seguir utilizando el "pulsar para activar", por favor, utilliza el flag DOCHOSTUI.<br /> <br /> En las pr&oacute;ximas semanas actualizaremos en <a href="http://msdn.microsoft.com/ieupdate">art&iacute;culo en MSDN</a> con las descripciones del nuevo comportamiento. Estate atento en este enlace para saber cuando sale la preview.<br />]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=2</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/activado-automatico-de-componentes-en-ie-actualizacion-de-los-cambios-en-componentes-activex-de-ie.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Haciendo funcionar a las hojas de estilos alternativas</title>
			<link>http://www.imaginanet.com/blog/haciendo-funcionar-a-las-hojas-de-estilos-alternativas.html</link>
			<guid>http://www.imaginanet.com/blog/haciendo-funcionar-a-las-hojas-de-estilos-alternativas.html</guid>
			<comments>http://www.imaginanet.com/blog/haciendo-funcionar-a-las-hojas-de-estilos-alternativas.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Tue, 20 Oct 2009 12:35:41 +0100</pubDate>
					<category><![CDATA[JavaScript]]></category>
					<category><![CDATA[CSS]]></category>
					<description><![CDATA[Autor Original: Paul Sowden  URL ORIGINAL: http://www.alistapart.com/stories/alternate/  TÍTULO ORIGINAL: A List Apart: CSS: Making Alternate Style Sheets Work  Traducción al castellano: http://kusor.net/traducciones/ala.es/alternate/  Así, TIENES UN DOCUMENTO XHTML. Has sido un diseñador web bueno y utilizado hojas de estilos...]]></description>
			<content:encoded><![CDATA[><em><span style="text-decoration: underline;">Autor Original</span>: Paul Sowden <br /> <span style="text-decoration: underline;">URL ORIGINAL</span>: http://www.alistapart.com/stories/alternate/ <br /> <span style="text-decoration: underline;">TÍTULO ORIGINAL</span>: A List Apart: CSS: Making Alternate Style Sheets Work <br /> <span style="text-decoration: underline;">Traducción al castellano</span>: http://kusor.net/traducciones/ala.es/alternate/</em><br /> <br /> Así, TIENES UN DOCUMENTO XHTML. Has sido un diseñador web bueno y utilizado hojas de estilos para controlar el aspecto de tu documento. Incluso has ido mucho más allá y has creado varias hojas de estilo alternativas para demostrar lo duro que eres. <br /> <br /> Estupendo. Pero ahora necesitas un modo cross–browser de elegir dinámicamente entre las distintas hojas de estilos. <br /><br />
<h3>Dándole estilo a tu sitio</h3>
Las hojas de estilos pueden ser asociadas con los documentos usando una lista de elementos link en la cabecera del documento. Hay tres tipos de relación distintos que pueden tener las hojas de estilos externas con el documento: persistentes, preferridas, y alternativas.<br />
<h4>Persistentes</h4>
Estas hojas de estilos están habilitadas siempre (siempre están “encendidas”) y son combinadas con la hoja de estilos activa. Pueden utilizarse para compartir reglas comunes a todas las hojas de estilos. Para hacer una hoja de estilos persistente, el atributo rel es fijado a “stylesheet” y no se fija ningún atributo title. <br /> <br /> Para hacer persistente la hoja de estilos paul.css, el siguente elemento link debería ser incluido en la cabecera del documento:
<h4>Preferidas</h4>
Estas hojas de estilo están habilitadas por defecto (están “encendidas” cuando se ha cargado la página). Pueden ser deshabilitadas entonces, si el usuario eleige una hoja de estilos alternativa. <br /> <br /> Para hacer una hoja de estilos preferida, el atributo rel se fija a “stylesheet” y a la hoja de estilos se le asigna un nombre con el atributo title. <br /> <br /> Varias hojas de estilo preferidas pueden ser agrupadas dándoles atributos title idénticos. Estas hojas de estilos agrupadas serán entonces habilitadas y deshabilitadas juntas. Si se declara más de un grupo de hojas de estilo preferidas, el primero que se declare tendrá preferencia. <br /> <br /> Para hacer preferida a paul.css, es añadido un atributo title, dándole al estilo por defecto un nombre.<br />
<h4>Alternativas</h4>
Estas hojas de estilo pueden ser seleccionadas por el visitante como alternativas a la hoja de estilos preferida. Esto permite al visitante personalizar un sitio y elegir su disposición favorita. También pueden ser utilizadas para accesibilidad (por ejemplo, ALA tiene la hoja de estilos “friendly fonts” que proporciona fuentes mayores). <br /> <br /> Para especificar una hoja de estilos alternativa, el atributo rel se fija a “alternate stylesheet” y la hoja de estilos se nombra con un atributo title. Como pasa con las hojas de etilo preferidas, estas hojas de estilos pueden ser agrupadas juntas también dándoles atributos title idénticos. <br /> <br /> Usando de nuevo el ejemplo previo; para convertir paul.css en una hoja de estilos alternativa, la palabra “alternate” es añadida al atributo rel.<br /> Notar que estas relaciones sólo se aplican a hojas de estilo externas que hayan sido incluidas usando el elemento link.<br />
<h3>Intercambiando estilos</h3>
Cuando un documento es cargado inicialmente, las hojas de estilo persistentes y preferidas son aplicadas al documento. Las hojas de estilo alternativas pueden ser seleccionadas por el usuario. El W3C nos dice que el navegador debería proporcionarnos un medio de elegir la hoja de estilos que queremos utilizar, y sugiere que quizá un menú sesplegable o un abarra de herramientas debería ser proporcionada. <br /> <br /> Hasta aquí, muy bien. Tenemos varias hojas de estilos y el visitante puede elegir sus favoritas desde un menú. Pero entonces nos encontramos con un prolema. Uno importante. Mozilla proporciona un menú para seleccionar las hojas de estilos que queremos usar bajo un item del menú ver. Pero Microsoft Internet Explorer (MSIE) no proporciona ningún menú. Por lo que tenemos varias hojas de estilos, y ningún modo de acceder a ellas en MSIE. <br /> <br /> Aquí es donde un poco de JavaScript puede ser utilizado junto con el DOM para proporcionar un modo mediante el cuál los usuarios de MSIE y Mozilla puedan seleccionar la hoja de estilos que quieran utilizar. Sus preferencias pueden guardarse también en una cookie. Y como estamos utilizando las etiquetas link tal como nos dice el W3C, JavaScript no va a interferir con el menú en Mozilla, y va a degradar grácilmente. <br />
<h3>El Script</h3>
Primero necesitamos que el script sea capaz de diferenciar entre tres tipos diferentes de hojas de estilo. Esto es relativamente fácil de hacer, dado que sólo necesitamos comprobar dos de los atributos de cada elemento link. <br /> <br /> ¿Hay algún enlace a un elemento link?<br />
<pre class="code">HTMLLinkElement.getAttribute("rel").indexOf("style") != -1 </pre>
¿Hay un atributo title?
<pre class="code">HTMLListElement.getAttribute("title")</pre>
¿Contiene el atributo rel la palabra clave "alternate"?
<pre class="code">HTMLLinkElement.getAttribute("rel").indexOf("alt") != -1</pre>
Notar que estamos buscando la cadena “alt” porque algunos navegadores aceptan la palabra reservada “alternative” en lugar de “alternate.” <br /> <br /> Usando estos tres tipos de chequeo podemos escribir una función para elegir las hojas de estilos. Esto implica buscar todos los elemoentos link en el documento, deshabilitando todas las hojas de estilo preferidas y alternativas que no queremos que estén activas, y habilitando todas las hojas de estilo preferidas y alternativas que queremos que estén activas. <br /> <br /> Notar que sólamente los elementos link de hojas de estilo alternativas y preferidas tendrán un atributo title. <br /> <br /> La función de cambio tiene el aspecto siguiente:
<pre class="code">function setActiveStyleSheet(title) { <br /> var i, a, main; <br />  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) { <br />    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) { <br />     a.disabled = true; <br />     if(a.getAttribute("title") == title) a.disabled = false; <br />    } <br />  } <br />}  </pre>
<h4>Cookies</h4>
Ahora podemos cambiar las hojas de estilo. Estupendo. Tenemos una página más personalizada. Excelente. Pero no tenemos un sitio personalizado. Las preferencias se aplican sólo a la página actual; cuando la dejemos las preferencias se irán con ella. De cualquier modo, esta situaciónpuede ser rectificada con una cookie. <br /> <br /> Para guardar una cookie necesitamos otra función que devuelva la hoja de estilo actual. También necesitamos dos funciones que guarden y lean la cookie. <br /> <br /> Para devolver la hoja de estilo actual buscaremos una hoja de estilo preferida o alternativa que esté activa y miraremos su atributo title. <br /> <br /> Primero buscaremos de nuevo a través de todos los elementos link en el documento. Entoncdes comprobaremos que el link es una hoja de estilo. Si es así, comprobaremos que la hoja de estilo tiene un atributo title. Esto nos dirá que la hoja de estilo es bien preferida, bien alternativa. <br /> <br /> La última comprobación es ver si la hoja de estilo está activa o no. Si las tres búsquedas devuelven verdadero, tendremos la hoja de estilo actual y podremos devolver su atributo title. <br /> <br /> La función terminada tiene este aspecto:
<pre class="code">function getActiveStyleSheet() { <br /> var i, a; <br />   for(i=0; (a = document.getElementsByTagName("link")[i]); i++) { <br />    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) <br />    return a.getAttribute("title"); <br />   } <br /> return null; <br />} </pre>
Como este es un artículo sobre estilos, y las cookies son un tópico completamente diferente, no voy a explicar las funciones de las cookies aquí, pero si voy a incluirlas para tu conveniencia (estas funciones fueron escritas por el autor de ALA Peter-Paul Koch).
<pre class="code">function createCookie(name,value,days) { <br />   if (days) { <br />    var date = new Date(); <br />    date.setTime(date.getTime()+(days*24*60*60*1000)); <br />    var expires = "; expires="+date.toGMTString(); <br />   } <br />   else expires = ""; <br /> document.cookie = name+"="+value+expires+"; path=/"; <br />} <br /> <br />function readCookie(name) { <br /> var nameEQ = name + "="; <br /> var ca = document.cookie.split(';'); <br />    for(var i=0;i < ca.length;i++) { <br />     var c = ca[i]; <br />     while (c.charAt(0)==' ') c = c.substring(1,c.length); <br />     if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); <br />    } <br /> return null; <br />} </pre>
Para usar estas funciones de cookies, necesitamos agregar onload y onunload event listeners a la ventana.<br />
<h4>onLoad</h4>
Hay un atributo especificado por el w3c DOM Level 2, “disabled,” que se fija a false cuando una hoja de estilos se aplica al documento. Este atributo es implementado correctamente en Mozilla, pero desafortunadamente no lo es en MSIE. <br /> <br /> MSIE tiene un atributo HTML propietario, también llamado “disabled”, que se aplica a los elementos link. Este atribute es fijado inicialmente a false para todos los elementos link. <br /> <br /> Para fijar el atributo disabled de MSIE tal como el atributo disabled del DOM Level 2, podemos llamar a la función setActiveStyleSheet() con el nombre de la hoja de estilo preferida. <br /> <br /> Para encontrar qué hoja de estilo es la preferida, necesitamos otra función. Dado que esta función es bastante similar a la función getActiveStyleSheet() no voy a explicar como funciona, pero aquí está su aspecto:
<pre class="code">function getPreferredStyleSheet() { <br /> var i, a; <br />    for(i=0; (a = document.getElementsByTagName("link")[i]); i++) { <br />     if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("rel").indexOf("alt") == -1 && a.getAttribute("title")) <br />     return a.getAttribute("title"); <br />    } <br /> return null; <br />} </pre>
en la función onload, primero fijamos una variable title. Ésta guardará el valor de la hoja de estilos previa que está almacenada en la cookie, o si no hay ninguna, el título de nuestra hoja de estilos preferida. Para hacer las cosas lógicas, vamos a llamar a la cookie “style.” <br /> <br /> Lo siguiente será llamar a la función setActiveStyleSheet() pasándole la variable title como title. Nuestra función onload será algo parecido a esto:
<pre class="code">window.onload = function(e) { <br />   var cookie = readCookie("style"); <br />   var title = cookie ? cookie : getPreferredStyleSheet(); <br />   setActiveStyleSheet(title); <br />} </pre>
Notar que es muy deseable llamar a esta función antes del evento onload, haciendo al documento que “pinte” con nuestro estilo preferido. <br /> <br /> Si eleiges hacer esto, asegúrate que dicha función es llamada después de haber definido las otras funciones y que los elementos link han sido definidos.<br />
<h4>onUnload</h4>
Guardar la cookie en el evento onunload es simple. Todo lo que tenemos que hacer es usar la función getActiveStyleSheet() para que nos devuelva la hoja de estilos activa, y guardarla en una cookie. Usando la función para guardar una cookie tendríamos finalmente algo como esto:
<pre class="code">window.onunload = function(e) { <br />   var title = getActiveStyleSheet(); <br />   createCookie("style", title, 365); <br />} </pre>
<h3>Juntándolo todo</h3>
Para usar estas funciones para hacer tu sitio web más sexy, necesitas incluirlas en tu documento. Para hacerlo más fácil, las he puesto todas juntas en un fichero javascript, preparado para que lo descargues y lo añadas a tu sitio. <br /> » <a href="http://www.alistapart.com/d/alternate/styleswitcher.js" target="_blank">Descargar styleswitcher.js </a><br /> <br /> Para incluir el fichero javascript, necesitas añadir un elemento script a la cabecera de tu documento, asegurándote de que está puesto después de todos los elementos link pertenecientes a hojas de estilo que tengas. El código HTML debería tener este aspecto:
<pre class="code"><script src="/scripts/styleswitcher.js" type="text/javascript"><!--mce:0--></script> </pre>
Para permitir al visitante cambiar la hoja de estilos activa, podrías usar los eventos onClick de javascript. Por ejemplo, para tener la opción de elegir entre dos temas con los títulos “default” y “paul,” podrías usar el siguiente HTML:
<pre class="code"><a onclick="setActiveStyleSheet('default'); return false;" href="#">change style to default</a> <br /><a onclick="setActiveStyleSheet('paul'); return false;" href="#">change style to paul</a> </pre>
Una vez que el visitante ha seleccionado un tema, éste será almacenado en una cookie. Para usar el mismo tema en todo tu sitio web, los mismos elementos link javascript link deberían ser incluidos en la cabecera de cada página del sitio. <br /> ¡Eso es todo Gente! <br /> <br /> Ahí lo tienes, un sitio web personalizable que utiliza elementos link para enlazar hojas de estilo como el W3C nos ha dicho que deberíamos hacer. ¡Disfrútalo! <br /> <br /> ::: Paul Sowden tiene 17 años (Londres, Inglaterra), y cree que la web sería un lugar mejor si todos usásemos tecnicas de diseño que cumpliesen con los estándares.<br />]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=1</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/haciendo-funcionar-a-las-hojas-de-estilos-alternativas.html</feedburner:origLink>
		</item>
				
		<item>
			<title>Arreglando tu página web con el DOCTYPE correcto</title>
			<link>http://www.imaginanet.com/blog/arreglando-tu-pagina-web-con-el-doctype-correcto.html</link>
			<guid>http://www.imaginanet.com/blog/arreglando-tu-pagina-web-con-el-doctype-correcto.html</guid>
			<comments>http://www.imaginanet.com/blog/arreglando-tu-pagina-web-con-el-doctype-correcto.html#comentarios</comments>
			<dc:creator>Imaginanet S.L.</dc:creator>
			<pubDate>Mon, 23 Nov 2009 19:49:19 +0100</pubDate>
					<category><![CDATA[XHTML]]></category>
					<description><![CDATA[Autor Original: Jeffrey ZeldmanURL ORIGINAL: http://www.alistapart.com/articles/doctype/T&Iacute;TULO ORIGINAL: A List Apart: Fixing Your Site With the Right DOCTYPELO HAS HECHO TODO BIEN, pero tu sitio web no tiene el aspecto deseado o funciona como deber&iacute;a hacerlo en los &uacute;ltimos navegadores.Has escrito XHTML y CSS...]]></description>
			<content:encoded><![CDATA[><em><span style="text-decoration: underline;">Autor Original</span>: Jeffrey Zeldman<br /><span style="text-decoration: underline;">URL ORIGINAL</span>: http://www.alistapart.com/articles/doctype/<br /><span style="text-decoration: underline;">T&Iacute;TULO ORIGINAL</span>: A List Apart: Fixing Your Site With the Right DOCTYPE</em><br /><br />LO HAS HECHO TODO BIEN, pero tu sitio web no tiene el aspecto deseado o funciona como deber&iacute;a hacerlo en los &uacute;ltimos navegadores.<br /><br />Has escrito XHTML y CSS v&aacute;lidos. Has utilizado el Modelo de Objetos del Documento (DOM) est&aacute;ndar del W3C para manipular din&aacute;micamente los elementos de la p&aacute;gina. A pesar de todo, en navegadores dise&ntilde;ados para soportar todos estos est&aacute;ndares, tu sitio est&aacute; fallando. Un DOCTYPE - tipo de documento - defectuoso tiene la culpa de ello.<br /><br />Este peque&ntilde;o art&iacute;culo te proporcionar&aacute; DOCTYPEs que funcionen, y explicar&aacute; el efecto pr&aacute;ctico, en el mundo real de estas etiquetas aparentemente abstractas. <br />
<h3>&iquest;PORQU&Eacute; UN DOCTYPE?</h3>
Para los est&aacute;ndares HTML y XHTML, un DOCTYPE (abreviatura de &ldquo;declaraci&oacute;n de tipo de documento&rdquo;) informa al validador de la versi&oacute;n de (X)HTML que est&aacute;s utilizando, y deber&iacute;a aparecer al principio de cada p&aacute;gina web. Los DOCTYPEs son un componente clave de las p&aacute;ginas veb de conformidad: tu marcado y tus CSS no validar&aacute;n sin ellos.<br /><br />Como fu&eacute; mencionado en art&iacute;culos previos de ALA (y en otros lugares interesantes), los DOCTYPES tambi&eacute;n son esenciales para la apropiada renderizaci&oacute;n y funcionamiento de los documentos web en navegadores de conformidad como Mozilla, IE5/Mac, y IE6/Win.<br /><br />Un DOCTYPE reciente, que incluye una URI completa(una direcci&oacute;n web completa) les dice a estos navegadores que rendericen tu p&aacute;gina en modo conforme con los est&aacute;ndares, tratando tus (X)HTML, CSS, y DOM como esperas que deben ser tratados.<br /><br />Usando un DOCTYPE incompleto u obsoleto&mdash;o ning&uacute;n DOCTYPE&mdash;colocar&aacute; a los mismos navegadores en modo &ldquo;Caprichoso&rdquo;, bajo el que el navegador asume que has escrito a la vieja usanza, marcado inv&aacute;lido y c&oacute;digo para las deprimentes normas de la industria de finales de los 1990.<br /><br />Con esta configuraci&oacute;n, el navegador va a intentar parsear tu p&aacute;gina en modo compatible hacia atr&aacute;s, renderizando tus CSS como deber&iacute;an haber sido vistas en IE4, y revirtiendo a un DOM propietario, espec&iacute;fico de los navegadores. (IE revierte al DOM IE; Mozilla y Netscape 6 revierten a vaya usted a saber.)<br /><br />Claramente, esto no es lo que quer&iacute;as. Pero es frecuentemente lo que tienes, dada la preponderancia de informaci&oacute;n incompleta o incorrecta sobre el DOCTYPE que este art&iacute;culo espera corregir.<br /><br />(Nota: El navegador Opera no se rije por estas reglas; siempre trata de renderizar las p&aacute;ginas en modo conforme con los est&aacute;ndares. &iexcl;Vamos, Opera! En el otro lado, Opera todav&iacute;a no ofrece un soporte s&oacute;lido para el DOM del W3C. Pero est&aacute;n trabajando en ello.) <br />
<h3>&iquest;D&Oacute;NDE HAN IDO A PARAR TODOS LOS DOCTYPES?</h3>
Partiendo de que los DOCTYPES son vitales para el apropiado funcionamiento de los est&aacute;ndares de la web en los navegadores, y dado que el W3C es el principal creador de los est&aacute;ndares de la web, podr&iacute;as esperar que el <a href="http://w3.org/">sitio web</a> del W3C proporcionase un listado de DOCTYPEs apropiados, y podr&iacute;as esperar tambi&eacute;n ser capaza de encontrar esta informaci&oacute;n r&aacute;pida y f&aacute;cilmente en una localizaci&oacute;n &uacute;nica. Pero como que esto est&aacute; escrito, que no puedes. <br /> <br /> W3.org no es <a href="http://www.alistapart.com/">A List Apart</a>, <a href="http://webreference.com/">WebReference</a>, o <a href="http://www.webmonkey.com/">Webmonkey</a>. Su intenci&oacute;n no es ayudar a los dise&ntilde;adores web, desarrolladores, y gente que trabaja con contenidos similares a avanzar m&aacute;s r&aacute;pido en las &uacute;ltimas pr&aacute;cticas y recomendaciones tecnol&oacute;gicas. Ese no es su trabajo. <br /> <br /> W3C publica una serie de <a href="http://www.w3.org/2002/03/tutorials.html">tutoriales</a>, que la mayor&iacute;a de dise&ntilde;adores web ignoran. Sin embargo, el sitio web del W3C aloja principalmente una colecci&oacute;n de propuestas, borradores, y Recomendaciones, escritas por especialistas para especialistas. Y cuando digo especialistas, no quiero decir profesionales web ordinarios, como t&uacute; y como yo. Quiero decir especialistas que hacen que el resto de nosotros la Abuela el primer d&iacute;a que Ella Tuvo un Mail.&trade; <br /> <br /> Puedes buscar DOCTYPEs todo el d&iacute;a en w3.org sin encontrar una p&aacute;gina que ofrezca un listado completo de todos ellos. Y cuando consigues cazar un DOCTYPE (generalmente en relaci&oacute;n con una Recomendaci&oacute;n o Borrador de Trabajo), frecuentemente se trata de uno que no funciona en tu sitio web. <br /> <br /> Dispersos por el sitio web del W3C hay DOCTYPEs con URIs perdidas, y DOCTYPEs con URIs relativas que apuntan a documentos en el propio sitio web del W3C. Una vez que son desplazados del sitio del W3C y utilizados en tus propias p&aacute;ginas web, dichas URIs apuntan a documentos no existentes, haciendo por tanto que sean en vano tus mayores esfuerzos y que fallen los navegadores. <br /> <br /> Por ejemplo, mucho sitios muestran estos DOCTYPEs, copiados y pegados directamente de w3.org:<br />
<pre class="code"> <br /><br /></pre>
Si te fijas en la &uacute;ltima parte del DOCTYPE (&ldquo;DTD/xhtml1-strict.dtd&rdquo;), podr&aacute;s ver que es un link relativo a un documento en el sitio del W3C. Partiendo de que este documento est&aacute; en el sitio web del W3C pero no en el tuyo, la URI carece de utilidad para el navegador. <br /> <br /> El DOCTYPE que te gustar&iacute;a utilizar es:<br /> Debes observar que este &uacute;ltimo DOCTYPE incluye una URI completa al final de la etiqueta. Y como la etiqueta proporciona una localizaci&oacute;n v&aacute;lida en la web, el navegador sabe d&oacute;nde encontrarla, y renderizar&aacute; tu documento en modo conforme con los est&aacute;ndares.<br />
<h3>DOCTYPES QUE FUNCIONAN</h3>
Entonces, &iquest;qu&eacute; DOCTYPEs deber&iacute;amos utilizar? Me alegro de que lo preguntes. Los siguientes DOCTYPEs completos son los &uacute;nicos que necesitamos: <br />
<h4>HTML 4.01 Strict, Transitional, Frameset</h4>
<pre class="code">
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"&gt;
</pre>
<h4>XHTML 1.0 Strict, Transitional, Frameset</h4>
<pre class="code">
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"&gt;
</pre>
<h4>XHTML 1.1 DTD</h4>
<pre class="code">
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"&gt;
</pre>
<h3>SIGUIENTES PASOS</h3>
&iquest;C&oacute;mo puedes colaborar a la mejora del soporte de los est&aacute;ndares en la web? Adem&aacute;s de agregar a favoriots esta p&aacute;gina (y copiar y pegar estos DOCTYPEs para tu propio uso), si tu editor web inserta DOCTYPEs, deber&iacute;as echarles un vistazo y compararlos con los listados arriba. <br /> <br /> Demasiados fabricantes de software bien-intencionados han copiado y pegado DOCTYPEs incompletos del W3C en su software. Resultado: cuando usas la funcionalidad de estos programas de insertar DOCTYPEs en tus p&aacute;ginas, los navegadores se ponen en modo Caprichoso, deshaciendo todo tu laborioso trabajo. <br /> <br /> Merece la pena contactar con la gente que hace tu paquete de autor favorito, mostr&aacute;ndoles los DOCTYPEs apropiados, y sugerirles cort&eacute;smente que tengan en cuenta este aspecto en la siguiente actualizaci&oacute;n. (En algunos casos, tambi&eacute;n ser&aacute;s capaz de <a href="http://www.alistapart.com/articles/dreamweaver/">modificar tu editor</a> por t&iacute; mismo.) <br /><br />Tenemos todas las razones para creer que el sitio del W3C lanzar&aacute; pronto una lista de DOCTYPES acertados, utilizables, y otra informaci&oacute;n esencial en una localizaci&oacute;n f&aacute;cil de encontrar. De hecho, Karl Dubost, Conformance Manager del equipo del W3C <a href="http://www.w3.org/QA/">Quality Assurance</a>, contribuy&oacute; a la informaci&oacute;n de este peque&ntilde;o art&iacute;culo. <br /> <br /> Del mismo modo, el relanzamiento de <a href="http://www.webstandards.org/">The Web Standards Project</a> proporciona en sus p&aacute;ginas <a href="http://www.webstandards.org/learn/templates/">esta informaci&oacute;n</a>.<br />]]></content:encoded>
			<wfw:commentRss>http://www.imaginanet.com/feeds.htm?blog=3</wfw:commentRss>
			<slash:comments>0</slash:comments>
			<feedburner:origLink>http://www.imaginanet.com/blog/arreglando-tu-pagina-web-con-el-doctype-correcto.html</feedburner:origLink>
		</item>
		</channel>
</rss>