<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2spanishfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><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>Tecla Macro</title>
	
	<link>http://www.fernandogermano.com</link>
	<description>El blog de Fernando Germano</description>
	<lastBuildDate>Fri, 03 Feb 2012 15:48:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/TeclaMacro" /><feedburner:info uri="teclamacro" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=es&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FTeclaMacro" src="http://eur.i1.yimg.com/eur.yimg.com/i/es/my/addto1.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.feedness.com/alta/http://feeds.feedburner.com/TeclaMacro" src="http://www.feedness.com/ayuda/wp-content/square_b_sh_feed.gif">Subscribe with Feedness</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FTeclaMacro" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/TeclaMacro" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FTeclaMacro" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FTeclaMacro" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FTeclaMacro" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FTeclaMacro" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FTeclaMacro" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FTeclaMacro" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FTeclaMacro" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FTeclaMacro" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FTeclaMacro" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FTeclaMacro" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FTeclaMacro" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FTeclaMacro" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Qué es Dart ?</title>
		<link>http://feedproxy.google.com/~r/TeclaMacro/~3/pHVvnIGxxsE/</link>
		<comments>http://www.fernandogermano.com/2012/02/03/que-es-dart/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 15:48:56 +0000</pubDate>
		<dc:creator>Fernando Germano</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Dart]]></category>

		<guid isPermaLink="false">http://www.fernandogermano.com/?p=671</guid>
		<description><![CDATA[Para aquellos desprevenidos que no se dan cuenta de lo que sucede  en el mundo resulta que hace rato que varios están tratando de matar a Javascript buscando un nuevo lenguaje, digamos "revolucionario" que logre la adopción por parte de los usuarios, generalmente basándose en resolver las limitaciones de Javascript, por ejemplo, y sin ir más [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><a href="http://www.fernandogermano.com/wp-content/uploads/2012/02/dart.jpg"><img class="alignleft size-full wp-image-674" title="Dart" src="http://www.fernandogermano.com/wp-content/uploads/2012/02/dart.jpg" alt="Dart" width="150" height="88" /></a>Para aquellos desprevenidos que no se dan cuenta de lo que sucede  en el mundo resulta que hace rato que varios están tratando de matar a Javascript buscando un nuevo lenguaje, digamos "revolucionario" que logre la adopción por parte de los usuarios, generalmente basándose en resolver las limitaciones de Javascript, por ejemplo, y sin ir más lejos el tema de la Orientación a Objetos de Javascript, discusiones aparte de cómo "simular" tal o cual feature de un lenguaje orientado a objetos la verdad es que estamos haciendo eso: simulando, y es ahí donde aparecen nuevos lenguajes todo el tiempo, buscando destronar al rey, para poner un ejemplo mencionemos a uno de los poquísimos casos de relativo éxito: Ruby que se centró básicamente en lo mismo que se centra Dart.</p>
<p>Pero que es <strong>Dart</strong> entonces?,  es una nueva apuesta para destronar a Javascript sí, pero por qué es tan especial? <span style="text-decoration: underline;">porque la apoya Google</span> y eso quiere decir mucho en estos tiempos, por un lado quiere decir que en poco tiempo estará soportado en Chrome (que por estos días a destronado a Firefox y va a la caza de IE a una velocidad impresionante), y por el otro y muy importante que imagino posible que empiecen a publicar parte de sus aplicaciones con versiones hechas en Dart para los navegadores compatibles.</p>
<ol>
<li>Ante todo está orientado a objetos: tiene clases, y tiene valores estáticos (entre otras cosas claro).</li>
<li>Está pensado con foco en la escalabilidad de las aplicaciones: Una aplicación Javascript de un tamaño considerable rápidamente se vuelve compleja de mantener, la idea de Dart es ofrecer alternativas para que una aplicación compleja sea mucho más sencilla de mantener de lo que es con Javascript.</li>
<li>Otro punto clave es la performance: Google sostiene que por más que los parsers sigan mejorando, el problema de fondo está en el lenguaje en sí mismo, de ahi que es necesario un cambio.</li>
<li>Finalmente la seguridad claro, poner tanto foco en la seguridad como sea posible.</li>
</ol>
<p>El futuro por ahora es incierto, pero bien vale mantenernos al tanto, por ahora, como buenos desarrolladores digamosle "Hola Mundo" al señor Dart...</p>
<pre>main() {
  print('Hola Mundo Dart!');
}</pre>
<p>Sigan sintonizando, en cualquier momento un poco más sobre Dart...</p>
<img src="http://www.fernandogermano.com/?ak_action=api_record_view&id=671&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/TeclaMacro/~4/pHVvnIGxxsE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fernandogermano.com/2012/02/03/que-es-dart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.fernandogermano.com/2012/02/03/que-es-dart/</feedburner:origLink></item>
		<item>
		<title>Posicionamiento en tiempo real con la Geolocation API</title>
		<link>http://feedproxy.google.com/~r/TeclaMacro/~3/u6qaALoGN8s/</link>
		<comments>http://www.fernandogermano.com/2010/11/30/posicionamiento-en-tiempo-real-con-la-geolocation-api/#comments</comments>
		<pubDate>Tue, 30 Nov 2010 20:51:25 +0000</pubDate>
		<dc:creator>Fernando Germano</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://www.fernandogermano.com/?p=664</guid>
		<description><![CDATA[Cuando hablamos de posicionamiento lo primero que se nos viene a la cabeza es saber dónde estamos en este momento. Pero también es interesante  conocer por dónde nos vamos moviendo para de esta forma decidir sobre una ruta a seguir o, por qué no, recibir ofertas según nuestra ubicación física a medida que la misma [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><a href="http://www.fernandogermano.com/wp-content/uploads/2010/11/geopin.jpg"><img class="alignleft size-full wp-image-656" title="Geolocation" src="http://www.fernandogermano.com/wp-content/uploads/2010/11/geopin.jpg" alt="Geolocation API" width="150" height="95" /></a>Cuando hablamos de posicionamiento lo primero que se nos viene a la cabeza es saber dónde estamos en este momento. Pero también es interesante  conocer por dónde nos vamos moviendo para de esta forma decidir sobre una ruta a seguir o, por qué no, recibir ofertas según nuestra ubicación física a medida que la misma cambia, la API de Geolocalización, la que comenzamos a describir hace un par de días nada más nos provee de ambas herramientas:</p>
<ol>
<li>La posibilidad de determinar nuestra posición en un momento dado.</li>
<li>Poder realizar un seguimiento de nuestra posición en tiempo real.</li>
</ol>
<p>Lo primero ya lo vimos en nuestro <a href="http://www.fernandogermano.com/2010/11/25/api-geolocalizacion-a-fondo/">artículo anterior</a>, para hacer lo segundo tenemos un nuevo método a conocer:</p>
<pre>var watchId = navigator.geolocation.watchPosition(fnPosicion, fnError, objOpciones);</pre>
<p>El método <em>watchPosition</em> recibe tres parámetros, una función a ejecutar cuando la lectura de posicionamiento se produjo en forma exitosa, una a ejecutar cuando las cosas no salieron de la forma en que lo esperábamos y por último un objeto Javascript con algunas opciones que se pueden configurar (las opciones ya las describimos en el artículo previo). Al igual que con <em>getCurrentPosition</em>,  sólo el primero de los parámetros es obligatorio y recibe un objeto <em>Position</em> (el que también describimos).</p>
<p>La diferencia entre este método y <em>getCurrentPosition</em> es que la función <em>fnPosicion</em> se ejecutará <strong>cada vez que la posición cambie</strong>, cómo funciona entonces?</p>
<ol>
<li>Una vez ejecutada la función esta retorna un ID (la variable <em>watchID </em> en nuestro ejemplo) que identifica al "watch" que ejecutará nuestra función callback en forma continua. El método intenta retornar un objeto Position y si lo hace ejecuta la función fnPosicion. En caso contrario, y si fue definida, se ejecuta la función fnError.</li>
<li>Cada vez que la posición cambia (lo cual depende de la implementación) se ejecuta la función callback con el nuevo objeto Position como parámetro.</li>
</ol>
<p>Un ejemplo vale más que mil palabras...</p>
<pre>navigator.geolocation.watchPosition(function(posicion) {
  document.getElementById('Latitud').innerHTML = posicion.coords.latitude;
  document.getElementById('Longitud').innerHTML = posicion.coords.longitude;
});</pre>
<p>Y ya tenemos nuestro monitor de posición en tiempo real...</p>
<p>Lo único que nos resta conocer es como "apagar" nuestro monitor de posición y para eso es que tenemos el ID que el método <em>watchPosition</em> nos devolvió:</p>
<pre>navigator.geolocation.clearWatch(watchId);</pre>
<p>Este último método nos permite detener la ejecución de nuestra función callback y la recolección de posiciones.</p>
<p>Es importante destacar que, en general, las lecturas sucesivas de una posición van mejorando su exactitud, sobre todo si la lectura del posicionamiento se basa en triangulación GSM en lugar de posiciones GPS (de nuevo, el método a utilizar depende de la implementación). En una implementación típica de triangulación GSM la primer lectura de posición es muy probable que sea la posición de la antena a la que estamos conectados lo cual es prácticamente inútil para nuestros objetivos por lo que es buena idea al menos darle "un tiempito" para que se estabilice la lectura mediante un watch.</p>
<img src="http://www.fernandogermano.com/?ak_action=api_record_view&id=664&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/TeclaMacro/~4/u6qaALoGN8s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fernandogermano.com/2010/11/30/posicionamiento-en-tiempo-real-con-la-geolocation-api/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.fernandogermano.com/2010/11/30/posicionamiento-en-tiempo-real-con-la-geolocation-api/</feedburner:origLink></item>
		<item>
		<title>La API de Geolocalización a fondo</title>
		<link>http://feedproxy.google.com/~r/TeclaMacro/~3/v75LAYetpTU/</link>
		<comments>http://www.fernandogermano.com/2010/11/25/api-geolocalizacion-a-fondo/#comments</comments>
		<pubDate>Thu, 25 Nov 2010 19:02:39 +0000</pubDate>
		<dc:creator>Fernando Germano</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://www.fernandogermano.com/?p=644</guid>
		<description><![CDATA[Cuando allá lejos en el tiemplo hablamos de la comentamos de qué se trataba pero no ahondamos en un ejemplo, creo que es un buen momento entonces para hacerlo. Lo primero que debemos comprender es que la "Geolocation API" es un estándar impulsado por el W3C y como tal, toda aplicación que hagamos que cumpla [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><a href="http://www.fernandogermano.com/wp-content/uploads/2010/11/geopin.jpg"><img class="alignleft size-full wp-image-656" title="Geolocation" src="http://www.fernandogermano.com/wp-content/uploads/2010/11/geopin.jpg" alt="Geolocation API" width="150" height="95" /></a>Cuando allá lejos en el tiemplo hablamos de la <a href="http://www.fernandogermano.com/2010/03/16/geolocalizacion-con-html5-chrome/">Geolocalización con HTML5</a> comentamos de qué se trataba pero no ahondamos en un ejemplo, creo que es un buen momento entonces para hacerlo.</p>
<p>Lo primero que debemos comprender es que la "Geolocation API" es un estándar impulsado por el W3C y como tal, toda aplicación que hagamos que cumpla con este estándar va a funcionar en todo dispositivo que lo respete, así, hoy en día la mayoría de los browsers soportan la interfaz en cuestión (excepto IE) y nos permite su uso.</p>
<p>Para comenzar, el objeto en cuestión que vamos a conocer se encuentra debajo de <strong><em>navigator</em></strong>, se llama<em> geolocation</em> y tiene un método principal llamado <em>getCurrentPosition</em></p>
<pre>navigator.geolocation.getCurrentPosition(fnOK, fnError, objOpciones);</pre>
<p>El método getCurrentPosition recibe además tres parámetros, una función a ejecutar en caso que todo haya salido bien, una a ejecutar cuando las cosas no salieron de la forma en que lo esperábamos y por último un objeto Javascript con algunas opciones que se pueden configurar (más en breve). Es importante destacar que<em> <span style="text-decoration: underline;">sólo el primero de los parámetros es obligatorio</span></em>.</p>
<p>Este método <strong>obtiene la posición geográfica del usuario</strong> y ejecuta la función que aquí hemos decidido llamar fnOK con un parámetro, un objeto del tipo Position que recibe las coordenadas obtenidas.</p>
<pre>function fnOK(Posicion) {
    document.getElementById('Latitud').innerHTML = Posicion.coords.latitude;
    document.getElementById('Longitud').innerHTML = Posicion.coords.longitude;
}</pre>
<p>Tan sencillo como eso y con esta simple función ya logramos tener en un SPAN, DIV o lo que querramos dibujadas nuestras coordenadas geográficas.</p>
<p>El objeto Posicion tiene otros atributos que completan la información de posicionamiento y que dependiendo de la implementación pueden ser de mayor o menor utilidad:</p>

<table id="wp-table-reloaded-id-6-no-1" class="wp-table-reloaded wp-table-reloaded-id-6">
<thead>
	<tr class="row-1">
		<th class="column-1">Atributo</th><th class="column-2">Descripción</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2">
		<td class="column-1">latitude</td><td class="column-2">Latitud expresada en grados decimales</td>
	</tr>
	<tr class="row-3">
		<td class="column-1">longitude</td><td class="column-2">Longitud expresada en grados decimales</td>
	</tr>
	<tr class="row-4">
		<td class="column-1">altitude </td><td class="column-2">Altitud expresada en metros.</td>
	</tr>
	<tr class="row-5">
		<td class="column-1">accuracy </td><td class="column-2">Nivel de exactitud de la lectura de longitud y latitud, medida en metros</td>
	</tr>
	<tr class="row-6">
		<td class="column-1">altitudeAccuracy </td><td class="column-2">Nivel de exactitud de la lectura de altitud medida en metros.</td>
	</tr>
	<tr class="row-7">
		<td class="column-1">heading </td><td class="column-2">Dirección en que nos dirijimos, en grados respecto al Norte.</td>
	</tr>
	<tr class="row-8">
		<td class="column-1">speed</td><td class="column-2">Velocidad a la que estamos viajando.</td>
	</tr>
</tbody>
</table>

<p>Avanzando un poco más en nuestra implementación debemos pensar que sucede si algo falla y en este caso es bastante posible que lo haga ya que la disponibilización de la información geográfica es una decisión del usuario, cuando entramos a un sitio que hace uso de los métodos que aquí describimos el usuario verá un mensaje de alerta al respecto y el browser le preguntará si desea compartir su información.</p>
<pre>function fnError(error) {
    alert('Error occurred. Error code: ' + error.code);
}</pre>
<p>La función fnError recibe un objeto que contiene el código de error correspondiente:</p>

<table id="wp-table-reloaded-id-5-no-1" class="wp-table-reloaded wp-table-reloaded-id-5">
<thead>
	<tr class="row-1">
		<th class="column-1">Código</th><th class="column-2">Descripción</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2">
		<td class="column-1">0</td><td class="column-2">Error Desconocido - Cualquier causa que no cuadra dentro de los restantes códigos de error.</td>
	</tr>
	<tr class="row-3">
		<td class="column-1">1</td><td class="column-2">Permiso Denegado - El usuario no aceptó compartir su posición.</td>
	</tr>
	<tr class="row-4">
		<td class="column-1">2</td><td class="column-2">Posición no Disponible - Ocurrió un fallo al intentar obtener la posición, puede ser un fallo de hardware por ejemplo.</td>
	</tr>
	<tr class="row-5">
		<td class="column-1">3</td><td class="column-2">Time Out - Similar al anterior pero en este caso falló por time out, es decir, todo estaba dado para obtener la posición pero al cabo de un tiempo prodencial no se pudo cumplir con el pedido.</td>
	</tr>
</tbody>
</table>

<p>Finalmente, el último de nuestros parámetros originales es el objeto que nos permite definir configuraciones a la forma en que trabaja nuestra API:</p>

<table id="wp-table-reloaded-id-7-no-1" class="wp-table-reloaded wp-table-reloaded-id-7">
<thead>
	<tr class="row-1">
		<th class="column-1">Atributo</th><th class="column-2">Descripción</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2">
		<td class="column-1">enableHighAccuracy</td><td class="column-2">Un valor boolean que determina si queremos que nuestra lectura tenga una mayor precisión. Este valor puede o no hacer alguna diferencia y dependerá del hardware.</td>
	</tr>
	<tr class="row-3">
		<td class="column-1">timeout</td><td class="column-2">Cuánto tiempo podemos esperar antes de decir que la llamada falló por timeout. Expresado en milisegundos.</td>
	</tr>
	<tr class="row-4">
		<td class="column-1">maximumAge</td><td class="column-2">Dado que las lecturas de posición se pueden cachear, este valor determina la antigüedad máxima que una entrada de cache puede tener. Expresada en milisegundos.</td>
	</tr>
</tbody>
</table>

<p>Traduciendo esto entonces a nuestro ejemplo original:</p>
<pre>var objOpciones = {enableHighAccuracy:true, maximumAge:30000, timeout:27000};</pre>
<p>Suficiente por hoy, en próximas entregas voy a seguir mostrando las alternativas que ofrece esta API. Por lo pronto los dejo con un ejemplo de cómo podría ser una integración con Google Maps, espero que lo disfruten:</p>
<pre>function fnOK(posicion) {
	var latlng = new google.maps.LatLng(posicion.coords.latitude, posicion.coords.longitude);
	var myOpciones = {
		zoom: 15,
		center: latlng,
		mapTypeControl: false,
		navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	var mapa = new google.maps.Map(document.getElementById("myMapa"), myOpciones);

	var marker = new google.maps.Marker({
		position: latlng,
		map: mapa,
		title:"Aca estas!"
	});
}

if (navigator.geolocation) {
	navigator.geolocation.getCurrentPosition(fnOK);
} else {
	alert('No se puede utilizar GeoLocation en este navegador');
}</pre>
<img src="http://www.fernandogermano.com/?ak_action=api_record_view&id=644&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/TeclaMacro/~4/v75LAYetpTU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fernandogermano.com/2010/11/25/api-geolocalizacion-a-fondo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.fernandogermano.com/2010/11/25/api-geolocalizacion-a-fondo/</feedburner:origLink></item>
		<item>
		<title>El nuevo campeón: IE9 preview 7</title>
		<link>http://feedproxy.google.com/~r/TeclaMacro/~3/2zEfOPjSnx0/</link>
		<comments>http://www.fernandogermano.com/2010/11/18/el-nuevo-campeon-ie9-preview-7/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 21:09:43 +0000</pubDate>
		<dc:creator>Fernando Germano</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.fernandogermano.com/?p=625</guid>
		<description><![CDATA[Siendo que así terminamos la última vez que escribí me pareció respetuoso cuando menos retomar esta senda escribiendo una vez más de nuestro nuevo amigo: Internet Explorer 9. Vamos ya por la versión 7 de sus Previews y la cosa parece que se encamina de a poquito, antes ya decíamos que bien podríamos estar frente a la [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><a href="http://www.fernandogermano.com/wp-content/uploads/2009/11/ie-logo.png"><img class="alignleft size-thumbnail wp-image-264" title="Logo Internet Explorer" src="http://www.fernandogermano.com/wp-content/uploads/2009/11/ie-logo-150x150.png" alt="Logo Internet Explorer" width="150" height="150" /></a>Siendo que así terminamos la última vez que escribí me pareció respetuoso cuando menos retomar esta senda escribiendo una vez más de nuestro nuevo amigo: Internet Explorer 9.</p>
<p>Vamos ya por la versión 7 de sus Previews y la cosa parece que se encamina de a poquito, antes ya decíamos que bien podríamos estar frente a la versión que "revolucione" la historia de IE y parece con el correr del tiempo se va confirmando esta sensación, cada nueva "Developer Preview" que se libera parece mejorar en algo sobre la anterior y sobre todo en el cumplimiento de los estándares, tanto que estamos presenciando algo histórico, IE está superando a sus rivales más cercanos según las pruebas de la mismísima W3C:</p>

<table id="wp-table-reloaded-id-4-no-1" class="wp-table-reloaded wp-table-reloaded-id-4">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">Feature</th><th class="column-2">Internet Explorer 9 Platform Preview 6</th><th class="column-3">Chromium 9.0.571.0 (64851)</th><th class="column-4">Firefox 4.0b8pre</th><th class="column-5">Opera 11.00 alpha (build 1029)</th><th class="column-6">WebKit Nightly Build r70732</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2 even">
		<td class="column-1">attributes</td><td class="column-2">100%</td><td class="column-3">100%</td><td class="column-4">100%</td><td class="column-5">100%</td><td class="column-6">100%</td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1">audio</td><td class="column-2">100%</td><td class="column-3">100%</td><td class="column-4">100%</td><td class="column-5">100%</td><td class="column-6">100%</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1">canvas</td><td class="column-2">89.55%</td><td class="column-3">93.08%</td><td class="column-4">75.47%</td><td class="column-5">85.35%</td><td class="column-6">94.34%</td>
	</tr>
	<tr class="row-5 odd">
		<td class="column-1">getelementsbyclassname</td><td class="column-2">83.33%</td><td class="column-3">100%</td><td class="column-4">100%</td><td class="column-5">94.44%</td><td class="column-6">100%</td>
	</tr>
	<tr class="row-6 even">
		<td class="column-1">foreigncontent</td><td class="column-2">100%</td><td class="column-3">100%</td><td class="column-4">100%</td><td class="column-5">0%</td><td class="column-6">100%</td>
	</tr>
	<tr class="row-7 odd">
		<td class="column-1">video</td><td class="column-2">100%</td><td class="column-3">85.71%</td><td class="column-4">78.57%</td><td class="column-5">78.57%</td><td class="column-6">85.71%</td>
	</tr>
	<tr class="row-8 even">
		<td class="column-1">xhtml5</td><td class="column-2">100%</td><td class="column-3">42.86%</td><td class="column-4">85.71%</td><td class="column-5">100%</td><td class="column-6">42.86%</td>
	</tr>
</tbody>
</table>

<p>Estos resultados no son poca cosa definitivamente han hecho una mejora importante, aunque, si le buscamos la vuelta podríamos decir que el suite de pruebas que está utilizando la W3C no es TAN completo como el de <a href="http://html5test.com/" target="_blank">otros servicios similares</a> pero de nuevo, es mejor de lo que esperábamos...</p>
<p>El otro gran punto de discusión en estos tiempos que corren es la performance del motor de Javascript y aquí nuevamente el IE9 parece coronarse como el campeón absoluto...</p>
<p style="text-align: center;"><a href="http://www.fernandogermano.com/wp-content/uploads/2010/11/IE9-Preview7-JS-Performance.png"><img class="size-full wp-image-629  aligncenter" title="IE9 Preview 7 JavasScript Performance" src="http://www.fernandogermano.com/wp-content/uploads/2010/11/IE9-Preview7-JS-Performance.png" alt="Performance de Javascript en la Preview 7 de IE9" width="589" height="416" /></a></p>
<p style="text-align: left;">De nuevo, estos resultados no son poca cosa, claro, estamos hablando de diferencias ínfimas entre los navegadores, pero pongamos en perspectiva la mejora..., se ve en el gráfico lo que tarda IE8 pero recordemos que la Preview 2 de IE9 utilizaba unos 500 ms para terminar el mismo test !</p>
<p style="text-align: left;">Cómo lograron esto?, para hacerlo sencillo entre las mejoras más notables del nuevo motor JavaScript del IE9 ("Chakra") tenemos que elimina el código que "inútil", aquel que nunca será ejecutado por ejemplo por una condición que no hay forma que se cumpla, para poner un ejemplo sencillo:</p>
<p style="text-align: left;">
<pre>var x = 8;
if (x == 4) {
    // Código que nunca será ejecutado
    // ...
}</pre>
<p style="text-align: left;">Lo que tenemos dentro de ese "if" no hay forma que se ejecute entonces el equipo de IE decidió que no tiene sentido gastar tiempo en compilar siquiera ese código por lo que directamente lo "elimina" por así decirlo.<br />
Este tipo de soluciones no son nada revolucionario, existen hace mucho pero la implementación de las mismas tiene sus desafíos y así, salieron ya las primeras voces a demostrar que el test que hizo el equipo de MS no está bien y que en realidad el IE9 no es tan rápido como claman, básicamente lo que sostienen es que MS hizo trampa, configurando su motor de Javascript para que funcione bien para este set de pruebas en particular pero que en la vida real no hay forma que funcione bien este eliminación de código tan agresiva sin dar lugar a posibles errores.<br />
Para aquellos que nos gusta la programación la explicación es realmente muy interesante y recomiendo leerla si tienen ganas de pensar un rato, pero por favor dejemos de lado las suspicacias, que sea uno de los principales ingenieros de Javascript de Mozilla quien presente <a href="http://blog.mozilla.com/rob-sayre/2010/11/17/dead-code-elimination-for-beginners/" target="_blank">la teoría</a> nada tiene que ver...</p>
<p style="text-align: left;">Dejando esto último de lado, a mi gusto es impresionante hasta aquí lo que han conseguido, poco que decir, IE9 bien podría ser el navegador que IE debió ser mucho tiempo atrás, le tomo tiempo que parece que lo está consiguiguiendo definitivamente.</p>
<img src="http://www.fernandogermano.com/?ak_action=api_record_view&id=625&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/TeclaMacro/~4/2zEfOPjSnx0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fernandogermano.com/2010/11/18/el-nuevo-campeon-ie9-preview-7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.fernandogermano.com/2010/11/18/el-nuevo-campeon-ie9-preview-7/</feedburner:origLink></item>
		<item>
		<title>IE9 preview 2 ya está entre nosotros</title>
		<link>http://feedproxy.google.com/~r/TeclaMacro/~3/_1bFPiTzUGI/</link>
		<comments>http://www.fernandogermano.com/2010/05/06/ie9-preview-2-ya-esta-entre-nosotros/#comments</comments>
		<pubDate>Thu, 06 May 2010 13:00:08 +0000</pubDate>
		<dc:creator>Fernando Germano</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://www.fernandogermano.com/?p=615</guid>
		<description><![CDATA[El desarrollo del IE9 sigue avanzando, en Marzo último,  y ahora, menos de dos meses después sale la segunda versión, siempre hablando de versiones preliminares para programadores. Esta nueva versión es por supuesto evolutiva sobre la anterior, y lo primero que queremos ver es si estamos mejorando en el cumplimiento de los estándares en esta [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><img class="alignleft size-thumbnail wp-image-264" title="Logo Internet Explorer" src="http://www.fernandogermano.com/wp-content/uploads/2009/11/ie-logo-150x150.png" alt="Logo Internet Explorer" width="150" height="150" />El desarrollo del IE9 sigue avanzando, en Marzo último, <a href="http://www.fernandogermano.com/2010/03/19/ie9-el-proximo-internet-explorer/">Microsoft presentó la primer Beta para programadores</a> y ahora, menos de dos meses después sale la segunda versión, siempre hablando de versiones preliminares para programadores.</p>
<p>Esta nueva versión es por supuesto evolutiva sobre la anterior, y lo primero que queremos ver es si estamos mejorando en el cumplimiento de los estándares en esta nueva versión...</p>
<div id="attachment_616" class="wp-caption aligncenter" style="width: 503px"><img class="size-full wp-image-616" title="IE9 preview2 ACID3 test" src="http://www.fernandogermano.com/wp-content/uploads/2010/05/IE9_preview2_ACID3.png" alt="Resultado ACID3 de la Preview 2 de IE9" width="493" height="337" /><p class="wp-caption-text">Resultado ACID3 de la Preview 2 de IE9</p></div>
<p>Repito lo que dije antes, estamos muy lejos del 100/100 de Chrome pero un 68/100 es una mejora sobre el 55/100 que teníamos en la anterior preview (y ni hablar del 12/100 de IE8), si seguimos así todo hace suponer que llegar al 100/100 no es una utopía para el equipo de Internet Explorer 9.</p>
<p>El otro punto que están atacando fuertemente es el motor Javascript...</p>
<div id="attachment_618" class="wp-caption aligncenter" style="width: 460px"><img class="size-full wp-image-618" title="IE9 Preview2 JavaScript performance" src="http://www.fernandogermano.com/wp-content/uploads/2010/05/IE9_preview2_JS.png" alt="Performance de JavaScript en la Preview 2 de IE9" width="450" height="318" /><p class="wp-caption-text">Performance de JavaScript en la Preview 2 de IE9</p></div>
<p>De nuevo una mejora sobre la versión anterior, una mejora de un 20% respecto a la preview anterior no está nada mal realmente, pero está lejos todavía de lo que la versión estable de Chrome (la 4) puede ofrecer y ni hablar de la versión 5 que se presenta como imbatible, aunque hay que destacar que ganarle a Firefox es un mensaje importante.</p>
<p>Por otro lado, no sólo de velocidad se trata el mundo y así, IE9 suma algunos cambios importantes a su motor JS, entre los más importantes aparecen el evento "DOM ready" (DOMContentLoaded), rangos DOM, y métodos como <em>getElementByClassName</em>, y <em>createDocument</em>.</p>
<p>Por último, bien valen las palabras del equipo de desarrollo de IE9 ante le pregunta de si se acabó la guerra de los navegadores..</p>
<blockquote><p>El soporte de los estándares por parte de IE9, lo acerca mucho más a Gecko, Presto y las diferentes versiones de Webkit, que IE7.</p></blockquote>
<p>Es decir, el markup que escribamos se debería ver igual en todos los navegadores, les creemos?</p>
<p>Para la próxima versión preview se espera por fin el soporte para el tag VIDEO de HTML5, vamos a ver cómo se porta, sobre todo con el ya famoso <a href="http://www.fernandogermano.com/2010/04/28/el-universo-de-codecs-de-html5/">problema de los codecs</a>.</p>
<img src="http://www.fernandogermano.com/?ak_action=api_record_view&id=615&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/TeclaMacro/~4/_1bFPiTzUGI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fernandogermano.com/2010/05/06/ie9-preview-2-ya-esta-entre-nosotros/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.fernandogermano.com/2010/05/06/ie9-preview-2-ya-esta-entre-nosotros/</feedburner:origLink></item>
		<item>
		<title>El universo de codecs de HTML5</title>
		<link>http://feedproxy.google.com/~r/TeclaMacro/~3/zh3LikMty1k/</link>
		<comments>http://www.fernandogermano.com/2010/04/28/el-universo-de-codecs-de-html5/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 13:00:02 +0000</pubDate>
		<dc:creator>Fernando Germano</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://www.fernandogermano.com/?p=610</guid>
		<description><![CDATA[Hace poco veíamos , y les contaba que hay diferencias sutiles en la forma en que los dominantes (lease, Chrome y Firefox) implementan el estándar, pero no discutimos mucho de eso. Hoy en día estas diferencias radican ya no tanto sobre el navegador que soporte tal o cual tag sino en los codecs que implementan a [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><img class="alignleft size-thumbnail wp-image-255" title="Logo Google Chrome" src="http://www.fernandogermano.com/wp-content/uploads/2009/11/chrome-logo-150x150.png" alt="" width="150" height="150" />Hace poco veíamos <a href="http://www.fernandogermano.com/2010/04/27/compatibilidad-de-los-navegadores-con-html5/">cómo se comporta cada navegador con HTML5</a>, y les contaba que hay diferencias sutiles en la forma en que los dominantes (lease, Chrome y Firefox) implementan el estándar, pero no discutimos mucho de eso.</p>
<p>Hoy en día estas diferencias radican ya no tanto sobre el navegador que soporte tal o cual tag sino en los codecs que implementan a fin de soportar la reproducción nativa de audio y video de HTML5.</p>
<p>Entre la batalla de los codecs entonces tenemos dos grandes grupos: por un lado tenemos aquellos que opinan seguir con la línea basada en H.264 (los videos de flash utilizan este codec), donde tenemos a Microsoft, Apple y Google. Y por el otro lado tenemos a Mozilla que lo rechaza porque está basado en un estándar cerrado (aunque es de licencia gratuita para el implementador). Mozilla entonces no soporta H.264 y propone la utilización de <em>Ogg Theora</em>, que a diferencia del primero es un estándar sí libre en el amplio sentido de la palabra pero no es muy aceptado entre otras cosas porque es técnicamente inferior a H.264.</p>
<p>Claramente esta situación a los únicos que perjudica es a los programadores que una vez más debemos decidirnos para un lado u otro de la balanza, aunque todo indica al momento que Mozilla lleva las de perder.</p>
<p>Pero hay un tercero en discordia, el propio Google con una compra que hizo el año pasado:  <em>On2 Technologies</em>, y con la compra de ésta empresa, se hizo dueño del codec <em><strong>VP8</strong></em>. De primera impresión esta compra parece un poco difícil de entender si unas líneas antes dije que Google soporta H.264, pero primero veamos quién es On2:</p>
<ol>
<li>Empecemos por atrás: la versión VP3 de su codec es ni más ni menos que la base de Ogg Theora.</li>
<li>VP6 fue adoptado por Adobe para Flash desde el 2005 y actualmente lo sigue utilizando.</li>
<li>VP7 es el códec que utliza Skype.</li>
</ol>
<p>Casi nada no?, qué propone la versión VP8 entonces?, bueno, esta nueva versión dice superar en calidad, compresión y uso de procesador a H.264, y todo parece indicar que lo consigue, aunque no es el mejor ejemplo, hay una buena captura en el sitio <a rel="nofollow" href="http://www.on2.com/index.php?599" target="_blank">sitio oficial de VP8</a> mostrando de lo que es capaz:</p>
<div id="attachment_612" class="wp-caption aligncenter" style="width: 540px"><img class="size-full wp-image-612 " title="H264 vs VP8" src="http://www.fernandogermano.com/wp-content/uploads/2010/04/vp8.jpg" alt="H264 vs VP8" width="530" height="264" /><p class="wp-caption-text">H264 vs VP8</p></div>
<p>Nada mal en los papeles..., y la noticia de la semana es que aparentemente Google estaría a punto de anunciar que liberará el código de VP8, de ser así, creo que se encamina a ser el estándar definitivo, sobre todo si como es de esperarse, YouTube lo adopta rápidamente.</p>
<p>Un golpe más para el pobre Flash sin lugar a dudas...</p>
<img src="http://www.fernandogermano.com/?ak_action=api_record_view&id=610&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/TeclaMacro/~4/zh3LikMty1k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fernandogermano.com/2010/04/28/el-universo-de-codecs-de-html5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.fernandogermano.com/2010/04/28/el-universo-de-codecs-de-html5/</feedburner:origLink></item>
		<item>
		<title>Compatibilidad de los navegadores con HTML5</title>
		<link>http://feedproxy.google.com/~r/TeclaMacro/~3/NGicZsJ91vc/</link>
		<comments>http://www.fernandogermano.com/2010/04/27/compatibilidad-de-los-navegadores-con-html5/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 19:46:33 +0000</pubDate>
		<dc:creator>Fernando Germano</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet Explorer]]></category>

		<guid isPermaLink="false">http://www.fernandogermano.com/?p=602</guid>
		<description><![CDATA[Siendo que HTML5 está cada vez más cerca me parece oportuno presentarles una breve reseña de cómo cada navegador está cumpliendo con el nuevo estándar. Seguramente a todos son familiares los tests ACID, el punto de referencia indiscutido a la hora de discernir si un navegador cumple o no con los estándares de la W3C. De [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><img class="aligncenter size-full wp-image-489" title="Logos de Navegadores" src="http://www.fernandogermano.com/wp-content/uploads/2010/04/navegadores.jpg" alt="" width="580" height="126" /></p>
<p>Siendo que HTML5 está cada vez más cerca me parece oportuno presentarles una breve reseña de cómo cada navegador está cumpliendo con el nuevo estándar.</p>
<p>Seguramente a todos son familiares los tests <a rel="nofollow" href="http://www.acidtests.org/" target="_blank">ACID</a>, el punto de referencia indiscutido a la hora de discernir si un navegador cumple o no con los estándares de la W3C. De la misma forma ha surgido el referente para las pruebas de compatibilidad con HTML5, esta vez no de la mano de la misma gente (extraño para mi) sino desde un programador solitario que puso manos a la obra y armó un set que <a rel="nofollow" href="http://html5test.com/" target="_blank">verifica la compatibilidad con HTML5</a>:</p>
<ol>
<li>Soporte a los tags AUDIO y VIDEO.</li>
<li>Soporte a codecs específicos que deben ser soportados.</li>
<li>Soporte al CANVAS.</li>
<li>Web workers.</li>
<li>Almacenamiento local.</li>
<li>Aplicaciones Offline.</li>
<li>Un grupo importante de los nuevos tags de HTML5.</li>
</ol>
<p>Una buena prueba y el resultado se da en forma de un índice numérico que va de 1 a 160, siendo esta última la nota más alta. Veamos entonces cómo se comportaron los navegadores más populares:</p>
<h3>Compatibilidad de Internet Explorer con HTML5</h3>
<p>Arranquemos nuestra prueba por la última versión estable de Internet Explorer, la 8:</p>
<div id="attachment_592" class="wp-caption aligncenter" style="width: 460px"><img class="size-full wp-image-592" title="Test de HTML5 para IE8" src="http://www.fernandogermano.com/wp-content/uploads/2010/04/html5test_ie8.png" alt="Test de HTML5 para IE8" width="450" height="304" /><p class="wp-caption-text">Test de HTML5 para IE8</p></div>
<p>El navegador más usado en su última versión estable logra un pálido 19. No es de extrañar si pensamos en que este mismo navegador aún tiene problemas para culminar el set ACID, lo que sí es extraño es que la versión preliminar del <a href="http://www.fernandogermano.com/2010/03/19/ie9-el-proximo-internet-explorer/">IE9</a> logra el mismo resultado. Dada la forma en que vienen anunciando su compatibilidad con HTML5 yo esperaba algo más.</p>
<h3>Compatibilidad de Firefox con HTML5</h3>
<p>De la gente de Mozilla esperamos mucho más y no defrauda...</p>
<div id="attachment_593" class="wp-caption aligncenter" style="width: 460px"><img class="size-full wp-image-593" title="Test de HTML5 para Firefox" src="http://www.fernandogermano.com/wp-content/uploads/2010/04/html5test_firefox.png" alt="Test de HTML5 para Firefox" width="450" height="297" /><p class="wp-caption-text">Test de HTML5 para Firefox</p></div>
<p>Con la última versión estable de Firefox (la 3.6.3) la cosa toma otro color, un muy respetable 101 es otra cosa y si entramos en detalle vamos a ver que cumple con todo lo que debería cumplir a esta altura de las cosas, fallando en algunos codecs que faltan más que nada.</p>
<h3>Compatibilidad de Chrome con HTML5</h3>
<p>Google sigue un paso adelante...</p>
<div id="attachment_594" class="wp-caption aligncenter" style="width: 460px"><img class="size-full wp-image-594" title="Test de HTML5 para Chrome" src="http://www.fernandogermano.com/wp-content/uploads/2010/04/html5test_chrome.png" alt="Test de HTML5 para Chrome" width="450" height="291" /><p class="wp-caption-text">Test de HTML5 para Chrome</p></div>
<p>No esperaba menos de Google y su Chrome, siendo que son ellos quiénes más empujan la aceptación de HTML5 es lógico un resultado de estas características donde la última versión estable de Chrome cumple con todo y sólo flaquea en la compatibilidad de geolocalización la cual tanto en Chrome como en Firefox es habilitable mediante una configuración pero a los efectos de este test me pareció interesante dejarlos tal cual vienen.</p>
<h3>En resumen</h3>
<p>Se dice por ahí que el estándard HTML5 no va a estar plenamente aceptado antes del 2020 pero la verdad es que a la luz de estos resultados yo lo empiezo a dudar, estamos complicados con Internet Explorer (como siempre) pero para el resto tenemos por delante grandes cosas.</p>
<img src="http://www.fernandogermano.com/?ak_action=api_record_view&id=602&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/TeclaMacro/~4/NGicZsJ91vc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fernandogermano.com/2010/04/27/compatibilidad-de-los-navegadores-con-html5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.fernandogermano.com/2010/04/27/compatibilidad-de-los-navegadores-con-html5/</feedburner:origLink></item>
		<item>
		<title>Cómo definir correctamente la región de nuestros sitios</title>
		<link>http://feedproxy.google.com/~r/TeclaMacro/~3/SnfR0OaV7rA/</link>
		<comments>http://www.fernandogermano.com/2010/04/22/como-definir-correctamente-la-region-de-nuestros-sitios/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 15:16:33 +0000</pubDate>
		<dc:creator>Fernando Germano</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Bing]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.fernandogermano.com/?p=595</guid>
		<description><![CDATA[En alguna ocasión ya hemos hablado de Bing, , lo que en su momento quizás no quedó del todo claro es que este motor es bastante particular a la hora de decidir como posicionar nuestros sitios, todo un desafío SEO. Hoy nos vamos a concentrar en un problema típico de Bing aunque en realidad afecta [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><img class="alignleft size-full wp-image-596" title="Logo de Bing" src="http://www.fernandogermano.com/wp-content/uploads/2010/04/bing-logo-mini.png" alt="Logo de Bing" width="150" height="78" />En alguna ocasión ya hemos hablado de Bing, <a href="http://www.fernandogermano.com/2009/11/05/bing-lanza-su-nuevo-crawler/">el motor de búsqueda de Microsoft</a>, lo que en su momento quizás no quedó del todo claro es que este motor es bastante particular a la hora de decidir como posicionar nuestros sitios, todo un desafío SEO. Hoy nos vamos a concentrar en un problema típico de Bing aunque en realidad afecta a todos los buscadores en mayor o menor medida: <strong>Cómo lograr que mis sitios aparezcan en los resultados de búsqueda local de la región correcta</strong>.</p>
<p>Como dije antes, este problema afecta a todos por igual, pero en el caso Google se puede resolver mediante las Webmaster Tools, indicando al buscador a que región está orientado nuestro sitio en las opciones de Configuración por lo que muchos webmasters pasan por alto lo que aquí vamos a discutir.</p>
<div id="attachment_597" class="wp-caption aligncenter" style="width: 460px"><img class="size-full wp-image-597" title="Configuración Regional Google Webmaster Tools" src="http://www.fernandogermano.com/wp-content/uploads/2010/04/config-regional-gwt.png" alt="Configuración Regional Google Webmaster Tools" width="450" height="74" /><p class="wp-caption-text">Configuración Regional en las Google Webmaster Tools</p></div>
<p>Por el momento lamentablemente, las herramientas para Webmasters de Bing no son tan poderosas como las de Google, cómo hacen entonces los motores de búsqueda para determinar a qué región está orientado nuestro sitio?, sencillamente se toman dos variables en cuenta:</p>
<ol>
<li>El idioma de nuestra página.</li>
<li>La IP de nuestro sitio (la cual depende de nuestro proveedor de hosting).</li>
</ol>
<p>Sabiendo esto ya podemos empezar a entender por dónde viene el problema, veamos entonces qué necesitamos hacer para resolverlo...</p>
<h3>1. Definir correctamente el juego de caracteres</h3>
<p>Primero que nada tenemos que indicar claramente a nuestro buscador qué juego de caracteres utilizamos, para esto primero debemos establecer el tipo MIME del contenido que estamos enviando para al mismo tiempo definir dicho juego de caracteres, todo eso lo hacemos con una línea:</p>
<pre>&lt;meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type" /&gt;</pre>
<p>Este tag es fundamental no sólo para el buscador sino para nuestros clientes, indica a los navegadores (y por supuesto los crawlers) cómo identificar los caracteres especiales, por ejemplo los acentos, para evitar sorpresas desagradables o recurrir a las <a rel="nofollow" href="http://www.w3schools.com/tags/ref_entities.asp" target="_blank">entidades HTML</a>.</p>
<p>La selección del juego de caracteres correcto depende directamente del idioma que utilicemos, así, existen muchas posibilidades, pero el ISO-8859 y el UTF-8 son dos de los más utilizados.</p>
<h3>2. Definir correctamente el idioma de nuestras páginas</h3>
<p>Definido el juego de caracteres vamos a definir el idioma, para eso recurrimos una vez más a los tags META:</p>
<pre>&lt;meta http-equiv="content-language" content="es"/&gt;</pre>
<p>Sencillo y sin lugar a dudas, esta línea indica que estamos escribiendo en Español. De nuevo, el listado de idiomas disponible es muy amplio y responden al estándar <a rel="nofollow" href="http://www.loc.gov/standards/iso639-2/php/code_list.php" target="_blank">ISO 639</a> el cual define el listado completo.</p>
<p>La elección del idioma y el juego de caracteres deben estar en armonía, de nada sirve definir un juego de caracteres que no puede representar los caracteres del idioma.</p>
<p>Con estos dos pasos ya logramos que nuestro buscador encuentre sin dudas y sin errores el idioma de nuestra página, nos falta localizar los resultados.</p>
<h3>3. Definir correctamente la regionalización</h3>
<p>Para hacer esto vamos a recurrir a tres opciones diferentes, es un poco redundante pero nos va a asegurar el resultado en todos los casos y sin necesidad de recurrir a ninguna herramienta de webmaster.</p>
<p>El primero paso es reescribir nuestra definición de idioma agregando la regionalización al mismo, no es el mismo el inglés americano que el inglés británico, lo mismo pasa con el español y la mayoría de los idiomas, entonces podemos definir la región específica del idioma:</p>
<pre>&lt;meta http-equiv="content-language" content="es-AR"/&gt;</pre>
<p>Aquí hemos agregado a nuestra definición el país según el código de países y agregamos al idioma información de regionalización según el código de país de acuerdo al <a rel="nofollow" href="http://www.iso.org/iso/english_country_names_and_code_elements" target="_blank">estándar ISO</a>, en nuestro caso elegimos <em>AR</em> para identificar a Argentina.</p>
<p>Ahora que tenemos esto vamos a ser redundantes haciendo uso de todas las herramientas que el HTML nos ofrece:</p>
<pre>&lt;html dir="ltr" xmlns="http://www.w3.org/1999/xhtml" xml:lang="es-AR" lang="es-AR"&gt;</pre>
<p>Nótese que agregamos a nuestro tag <em>html</em> los atributos <em>lang, <span style="font-style: normal;">tanto para HTML como para XHTML, los cuales responden a la misma codificación el tag que usamos antes, sólo que están en otro lugar.</span></em></p>
<p><em><span style="font-style: normal;">Si bien este último paso puede parecer innecesario, y como dije antes, redundante, no podemos asegurar a cuál de las alternativas da predilección cada navegador o crawler, y estamos hablando de unos pocos caracteres como para preocuparnos.</span></em></p>
<h3><em><span style="font-style: normal;">4. GeoReferencia para nuestros sitios</span></em></h3>
<p>Con lo que venimos haciendo hasta ahora debería alcanzar para resolver nuestro problema, aún así,  el toque final lo vamos a dar utilizando GeoReferenciación para lograr que nuestros sitios sean tan locales como querramos:</p>
<pre>&lt;meta name="geo.region" content="AR"/&gt;</pre>
<p><em><span style="font-style: normal;">Esta familia de tags no es muy utilizada ya que no está muy difundida, sin embargo los buscadores ya las están reconociendo, en particular Bing. La familia en cuestión permite definir tres niveles, desde el más general (País) hasta la latitud y longitud exacta, recomiendo <a rel="nofollow" href="http://geotags.com/geo/geotags2.html" target="_blank">echarles una mirada</a>, para nuestro ejemplo basta saber que se codifican, una vez más según lo códigos de país del estándar ISO correspondiente.</span></em></p>
<h3>5. En resumen</h3>
<p><em><span style="font-style: normal;">Orientar nuestro sitio al público correcto es una de las principales definiciones que debemos tener en cuenta cuando pensamos en SEO, con estos sencillos pasos nos vamos a asegurar que los buscadores, en particular Bing, listen nuestro sitio donde nosotros querramos.</span></em></p>
<img src="http://www.fernandogermano.com/?ak_action=api_record_view&id=595&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/TeclaMacro/~4/SnfR0OaV7rA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fernandogermano.com/2010/04/22/como-definir-correctamente-la-region-de-nuestros-sitios/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.fernandogermano.com/2010/04/22/como-definir-correctamente-la-region-de-nuestros-sitios/</feedburner:origLink></item>
		<item>
		<title>Se acaba la novela de Adobe vs Apple</title>
		<link>http://feedproxy.google.com/~r/TeclaMacro/~3/nipniVuDZ4Y/</link>
		<comments>http://www.fernandogermano.com/2010/04/21/se-acaba-la-novela-de-adobe-apple/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 20:38:05 +0000</pubDate>
		<dc:creator>Fernando Germano</dc:creator>
				<category><![CDATA[Tecnología]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://www.fernandogermano.com/?p=587</guid>
		<description><![CDATA[Finalmente la novela de Apple vs. Adobe parece que llega a un final, así lo comunicó Mike Chambers (algo así un relaciones públicas para los desarrolladores) en su blog oficial. Recordemos que el problema surgió luego que Steve Jobs decidiera darle un golpe a Adobe al cambiar el acuerdo de licencia para desarrolladores y prohibir [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><img class="alignleft size-thumbnail wp-image-469" title="Logo Adobe Flash" src="http://www.fernandogermano.com/wp-content/uploads/2010/04/logo-flash-150x150.png" alt="Logo Adobe Flash" width="150" height="150" />Finalmente la novela de Apple vs. Adobe parece que llega a un final, así lo comunicó Mike Chambers (algo así un relaciones públicas para los desarrolladores) en <a rel="nofollow" href="http://www.mikechambers.com/blog/2010/04/20/on-adobe-flash-cs5-and-iphone-applications/" target="_blank">su blog oficial</a>.</p>
<p>Recordemos que el problema surgió luego que Steve Jobs decidiera darle un golpe a Adobe al cambiar el acuerdo de licencia para desarrolladores y prohibir el uso de todo aquello que no estuviese desarrollado con tecnologías de Apple, específicamente esto le impacta al conversor de Flash a Iphone que Adobe incluyó y anunció con bombos y platillos en la versión CS5 de Flash, que dice dicho acuerdo?</p>
<blockquote><p>3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., Applications that link to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited).</p></blockquote>
<p>Hace unos días les contaba las palabras oficiales de Adobe sobre el <a href="http://www.fernandogermano.com/2010/04/09/adobe-reconoce-html5-es-riesgo/" target="_blank">futuro del conversor Flash-Iphone</a> y en ese momento decía que iban a seguir con él y estaban estudiando el tema, bueno, tiempo después la situación es otra, entonces según nuevas palabras oficiales...</p>
<blockquote><p>We will still be shipping the ability to target the iPhone and iPad in Flash CS5. However, we are not currently planning any additional investments in that feature.</p></blockquote>
<p>En castelllano ahora sí...</p>
<blockquote><p>Vamos a continuar soportando la conversión de Flash a iPhone y iPad en Flash CS5. Sin embargo, no estamos planeando seguir invirtiendo en el desarrollo de dicha característica.</p></blockquote>
<p>O sea, ganó Apple y en cambio Adobe retruca con una serie de improperios contra Apple y le <a href="http://www.fernandogermano.com/2010/04/01/google-chrome-revive-flash/">devuelve el favor a Google</a> impulsando a su comunidad de desarrolladores a migrar sus aplicaciones a Android.</p>
<p>En lo personal estoy de acuerdo con Mike en que no es bueno que un sistema sea cerrado, sin embargo Apple funcionó así desde siempre y siempre le dió resultados, el desafío ahora es para Apple quien debe lograr mantener su liderazgo con el advenimiento de las nuevas generaciones de sistemas operativos y dispositivos móviles que vienen sumándole presión. En su momento el iPhone fue revolucionario y sacó cuerpos de ventaja sobre la competencia pero hoy tiene teléfonos a la par y superiores también, el iPad recién salido no es una opción tan clara para aquellos "no fanáticos" de Apple, si bien genial como lo es, hay <a rel="nofollow" href="http://mundogeek.net/archivos/2010/04/14/10-alternativas-al-ipad-de-apple/" target="_blank">una lista de dispositivos</a> en marcha que no le van a hacer la vida tan fácil y no sé si a largo plazo esta movida le va a redituar, habrá que esperar...</p>
<img src="http://www.fernandogermano.com/?ak_action=api_record_view&id=587&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/TeclaMacro/~4/nipniVuDZ4Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fernandogermano.com/2010/04/21/se-acaba-la-novela-de-adobe-apple/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.fernandogermano.com/2010/04/21/se-acaba-la-novela-de-adobe-apple/</feedburner:origLink></item>
		<item>
		<title>Microsoft apoyará el nuevo estándar de tipografías web: WOFF</title>
		<link>http://feedproxy.google.com/~r/TeclaMacro/~3/cVKnjtwV3MU/</link>
		<comments>http://www.fernandogermano.com/2010/04/21/microsoft-apoyara-el-nuevo-estandar-de-tipografias-web-woff/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 14:57:14 +0000</pubDate>
		<dc:creator>Fernando Germano</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://www.fernandogermano.com/?p=584</guid>
		<description><![CDATA[El último 20 de Abril fue un día muy importante para el nuevo estándar de tipografías embebidas para Web, el  (WOFF por sus siglas en inglés) fue aceptado por el World Wide Web Consortium lo que significa que el primer pasa para su aceptación como estándar está dado. Aunque la noticia ya es importante por sí mismo, no sólo [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><img class="alignleft size-thumbnail wp-image-236" title="Tipografías WOFF" src="http://www.fernandogermano.com/wp-content/uploads/2009/11/font-150x150.jpg" alt="Tipografías WOFF" width="150" height="150" />El último 20 de Abril fue un día muy importante para el nuevo estándar de tipografías embebidas para Web, el <a href="http://www.fernandogermano.com/2009/11/04/el-futuro-de-las-tipografias-web/">Web Open Font Format</a> (WOFF por sus siglas en inglés) fue aceptado por el World Wide Web Consortium lo que significa que el primer pasa para su aceptación como estándar está dado.</p>
<p>Aunque la noticia ya es importante por sí mismo, no sólo esta novedad es relevante sino que además entre los sponsors del proyecto  apareció el gigante de Redmond: Microsoft, lo cual aporta un peso muy importante a este movimiento, después de todo Microsoft, con su Internet Explorer sigue siendo el dominante en el mercado de navegadores.</p>
<p>Además refuerza también la idea que Microsoft está encaminándose hacia la aceptación de los estándares abiertos, cosa que esperamos finalmente confirmar con la llegada de <a href="http://www.fernandogermano.com/2010/03/19/ie9-el-proximo-internet-explorer/">Internet Explorer 9</a>.</p>
<p><a href="http://www.fernandogermano.com/2009/11/04/el-futuro-de-las-tipografias-web/">WOFF</a> viene a unificar esfuerzos previos: <em>ZOT</em> de Mozilla, <em>EOT</em> de Microsoft y <em>.webfont</em> creado por tipógrafos independientes. Al momento Mozilla y Safari soportan el uso de fuentes OpenType en sus implementaciones y sabemos que SVG nos permitirá también crear tipografías (suena HTML5 ?).</p>
<p>Con la aceptación del W3C se creó el <a rel="nofollow" href="http://www.w3.org/Fonts/WG/" target="_blank">WebFonts Working Group</a>, conformado al momento por Mozilla, Microsoft y Opera, el cual trabajará en refinar la especificación para convertirlo en una recomendación oficial que pueda luego ser convertida en estándar por la W3C.</p>
<img src="http://www.fernandogermano.com/?ak_action=api_record_view&id=584&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/TeclaMacro/~4/cVKnjtwV3MU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.fernandogermano.com/2010/04/21/microsoft-apoyara-el-nuevo-estandar-de-tipografias-web-woff/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.fernandogermano.com/2010/04/21/microsoft-apoyara-el-nuevo-estandar-de-tipografias-web-woff/</feedburner:origLink></item>
	</channel>
</rss>

