Mostrando entradas con la etiqueta JavaScript. Mostrar todas las entradas
Mostrando entradas con la etiqueta JavaScript. Mostrar todas las entradas

6 de abril de 2010

Librería YQL Geo

Cada día son más las aplicaciones que hacen uso de la geolocalización, dos de los ejemplos más claros son los de Twitter y Flickr, Twitter geolocaliza los mensajes y Flickr geolocaliza las fotos.

Existen diferentes alternativas para trabajar la geolocalización mediante JavaScript, probablemente la opción más usada por los desarrolladores es la de usar la API de Google Maps, en la versión 2 con GClientGeocoder, y la versión 3 con google.maps.Geocoder.

Una de las alternativas al uso de la API de Google Maps es YQL Geo, una librería pensada para geolocalizar información, hacer geolozación inversa y análisis de contenido.

YQL Geo hace uso de los siguientes servicios para devolver sus resultados.

- Yahoo Placemaker
- Yahoo GeoPlanet
- jsonip.appspot.com
- IP location tools
- W3C Geo location
- Flickr.places.findByLatLon

Su uso es extremandamente simple, tan solo hay que añadir la librería en la cabecera de la página y hacer uso del metodo get.


yqlgeo.get(what, callback)


what
Es cualquier cosa que se desee analizar, puede ser desde una URL a un documento web, un texto, una IP, una coordenada dada con longitud y latitud, o "visitor" para detectar la localización geografica del usuario que visita la página.

callback
es el método de devolución que será llamado cuando se de una recuperación exitosa de la información. Los datos se devuelven en forma objeto - si hay algún error al recuperar la información se devolverá envuelto en una propiedad de error.

Ejemplos



Obtener la localización geográfica de un texto



yqlgeo.get('paris,fr',function(o){
alert(o.place.name+' ('+
o.place.centroid.latitude+','+
o.place.centroid.longitude+
')');
});


Obtener la información sobre la ubicación de lat/lon



yqlgeo.get(33.748,-84.393,function(o){
alert(o.place.name + ',' + o.place.country.content);
});

yqlgeo.get([33.748,-84.393],function(o){
alert(o.place.name + ',' + o.place.country.content);
});


Obtener todas las ubicaciones geográficas de una determinada URL



yqlgeo.get('http://icant.co.uk',function(o){
var out = '';
var all = o.place.length;
for(var i=0;i out+=o.place[i].name+'\n';
};
alert(out);
});


Obtener el lugar de un número de IP



yqlgeo.get('217.12.14.240',function(o){
alert(o.place.name + ',' + o.place.country.content +
' (' + o.place.centroid.latitude + ',' +
o.place.centroid.longitude + ')'
);
});


Localización de usuario (utilizando la API de geolocalización del W3C y la IP)



yqlgeo.get('visitor',function(o){
alert(o.place.name + ',' + o.place.country.content +
' (' + o.place.centroid.latitude + ',' +
o.place.centroid.longitude + ')'
);
});

3 de abril de 2010

Web Workers - Qué son y para que sirven

Con la llegada de HTML5 llegan nuevas funcionalidades a los navegadores web, es el caso del Storage (almacenamiento en el cliente), Geolocation (geolocalización) o los Web Workers (ejecución de scripts en procesos en segundo plano).

En éste artículo vamos a ver que son y para que sirven los Web Workers (de ahora en adelante los llamaremos Workers).

Los Workers no son más que una API que permite a los desarrolladores web ejecutar procesos en segundo plano, son totalmente independientemene a los procesos de la interfaz de usuario.

Esto permite que las secuencias de comandos de larga duración no se vean interrumpidas por secuencias de comandos que responden a clicks u otras interacciones por parte del usuario, y de esta manera permite ejecutar tareas de larga duración sin necesidad de interrumpir la respuesta del usuario.

Los Workers son relativamente gruesos y resistentes, y no están destinados a ser utilizados en grandes cantidades. Por ejemplo, no sería apropiado para lanzar un Worker por cada píxel de una imagen de cuatro megapíxeles.

En general, los Workers se espera que sean de larga duración, tienen un alto costo inicial de rendimiento, y un alto costo por ejemplo la memoria.

Un simple ejemplo del uso de Workers sería el siguiente, un programa que calcula el mayor numero primo:

example01.html

<!DOCTYPE HTML>
<html>
<head>
<title>Worker example: One-core computation</title>
</head>
<body>
<p>The highest prime number discovered so far is: <output id="result"></output></p>
<script>
var worker = new Worker('worker.js');
worker.onmessage = function (event) {
document.getElementById('result').textContent = event.data;
};
</script>
</body>
</html>


worker.js

var n = 1;
search: while (true) {
n += 1;
for (var i = 2; i <= Math.sqrt(n); i += 1)
if (n % i == 0)
continue search;
// found a prime!
postMessage(n);
}


La definición de un Worker se realiza mediante la instancia de la clase Worker, como argumento de la clase se indica el nombre del script a cargar (o los scripts, separados por comas, en caso de ser más de uno).

Una vez instanciada la clase, se debe definir el proceso a realizar cuando recibe un mensaje por parte del script que esta ejecutandose en segundo plano, para ello, el objeto cuenta con el método onmessage, al que se debe pasar una función.

La segunda parte, donde escribimos el código del script a ejecutar en segundo plano, no es más que un simple script, la único nuevo que se le añade es la función postMessage, esta función es la utilizada para realizar la comunicación con el Worker, la función envía la información necesaria al primer proceso, y ésta puede ser usada desde el primer proceso.

Hasta aquí esta breve introducción al uso de Workers. Para más información leer los siguientes enlaces:

http://www.whatwg.org/specs/web-workers/current-work/
https://developer.mozilla.org/En/Using_web_workers