A pedido popular

He aquí un pequeño resumen de como hice para meter HTML dentro de XML y que saliese bien. Notese que dije 'pequeño resumen', voy a explicar como se hace para meter HTML en XML y que en la transformación XSL lo trate como HTML y no XML. Usaré como ejemplo el código que escribí para Caleio.

Como saben HTML y XML son derivados de SGML, ambos usan etiquetas y funcionan de manera similar, y ahí esta el problema. Al meter HTML en el XML el transformador XSL no sabe que es HTML y lo trata como XML normal. El problema salió cuando quise meter enlaces (o cualquier otro elemento HTML como imágenes o saltos de linea) en las descripciones de elementos. Simplemente no los mostraba porque intepretaba que eran etiquetas XML.

La solución es muy simple, pero me costó mucho encontrarla porque todo el mundo tiene un método distinto. Este consiste en indicar en el archivo XML cuales etiquetas son especiales, en este caso de HTML. Por ejemplo:

<?xml version="1.0" standalone="yes"?>
<event>
	<item>
		<id>325</id>
		<startDate>2005-08-16</startDate>
		<endDate>2005-08-16</endDate>
		<startTime>21:00:00</startTime>
		<endTime>22:00:00</endTime>
		<eventType>1</eventType>
		<scheduled>0</scheduled>
		<repetition>0</repetition>
		<title>testing</title>
		<description xmlns:html="http://www.w3.org/1999/xhtml">something with a <html:br />
<html:a href="http://www.google.com">link</html:a></description>
	</item>
</event>

La etiqueta description es la que lleva el HTML, el atributo xmlns lo reconocerán de la etiqueta html que se usa en XHTML. xmlns (http://www.w3.org/TR/REC-xml-names/) sirve para definir Namespaces en XML, los namespaces son definiciones específicas de etiquetas, como en XML una etiqueta no tiene significado alguno con namespaces se puede definir mas correctamente. Que es justo lo que hace xmlns en la etiqueta html en XHTML:

<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">

XHTML es XML, pero con el atributo xmlns le decimos al navegador que todo lo que hay dentro de la etiqueta html debe ser tratado como tal. Esto no es estrictamente necesario porque los navegadores lo detectan automaticamente, pero el validador de HTML tira error si se omite.

Aquí es donde entramos en terreno desconocido, algunas de las páginas que leí decian que con tal de poner el xmlns en la etiqueta que tuviese el HTML dentro ya bastaba, pero a mi se me hizo necesario poner :html para indicarle a XSL exactamente cuales etiquetas eran HTML. También sugerian poner la definición xmlns:html en la etiqueta raiz, lo cual es lógico porque al especificar con :html cuales son debería reconocerlas, pero a mi no me funcionó. Así que hay que declarar xmlns:html y luego todas las etiquetas van de la forma html:nombre_de_etiqueta. Esto es un problema porque hay que usar expresiones regulares para meter el html: en todas las etiquetas, y para colmo cuando se usa xmlhttprequest hay que sacarlas en el Javascript antes de mostrarlas porque las estás metiendo despues de la conversión XSL. Para ello escribí una función que parsea el XML y lo transforma en HTML:

function xml2html(xml)
{
	var i=0;
	var j=0;
	var html= "";
	var tagName = "";
	
	for (i=0;i<xml.childNodes.length;i++)
	{
		/* If it's not a text node then we need to continue searching within it */
		if (xml.childNodes[i].nodeType != 3)
		{
			/* Test for single tag elements */
			if (xml.childNodes[i].childNodes.length!=0)
			{
				/* Converts html:b into <b></b> with the stuff inside */
				tagName = xml.childNodes[i].nodeName.split(':')[1];
				fullTag = tagName;
				for(j=0;j<xml.childNodes[i].attributes.length;j++)
				{
					fullTag = fullTag + ' '+xml.childNodes[i].attributes[j].name+'='+xml.childNodes[i].attributes[j].value;
				}
				html = html + '<'+fullTag+'>' + xml2html(xml.childNodes[i]) + '</'+tagName+'>';
			} else {
				/* This is for single tag elements i.e.: <br /> and <img /> */
				fullTag = xml.childNodes[i].nodeName.split(':')[1];
				for(j=0;j<xml.childNodes[i].attributes.length;j++)
				{
					fullTag = fullTag + ' '+xml.childNodes[i].attributes[j].name+'='+xml.childNodes[i].attributes[j].value;
				}
				html = html + '<'+fullTag+' />';
			}
		} else {
			/* If it is a text node, just get the data and append to previous html */
			html = html + xml.childNodes[i].data;
		}
	}
	return html;
}

Un último detalle: para usarlo en una conversión XSL hay que usar la etiqueta <xsl:copy-of select="event//description" /> y no <xsl:value-of select="event//description" />. No me acuerdo que cosa mágica hace copy que no hace value pero sé que sino no funciona.

 

Ir a Birmingham a las 6:30 de la tarde. Llegar al bar a las 8:00. Encontrarnos con la gente y verlos tocar a ellos y otras dos bandas más hasta las 11:30. Taxi hasta "The Academy" y llegar a las 12:00. Boludear hasta la 2:30. Acompañar al último de los irreductibles para que nos muestre el camino hasta la estación de tren. Acompañar a dicho irreductible hasta su parada de autobús. Se va el autobús a las 3:00. Nuestro tren es a las 6:00.

¿Que hacemos?

Ya que estamos acá… turismo.

Cuando se despierte el fotógrafo oficial pongo fotos de las tres calles que visitamos antes de que nos entrase frio y nos fuesemos a dormir a la estación de tren.

En resumen: una noche interesante. Un poco cara, pero interesante.

 

Bueno llevaba, y llevo bastante tiempo desconectado. Demasiadas cosas para hacer y tan poco tiempo. Asi que la hago corta.

Hoy me topé con un curioso problema en PHP 4, a ver si alguien me aclara si es un bug o que.

Esto no funciona:

function dbQuery($sql)
{
	return mysql_query($sql) or die(mysql_error().'<br />'.$sql);
}

Esto sí:

function dbQuery($sql)
{
	$res = mysql_query($sql) or die(mysql_error().'<br />'.$sql);
	return $res;
}

Lo bueno y breve dos veces bueno, o algo asi. Nos vemos

 

Sin pausar ni repetir palabra (ni buscar en google o semejantes) quien me puede decir a que pertenecen cada una de estas imagenes.

 

Hoy por pura curiosidad me dió por buscar Caleio en Google y para mi sorpresa apareció un enlace a un artículo de alzado.org llamado Cómo empezar una start-up. Caleio sale mencionado en el comentario 4 y luego en el 8.

Me gustaría comentar que Caleio NO es una start-up. No es una compañía ni genera beneficios, es un simple proyecto personal. Y es justamente ahí donde creo que reside cierta debilidad de Caleio, que da la impresión de que no es un proyecto serio. Como dije en el post introductorio Caleio surgió porque se me ocurrió que esto que estaba programando para uso personal capaz que le servía a más gente. Esto no significa que no sea algo serio (no estoy diciendo que alguien lo haya dicho en algún comentario), yo uso mi sistema, el primer interesado en que esto funcione bien soy yo.

Caleio todavía tiene mucho camino por recorrer, tengo varias mejoras en mente (si Alejandro lei tu mail, siento no haberte contestado todavia) y ya estoy investigando como hacer el API (en realidad ya lo tengo todo investigado, solo falta implementarlo). No ha avanzado tanto durante el verano como yo quería, mucho trabajo y vida social.

Yo creo que podría ser algo interesante en el futuro, a mi actualmente me ayuda mucho lo de los feeds RSS para recordarme que tengo que hacer cada día. Que pasaría si Caleio crece mucho y se vuelve imposible de mantener de manera gratis. Esto ya lo pensé varias veces (uno no puede evitar soñar :D). Lo primero sería aceptar donaciones por Paypal o similares. Quiero evitar a toda costa propaganda tipo Adsense, y la opción de empezar a cobrar esta completamente fuera de lugar. Se ha probado mil veces que no se puede cobrar algo que antes era gratis. Además es muy difícil que Adsense funcione bien por la poca cantidad de texto y lo rápido que cambia. Dudo mucho muchisimo que algún día las donaciones por Paypal no lleguen a pagar los gastos, asi que dicen cruzaremos ese puente cuando lleguemos a él.

Lindo que me comparen con alistados y khef. Son sitios que no uso, pero que son interesantes y conocidos. Puede que use khef para algunas ideas que tengo. Interesante que salga Caleio en alzado.org, nunca los había leido pero había leido referencias hacia ellos.

 

El domingo tocó viaje a Nottingham a visitar la sede de Games Workshop. Resulta que además de oficinas tienen un ‘castillo’ con tienda, sala de exposiciones y juego llamado Warhammer World.

Para los no-geek, Games Workshop es la compañía más grande de juegos de Rol (si esos que van matando gente a diestra y siniestra y que son todos unos desequilibrados). Los juegos de rol consisten en tener una fichitas que cumplen la función de ejercito y pelear con otra gente con ejercitos similares. Lo curioso de este juego son las fichas, que son replicas pintadas a mano de los personajes en tamaño miniatura.

Así que alla fuimos, media hora en tren, 15 minutos en taxi y llegamos al lugar en cuestion que resultó ser muy simpático. Mucho friki del rol (había uno que tenía orejas de elfo) y muchas figuritas MUY bien pintadas (la sala de exposición es impresionante).

Al final no pude aguantarme y salí con un Starter Kit que incluye seis UltraMarines, pintura y pincel. Ya pinté el primero, así que despues le saco una foto y la pongo.

Mientras tanto pueden echar un vistazo a el set de Warhammer World en Flickr.

 

Sin Spoilers

Harry Potter es un paquete y como los buenos dependan de él están jodidos.

Con Spoilers

El libro parece muy agarrado por los pelos. Al final se sabe que todo lo que viene de Madame Rosemerta no se revisaba, qué tipo de seguridad ultra-segura es esa? Malfoy aparece muy poco para el peso que tiene al final. Harry deja a Ginny… haciendose el macho, el lobo solitario en plan Spiderman, si él solo no puede hacer nada! Siempre sale bien parado por los amigos y de pura suerte que está vivo.

Cada vez me está poniendo más de los nervios, si al final va a ser como Smallvile que la tuve que dejar de ver porque Clark era un inútil social y un reverendo idiota (y que lo diga yo… lo de antisocial, no idiota).

Y lo peor de todo es Harry diciendo que el año que viene no va a volver a la escuela. Pero si no sabe NADA!! ¿Se cree que puede ir por ahi con alguna esperanza de encontrar algo, ya no hablemos de matar a Voldemort, sin terminar su educación?

Otro review más completo y profundo en demasiada cafeína.

 

Resulta que antes de irme de Madrid ‘vendí’ mi bicicleta porque no pensé que la iba a usar. Digo ‘vendí’ porque se la vendí a mi hermana que se la regaló a su novio, pero yo nunca vi la plata… Sin embargo cuando llegué a Derby me di cuenta de que iba a necesitar una bicicleta (Murphy strikes again!) porque el pueblo es chiquitito y la caminata a la universidad es una cagada. Muy lindo y pintoresco los primeros dias, pero cansa y aburre. Asi que investigando en los anuncios de los diarios encontré a £15, una raleigh que tenía como 15 años pero que cumplía la funcion de bicicleta. Yo buscaba algo que al final de año pudiese tirar a un rio para no tener que preocuparme de que hacer con una bicicleta cara antes de irme a Chile o Madrid o donde fuese.

La bicicleta era decente como dije, pero de los 10 cambios solo funcionaban 6 y la rueda de atras parecía una tira de Moebius, no tomaba una curva rápida porque la rueda terminaba estampada contra un coche y yo contra un autobus.

La cuestión es que como por el trabajo yo me quedé acá durante el verano decidí que sería una buena idea invertir en algo un poco más parecido a una bicicleta. Esta desición fue acelerada por culpa de una rotura de freno y la rueda trasera que no hacia más que empeorar en su curvatura lateral.

Así que fuí a la bicicletería que hay al lado de casa y salí con esto:

Mi bicicleta

Además aproveché para comprar un casco y unos parches para camaras que no necesitan pegamento (me acabo de dar cuenta de que no tengo con que sacar la camara en caso de pinchazo :D)

El punto de la historia es que la bicicleta vieja todavía la tenía y necesitaba deshacerme de ella. Era demasiado mierda como para regalar así que le pregunté a mi jefe como hacía y el me comentó que a una amiga suya le interesaría y que cuanto cobraba por ella. Me sentía sucio y miserable pidiendo plata por eso así que se la regalé. Pero mi jefe decidió que no se la llevaba gratis y se le ocurrió que esto sería buen pago:

Cerveza!!!

Yo no me quejé, obviamente :D

 

He aquí una foto de hace una semana de mi escitorio en mi trabajo. Actualmente esta girado 90 grados, tiene otro escritorio en frente y los dos monitores CRT (el otro es un Mac) ahora son TFT.

Lo mejor del caso es que con Synergy2 puedo usar el mismo teclado y mouse con la PC y Mac :D. Falla a veces al intentar conectar las dos computadoras pero es mucho más comodo que tener dos teclados y mouse.

Para la próxima, una foto de mi nueva bicicleta y el pago que recibi a cambio de la vieja.

 

El año pasado mi vida social fue casi inexistente, entre otras cosas por los compañeros de piso que me tocaron. Sin embargo desde que llegué de Madrid casi nunca me aburro por culpa de los personajes con los cuales comparto el departamento que paso a describir.

Maz: Inglés que trabaja de soldador en una fabríca de material de construcción. Trabajo de verano porque el año que viene empieza a estudiar algo relacionado con los medios. Este tipo piensa mucho demasiado y sale con unos quilomobos mentales a lo grande. Se puede tirar 45 minutos para explicarte que algo que a cualquiera tomaría 5. A veces un poco soporífero, pero muy interesante y buena gente.

Allan (aka El chino fiestero): Esta acá para hacer su tesis o algo así, pero lo único que hace es dormir, jugar al pool y salir de fiesta. También buena gente y completamente loco. Tiene un tatuaje de Metallica que le hicieron los amigos con una aguja. Si es que está de la cabeza. Lo peor de todo es que el tatuaje salio perfecto, un ‘trabajo Chino’ (que gracioso que soy) que tardó dos horas. Al parecer los amigos tiene tatuajes similares conseguidos por métodos igualmente peligrosos.

Tong (aka El chino de la bomba): El anti-social. Nunca sale, ni de su cuarto, excepto para comer. Nunca lo vi salir por la puerta del piso. Creemos que esta construyendo una bomba atómica. Tan anti-social que ayer estaba él cocinando y entramos dos de nosotros para cocinar y él se fue dejando sus cosas en el fuego y no volvió hasta que nos fuimos. Raro raro.

David: El español, de Huelva si mal no recuerdo. Es el otro que sale en la foto anterior. Viene por dos meses a trabajar a una compañía de técnico informático, o sea el que acomoda las bandejas de papel a los usuarios que dicen que su impresora no funciona. Está exactamente donde debería estar yo sino fuese tan vago, pero 400 kilometros al sur ya que esta en tercero de la Ingenieria Superior Informática, pero en la universidad de Sevilla. Todo un personaje, es con el que más salgo. Una pena que tenga un MSN Spaces… y bueno, en algo tenía que fallar :P

En fin, que mi vida social resurgió temporalmente durante mi viaje a Madrid y por suerte continuó acá.

Esta noche toca experimentar con una tortilla española :D

 
Set your Twitter account name in your settings to use the TwitterBar Section.