Werner Creixell

Personal web page

Titulo:
Identificación de modelos en variables de estado mediante un enfoque en
el dominio del tiempo y la frecuencia.

Auditorio de Electrónica, B221.
Martes 20 de julio, 12:00hrs.

Resumen:
En identificación de sistemas se busca estimar modelos a partir de datos
de sus señales de entrada y de salida. En esta charla mostramos como
desarrollar un estimador de Máxima-Verosimilitud que combina las
ventajas de los métodos de identificación en los dominios del tiempo y
de la frecuencia. En particular, se utiliza el algoritmo EM
(Expectation-Maximization) para identificar modelos representados en
espacio de estado. El método permite considerar el caso de estimación en
un rango de frecuencias de interés y también la posibilidad de pérdida
de datos en el tiempo.

Biografía:
Juan Carlos Agüero es ex-alumno del Departamento de Electrónica, UTFSM.
Obtuvo su título de Ingeniero Civil Electrónico y el grado de Magíster
en Ingeniería Electrónica el año 2000. Durante 1997-1998 trabajó en El
Teniente, Codelco (Chile), en el modelado y control del proceso de
secado. En 2006 obtuvo el grado de Ph.D. in Electrical Engineering, The
University of Newcastle (Australia) in 2006, donde actualmente se
desempeña como Research Academic (Senior Lecturer). El Dr. Agüero ha
publicado una serie de artículos en el área de identificación de
sistemas y procesamiento de señales.

Más información puede encontrarse en http://cdsc.org.au/jca

Estimada Comunidad:

El Ciclo de Charlas Informáticas invita para este Jueves 24 de Junio,
12:00 horas en la Casa Central, sala F-106 a la siguiente charla:

Meego, Qué es y para que sirve .
Expositor: Eduardo Díaz Godoy, Estudiante Administración de Redes
Computacionales, DUOC Viña del Mar.

MeeGo es una distribución Linux hecha a base de dos distribuciones
llamadas Moblin y Maemo, en la cual se juntan lo mejor de cada una.
MeeGo es desarrollado por el esfuerzo y dedicación de dos empresas,
Nokia e Intel, las que, a su vez, están siendo fuertemente apoyadas por
la Linux Fundation.

Esta charla explicará y mostrará la interfaz de usuario flexible y de
fácil uso, la cual incluye efectos generados por aceleración gráfica.
Además, se explicará el porqué esta distribución es la ideal para el uso
en Netbooks, Subportátiles, Teléfonos Móviles, televisiones y por qué no
decirlo, también en dispositivos de rastreo por radar como lo son los GPS.

Se hablará del *Garage Meego*, aplicación que ofrece un amplio bazar de
aplicaciones 100% código abierto. Su objetivo es facilitar la
instalación de software, sin la utilización del terminal. Su ventaja es
tener un gran almacén de software disponible al mundo donde
encontraremos desarrollos propios de Intel + Maemon, como también de
desarrolladores en general.

Cordialmente,

Cecilia Reyes

In Seminario II the students were challenged to make a web page that displays a Twitter search. The “#chi” or “#worldcup” hash-tag search is performed and the results dynamically displayed.

Dominique Naser solution, using jQuery, can be found here (gracias Dominique).

First a simple form to input the search.

<html>
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>Buscador de Hashtags</title>
  </head>
  <body>
        <h2>Buscador</h2>
    <form action="busca.php" method="post">
                <input name="busqueda" type="text" size="50" style="text-align:left" />
                <input name="" type="submit" size="10" value="Busca!" /><br>
        </form>
  </body>
</html>

The Html file where the search and the results display is performed.

<!DOCTYPE HTML>

<html>

  <head>

    <meta http-equiv="Content-type" content="text/html; charset=utf-8">

    <title>Buscador de Hashtags</title>

	        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

        <script type="text/javascript" src="http://github.com/malsup/corner/raw/master/jquery.corner.js?v2.09"></script>



	<script>

	const MAX_RESULTS= 20;

function twitter_search() {

	var url = 'http://search.twitter.com/search.json?callback=?';

	// Iterating over the different search columns

	$('.twitter_search').each(function() {

		var container = $(this);

		// Search terms are specified in the 'title' attribute

		var search = container.attr('title');

		if (search) {

			var since_id = 0;

			if (container.children().length) {

				// Retrieve results since this id

				since_id = container.children(':first').attr('id').replace('#', '%23');

			}

			// Request the results

			$.getJSON(url, {'q': search, 'since_id': since_id}, function(data) {

				// Processing those results, if any

				if (data.results.length) {

					for (i in data.results.reverse()) {

						var r = data.results[i];

						// Creating the result container

						var div = $('<div id="#' + r.id + '"></div>');

						// Don't show this element now

						div.hide();

						// Adding some styles through .twitter_result

						div.addClass('twitter_result');

						// Adding user's image

						div.append('<img src="' + r.profile_image_url + '" alt="' + r.from_user + '" />');

						// Adding username

						div.append('<a href="http://twitter.com/' + r.from_user + '">' + r.from_user + '</a>');

						// Adding tweet

						div.append('<span>' + r.text + '</span>');

						// Adding corners

						div.corner();

						// Adding this result to the main container

						container.prepend(div);

						// Effect

						div.slideDown('slow');

					}

				}

				// Removing old tweets

				if (container.children().length > MAX_RESULTS) {

					// Negative index

					to_remove = MAX_RESULTS - container.children().length

					container.children().slice(to_remove).each(function() {

						$(this).slideUp();

					});

				}

			});

		}

	});

};

 

$(document).ready(function() {

	// Initial search 

	twitter_search();

	// Refresh the results every 5 seconds

	setInterval("twitter_search();", 5000);

});

	</script>

  </head>

  <body>

	<h2>Resultado</h2>

		

		<div class="twitter_search" title="<?php echo $_POST["busqueda"]; ?>"></div>	



  </body>

</html>

Diego Acevedo, used a jQuery plugin Juitter (gracias Diego). You can found his solution here

Both solutions by pass the cross-domain restriction imposed by the browser.

In this example the Seminario II sutdents were asked to design a web page that display a Google map with earthquake information from the US Geological Survey USGS.

Camilo Vera solution can be found here (gracias Camilo).

Camilo’s php script is as follows:

<?php
//header("Content-type= application/json");
$xml =simplexml_load_file("http://earthquakes.usgs.gov/earthquakes/catalogs/1day-M2.5.xml");
$i=0;
//se recorren todos los nodos "entry"
foreach($xml->entry as $node){
    //se recuperan los datos que tiene un namespace especificado por la siguiente url
    $geo = $node->children("http://www.georss.org/georss");
    $json[$i][0]=$geo->point;
    $json[$i][1]=$node->title;
    $i++;
}
print(json_encode($json));
?>

The javascript is as follows:

function initialize() {
    myLatlng = new google.maps.LatLng(-33.04299, -71.586657);
    var myOptions = {
      zoom: 3,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.TERRAIN
    }
    //se crea una instancia de un mapa de google
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    var request = crear_XmlHttpRequest();
    request.open("GET", "Conector.php", true);
    request.onreadystatechange = function() {
        if(request.readyState == 4 && request.status == 200){
            var yw_json = request.responseText;
                      //dirty JSON evaluation
            var yw = eval('(' + yw_json + ')');
            var i;
            //se recorren el arreglo que contiene la informacion de las coordenadas y el nombre
            //del lugar donde ocurrio el terremoto
            for(i in yw){
                //la tercera dimension del arreglo es inutil, pero lamentablemente json_encode de php lo crea
                //se separan los dos puntos que determinan la coordenada
                coordenadas = yw[i][0][0].split(" ");
                //se guarda el nombre del lugar donde ocurrio el evento
                lugar = yw[i][1][0];
                //se crea el marcador en el mapa
                myLatlng = new google.maps.LatLng(coordenadas[0], coordenadas[1]);
                new google.maps.Marker({
                    position: myLatlng,
                    map: map,
                    title:lugar
                });
            }
        }
    }
    request.send(null);
  }

//Se define una funcion que retorne el objeto XMLHttpRequest dado que en la
//version 3 de la api de google se quito la clase GXmlHttp

function crear_XmlHttpRequest(){
    var httpRequest;
    if (window.XMLHttpRequest){
        //El explorador implementa la interfaz de forma nativa
	httpRequest = new XMLHttpRequest();
    }
    else if (window.ActiveXObject){
        //El explorador permite crear objetos ActiveX
	try {
            httpRequest = new ActiveXObject("MSXML2.XMLHTTP");
	} catch (e) {
            try {
                httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!httpRequest){
        alert("No ha sido posible crear una instancia de XMLHttpRequest");
    }
    return httpRequest;
}

The Html file is:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
        <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
        <script type="text/javascript" src="ajax_map.js"></script>
        <title></title>
    </head>
    <body onload="initialize()">
        <div id="map_canvas" style="width:100%; height:100%"></div>
        </body>
</html>

Alejandro Homes solution can be found here (gracias Alejandro). In this example the students used a php script as middle man to by pass the cross-domain restriction in web browsers.

The php script goes as follows:

<?php  

//First send the corresponding headers  

header("Content-type= application/json");  

 

//get the XML data from the URL  

$xml = simplexml_load_file("http://earthquake.usgs.gov/earthquakes/catalogs/1day-M2.5.xml");  



$count=0;

//traverse the SimpleXML object and store in a associative array  

foreach( $xml->entry as $entry ) 

{ 

	$aeo = $entry->children("http://www.georss.org/georss");

	$arr[$count] = array ('nombre'=>$entry->title,'fecha'=>$entry->updated,'geo_point'=>$aeo->point,'geo_elev'=>$aeo->elev);

	$count++;

}

  

//JSON enconde and print  

print(json_encode($arr));



?>

The html page is as follows:

<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
	<title>Google Maps JavaScript API Example</title>
	<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAw0DAzQTTbMAlKOPlgYZyaxT2yXp_ZAY8_ufC3CFXhHIE1NvwkxT4oLUvcIuwHQ71styNxZCnK2iqoQ"
		type="text/javascript"></script>
	<script type="text/javascript">

	function reFresh() {
		location.reload(true)
	}


	function initialize() {
		if (GBrowserIsCompatible()) {

			function setMarker( punto, texto){

				var marker = new GMarker(punto, {draggable: false});

				GEvent.addListener(marker, "click", function(){
					// create the Google version of XMLHttpRequest object
					marker.openInfoWindowHtml(texto);
				});

				map.addOverlay(marker);
			}
			
			var map = new GMap2(document.getElementById("map_canvas"));
		
			var center = new GLatLng(-15,0);
		
			map.setCenter(center, 1);

			var request = GXmlHttp.create();
			request.open("GET", "usgs.php", true);
			request.onreadystatechange = function() 
			{
				if(request.readyState == 4 && request.status == 200){
			
					var eq_json = request.responseText;
					var eq = eval('(' + eq_json + ')');
					
					var i;
					for(i in eq)
					{
						
						var lat_lng = eq[i].geo_point[0].split(" ");
						var titulo = eq[i].nombre[0].split(",");
						var magnitud = titulo[0].split(" ");
		
						var xhtml = "lugar = " + titulo[1] + ", " + titulo[2] + "<br />";
						xhtml += "magnitud = " + magnitud[1] + "° Richter<br />";
						xhtml += "fecha = " + eq[i].fecha[0] + "<br />";
						xhtml += "elevación = " + eq[i].geo_elev[0]/1000 + " [Km]<br />";
						xhtml += "posición = " + eq[i].geo_point[0] + "<br />";
						
						var point = new GLatLng(lat_lng[0],lat_lng[1]);
						setMarker(point, xhtml);
					}
					//end for
				
				}
			}
			
			request.send(null);

		}
	window.setInterval("reFresh()",60000); //recarga la pag cada 1 minuto
	}​
	</script>
</head>
<body onload="initialize()" onunload="GUnload()">
	<div id="map_canvas" style="width: 700px; height:550px"></div>
</body>
</html>

Estimad@s todo@s,

Están cordialmente invitados a una charla que dará el Ingeniero Civil Electrónico Sr. Giancarlo Rotta, Jefe de Innovación y Productos de Copesa (empresa dueña de varios medios de información, entre ellos, La Tercera). La charla, titulada “El desafío de los grandes medios digitales”,  se realizará el jueves 17 de Junio en el Auditorio de Electrónica (B-221) a las 12 hrs y cubrirá los siguientes temas:

1. De la teoría a la práctica: diseño, desarrollo y administración de
proyectos.
2. Performance y Buenas prácticas en el desarrollo de sitios web: Sitios
creados para ser exitosos.
3. Diseño y Construcción de un Administrador de contenido para sitios de
alta demanda. (Lineamentos)
4. Laboratorio de nuevas tecnologías para consumo masivo de contenidos en
las 4 pantallas (Cine, TV, Computador, Móvil) (invitación a participar)

Giancarlo Rotta Hinojosa es Ingeniero Civil Electrónico, egresado el 2001 de la UTFSM. En la actualidad se desempeña como Jefe de Innovación y Productos en

Copesa. Anteriormente fue el Jefe de Ingeniería de software en Copesa durante 4 años. También se desempeñó 4 años como Arquitecto Senior de soluciones corporativas en el centro de desarrollo regional de Citibank.

Cordialmente,
Alejandra Beghelli.

On Tuesday June 1rst at 11:40, Dr. Kaoru Sezaki (瀬崎先生) associate professor at The University of Tokyo will give a presentation in Electronic Department Auditorium.

RFID-based positioning systems and urban-sensing systems

Currently, GPS is widely used in systems that provide location-based services to consumers. However, GPS’s inability to operate indoor and urban canyons inhibits us to implement applications anywhere at any time. Further, even though mobile phones with GPS capabilities are becoming widely available, the accuracy is not sufficient to respond to emergency calls and other critical missions. To realize seamless and accurate positioning system that works in a wide variety of environments, we organized a team of experts from the University of Tokyo and four governmental research institutes in the national project called “RFID-based positioning systems for enhancing safety and sense of security” In the positioning systems of our project, users’ devices obtain ID numbers from the embedded RFID tags in physical spaces. The devices then retrieve corresponding location information by querying a database or the cached data when the system is temporally out of connection to the Internet. This RFID-based localization technique use inexpensive RFID tags that can be deployed easily in environments without any network infrastructures. That said, the deployment cost of RFID is not just about the price of tags. It includes the cost of physically embedding the tags, measuring their precise positions, and updating their position data in the database. We proposed various techniques to decrease this “hidden” cost since the national geographic survey is planning to deploy these RFID tags in entire Japan for location infrastructure.
To reduce the deployment cost of RFID tags, it is also important to relax the density requirement of the reference points. We therefore proposed a localization mechanism that exploits motion sensors and P2P-based technique to enable continuous positioning even when the reference points are sparsely deployed. We assume that pedestrians carry a device that is equipped with an RFID reader, motion sensors such as gyros and accelerometers for dead reckoning, and IEEE 802.11 capability. When the device is in proximity with RFID tag, it directly obtains location information from it. When the device is not in proximity with any RFID tags, it can still estimate its position by dead-reckoning. Further, collocated devices exchange their location estimation and perform sophisticated localization to keep the accuracy even on this condition. On top of this positioning infrastructure, National Research Instiute of Police science, National Research Institute of of Fire and Disaster and NICT are implementing various applications to enhance the sense of security in emergency as well as in daily life such as monitoring and analyzing the daily behavior of children.
I also briefly introduce the on-going real urban sensing project which utilizes wireless sensor networks and mobile phones conducted in Tatebayashi City, which is the hottest city in Japan.

This is a toy example that I used to challenge my students at seminario II. The idea is to display the Yahoo! Weather information in a google map, as showed in this page (click in the marker and the weather info for Valparaíso will appear).

We first grab the information, by a php script, from the Yahoo! Weather RSS feed. The feed is available from  the URL http://weather.yahooapis.com/forecastrss?w=349861&u=c,  where w is the corresponding code for Valparaíso, and u is the temperature unit in Celsius. This php scrip can communicate with the client (the html page with the map) by JSON or XML. The XML version is contributed by Jorge Flores a student in Seminario II (¡¡Gracias Jorge!!).
The XML from the feed looks like

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<rss version="2.0" xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
<channel>

<title>Yahoo! Weather - Valparaiso, CI</title>
<link>http://us.rd.yahoo.com/dailynews/rss/weather/Valparaiso__CI/*http://weather.yahoo.com/forecast/CIXX0026_c.html</link>
<description>Yahoo! Weather for Valparaiso, CI</description>
<language>en-us</language>
<lastBuildDate>Tue, 11 May 2010 6:00 pm CLT</lastBuildDate>
<ttl>60</ttl>
<yweather:location city="Valparaiso" region=""   country="CI"/>

<yweather:units temperature="C" distance="km" pressure="mb" speed="km/h"/>
<yweather:wind chill="11"   direction="190"   speed="9.66" />
<yweather:atmosphere humidity="88"  visibility="4.01"  pressure="982.05"  rising="0" />
<yweather:astronomy sunrise="7:26 am"   sunset="5:58 pm"/>
<image>
<title>Yahoo! Weather</title>
<width>142</width>
<height>18</height>
<link>http://weather.yahoo.com</link>
<url>http://l.yimg.com/a/i/us/nws/th/main_142b.gif</url>
</image>
<item>

<title>Conditions for Valparaiso, CI at 6:00 pm CLT</title>
<geo:lat>-32.78</geo:lat>
<geo:long>-71.53</geo:long>
<link>http://us.rd.yahoo.com/dailynews/rss/weather/Valparaiso__CI/*http://weather.yahoo.com/forecast/CIXX0026_c.html</link>
<pubDate>Tue, 11 May 2010 6:00 pm CLT</pubDate>
<yweather:condition  text="Fog"  code="20"  temp="11"  date="Tue, 11 May 2010 6:00 pm CLT" />
<description><![CDATA[
<img src="http://l.yimg.com/a/i/us/we/52/20.gif"/><br />
<b>Current Conditions:</b><br />
Fog, 11 C<BR />
<BR /><b>Forecast:</b><BR />
Tue - Cloudy. High: 20 Low: 9<br />
Wed - Partly Cloudy. High: 20 Low: 9<br />
<br />
<a href="http://us.rd.yahoo.com/dailynews/rss/weather/Valparaiso__CI/*http://weather.yahoo.com/forecast/CIXX0026_c.html">Full Forecast at Yahoo! Weather</a><BR/><BR/>
(provided by <a href="http://www.weather.com" >The Weather Channel</a>)<br/>
]]></description>
<yweather:forecast day="Tue" date="11 May 2010" low="9" high="20" text="Cloudy" code="26" />
<yweather:forecast day="Wed" date="12 May 2010" low="9" high="20" text="Partly Cloudy" code="30" />
<guid isPermaLink="false">CIXX0026_2010_05_11_18_00_CLT</guid>
</item>

</channel>
</rss><!-- api4.weather.ac4.yahoo.com compressed/chunked Wed May 12 06:05:42 PDT 2010 -->

We can observe that there are two different name spaces, yweather and geo. We need just those names under yweather. In particular we use yweather:condition, this element holds the current weather information on its attributes.

JSON version

The php goes as follows

<?php
//First send the corresponding headers
header("Content-type= application/json");
//get the XML data from the URL
$xml = simplexml_load_file("http://weather.yahooapis.com/forecastrss?w=349861&u=c");
//obtaining the namespace for yweather
$yweather =$xml->channel->item->children("http://xml.weather.yahoo.com/ns/rss/1.0");

//traverse the SimpleXML object and store in a associative array
foreach( $yweather->condition->attributes() as $k=>$attr)
     $condition[$k] = $attr;

//JSON enconde and print
print(json_encode($condition));
?>

On the html page we receive the information in the JSON format and passed to the openInfoWindowHtml() method of google maps.

<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Google Maps JavaScript API Example</title>
    <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAADI36Gd6uqs4OgrvF2FK3TRS3WQwwXk35PFrPy_oZlvjggyWGmxSJfJA31Kd06D9lQVQJpKvCzFGD3g"
            type="text/javascript"></script>
    <script type="text/javascript">

function initialize() {
  if (GBrowserIsCompatible()) {
    var map = new GMap2(document.getElementById("map_canvas"));
   //a marker placed in our university 
    var center = new GLatLng(-33.033276,-71.594682);
    map.setCenter(center, 15);

    var marker = new GMarker(center, {draggable: true});

   		
		//Adding Yahoo! Weather
		
		GEvent.addListener(marker, "click", 
		function(){
        // create the Google version of XMLHttpRequest object
			var request = GXmlHttp.create();
			request.open("GET", "weather2.php", true);
			
			request.onreadystatechange = function() {
				
				if(request.readyState == 4 && request.status == 200){
					
					var xhtml = "<b>Yahoo! Weather</b>";
					xhtml += "<br />";
					
					var yw_json = request.responseText;
                      //dirty JSON evaluation
					var yw = eval('(' + yw_json + ')');
					
					xhtml = xhtml + "temperatura =" + yw.temp[0] +" ºC <br />";
					xhtml += yw.date[0];
					marker.openInfoWindowHtml(xhtml);
				}
			}
			//send the request
			request.send(null);
		});
		
		
    map.addOverlay(marker);

  }
}​
   </script>
  </head>
  <body onload="initialize()" onunload="GUnload()">
    <div id="map_canvas" style="width: 800px; height: 500px"></div>
  </body>
</html>

XML version

The php goes as follows

<?php
//First the corresponding XML headers
header("Content-type: text/xml");
//Jorge sends the location by GET
$w = $_GET["w"];
$url =  "http://weather.yahooapis.com/forecastrss?w=" . $w . "&u=c";
if($xml = file_get_contents($url)){

	$obj = simplexml_load_string($xml);
	$item = $obj->channel->item;
//formatting the XML output
	print("<weather>");
	print("<title>" . $item->title . "</title>");
//getting the namespace
	$child = $item->children("http://xml.weather.yahoo.com/ns/rss/1.0");
	$att = $child->condition->attributes();
	print("<temp>" . $att->text . " " . $att->temp . "ºC</temp>");
	print("</weather>");
}
?>

Jorge’s html file goes like this

<html>
	<head>
	<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAzsVe8ueaD3_5_TOp88LiKRTmhXfEnveThyX0qgmXnRV_0BrCwBTi62Ue7Uv5MEgulw1nxTmAQ2jihA" type="text/javascript"></script>
		<script type="text/javascript">
			function load(){
				var map = new GMap2(document.getElementById("map"));

				var point = new GLatLng(-33.05,-71.6);
				var w = 349861;

				map.setCenter(point,13);

				var marker = new GMarker(point);
				map.addOverlay(marker);

				GEvent.addListener(marker,"click",function(){
						var request = GXmlHttp.create();
						request.open("GET","getWeather.php?w=" + w,true);
						request.onreadystatechange = function(){
							if(request.readyState == 4 & request.status == 200){

								var weather = request.responseXML.getElementsByTagName("weather")[0];
								var title = weather.getElementsByTagName("title")[0].firstChild.nodeValue;
								var temp = weather.getElementsByTagName("temp")[0].firstChild.nodeValue;

								var xhtml = "<b>" + title + ":</b> <br />";

								xhtml += "<div align=center><h2>" + temp + "</h2></div>";

								map.openInfoWindowHtml(point,xhtml);
							}
						}
						request.send(null);
					}
					);
			}
		</script>
	</head>
	<body onload="load();">
		<div id="map" style="height:100%; width:100%"> </div>
	</body>

</html>

The main differences with the JSON version are in the request.onreadystatechange handler, where there is a little more code to traverse the XML data. You can check the result here

Creative Commons Attribution-NonCommercial-ShareAlike 2.0 Chile
This work by Werner Creixell is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.0 Chile.