lunes, 27 de abril de 2009

AAP BloqueT2.10 ejercicio1

Hacer un filtro SAX que traduzca el célebre XML casero de etiquetas en español a etiquetas en inglés. Hacerlo en Ruby o en otro lenguaje.
Para probarlo descargar estos dos archivos:
equipo.xml
bloqueT210.rb
#!/usr/bin/ruby
require 'rexml/document'
require 'rexml/streamlistener'
include REXML
entrada='./equipo.xml'


diccionario = {"equipo"=>"team",
"jugador"=>"player",
"nombre"=>"name",
"posicion"=>"position",
"numero"=>"number",
"entrenador"=>"coach",
"Portero"=>"Goalkeeper",
"Amigo del portero"=>"Friend of the goalkeeper",
"La fan de Mortadelo"=>"The fan of Mortadelo"}

class Traduce
include StreamListener
def initialize(dic)
@escribe = false
@diccionario = dic
end

def tag_start(name, attributes)
puts "<"+@diccionario[name]+">"
@escribe = true
end

def tag_end(name)
puts "</"+@diccionario[name]+">"
@escribe=false
end

def text(texto)
if @escribe
if @diccionario[texto]
puts @diccionario[texto]
else
puts texto
end
end
end
end

print "Content-Type: application/xhtml+xml\n\n"

listener = Traduce.new(diccionario)
parser = Parsers::StreamParser.new(File.new(entrada), listener)
parser.parse

miércoles, 22 de abril de 2009

Una nueva plataforma de computación nube

En mis tiempos con el Mac OS X me registré en la página de VMWare y, de vez en cuando, me mandan noticias. Normalmente las borro pero hoy he encontrado algo que me ha llamado atención y me ha recordado al primer tema de esta asignatura.

Se trata del nuevo lanzamiento de esta empresa: el VMWare vSphere 4 es, según ellos lo definen, "La mejor plataforma para crear infraestructuras cloud".

Según he podido entender leyendo la documentación, esta plataforma crea un "cluster virtual" para el que han creado un sistema de ficheros (VMFS) adecuado a esta arquitectura, switches virtuales, etc.

lunes, 20 de abril de 2009

AAP BloqueT2.8 ejercicio3

Hacer un CGI que genere un RSS arbitrario. El tipo que hay que devolver es application/xml+rss.

El código del CGI es el siguiente:
#!/usr/bin/perl

use CGI qw(:standard);

print header( -type => 'application/xhtml+xml' );

print<<EOC;
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<rss version='2.0'>
<channel>
<title>ideal.es - Local</title>
<link>http://www.ideal.es</link>
<description>ideal, digital, granada, noticias, archivo, hemeroteca, buscador</description>
<language>es-ES</language>
<image></image>
<pubDate>Mon, 30 Mar 2009 11:35:03 GMT</pubDate>
<item><title><![CDATA[Granada batirá el récord de ocupación en Semana Santa]]></title>
<link>http://www.ideal.es/granada/20090330/local/granada/granada-batira-record-ocupacion-200903301301.html</link>
<description><![CDATA[Unos 100.000 visitantes garantizarán una ocupación hotelera del cien por cien el próximo Sábado Santo. La efeméride podría congregar en las calles de la capital en torno a las 200.000 personas, según estimaciones del Ayuntamiento]]></description>
<pubDate>Mon, 30 Mar 2009 11:06:17 GMT</pubDate>
<guid>http://www.ideal.es/granada/20090330/local/granada/granada-batira-record-ocupacion-200903301301.html</guid>
</item>
<item><title><![CDATA[Normalidad en la única sucursal en Granada de Caja Castilla La Mancha]]></title>
<link>http://www.ideal.es/granada/20090330/local/granada/normalidad-unica-sucursal-granada-200903301133.html</link>
<description><![CDATA[Su director afirma que varios clientes han solicitado información sobre la intervención de la entidad por parte del Banco de España]]></description>
<pubDate>Mon, 30 Mar 2009 10:37:08 GMT</pubDate>
<guid>http://www.ideal.es/granada/20090330/local/granada/normalidad-unica-sucursal-granada-200903301133.html</guid>
</item>
</channel>
</rss>
EOC



Y un ejemplo de su uso: crearRSS.cgi NO HE PODIDO SUBIRLO AL SERVIDOR. EN CUANTO PUEDA LO HAGO.

AAP BloqueT2.8 ejercicio2

Instalar un servidor web en el ordenador, y probar el programa anterior.

Tengo la distribución de Ubuntu 9.04 y he instalado el servidor web Apache mediante el comando de terminal "sudo apt-get install apache2".

He copiado el archivo "creaXML.cgi" en la carpeta que Apache tiene por defecto para los CGIs, "/usr/lib/cgi-bin/" y la he probado escribiendo en el navegador la dirección "http://localhost/cgi-bin/creaXML.cgi"

AAP BloqueT2.8 ejercicio1

Buscar formas alternativas de servir XML a través de un servidor web.

He encontrado un añadido para cualquier servidor que permita ejecutar servlets, como Apache que se llama Cocoon. Está escrito en Java.

Otra forma de servir XMLs desde un servidor es mediante los XSLT. Un ejemplo es el que ya puse en otro ejercicio y se puede ver aquí. Es un archivo XML al que se le ha aplicado este XSLT para darle el formato que se muestra.

Práctica 4

Y aquí el enlace de la práctica 4

Práctica 3

Aquí el enlace de la práctica 3

Práctica 1

Como he visto que no tengo subidas las prácticas en este blog, voy a colocar el enlace en la que están subidas.
Esta entrada es para la práctica 1 así que sólo voy a poner el enlace de esa: Éste es.

viernes, 10 de abril de 2009

AAP Bloque T2.7 ejercicio2:

Buscar una librería en cualquier lenguaje de programación que lea un feed Atom y devuelva los títulos.

He encontrado una API para usar con PHP para leer feeds Atom. Se llama Zend y en la misma página se puede ver un ejemplo de uso de para obtener el ID, título, resumen y enlace de la entrada.

Otra librería para PHP que permite leer y parsear RSS y Atom es SimplePie. En esta página podemos encontrar un ejemplo de uso.

jueves, 9 de abril de 2009

AAP Bloque T2.7 ejercicio1:

Hacer un programa que lea un feed RSS dado por el URL y presente los títulos y la fecha. Usar cualquier lenguaje de programación.
#!/usr/bin/ruby

require 'rss/1.0'
require 'rss/2.0'

documento = ARGV[0]
file = File.new(documento)
rss = RSS::Parser.parse(file, false)
rss.channel.items.each do |i|
puts "*" + i.title + " (" + i.pubDate.to_s + ")"
end

AAP Bloque T2.6 ejercicio2:

Darse de alta en un agregador online (alguno de los indicados anteriormente), o bien descargar un agregador (como Akregator), suscribirse a las publicaciones anteriores y seguirlas con suma atención.

Me he suscrito a las feeds que he mencionado en el ejercicio anterior usando el Google Reader aprovechando que ya tenía cuenta con ellos y así no tener que registrarme en las otras.

También he aprovechado y me he suscrito a los blogs de todos los de las asignaturas por si no vemos alguno en clase, aprender de ellos en mi casa.

AAP Bloque T2.6 ejercicio1:

Localizar feeds RSS de publicaciones relacionadas con la asignatura.

Buscando entre los enlaces de la práctica 1 he encontrado algunas referencias que ofrecen suscripciones RSS:

De las otras referencias que señalé en dicha práctica, la primera no ofrece suscripción RSS y las dos últimas, en caso de que se pudiese, no merecería la pena porque la primera es una página web almacenada en la memoria del ordenador y la segunda no está actualizada desde el 2002 xD.

AAP Bloque T2.5 ejercicio2:

Hacer un programa en Java, o en Python, o en PHP, o en algún otro lenguaje que haga lo mismo.
import org.w3c.dom.*;
import java.io.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;

public class bloqueT252
{
public static void main (String [] args)
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ( );
Document documento = null;

try
{
DocumentBuilder builder = factory.newDocumentBuilder();
documento = builder.parse( new File(args[0]) );
}
catch (Exception spe)
{
System.out.println("Error al leer el archivo");
}

// Obtenemos el nodo raíz del documento XML.
Node nodoRaiz = documento.getFirstChild();
NodeList listaNodos = documento.getChildNodes();
for (int i=0; i<listaNodos.getLength(); i++)
if (listaNodos.item(i).getNodeName().equals("micasa"))
nodoRaiz = listaNodos.item(i);
/* Esto hay que hacerlo porque los comentarios también cuentan como nodos */


// Obtenemos la lista de nodos hijos del nodo Raiz.
NodeList listaNodosHijo = nodoRaiz.getChildNodes();

// Hacemos un barrido por todos los nodos hijo
Node nodoHijo;
for (int i=0; i<listaNodosHijo.getLength(); i++)
{
nodoHijo = listaNodosHijo.item(i);

// Nos quedamos con los que su nombre de etiqueta es "habitacion"
if (nodoHijo.getNodeName().equals("habitacion"))
{
// Obtenemos el atributo "id" y lo mostramos por pantalla.
NamedNodeMap atributos = nodoHijo.getAttributes();
Node id = atributos.getNamedItem("id");
System.out.println("Habitacion: "+id.getNodeValue());
}
}
}
}

El código se puede descargar de aquí

miércoles, 1 de abril de 2009

AAP Bloque T2.5 ejercicio1:

Modificar alguno de los programas para que imprima las habitaciones, en vez de los muebles.
#!/usr/bin/ruby

require 'rexml/document'
include REXML
documento = ARGV[0]
file = File.new(documento)
doc = Document.new(file)
doc.root.each_element('habitacion') { |h|
puts 'Habitacion: ' + h.attribute('id').to_s
}