Browse > Home

| Subcribe via RSS

Debug en Javascript con la consola de Firebug

August 18th, 2008 | No Comments | Posted in Javascript, Programación, Recursos web

Tras un tiempo sin actividad alguna, espero volver al mismo ritmo que los dos primeros meses de blog. Ahora que estoy trabajando bastante con Javascript/AJAX, creo que puede resultar útil escribir sobre cómo utilizar Firebug para realizar un buen debug de una aplicación web.

El modo más simple para saber qué está haciendo una aplicación en cada momento sería una función parecida a esta:

[-]?View Code JAVASCRIPT
function printTestInfo( msg )
{
    var container = document.getElementById("systemInfo");
    container.innerHTML += msg + "
";
}

Muy simple y muy limitada, lo mismo puedes hacer llenando de alerts tu código. Para cuando tienes unas pocas líneas de código puede estar bien, pero cuando tiener muchas llamadas AJAX y trabajas mucho con el DOM no es suficiente.

Firebug se ha hecho indispensable para cualquier desarrollador web, te ahorra mucho tiempo y poco a poco están saliendo plugins que lo hacen mucho más potente. En mi caso lo que más utilizo es: HTML y CSS inspector, inspeccionar el árbol DOM, la extensión FireCookie, YSlow de vez en cuando, el debug y profile de Javascript, y por último el motivo de este post, la consola.

La consola aparte de incorporar un command line muy potente y toda la información necesaria sobre llamadas AJAX realizadas, dispone de una API que hace que la función anterior no la vuelvas a utilizar. Es un objeto que dispone de una serie de métodos muy útiles para mostar información en la consola de Firebug.

Tenéis el listado completo de métodos en la documentación de Firebug, que recomiendo echarle un vistazo porque hay muchas opciones que no sabes ni que existen. No se le puede pedir más, pero sinceramente hecho en falta que el método group lleve un identificador para poder agrupar mensajes de distintos módulos y no correlativamente cómo lo hace actualmente.

Aquí tenes un ejemplo de uso:

[-]?View Code JAVASCRIPT
var callbackDasSources = {
 
    success: function(o){
         console.info('DAS REGISTRY: Success ajax request to retrieve das registry');
 
         console.log('DAS REGISTRY: Parsing ...');
         dasSources._parseDasSources(o.responseXML);
 
         console.log('DAS REGISTRY: Generating select form...');
         dasSources._printDasSources();
    },
 
    failure: function(o){
        console.error('DAS REGISTRY: Failure retrieving DAS sources..');
    }
};

Y a la consola en funcionamiento (con la extensión FireCookie):

Ahora bien, todo esto esta muy bien pero sólo sirve para Firefox. Si ejecutas tu sitio web en Internet Explorer deja de ser funcional mostrando un mensaje que no conoce el objeto console (con suerte te muestra el error, porque es algo bastante frustante el mensaje “Runtime error”). Los de Firebug han hecho un pequeño script en el que definen el objeto con los métodos vacíos, pero bueno si le añades un par de líneas usando la función printTestInfo anterior puede llegar a resultar algo útil:

[-]?View Code JAVASCRIPT
if (!window.console || !console.firebug)
{
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
                 "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
 
    window.console = {};
    for (var i = 0; i < names.length; ++i)
        window.console[names[i]] = function() {
            for ( var j = 0; j < arguments.length; ++j)
                printTestInfo(arguments[j])
        }
}

El post iba a ser más largo, pero entonces no sabía que poner de título por lo que lo dejo para unos días más tarde : )

Tags: , , , , , ,

Clase para geolocalizar la IP en PHP + Google Maps API

July 1st, 2008 | 12 Comments | Posted in APIs, PHP, Programación, Scripts

En el proyecto pidecita.com del iWeekend de Valencia se hacía uso de Google Maps para localizar las peluquerías, y se pensó en recomendar varias al usuario en base a su ubicación. Para ello implementé una clase muy básica en PHP para geolocalizar la IP del usuario consumiendo la API de hostip.

Existen muchos servicios que ofrecen información sobre el país en el que te encuentras, pero lo que nosotros queríamos era localizar por ciudad. Este tipo de servicios suele acertar el país en un 95% de los casos, pero la provincia o ciudad no suele ser la correcta sino la del proxy de tu proveedor. Se basa en rangos de IP específicamente asignados a cada país, por lo que su fiabilidad en este sentido es media/baja. Mi IP estática que me brinda Telefónica me localiza mi provincia perfectamente, además de sus coordenadas.

Con la API REST de Hostip pódeis hacer las siguientes consultas:

http://api.hostip.info/country.php
  US

http://api.hostip.info/get_html.php?ip=12.215.42.19
  Country: UNITED STATES (US)
  City: Sugar Grove, IL

http://api.hostip.info/get_html.php?ip=12.215.42.19&position=true
  Country: UNITED STATES (US)
  City: Sugar Grove, IL
  Latitude: 41.7696
  Longitude: -88.4588

http://api.hostip.info/?ip=12.215.42.19
  [Archivo XML]

En un principio en el iWeekend parseaba el html devuelto de la 2º opción, pero ya de paso para probar la facilidad que te brinda PHP 5 para leer XML con Simple XML he utilizado la 4º opción. La clase es muy fácil de usar sólo tenéis que incluirla y llamar al método getLocationFromIp():

include('./classes/geoLocateIp.class.php');
 
$geo = new geoLocateIp();
$location = $geo -> getLocationFromIp();

La variable $location es un array asociativo con los siguientes campos: CountryName, CountryCode, City, Longitude y Latitude.

Os dejo el código fuente de la clase:

class geoLocateIp
{
	private $serviceLocateURL = 'http://api.hostip.info/?ip=';
 
	public function getLocationFromIp()
	{
		$ip = $this->getIpAdress();
 
		if (empty($ip))
			throw new Exception('Error retrieving IP address');
 
		// Use the method your server supports ( most of them only support curl )
		$xmlData = geoLocateIp::file_get_contents_curl($this->serviceLocateURL.$ip);
		//$xmlData = file_get_contents($this->serviceLocateURL.$ip);
 
		if (empty($xmlData))
			throw new Exception('Error retrieving xml');
 
		$locationInfo = $this->parseLocationData($xmlData);
 
		return $locationInfo;
	}
 
	private function getIpAdress()
        {
		if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
			   $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
		}
		elseif (isset($_SERVER['HTTP_VIA'])) {
		   $ip = $_SERVER['HTTP_VIA'];
		}
		elseif (isset($_SERVER['REMOTE_ADDR'])) {
		   $ip = $_SERVER['REMOTE_ADDR'];
		}
		else {
		   $ip = NULL;
		}
		return $ip;
          }
 
	private function parseLocationData($xmlData)
	{
		// Use of Simple XML extension of PHP 5
		$xml = simplexml_load_string($xmlData);
 
		if (!is_object($xml))
		    throw new Exception('Error reading XML');
 
		$infoHost = $xml->xpath('//gml:featureMember');
		$city = $xml->xpath('//gml:featureMember//gml:name');
 
		$coordinates = $infoHost[0]->xpath('//gml:coordinates');
		$coordinates = split(',', (string) $coordinates[0]);				
 
		$info = array (
			"City"		=> (string) $city[0],
			"CountryName"	=> (string) $infoHost[0]->Hostip->countryName,
			"CountryCode"	=> (string) $infoHost[0]->Hostip->countryAbbrev,
			"Longitude"	=> $coordinates[0],
			"Latitude"	=> $coordinates[1]
		);
 
		return $info;
	}
 
	public static function file_get_contents_curl($url)
	{
		$ch = curl_init();
 
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_URL, $url);
 
		$data = curl_exec($ch);
		curl_close($ch);
 
		return $data;
	}
}

Y a continuación, he preparado un mashup muy básico con dicha clase y la API de Google Maps en el que geolocaliza en el mapa tu situación. Lo he llamado Geolocate your IP, original verdad? : ) Estoy abierto a críticas del código, bugs, chapuzas… Y si queréis el código fuente sólo tenéis que decírmelo.

Update: Por una petición masiva de Darocz dejo el código fuente del mini-mashup y el de la clase geoLocateIp.

Tags: , , , , , ,

Alternativas a Powerpoint online y offline

June 23rd, 2008 | 2 Comments | Posted in General

Introducción

Todos nos manejamos bien y hemos usado PowerPoint alguna vez, pero con el tiempo han salido buenas alternativas que le pueden hacer frente. En ésta época en la que Internet está más en auge que nunca, tenemos a disposición muchas herramientas online para crear powerpoint presentaciones de buena calidad. Por otro lado, sin ser tan fáciles de usar existen alternativas offline que pueden plantarle cara al programa de Microsoft.

Como principal alternativa disponemos de Open Office, pero me limitaré a las alternativas menos conocidas.

Herramientas offline

LaTeX con la clase Beamer

Beamer es una clase de LaTeX, si no sabéis que es eso de LaTeX escribí una entrada hace poco: Alternativa a Word. Al ser un complemento de LaTeX, tenéis que tenerlo instalado y descargaros el paquete correspondiente.

Si sabéis manejaros con LaTeX no resulta complicado, el aspecto es bastante profesional y hay muchos temas a elegir. El objetivo del post no es explicar el modo de creación de presentaciones de Beamer, por lo que os dejo un par de tutoriales paso a paso de la mano de Plaga Tux para su instalación y uso.

En la página del proyecto hay un ejemplo muy bueno en el que se puede ver el resultado final, y a parte os dejo una ejemplo que hice hace unos meses y su código fuente.

S5: Simple Standards-Based Slide Show System

S5 es un sistema de presentaciones basado en XHTML, CSS y Javascript creado por Eric Meyer. Entre sus características más destacadas diría:

  • Sólo necesitas el navegador para poder visualizarlo (todo ordenador tiene uno hoy en día).
  • La presentación en un único archivo.
  • Si tienes nociones de CSS puedes crear tu propio tema.
  • Puedes controlar las diapositivas con el ratón, flechas del teclado, barra espaciadora, etc.
  • Muestra incremental del contenido de la presentación.
  • Sencillo de utilizar con mínimos conocimientos de HTML.
  • Existe una versión para imprimir con la posibilidad de añadir notas.

A mí sinceramente junto con Beamer es el que más me gusta, pero todo hay que decirlo, sirve para diapositivas sencillas. El uso común para una presentación no suele pasar de listas e imágenes por lo que es una buena opción, pero hay que tener cuidado con el número de diapositivas ( 40 o 50 puede ralentizarse ).

La cantidad de temas es inmensa, hasta Firefox ha adoptado este sistema de presentaciones, pero recomiendo encarecidamente los que ha creado JesusDa por su originalidad.

Como he hecho con LaTeX, os dejo un ejemplo de presentación que realicé para un concurso de programación y su código fuente.

Por último decir, que la comunidad ha crecido y se ha creado Presentacular, una librería Javascript con licencia GPL para añadir efectos a S5. Aún no está muy testeada en los navegadores más modernos (Firefox 3) pero pinta muy bien.

Herramientas online

Google Docs

Supongo que conoceréis Google Docs, empezó sólo como un procesador de textos online pero poco a poco se está convirtiendo en un paquete ofimático muy completo.

La posibilidad de poder importar y exportar nuestras presentaciones a PPT (Powerpoint) me parece muy interesante, a parte de poder generar un archivo pdf o texto plano. Y dentro de poco por lo que he leído en Genbeta se podrá utilizar offline con Google Gears.

Os dejo un ejemplo publicado, podéis ampliarlo con F11.

Zoho Show

Zoho es una de las competencias más fuertes como paquete ofimático de Google Docs(y ya le puede tener miedo…). A parte de las muchas aplicaciones han creado Zoho Show que con una interfaz muy similar e intuitiva podemos crear presentaciones como ésta. Existen una muy amplia variedad de temas.

280 slides

280 slides me ha impresionado mucho la verdad. Sin necesidad de registro puedes probar la aplicación, tiene un aspecto inmejorable y puedes disponer de las imágenes de Google Images y los vídeos de Youtube para insertarlos, todo ello sin salir de la aplicación.

Se pueden exportar a PowerPoint 2007, insertarlo en tu web o publicarlo en SlideShare. Os enseño un ejemplo como en cada una de las herramientas. Tiene un aire al Keynote (sus dos creadores son ex-empleados  de Apple).

Conclusión

Hay bastantes más aplicaciones, pero éstas son las que me han resultado más interesantes. Así que ya sabéis no hace falta que nuestras presentaciones sean como las de todos, puedes destacar del resto : )

Tags: ,

Alojamiento gratuito por un año con Dominios Low Cost

June 19th, 2008 | 2 Comments | Posted in Recursos web

Leyendo Webmaster Libre me encontré con que regalaban 100 códigos para hosting gratuito durante un año en Dominios Low Cost, nueva empresa española que está dispuesta a hacer el mismo tipo de ofertas que hizo en su día 1&1, éste blog está alojado allí y me ha ido bien por el momento.

La oferta de hosting no ofrece un dominio y para activar el vale es necesario disponer de uno. Hay muchos sitios web para registrar un dominio, aunque en la misma empresa hay precios muy competitivos. En mi caso ya tengo el código pero quiero pensarme un poco más el dominio a registrar, tenemos 2 meses para activar el vale.

Nos dan la opción de elegir entre 3 planes de hosting: Inicio, Avanzado Linux y Avanzado Windows. Lo más recomendable en mi opinión es el el plan avanzado Linux, pero si a alguien le interesa trabajar con ASP, Access y demás ya sabe cuál escoger…

Por lo que veo se han acabado los códigos de Webmaster Libre, pero hay más sitios que ofrecen dichos códigos:

  • Un poco de mucho: sólo tienes que poner un comentario en su blog, quedan 79 50 en este momento¡
  • SoyGik: aquí debes escribir un post en tu blog hablando sobre su entrada y ponerle un comentario.

Por último decir, que en la búsqueda de un dominio libre, es recomendable tener a mano ( en otra pestaña ) el registrador de dominios, ya que no me resultaron muy fiables las webs que te buscan dominios libres. No digo que no exista ninguna realmente fiable, pero me quitaron un par de dominios a los 10 o 20 minutos de estar libre… Yo aprendí la lección.

Update: La empresa ha tirado la casa por la ventana y regala 5000 dominios gratis con un mismo código¡ Más información en Bitecnia

Tags: ,