<$BlogRSDUrl$>

Esos aparatos del demonio

Mis notas sobre lo que voy leyendo de ordenadores y periféricos

jueves, agosto 28, 2008

Ubiquity 


Una de las cosas que más me ha llamado la atención últimamente es Ubiquity, un interfaz de línea de comandos para Firefox. Dicho así, no parece muy atractivo (yo no soy de los que piensan que, como en el principio estuvo la línea de comandos, debería seguir estando), pero el vídeo de presentación me impresionó y me ha dado por jugar un poco con ello.

Una de las órdenes que trae incluida de serie es weather, que da el tiempo de una ciudad. El problema es que en la previsualización ofrece la temperatura en Farenheit, y por estos lares estamos más acostumbrados a los Celsius. Así que me dio por meterle mano al código y creé una modificación que añade un parámetro para escoger las unidades. Este es el código:

// Weather in Celsius or Farenheit
noun_type_temperature_units = new CmdUtils.NounType( "temperature_units",
["farenheit", "celsius"]
);


CmdUtils.CreateCommand({
name: "weather",
takes: {"location": noun_arb_text},
modifiers: {in: noun_type_temperature_units},
icon: "http://www.wunderground.com/favicon.ico",
description: "Checks the weather for a given location.",
help: "Try issuing &quot;weather chicago&quot;. It works with zip-codes, too.",
execute: function( directObj ) {
var location = directObj.text;
var url = "http://www.wunderground.com/cgi-bin/findweather/getForecast?query=";
url += escape( location );

Utils.openUrlInBrowser( url );
},

preview: function( pblock, directObj, mod ) {
var location = directObj.text;
if( location.length < 1 ) {
pblock.innerHTML = "Gets the weather for a zip code/city.";
return;
}

var url = "http://www.google.com/ig/api";
jQuery.get( url, {weather: location}, function(xml) {
var el = jQuery(xml).find("current_conditions");
if( el.length == 0 ) return;

var condition = el.find("condition").attr("data");

var weatherId = WEATHER_TYPES.indexOf( condition.toLowerCase() );
var imgSrc = "http://l.yimg.com/us.yimg.com/i/us/nws/weather/gr/";
imgSrc += weatherId + "d.png";

var temperature = "temp_f";
if (mod.in.text == "celsius")
temperature = "temp_c";

var weather = {
condition: condition,
temp: el.find(temperature).attr("data"),
humidity: el.find("humidity").attr("data"),
wind: el.find("wind_condition").attr("data"),
img: imgSrc
};

weather["img"] = imgSrc;

var html = CmdUtils.renderTemplate( {file:"weather.html"}, {w:weather}
);

jQuery(pblock).html( html );
}, "xml");
}
});


Para que funcione hay que copiarlo en el editor de órdenes de Ubiquity (se lanza con command-editor desde el mismo Ubiquity). Para distribuirlo como se debe hacer, habría que crear un archivo .js y colgarlo en algún sitio, pero estoy vago...

Después de hacerlo descubrí que otro desarrollador por ahí había creado una versión que da la temperatura en Celsius, pero mi versión es más potente porque permite escoger unidades.

Otra cosa que se me ha ocurrido hacer es una orden para obtener la tablatura en guitarra de una canción. Cogí el código del tutorial, donde buscaba letras, y la adapté a WikiTabBook. Este es el resultado:

var noun_type_song = {
_name: "song name",
suggest: function( text, html ) {
var suggestions = [CmdUtils.makeSugg(text)];
if(window.foxytunesGetCurrentTrackTitle){
suggestions.push(CmdUtils.makeSugg(window.foxytunesGetCurrentTrackTitle()));
}
return suggestions;
}
}

CmdUtils.CreateCommand({
name: "get-guitar-tab",
takes: {song: noun_type_song},
preview: function(pblock, directObject) {

searchText = jQuery.trim(directObject.text);
if(searchText.length < 1) {
pblock.innerHTML = "Searches for guitar tabs of the song";
return;
}

var previewTemplate = "Searches for the guitar tab of ${query}";
var previewData = {query: searchText};
pblock.innerHTML = CmdUtils.renderTemplate(previewTemplate, previewData);

},
execute: function(directObject) {
var url = "http://www.wikitabbook.com/wiki/search/?findIn=all&search={QUERY}"
var query = directObject.text;
var urlString = url.replace("{QUERY}", query);
Utils.openUrlInBrowser(urlString);
}
})


Es muy rudimentario: Me gustaría más algo que buscase en más sitios y me abriese una pestaña con cada versión encontrada, para así comparar fácilmente y no tener que andar pinchando en un montón de sitios, pero para eso ya tendría que pensar cómo hacerlo...

Por cierto, que gracias a Ubiquity he descubierto a Aza Rasking, un experto en interfaces de usuario. Entre los productos de su empresa, Humanized, está Songza, que básicamente es un buscador de canciones que las obtiene de YouTube. Lo más significativo es que tiene un diseño curioso.

Etiquetas: , , , ,


Comentarios:

Excelente, yo estuve tocando el código también.
En realidad estoy traduciéndolo un poco... y con el comando weather lo único que hice fue cambiar la f por la c para que me dé la temperatura en centígrados.
Espero que sigas haciendo comandos para la extensión, por desgracia no tengo conocimientos en java pero me encantaría hacer los míos también.
Saludos
Publicar un comentario

This page is powered by Blogger. Isn't yours?

Blogroll
Enlaces
Archivos

Licencia Creative Commons
Este trabajo tiene licencia Creative Commons License.