lunes, 30 de marzo de 2009

Bloque T2.7 Ejercicio 1

Comprobado con un par de Feeds que me he descargado. No sé si funcionará online.

#!/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
puts "\t" + i.pubDate.to_s + "\n"
end

Bloque T2.5 Ejercicio 1

Con este programa he conseguido que se muestre "habitacion: "+ nombre de habitacion y tipo de habitacion.

#!/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| #Bucle sobre las habitaciones
puts "Habitacion: "
(puts h.attribute('id')) || (puts h.attribute('tipo'))
puts "\n"
}


Este es el XML que usé.
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Descripci�n de los elementos de una casa so�ada -->
<micasa>
<habitacion id="comedor">
<mueble>aparador</mueble>
<mueble>sof� &quot;de �poca&quot;</mueble>
</habitacion>
<habitacion id="cocina">
<mueble><![CDATA[
<p>En la pared de la derecha hay un frigor�fico
<p>Y en la de la izquierda, s�lo mugre
]]></mueble>
<mueble>fregadero</mueble>
</habitacion>
<habitacion tipo='dormir'><mueble>Cama</mueble></habitacion>
<habitacion tipo='transdimensional'><mueble>armario<habitacion><mueble>Sillon de hielo de la reina mala </mueble></habitacion></mueble></habitacion>

</micasa>

Bloque T2.4 Ejercicio 1

XML Schema (XSD):
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="partido">
<xs:complexType mixed="true">
<xs:attribute name="local" type="xs:NMTOKEN" use="required" />
<xs:attribute name="visitante" type="xs:NMTOKEN" use="required" />
<xs:attribute name="id" type="xs:ID" use="required" />
</xs:complexType>
</xs:element>

<xs:element name="quiniela">
<xs:complexType>
<xs:sequence>
<xs:element ref="partido" maxOccurs="15" />
</xs:sequence>
<xs:attribute name="fecha" type="xs:string" use="required" />
<xs:attribute name="id" type="xs:NMTOKEN" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>



Archivo XML:

<?xml version="1.0" encoding="UTF-8"?>
<quiniela id="1" xmlns:noNamespacesSchemaLocation="quiniela.xsd" fecha="27/03/2009">
<partido id="P1" local="equipo_A" visitante="equipo_B">1</partido>
<partido id="P2" local="equipo_C" visitante="equipo_D">2</partido>
<partido id="P3" local="equipo_E" visitante="equipo_F">1</partido>
<partido id="P4" local="equipo_G" visitante="equipo_H">2</partido>
<partido id="P5" local="equipo_I" visitante="equipo_J">X</partido>
<partido id="P6" local="equipo_K" visitante="equipo_L">X</partido>
<partido id="P7" local="equipo_M" visitante="equipo_N">1</partido>
<partido id="P8" local="equipo_O" visitante="equipo_P">2</partido>
<partido id="P9" local="equipo_Q" visitante="equipo_R">2</partido>
<partido id="P10" local="equipo_S" visitante="equipo_T">2</partido>
<partido id="P11" local="equipo_U" visitante="equipo_V">1</partido>
<partido id="P12" local="equipo_W" visitante="equipo_X">1</partido>
<partido id="P13" local="equipo_Y" visitante="equipo_Z">X</partido>
<partido id="P14" local="equipo_1" visitante="equipo_2">X</partido>
<partido id="P15" local="equipo_3" visitante="equipo_4">X</partido>
</quiniela>

viernes, 27 de marzo de 2009

Bloque T2.2.3

Bueno, vemos el espacio de nombres para nuestro equipo clásico (nunca mejor dicho).

<eq:equipo xmlns:eq='http://www.lfp.com/equipo' id="Atenas C.F" xmlns:plan='http://www.lfp.com/plantilla'>
<eq:entrenador>Pericles</eq:entrenador>
<eq:presidente>Leonidas</eq:presidente>
<eq:plantilla_titular>
<plan:jugador posicion="portero">Socrates</eq:jugador>
<plan:jugador posicion="defensa">Empedocles</eq:jugador>
<plan:jugador posicion="centro">Aristofanes</eq:jugador>
<plan:jugador posicion="mediapunta">Aristoteles</eq:jugador>
<plan:jugador posicion="delantero">Platon</eq:jugador>
</eq:plantilla_titular>
<eq:plantilla_suplente>
<plan:jugador posicion="defensa">Diogenes</eq:jugador>
<plan:jugador posicion="delantero">Pitagoras</eq:jugador>
</eq:plantilla_suplente>
</eq:equipo>

miércoles, 25 de marzo de 2009

Bloque T2.2.2

Bueno, y esta vez, como siempre, barremos pa' casa. En lugar de hacer el XML que se pide sobre libros, he decidido hacerlo acerca de los discos de mi grupo (¡Cómo no!). Al fin y al cabo son publicaciones de un estilo similar, aunque con vistas a posterior implementación real he incluido muchísima más información de la que normalmente incluiría si fuera sólo un ejercicio.

Para ver como va funcionando, aquí.



<?xml
version="1.0" encoding="iso-8859-1"?>
<!-- Plantilla Discos por Pakitochus -->
<disco>
<titulo> El Otro Yo </titulo>
<fecha> 2007 </fecha>
<descarga href="http://www.megaupload.com/es/?d=SFG94C0C" />
<datos_tecnicos>
<productor>Anima Adversa</productor>
<musica>Anima Adversa</musica>
<graficas>Angeles Muñoz</graficas>
<colaboraciones>
<colaborador>Antonio J. Jimenez</colaborador>
<colaborador>Santi Dominguez</colaborador>
<colaborador>Guillermo Vázquez</colaborador>
</colaboraciones>
<detalles>Grabado entre Octubre de 2006 y Enero de 2007 en la escuela de Rock "La Chana Blue" de granada.</detalles>
</datos_tecnicos>
<artwork>
<art id="portada_oy.jpg">Portada</art>
<art id="inlay_oy.jpg">Inlay</art>
<art id="libreto_oy.jpg">Libreto</art>
<art id="galleta_oy.jpg">Galleta</art>
<art id="ilustracion_oy.jpg">Ilustracion</art>
</artwork>
<tracklist>
<track num="1" letra="1">Uno Para Despertar</track>
<track num="2" letra="2">El Cuervo</track>
<track num="3" letra="3">Princesa del Desierto</track>
<track num="4" letra="4">En tus Brazos</track>
<track num="5" letra="5">Lágrimas de Eternidad</track>
<track num="6" letra="7">Hell's Kitchen</track>
<track num="7" letra="10">Alter Ego</track>
<track num="8" letra="9">Gamonal</track>
</traclist>
<legal>
<licencia ref="http://creativecommons.org/licenses/by-nc-nd/2.5/es/legalcode.es">Creative Commons BY-NC-ND 2.5</licencia>
<registro ref="http://images.safecreative.org/work/0811171595819/label/barcode-150" />
</legal>
</disco>

<disco>
<titulo> El Grito en el Cielo </titulo>
<fecha> 2009 </fecha>
<descarga href="http://www.safecreative.org/work-view.shtml?cid=34909&actionMethod=work-view.xhtml%3AworkHome.workDownload&id=64769" />
<datos_tecnicos>
<productor>David F. Castro</productor>
<productor>Anima Adversa</productor>
<musica>Anima Adversa</musica>
<graficas>Felix de la Fuente</graficas>
<colaboraciones>
<colaborador>Rocio Garcia</colaborador>
<colaborador>Chema Lapuente</colaborador>
<colaborador>Fran Suarez</colaborador>
<colaborador>David Castro</colaborador>
</colaboraciones>
<detalles>Grabado entre Octubre de 2008 y Enero de 2009 en los estudios BomTrack de Úbeda, bajo la dirección de David F. Castro.</detalles>
</datos_tecnicos>
<artwork>
<art id="portada_gc.jpg">Portada</art>
<art id="inlay_gc.jpg">Inlay</art>
<art id="libreto_gc.jpg">Libreto</art>
<art id="galleta_gc.jpg">Galleta</art>
<art id="ilustracion_gc.jpg">Ilustracion</art>
</artwork>
<tracklist>
<track num="1" letra="13">Condena</track>
<track num="2" letra="14">Sisyphos</track>
<track num="3" letra="15">El Hombre Terminal</track>
<track num="4" letra="16">Liberacion</track>
<track num="5" letra="17">Nautilus</track>
<track num="6" letra="18">Todo Quedara Asi</track>
<track num="7" letra="19">Que Nada os Detenga</track>
<track num="8" letra="20">Al Abordaje</track>
<track num="9" letra="21">El Disfraz de la Mariposa</track>
</tracklist>
<legal>
<licencia ref="http://creativecommons.org/licenses/by-nc-nd/2.5/es/legalcode.es">Creative Commons BY-NC-ND 2.5</licencia>
<registro ref="http://images.safecreative.org/work/0901212445354/label/barcode-150" />
</legal>
</disco>

lunes, 23 de marzo de 2009

Bloque T2.2.1

<?xml version="1.0" encoding="ISO-8859-1"?>
<equipo id="Atenas C.F.">
<entrenador>Pericles</entrenador>
<lista_jugadores>
<jugador posicion="portero">Socrates</jugador>
<jugador posicion="defensa">Empedocles</jugador>
<jugador posicion="defensa">Diogenes</jugador>
<jugador posicion="centro">Aristofanes</jugador>
<jugador posicion="mediapunta">Aristoteles</jugador>
<jugador posicion="delantero">Pitagoras</jugador>
<jugador posicion="delantero">Platon</jugador>
</lista_jugadores>
</equipo>

jueves, 19 de marzo de 2009

Practica 2

El ejemplo funcionando lo podéis encontrar aqui.



 // Definición de la clase noticia
function noticia(title, descrip, fech, enlac){
this.titulo=title;
this.descripcion=descrip;
this.fecha=fech;
this.enlace=enlac;
this.setNoticia=setNoticia;
this.toString=toString;
}

//Establece una noticia nueva.
function setNoticia(tit, desc, fec, enl){
this.titulo = tit;
this.descripcion = desc;
this.fecha = fec;
this.enlace = enl;
}

//Muestra el contenido de la noticia en HTML
function toString() {
return "<h1>" + this.titulo.toString() + "</h1><h5>"+ this.fecha +"</h5><h4>"+ this.descripcion +"</h4><p><a href='"+this.enlace+"' target='_blank'>Leer mas</a><br><br>";
}

/**Script importado desde http://www.jr.pl/www.quirksmode.org/dom/importxml.html*/
function importXML(){
//Si el navegador dispone de la estructura de Mozilla,
if (document.implementation && document.implementation.createDocument){
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.onload = mostrarNoticias;
}
//Si estamos en internet Explorer.
else if (window.ActiveXObject){
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.onreadystatechange = function () {
if (xmlDoc.readyState == 4) mostrarNoticias()
};
}
else{
alert('Your browser can\'t handle this script');
return;
}
xmlDoc.load("rssfeed.xml");
}

//Esta función carga todas las noticias desde el
function mostrarNoticias(){
var oyetu=new noticia("prueba", "perfect", "13", "http://www.animaadversa.es");

//Extraemos los objetos items.
var items = xmlDoc.getElementsByTagName('item');
//Creamos el componente de lista desordenada
var ul = document.createElement('UL');

//Y hacemos la conversión a HTML
for(var i=0; i<items.length;i++){
//Los textos que vamos a incluir, dentro de la lista
var container = document.createElement('LI');
var array=new Array();//un array con 0.- titulo, 1.- desc, 3.- link, 4.- fecha
for (var j=0; j<items[i].childNodes.length/2-1; j++){
array[j] = items[i].childNodes[2*j+1].firstChild.textContent;
}
oyetu.setNoticia(array[0]+" ", array[1]+" ", array[4]+" ", array[3]+" ");
var htmlamostrar =oyetu.toString();
container.innerHTML=(htmlamostrar);
ul.appendChild(container);
}
document.getElementById("sections").appendChild(ul);

iniciarjQuery();
}

//Funcion para iniciar el plugin de jQuery SerialScroll, de ARiel Flesler
function iniciarjQuery(){
$('#screen').serialScroll({
target:'#sections',
items:'li',
prev:'img.prev',
next:'img.next',
axis:'xy',
navigation:'#navigation li a',
duration:700,
force:true,
onBefore:function( e, elem, $pane, $items, pos ){
e.preventDefault();if( this.blur )this.blur();
},
onAfter:function( elem ){}});
}

Bloque T1.8 Ejercicio 1

// ==UserScript==
// @name AAP-Nav-Pachus
// @namespace http://geneura.org/projects/greasemonkey
// @description Navegación por las secciones de AAP
// @include http://geneura.ugr.es/~jmerelo/asignaturas/*
// ==/UserScript==

GM_log('Entrando AAP-Nav');
var ejercicios = document.getElementsByTagName('div');
GM_log(ejercicios);
var a_nodes = new Array;
var anchors = new Array;
var contador =0;
for ( var secs = 0; secs < ejercicios.length; secs ++ ) {
if(ejercicios[secs].getAttribute('class')=='ejercicios'){
a_nodes[contador] = ejercicios[secs].firstChild;
anchors[contador] = ejercicios[secs].getAttribute('id');
GM_log('Anchor ' + secs + " " + anchors[contador]);
contador++;
}
}



for ( var secs = 0; secs < ejercicios.length; secs ++ ) {
var span = document.createElement('span');
span.setAttribute('style','background:lightblue');
if ( secs > 0 ) {
var ahref = document.createElement('a');
ahref.setAttribute('href','#'+anchors[secs-1]);
var txt=document.createTextNode('^');
ahref.appendChild(txt);
span.appendChild(ahref);
}
if ( secs < ejercicios.length -1 ) {
span.appendChild(document.createTextNode(' | '));
var ahref = document.createElement('a');
ahref.setAttribute('href','#'+anchors[secs+1]);
var txt=document.createTextNode('v');
ahref.appendChild(txt);
span.appendChild(ahref);
}
a_nodes[secs].parentNode.insertBefore(span,a_nodes[secs]);
}


domingo, 15 de marzo de 2009

Bloque T1.7 Ejercicio 1

  function mostrarTitulos(){
var titulos=new Array();
titulos=document.getElementsByTagName('h2');
var ejs="";
for (i in titulos){
ejs = (ejs+"Apartado "+ i +": "+titulos[i].innerHTML+"<br>");

}
document.getElementById("resumen").innerHTML=ejs;
}

viernes, 13 de marzo de 2009

Bloque T1.4. Ejercicio 1

Esta es mi resolución de el ejercicio, que contabiliza el número de partidos ganados, empatados y perdidos.

#!/usr/bin/smjs



load('Partido.js');

var equipos= new Array('Madrid', 'Barça', 'Atleti', 'Geta', 'Betis', 'Depor', 'Sevilla', 'Graná');

function jornada( estosEquipos ) {

var equiposAqui = new Array;
equiposAqui = equiposAqui.concat(estosEquipos);
var midsize = equiposAqui.length/2;
var quiniela = new Array( midsize );
var unox2 = new Array( '1','x','2');
for ( var i=0; i < midsize ; i++ ) {
var equipo1 = equiposAqui.splice(Math.floor( equiposAqui.length*Math.random()) , 1);
var equipo2 = equiposAqui.splice(Math.floor( equiposAqui.length*Math.random()), 1);
quiniela[i] = new Partido( equipo1, equipo2 );
quiniela[i].setResultado( unox2[Math.floor( 3*Math.random()) ]);
}
return quiniela;
}


var quinielas = new Array;

for ( var i = 0; i < 10; i ++ ) {
quinielas[i] = jornada( equipos );
}

var resultados= new Array;
var ganados = new Array;
var empatados = new Array;
var perdidos = new Array;
for ( var i in equipos ) {
resultados[equipos[i]]=0;
ganados[equipos[i]]=0;
empatados[equipos[i]]=0;
perdidos[equipos[i]]=0;
}
for ( var i = 0; i < quinielas.length; i ++ ) {
for ( var j = 0;j < quinielas[i].length; j ++ ) {
var local = quinielas[i][j].local;
var visitante = quinielas[i][j].visitante;
var resultado = quinielas[i][j].resultado;
switch(resultado){
case '1':
resultados[local]+=3;
ganados[local]+=1;
perdidos[visitante]+=1;
break;
case 'x':
resultados[local]+=1;
resultados[visitante]+=1;
empatados[local]+=1;
empatados[visitante]+=1;
break;
case '2':
resultados[visitante]+=3;
ganados[visitante]+=1;
perdidos[local]+=1;
break;
}
}
}

for ( var i in resultados ) {
print( i + ": \t" + resultados[i] + "\t" + ganados[i] + "\t" + empatados[i] + "\t" + perdidos[i])
}

lunes, 2 de marzo de 2009

Bloque 1.2. Ejercicio 2

REST es una colección de principios de "arquitecturas" para sistemas distribuidos que define como los recursos se definen y se direccionan. Conmunmente se refiere a cualquier interfaz que transmita datos específicos de un dominio sobre HTTP sin necesidad de una capa adiccional de mensajes.

Buscando ejemplos de programas que utilicen interfaces del tipo REST me he encontrado que una de las cosas que más utilizamos hoy día tiene una estructura de este tipo: me refiero a los blogs. En particular, lo que llamamos "sindicaciones" o "suscripciones" no son más que descargas y actualizaciones de un archivo en formato XML (utilizando RSS o Atom), que contienen enlaces a diferentes recursos webs (cada una de las publicaciones en dicho blog).

He encontrado otro ejemplo que me ha parecido interesante, en un proyecto que está hospedado en sourceforge: sqlREST. Se trata de un una aplicación web basada en java que puede ser configurada para acceder a cualquier base de datos que utilice JDBC (Java DataBase Conectivity) mediante URIs. También se puede utilizar como interfaz para cualquier otra base de datos del tipo MySQL, Oracle o SQL server, y para instalarlo solo hace falta tener un "contenedor-web" como Tomcat (o algún otro servidor que soporte servlets).