domingo, 19 de abril de 2009

Taller2: Bloque T2.4

1.Diseñar un XSchema para un documento XML que describa una quiniela, incluyendo resultados. Tener en cuenta que una quiniela tiene 15 partidos sólo. Hacer un documento XML que siga ese XML Schema, y validarlo usando Xerces2 o algún otro parser con validación.

El enlace al wiki donde está colgado es el siguiente: bloqueT24

Este ejercicio ha sido validado por Oxygen:


miércoles, 15 de abril de 2009

Taller2: Bloque T2.3

1. Con los equipos de la liga anteriores, usar diferentes espacio de nombres para el equipo e sí y para sus componentes.

Enlace al wiki

Taller2: Bloque T2.2

1. Crear un documento XML que contenga la descripción de un equipo de liga. Comprobar que el XML es válido.

2. Crear un documento XML que describa varios libros de una biblioteca.

Los cuelgo en el wiki porque al copiar el código el blog hace cosas raras :S .

Ejercicio 1
Ejercicio 2 (hay dos versiones del mismo ejercicio)


Taller2: Bloque T2.1

1.Elegir un editor XML e instalarlo, o buscar un modo XML para un editor genérico.

El editor elegido ha sido notepad++ recomendado por Tularis. Además de tener la ventaja de no tener que ser instalado en el ordenador (lo cual facilita su movilidad) puede ser usado para múltiples lenguajes de programación

Enlace: notepad++

2.Visualizar este fichero XML en un navegador y comprobar que efectivamente puede hacerlo.

Lo abrimos con el Mozilla 3.0.7 y va sin problemas.




Práctica 3: Uso de GreaseMonkey

Este script añade funcionalidad a la página del correo de la ugr. Permite distinguir emails según el emisor, añade un botón al que tras pasar una asignatura devuelve cierta información del profesorado y al final incluye una tabla de porcentajes de emails.




// ==UserScript==

// @name Mejoras-Correo
// @namespace http://geneura.org/projects/greasemonkey
// @description Permite añadirle ciertas mejoras al correo de la universidad tales como la distinción
// de emails dependiendo del que lo envió, búsqueda rápida del email de profesores,
// tabla con porcentajes
// @include https://correo*.ugr.es/*
// @include http://correo*.ugr.es/*

// ==/UserScript==


//Variables
//Array que contiene todos los correos
var correos = new Array();
//Array para los titulos de los mensajes de entrada
var titulos = new Array();
//Correos de tipo [infoalumnos]
var mensajesInfo = 0;
//Correos de profesores
var mensajesProf = 0;


//Simplemente voy llamando a cada una de las funciones creadas:
//-----------------------------------------------------------------------------------------//
//1-buscarEmails()
//Esta funcion busca los emails en la bandeja de entrada
buscarEmails();
//-----------------------------------------------------------------------------------------//
//2-pintarInfo()
//Colorea el fondo de los mensajes de [infoalumnos]
pintarInfo();
//-----------------------------------------------------------------------------------------//
//3-pintarProfesores()
//Colorea el fondo de los mensajes de profesores
pintarProfesores();
//-----------------------------------------------------------------------------------------//
//4-botonComienzo
//Creo un boton al inicio de la bandeja de entrada para buscar emails de profesores
botonComienzo();
//-----------------------------------------------------------------------------------------//
//5-parteFinal()
//Añade una tabla al final de la bandeja de entrada con el recuento de correos
parteFinal();
//-----------------------------------------------------------------------------------------//



function buscarEmails(){
if (document.getElementsByTagName('tbody')[7] != null) {

//Primero obtengo todos los elementos tr dentro del cuerpo de las tablas
//(si no ponemos tbody toma todos los de la pagina y podría salirse de la bandeja de entrada)
//De ellos obtenemos las filas, es decir los tr
var tr = document.getElementsByTagName('tbody')[7].getElementsByTagName('tr');

//Almaceno todos los tr que corresponden a correos en un array
//Esto es, cuando haya dos tr seguidos, hay un correo
for (var i = 2; i <>
//Lo añado al final
correos.push(tr[i]);
}

//Mostramos el numero de mensajes
GM_log('Numero de emails encontrados: ' + correos.length);
}
}//Fin de la funcion buscarEmails()


//Vamos a colorear los emails que vengan de "infoalumnos"
function pintarInfo(){

//Recorremos la bandeja de entrada
for(var t=0 ; t <>

//Almaceno las etiquetas td de cada correo (que son 6)
var td=correos[t].getElementsByTagName('td');

//Sacamos el titulo del correo que se encuentra en la etiqueta "a" dentro del cuarto "td"
var aCorreo=td[4].getElementsByTagName('a')[0];
//Y lo añadimos al vector
titulos[t]=aCorreo.textContent;

//Pintamos su fondo de naranja
//Nos basta comprobar que las primeras letras son las de [infoalumnos]
if(titulos[t][0]=='[' && titulos[t][1]=='i' && titulos[t][2]=='n' && titulos[t][3]=='f'){
mensajesInfo++;
for (var i = 0; i <>
td[i].setAttribute('bgcolor', '#F7BE81');
}
}

//Mostramos el titulo de los correos
GM_log('Correo: ' + (t+1) + titulos[t]);
}
//Mostramos el numero de mensajes [infoalumnos] encontrados
GM_log('Numero de mensajes "infoalumnos" recibidos: ' + mensajesInfo);

}//Fin de la funcion pintarInfo()



//Funcion para pintar los emails de los profesores
function pintarProfesores(){

//Recorro los correos de la bandeja de entrada
for (var i = 0; i <>

//Almaceno las etiquetas td de cada correo (que son 6)
var ttd = correos[i].getElementsByTagName('td');

//Obtengo el titulo del correo que está en el segundo td
var dir = ttd[1].getAttribute('title');

//Buscamos a ver si es de algun profesor de 4º curso
switch (dir) {
case "atv@ugr.es":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
case "isanchez@ugr.es.com":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
case "jjmerelo@gmail.com":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
case "pameigeiras@ugr.es":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
case "jfv@decsai.ugr.es":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
case "noel@ugr.es":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
case "aruizmoya@ugr.es":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
case "fgamiz@ugr.es":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
}
}
//Mostramos el numero de mensajes de profesores que llevamos
GM_log('Numero de emails de profesores: ' + mensajesProf);

}//Fin de la función pintarProfesores()




//Actualizamos la pagina con los resultados obtenidos
function botonComienzo(){

//Crearemos un boton para buscar informacion básica de las asignaturas de 4ºcurso
var centro = document.createElement('center');
var boton = document.createElement("input");
boton.setAttribute("type", "button");
boton.setAttribute("value", "Informacion Asignaturas");
boton.addEventListener("click", buscarAsignatura, true);
centro.appendChild(boton);
//Añadimos el texto al comienzo de la tabla 5 que ya de por si contiene otros botones
var ttr2 = document.getElementsByTagName('tbody')[5].getElementsByTagName('tr');
ttr2[0].parentNode.insertBefore(centro, ttr2[0]);

}//Fin de la funcion botonComienzo()



function hacerTabla(){

//Numero de filas y columnas
var fila1 = new Array;
fila1[0] = "";
fila1[1] = "Mensajes [infoalumnos]";
fila1[2] = "Mensajes de profesores"
var fila2 = new Array;
fila2[0] = "Numero de mensajes";
fila2[1] = mensajesInfo;
fila2[2] = mensajesProf;
var fila3 = new Array;
fila3[0] = "Porcentaje";
//Para los porcentajes mostraremos solo dos cifras decimales
var resulInfo = ((mensajesInfo) / (mensajesInfo + mensajesProf)) * 100;
fila3[1]=Math.round(resulInfo*100)/100 ;
var resulProf = ((mensajesProf) / (mensajesInfo + mensajesProf)) * 100;
fila3[2]=Math.round(resulProf*100)/100 ;

//Comenzamos a crear la tabla
var tab = document.createElement('table');
var tabBody = document.createElement('tbody');

//Fila 1
//Creamos una nueva columna con un color de fondo azul
var row = document.createElement('tr');
row.setAttribute("bgcolor", "#81BEF7");

//La vamos recorriendo y escribiendo en ella los titulos
for (j = 0; j <>
var texto = document.createTextNode(fila1[j]);
var celdaTitulo = document.createElement('th');
celdaTitulo.appendChild(texto);
row.appendChild(celdaTitulo);
tabBody.appendChild(row);
}

//Fila 2
var row1 = document.createElement('tr');
row1.setAttribute("bgcolor", "#F5F6CE");

for (j = 0; j <>
var texto = document.createTextNode(fila2[j]);
var celda = document.createElement('td');
celda.appendChild(texto);
row1.appendChild(celda);
}

tabBody.appendChild(row1);


//Fila 3
var row2 = document.createElement('tr');
row2.setAttribute("bgcolor", "#F5F6CE");

for (j = 0; j <>
var texto = document.createTextNode(fila3[j] + " %");
var celda = document.createElement('td');

celda.appendChild(texto);
row2.appendChild(celda);
}
tabBody.appendChild(row2);


//Añadimos mas estilos a la tabla
tab.appendChild(tabBody);
tab.setAttribute("border", "2");
tab.setAttribute("align", "right");
tab.setAttribute("cellspacing", "8");
tab.setAttribute("cellpadding", "8");
tab.setAttribute("bgcolor", "#FFFFFF");

//Añadimos el texto al final de la pagina
var tr2 = document.getElementsByTagName('table');
var salto3 = document.createElement('br');
tr2[tr2.length - 1].parentNode.insertBefore(salto3, tr2[tr2.length - 1]);
tr2[tr2.length - 1].parentNode.insertBefore(tab, tr2[tr2.length - 1]);

}//Fin de la funcion hacerTabla()


function buscarAsignatura()
{
var asignatura=prompt("Escribe las siglas en mayusculas de una asignatura de 4º curso para obtener informacion");
GM_log(asignatura);

switch (asignatura) {
case "SRD":
cadena = "Asignatura: Sistemas de RadioComunicación \n";
cadena += "Profesor: Angel de la Torre Vega \n"
cadena += "Email: atv@ugr.es";
break;
case "AP":
cadena = "Asignatura: Antenas y Propagacion \n";
cadena += "Profesor: Ignacio Sánchez García \n"
cadena += "Email: isanchez@ugr.es";
break;
case "AAP":
cadena = "Asignatura: Arquitecturas de Altas Prestaciones \n";
cadena += "Profesor: Su magestad Juan Julián Merelo xD\n"
cadena += "Email: jjmerelo@gmail.com";
break;
case "SCO":
cadena = "Asignatura: Sistemas de Conmutación \n";
cadena += "Profesor: Pablo Ameigeiras Gutiérrez \n"
cadena += "Email: pameigeiras@ugr.es";
break;
case "PDI":
cadena = "Asignatura: Procesamiento Digital de Imágenes \n";
cadena += "Profesor: Joaquín Fernández Valdivia \n"
cadena += "Email: jfv@decsai.ugr.es";
break;
case "TSF":
cadena = "Transmisión por Soporte Físico\n";
cadena += "Profesor: Noel Rodríguez Santiago \n"
cadena += "Email: noel@ugr.es";
break;
case "SRC":
cadena = "Seguridad en Redes de Comunicación\n";
cadena += "Profesor: Antonio Ruiz Moya \n"
cadena += "Email:aruizmoya@ugr.es";
break;
case "CIC":
cadena = "Diseño de Circuitos y Sistemas Electrónicos\n";
cadena += "Profesor: Francisco Gámiz Pérez \n"
cadena += "Email:fgamiz@ugr.es";
break;
default:
cadena = "No ha escrito nada así que no hay información";
break;
}

//Y muestro la información por pantalla
alert(cadena);

}//Fin de la funcion buscarAsignatura()



//Abajo añadimos anotaciones sobre los colores y un boton de busqueda de información
function parteFinal(){

//Letra en cursiva
var i1 = document.createElement('i');
var i2 = document.createElement('i');
i1.setAttribute('style', 'color: #F7BE81');
i2.setAttribute('style', 'color: #A1F5AF');
var txt = document.createTextNode(" * Correo de [infoalumno]");
var txt2 = document.createTextNode(" * Correo de profesores");
//Añadimos el texto
i1.appendChild(txt);
i2.appendChild(txt2);
//Añadimos el texto al final de la pagina
var tr2 = document.getElementsByTagName('table');
tr2[tr2.length - 1].parentNode.insertBefore(i1, tr2[tr2.length - 1]);
tr2[tr2.length - 1].parentNode.insertBefore(i2, tr2[tr2.length - 1]);


//Por ultimo creamos una tabla con los porcentajes
hacerTabla();

}//Fin de la funcion parteFinal()

Taller1: Bloque T1.7

1.Salvar esta página y sobre ella hacer un programa JS que imprima todos los títulos de secciones

Si nos fijamos en el código de la página, todos los títulos de las secciones están precedidos por la etiqueta "h2". Así que una vez encontrados, como hay más de uno, usamos un bucle para mostrarlos todos.

< class="'ejemplo'">Titulos<>="button" onclick="'putBloque()'" value="Pulsa">
< /code>

< id="'resultadoTitulos'" style="'border:dashed;background:lightgreen;padding:5px'"> < /div>

< type="'application/javascript'">
function putBloque(){
var h2 = document.getElementsByTagName('h2');
if (!h2) {

alert('No hay titulos');
} else {
var cadena="";
for(var i=0;i< /script>


Resultado:

Taller1: Bloque T1.5

1.Hacer algún programa en JS que use cualquier clase de Java conocida.

Esta funcion usa la clase Math de java.

function ejemploJavaM(){

//Mostramos por pantalla algunas constantes
print(java.lang.Math.E);
print(java.lang.Math.PI);

//Pasar de grados a radianes
var angGrados = 45; //grados
var angRadianes = java.lang.Math.toRadians(angGrados);

//Funciones
var valor = java.lang.Math.cos(anguloRadianes);
print("Coseno de " + angGrados + "º = " + valor);
}

Practica 2: Programa en Javascript


Este programa permite introducir de una forma rápida y visual las notas finales de un conservatorio de musica ficticio.

<>
<>
< equiv="Content-Type" content="text/html; charset=UTF-8">
<>El Conservatorio de Nika< / title>
< !Además le añadiremos un icono>
< rel="shortcut icon" href="corchea.gif">
< type="text/javascript">

//Funcion para la barra de titulo
//Creamos un texto
txt=" --- El ConSerVatoRio de Nika --- NoTas FinaLes "
function mov_barra(){
document.formAux.win.value = txt;
//Desplazamos el texto una letra a la derecha
txt = txt.substring(1, txt.length) + txt.charAt(0);
//Cada 250mseg ejecuta la accion
window.setTimeout("mov_barra()",250);
}

//------------------------------------------------------------------------------------

//Clase para crear objetos de alumnos
function Alumno(nombre, sexo, edad, curso, notaIns, notaSol, notaFinal,email){
var porc = 0.5;
//Nombre
this.nombre = nombre;

//Sexo
this.sexo = sexo;

//Obtenemos el numero de años dentro de una cadena
if (edad == '') {
//Si no es numero la edad se pone cero
alert("La edad será 0 porque no has tecleado un número");
this.edad = 0;
}
else {
this.edad = edad;
}

//Curso en el que el alumno est'a matriculado
this.curso = curso;

//Obtenemos las notas dentro de cadenas
//not1 = parseInt(notaIns, 10);
if (notaIns == '') {
alert("La nota de instrumento será 0 porque no has tecleado un número");
this.notaIns = 0;
}
else {
this.notaIns = notaIns;
}

//not2 = parseInt(notaSol, 10);
if (notaSol == '') {
alert("La nota de solfeo será 0 porque no has tecleado un número");
this.notaSol = 0;
}
else {
this.notaSol = notaSol;
}


//Nota final
this.notaFinal = notaFinal;

//Nota final
this.email = email;

}//Fin de la clase Alumno

//------------------------------------------------------------------------------------

//Creamos una lista de objetos que guardamos en un array
var grupoInic = new Array();

//-------------------------------------------------------------------------------------


function mostrarAlum(j){

var cadena = "";
cadena += "<>";
cadena += "< size="4" face="Georgia" color="blue">Alumno:" + j + ", Nombre: " + grupoInic[j].nombre + ", Sexo: " + grupoInic[j].sexo + " , Edad: " + grupoInic[j].edad + " , Email: " + grupoInic[j].email +" <> ";
cadena += "< size="3" face="Arial" color="green"><>Curso: " + grupoInic[j].curso + " , Nota instrumento: " + grupoInic[j].notaIns + " , Nota Solfeo: " + grupoInic[j].notaSol + " , Nota final: " + grupoInic[j].notaFinal +"<><>";
cadena += "< /center>";
document.getElementById('resultado1').innerHTML += cadena;
}

//------------------------------------------------------------------------------------


function comprobar(formulario){

//Variable para definir el sexo escogido
var sexoSeleccionado;
//Variable para conocer si el alumno recibira las notas por email
var contacto
//Caracteres validos para campos de texto>";
cadena2 += "< /" + fila + " >\n";
}
cadena2 += "< /" + tabla + " >";
//Modificamos el cuadro de porcentajes
document.getElementById('resultado').innerHTML = cadena2;
}

//------------------------------------------------------------------------------------

< /script>
< /head>
< bgcolor="#FFE87C" onload="mov_barra()">

<><>
<>< name="formAux">< type="text" name="win" size="50" style= "font-size:+30; color:#880000; font-family:Georgia; background-color:#FFFFFF">< /form>< /center>

< name="formu">
<>< id="'tabla'" style="'width:">
< color="#660066" face="Courier"><>

Nombre completo del alumno
< type="text" name="nombre" size="40">
<><>

Sexo
< type="radio" name="sexo" value="Mujer">Mujer
< type="radio" name="sexo" value="Hombre">Hombre
<> <>

Edad
< type="text" name="edad" size="5">
<> <>

Curso de grado elemental
< name="curso" size="1">
< value="Primero">Primero< /option>
< value="Segundo">Segundo< /option>
< value="Tercero">Tercero< /option>
< value="Cuarto">Cuarto< /option>
< /select>
<> <>

Nota instrumento
< type="text" name="instrumento">
Nota solfeo
< type="text" name="solfeo">
<> <>

e-mail:
< type="text" name="email" size="15">
<> <>

< type="button" value="Añadir alumno" onclick="comprobar(formu)">
< type="button" value="Borrar Formulario" onclick="borrarFormu()">
< /b>< /font>
< /div>< /form>

<>
<>< id="'resultado1'" style="'width:"> < /div>< /center>
<>
<>< id="'resultado'" style="'width:"> < /div>< /center>


<>
mostrarEstadisticas();
< / script>


< / body>
< / html>



Resultado:

Taller1: Bloque T1.4

1.Modificar el programa anterior (cualquiera de ellos) para que contabilice el número de partidos ganados, empatados y perdidos.

Enlace al wiki

Resultado:


Taller1: Bloque T1.3

1. Hacer una clase que se corresponda a una fila de una tabla, con número de columnas variables, y un programa que permita crear e imprimir una tabla usándolo.

Colgado en el wiki en este enlace

Taller1: Bloque T1.2

1.Hacer una función que devuelva una tabla en HTML con el número de filas y columnas que se le pasen como parámetro.

Colgado en el wiki en este enlace

Resultado: