jueves, 7 de mayo de 2009

AAP Practica 5: Manejo de XML

Código ruby del cgi en el servidor:




#!/usr/bin/ruby

require 'cgi'
require 'rss/1.0'
require 'rss/2.0'
require 'open-uri'
require 'rexml/document'

cgi = CGI.new
puts cgi.header
puts "<html><head><title>Agregador RSS</title><link href='estilo.css' rel='stylesheet' type='text/css'></head><body> <br>"

#Obtenemos las fuentes del url
fuentes=cgi.params['fuenteRSS']

codigo = "<br>"
#Para cada fuente extraemos el xml (rss) que lleva
fuentes.each do |feed|
content = ""
open(feed) do |s| content = s.read end
rss = RSS::Parser.parse(content, false)

#y mostramos tanto el título del canal como el propio url del feed
codigo += "<h1> Canal: " + rss.channel.title + "</h1><br>"
codigo += "<h2> Feed: " + feed + "</h2><br>"

#Y para cada noticia (item) del canal extraemos el link con su título y la fecha
rss.channel.items.each do |item|
codigo += "<a href=" + item.link + ">" + item.title + "</a> <br>"
codigo += "Fecha de publicaci&oacute;n: " + item.pubDate.strftime("%d/%m/%Y a las %H:%M h") + "<br><br>"
end

end
#Mostramos todo el código
puts codigo

#Finalizamos la página HTML
puts "</body></html>"




Código html para pedir los feeds del rss:

<html>
<head>

</head>
<body>
<div id='resultado' style='border:solid;background:lightblue;padding:30px'>

<h1><b><i>Feeds RSS:</i></b></h1><p>

<FORM name=formulario"" ACTION="http://swecai.ugr.es/~tularis/P5/rss.cgi">

Fuente RSS 1: <INPUT name="fuenteRSS" size="50" value="http://rss.marca.com/rss/descarga.htm?data2=429"><BR>
Fuente RSS 2: <INPUT name="fuenteRSS" size="50" value="http://rss.marca.com/rss/descarga.htm?data2=428"><BR>
Fuente RSS 3: <INPUT name="fuenteRSS" size="50" value="http://rss.marca.com/rss/descarga.htm?data2=445"><BR>
Fuente RSS 4: <INPUT name="fuenteRSS" size="50" value="http://rss.marca.com/rss/descarga.htm?data2=447"><BR>
Fuente RSS 5: <INPUT name="fuenteRSS" size="50" value="http://rss.marca.com/rss/descarga.htm?data2=443"><BR>

<p><div id="botonSubmit" style='padding-left:50px'><INPUT TYPE=SUBMIT VALUE="Submit"></div</p>
</FORM>

</body>
</html>

Se puede probar aquí: probarla

martes, 5 de mayo de 2009

AAP Bloque T2.3 Con los equipos de la liga anteriores, usar diferentes espacio de nombres para el equipo en sí y para sus componentes. Por ejemplo,...

Se han utilizado varios espacios de nombres para designar a un equipo de liga eq:, al cuerpo tecnico ct:, a los jugadores pl:, a la posición de juego po: y a los equipos de la liga el:

<?xml version="1.0" encoding="iso-8859-1"?>
<el:equiposLiga xmlns='http://www.geneaura.org/' xmlns:el='http://www.geneaura.org/equiposLiga' xmlns:eq='http://www.geneaura.org/equipo' xmlns:pl='http://www.geneaura.org/jugadores' xmlns:po='http://www.geneaura.org/posiciones' xmlns:ct='http://www.geneaura.org/cuerpoTecnico' name="graná">
<eq:equipo id="Grana">
<eq:nombre>Grana</eq:nombre>
<ct:entrenador>Jose</ct:entrenador>
<ct:auxiliar>Joaquín</ct:auxiliar>
<po:defensa>
<pl:jugador>Juan</pl:jugador>
<pl:jugador>Pedro</pl:jugador>
<pl:jugador>Lucas</pl:jugador>
<pl:jugador>Javi</pl:jugador>
</po:defensa>
<po:centrocampista>
<pl:jugador>Alfredo</pl:jugador>
<pl:jugador>Francisco</pl:jugador>
<pl:jugador>Luis</pl:jugador>
<pl:jugador>Sergio</pl:jugador>
</po:centrocampista>
<po:delantero>
<pl:jugador>Andres</pl:jugador>
<pl:jugador>Santiago</pl:jugador>
<pl:jugador>Jorge</pl:jugador>
<pl:jugador>Julian</pl:jugador>
</po:delantero>

</eq:equipo>
</el:equiposLiga>


AAP Bloque T2.2.2: Crear un documento XML que describa varios libros de una biblioteca o librería, con título, autores, resumen, editorial y los ...

Documento XML:

<?xml version="1.0" encoding="iso-8859-1"?>
<libreria>
<libro isdn="4234809541">
<nombre>El caballero errante</nombre>
<autor>JRR Martin</autor>
<editorial>Gigamesh</editorial>
<ambientacion>Medieval/Fantastica</ambientacion>
</libro>
<libro isdn="45287656">
<nombre>Señores de las runas</nombre>
<autor>David Farland</autor>
<editorial>Factoria de ideas</editorial>
<ambientacion>Medieval/Fantastica</ambientacion>
</libro>
<libro isdn="4234534">
<nombre>El señor de los anillos</nombre>
<autor>JRR Tolkien</autor>
<editorial>Minotauro</editorial>
<ambientacion>Medieval/Fantastica</ambientacion>
</libro>
</libreria>

AAP Bloque T2.10: 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 leng

Fichero xml utilizado:

<?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>sofa</mueble>
</habitacion>
<habitacion id="cocina">
<mueble>lavaplatos</mueble>
<mueble>fregadero</mueble>
</habitacion>

</micasa>


Código ruby utilizado:

#!c:\ruby\bin\ruby.exe
require 'rexml/document'
require 'rexml/streamlistener'
require 'cgi'
include REXML

file=ARGV[0]

diccionario = {"micasa"=>"myHouse",
"habitacion"=>"room",
"mueble"=>"furniture",
}

class Traduce

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

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

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

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

end

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

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


Resultado:


Content-Type: application/xhtml+xml

<myHouse>
<room>
<furniture>
aparador
</furniture>
<furniture>
sofa
</furniture>
</room>
<room>
<furniture>
lavaplatos
</furniture>
<furniture>
fregadero
</furniture>
</room>
</myHouse>

AAP Bloque t2.12.2:En un documento XML con la clasificación de los equipos de fútbol, imprimir sólo los que estén clasificados para liga de campeones

Se muestra el xml utilizado:

<?xml version="1.0" encoding='iso-8859-1' ?>
<liga>
<equipo id='barsa'>
<posicion>1</posicion>
</equipo>
<equipo id='atletico'>
<posicion>5</posicion>
</equipo>
<equipo id='malaga'>
<posicion>6</posicion>
</equipo>
<equipo id='betis'>
<posicion>10</posicion>
</equipo>
<equipo id='madrid'>
<posicion>2</posicion>
</equipo>
<equipo id='sevilla'>
<posicion>3</posicion>
</equipo>
<equipo id='Villareal'>
<posicion>4</posicion>
</equipo>
</liga>



Y ahora el código ruby que lo procesa para obtener los 4 primeros clasificados:


#!/usr/bin/ruby

require 'rexml/document'
include REXML
documento = ARGV[0]
file = File.new(documento)
doc = Document.new(file)
XPath.each(doc,"//equipo[posicion<=4]/@id") { |titulo|
puts titulo
}



El resultado es el siguiente:
barsa
madrid
sevilla
Villareal

que son los 4 primeros equipos clasificados

AAP bloqueT2.12 : Para los atributos en XPath se usa la expresión @atributo. Sabiéndolo, poner la expresión XPath que, en los XML de habitaciones ante

Aquí dejo el código xml que se utiliza:

<?xml version="1.0" encoding='iso-8859-1' ?>
<micasa>
<habitacion id='comedor'>
<mueble>aparador</mueble>
<mueble>sofá</mueble>
<puerta a='balcon' />
</habitacion>
<habitacion id='salon'>
<mueble>mesa</mueble>
<mueble>sofá</mueble>
</habitacion>
<habitacion id='baño'>
<mueble>mesa</mueble>
<mueble>sofá</mueble>
<puerta a='pasillo' />
</habitacion>
</micasa>

Y aquí el código en RUBY que lo procesa con xpath:

#!/usr/bin/ruby

require 'rexml/document'
include REXML
documento = ARGV[0]
file = File.new(documento)
doc = Document.new(file)
XPath.each(doc,"//habitacion[puerta[@a]]/@id") { |titulo|
puts titulo
}

El resultado es:

comedor
baño

Que son los id de las habitaciones que poseen una puerta con atributo 'a' .

viernes, 24 de abril de 2009

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




bloque2.8.cgi



#!"C:\Program Files\XAMPP\perl\bin\perl.exe"


use CGI qw(:standard);

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

print<<EOC;
<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">

<channel>
<title>Barcelona // Marca // marca.com</title>
<link>http://www.marca.com/</link>

<item>

<title><![CDATA[Iniesta pide que se reconozca la gran temporada del Barça]]></title>
<link>http://www.marca.com/2009/04/23/futbol/equipos/barcelona/1240491412.html</link>
<description><![CDATA[Andrés Iniesta reivindicó la reciente trayectoria de su equipo y pidió que se valoren &quot;los méritos&quot; del Barça como líder de la Liga, finalista de la Copa y semifinalista de la Liga de Campeones.&nbsp; <a href="http://www.marca.com/2009/04/23/futbol/equipos/barcelona/1240491412.html">Leer</a>]]></description>
<author><![CDATA[EFE <marca@recoletos.com>]]></author>
<guid isPermaLink="true">http://www.marca.com/2009/04/23/futbol/equipos/barcelona/1240491412.html</guid>
<pubDate>Fri, 24 Apr 2009 09:34 +0200</pubDate>
</item>

<item>
<title><![CDATA[El Barça jugará en julio dos amistosos en Wembley]]></title>
<link>http://www.marca.com/2009/04/23/futbol/equipos/barcelona/1240515304.html</link>
<description><![CDATA[El Barcelona trasladará en el próximo verano su concentración de verano a Londres, donde jugará dos partidos amistosos, en el estadio de Wembley, ante el Tottenham Hotspur inglés y el Al-Ahly egipcio.&nbsp; <a href="http://www.marca.com/2009/04/23/futbol/equipos/barcelona/1240515304.html">Leer</a>]]></description>
<author><![CDATA[EFE. Barcelona <marca@recoletos.com>]]></author>

<guid isPermaLink="true">http://www.marca.com/2009/04/23/futbol/equipos/barcelona/1240515304.html</guid>
<pubDate>Thu, 23 Apr 2009 21:41 +0200</pubDate>
</item>



</channel>
</rss>
EOC



jueves, 2 de abril de 2009

AAP Practica 3: Javascript


Script GreaseMonkey:




// ==UserScript==
// @name serverCarlos
// @namespace Megaupload, Gigasize
// @description Descarga instantanea de distintos servidores de ficheros online sin espera y Añadido de un buscador de ficheros en este tipo de servidores.
// @include http://www.megaupload.com/*
// @include http://www.gigasize.com/*
// ==/UserScript==

//Obtenemos la url de la web para comprobar el servidor en el que estamos
var url=location.href;

//Creamos un div donde introduciremos el buscador
var divNuevo=document.createElement('div');
//Asignamos atributos
divNuevo.setAttribute('id','divNuevo');
divNuevo.setAttribute('align','center');
//Asignamos el estilo al buscador
divNuevo.style.padding='10px';
divNuevo.style.margin='10px';
divNuevo.style.border='solid';

//Creamos una imagen y un formulario que será el buscador
var imagen=document.createElement('img');
imagen.setAttribute('src','http://www.megadownload.net/image/logo.png');
var formulario=document.createElement('form');
formulario.setAttribute('name','formulario');
formulario.setAttribute('id','formulario');
formulario.setAttribute('action','http://www.megadownload.net/search');
//Creamos la etiquera del buscador y el input donde introduciremos la búsqueda y el botón
var etiqueta=document.createElement('label');
var textoEtiqueta=document.createTextNode('Busqueda de archivos para descargar');
etiqueta.appendChild(textoEtiqueta);
var txt=document.createElement('input');
txt.setAttribute('type','text');
txt.setAttribute('id','keyword');
txt.setAttribute('name','keyword');
var boton=document.createElement('input');
boton.setAttribute('type','submit');
boton.setAttribute('value','Buscar');




//-----MEGAUPLOAD-----
if (url.indexOf('www.megaupload.com/')!=-1){
//Borramos el div que contiene el marcador de cuenta atras
var contador=document.getElementById('downloadcounter');
contador.parentNode.removeChild(contador);
//Una vez eliminado el contador, mostramos en su lugar el display de descarga
var link=document.getElementById('downloadlink');
link.style.display='';


//Introducimos el buscador con estilo determinado para no desentonar.
divNuevo.style.background='#fd6802';
document.body.appendChild(divNuevo);

}

//-----GIGASIZE-----
if (url.indexOf('www.gigasize.com/')!=-1){

//Ocultamos el contador y mostramos el enlace de descarga
document.getElementById("verify").style.display="block";
document.getElementById("dlb").style.display="block";
document.getElementById("askPws").style.display="none";


//Introducimos el div con estilo determinado para no desentonar
divNuevo.style.background='#9f9f9f';
document.body.appendChild(divNuevo);

}


//Maquetamos el buscador en el div que creamos para él.
document.getElementById('divNuevo').appendChild(imagen);
document.getElementById('divNuevo').appendChild(formulario);
document.getElementById('formulario').appendChild(etiqueta);
document.getElementById('formulario').appendChild(txt);
document.getElementById('formulario').appendChild(boton);






Ejemplo de uso en Megaupload:


Megaupload



Ejemplo de uso en Gigazise:


Gigasize

viernes, 27 de marzo de 2009

AAP bloque T2.2 ejercicio1: 1.Crear un documento XML, que contenga la descripción de un equipo de la liga (jugadores, nombre, entrenador). Procesar




bloqueT2.2.xml



<?xml version="1.0" encoding="iso-8859-1"?>

<equiposLiga>
<equipo id="Grana">
<nombre>Grana</nombre>
<entrenador>Jose</entrenador>
<jugadores>
<portero>Juan</portero>
<defensa>Alvaro</defensa>
<mediocentro>Lucas</mediocentro>
<delantero>Manuel</delantero>
</jugadores>
</equipo>
</equiposLiga>










Grana
Jose

Juan
Alvaro
Lucas
Manuel





viernes, 20 de marzo de 2009

AAP bloque T2.2 ejercicio1: 1. Visualizar este fichero XML en un navegador para ver cómo lo hace, y si puede efectivamente hacerlo.

Clickamos en el enlace "este" y vemos como el navegador utilizado, Mozilla (3.0.7) es capaz de representarlo sin problemas.

AAP bloque T2.1 ejercicio1: 1. Elegir un editor XML e instalarlo, o buscar un modo XML para un editor genérico.

Instalo "Notepad++" (descarga aqui) gracias a AlexBM, él directamente reconoce ficheros de múltiples lenguajes y entre ellos XML. Para cambiar de lenguaje nos vamos a la pestaña lenguaje y seleccionamos la deseada.

viernes, 13 de marzo de 2009

AAP bloque T1.7 ejercicio1: 1. Salvar esta página, y sobre ella hacer un programa JS que imprima todos los títulos de secciones.

Script 1, muestra los enunciados segun se le pidan:

<script type='application/javascript'>function putBloque(value) {
var enunciados = document.getElementsByTagName('h2');
if(value>=enunciados.length){
alert('No existe ese número de título' );
}
else{
document.getElementById('resultado1').innerHTML = enunciados[value-1].textContent;
}

}
</script>


Script 2, muestra todos los enunciados:

%lt;script type='application/javascript'>function putBloque() {
var enunciados = document.getElementsByTagName('h2');
document.getElementById('resultado1').innerHTML =' ' ;
for(i=0;i<enunciados.length;++i){
document.getElementById('resultado1').innerHTML += enunciados[i].textContent;
}

}
%lt;/script>

AAP bloque T1.6 ejercicio 1: Usar JSON para asignar valores a los partidos de una quiniela, con local, visitante y resultado.

Codigo

var partido1 ={'local' : 'barsa','visitante' : 'Madrid','Resultado' : '1'};

for (i in partido1)
print(i+' '+partido1[i]);

Resultado:

local barsa
visitante Madrid
Resultado 1

martes, 10 de marzo de 2009

AAP bloque T1.4 ejercicio1: 1.Modificar el programa anterior (cualquiera de ellos) para que contabilice el número de partidos ganados, empatados ..

Aqui pongo los códigos utilizados, el primero es el base donde se ven las matrices asociativas y el segundo es una función para imprimir arrays, también se ha utilizado el script "partido.js", los script se listan a continuación:

load('Partido.js');
load('imprimirArray.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 ganados=new Array;
var perdidos=new Array;
var empatados=new Array;
var resultados=new Array;
for ( var i in equipos ) {
ganados[equipos[i]]=0;
empatados[equipos[i]]=0;
perdidos[equipos[i]]=0;
resultados[equipos[i]]=0;
}
for ( var i = 0; i < quinielas.length; i ++ ) {
for ( var j = 0;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];
++perdidos[visitante];
break;
case 'x':
resultados[local]+=1;
resultados[visitante]+=1;
++empatados[visitante];
++empatados[local];
break;
default:
resultados[visitante]+=3;
++perdidos[local];
++ganados[visitante];
}
}
}


var titulo=['Equipo','Puntos','Jugados','Ganados','Empatados','Perdidos'];
var equipoArray= [];
var arrayResultados=[];
arrayResultados[0]=titulo;
var contador=0;
for (var i in resultados){
++contador;
equipoArray=[i,resultados[i],(ganados[i]+empatados[i]+perdidos[i]),ganados[i],empatados[i],perdidos[i]];
arrayResultados[contador]=equipoArray;
}

imprimirArray(arrayResultados);



Y aquí el imprimirArray.js:



function imprimirArray(matriz){

var filas=matriz.length;
var columnas=matriz[0].length;

print( marca('table'));
for ( i=0;ifilas;++i ) {
print( marca( 'tr' ));
for ( j=0;j<columnas;++j ) {
print (celda(matriz[i][j]));
}
print ( finmarca('tr'));
}
print (finmarca('table'));

}


function marca( m ) {
return "<"+m+">";
}

function finmarca( m ) {
return "</"+m+">";
}

function celda( contenido ) {
return marca("td")+contenido+finmarca("td");
}

Por último muestro el resultado:

Partido 0: Atleti - Betis = 1
Partido 1: Madrid - Geta = 2
Partido 2: Graná - Barça = x
Partido 3: Depor - Sevilla = 1









































































EquipoPuntosJugadosGanadosEmpatadosPerdidos
Madrid1710523
Barça1210262
Atleti2110631
Geta1410424
Betis1310415
Depor1310415
Sevilla1010244
Graná910235


AAP bloque T1.5 ejercicio1: Hacer algún programa en JS que use cualquier clase de Java conocida.

Tras descargarme el interprete Rhino version 1.7 y buscar como ejecutar scripts en él,aquí pongo un ejemplo muy simple de uso de una clase de Java, he utilizado la clase java.lang.Math y el método sqrt() para calcular raices cuadradas, a continuación pongo el código:


function raizCuadrada(numero){

print(java.lang.Math.sqrt(numero));


}

var cuadrado=250;

raizCuadrada(cuadrado);


Y aquí expongo lo que devuelve el interprete:

15.811388300841896

Si intentamos ejecutar el script con otro interprete que no sea rhino obtenemos:

ReferenceError: java is not defined

viernes, 6 de marzo de 2009

AAP bloque T1.3 ejercicio 1: Hacer una clase que corresponda a una fila de una tabla, con número de columnas variable, y un programa que permita...

Bien pues aqui esta el codigo que realiza lo pedido:

function ClaseFila(columnas){
this.columnas=columnas;
this.toString=imprimirFila;
}


function imprimirFila(columnas){

print( marca('table'));

print( marca( 'tr' ));
for ( j=0;j<this.columnas;++j ) {
print ( celda('casilla'+','+(j+1)));
}
print ( finmarca('tr'));

print (finmarca('table'));

}

function marca( m ) {
return "<"+m+">";
}

function finmarca( m ) {
return "</"+m+">";
}

function celda( contenido ) {
return marca("td")+contenido+finmarca("td");
}

function crearRow(columnas){
var row=new ClaseFila(4);
print(row.toString());


}

crearRow(4);




Y lo que nos resulta de interpretarlo:

>js bloqueT13.js > bloqueT13.html







casilla1casilla2casilla3casilla4

AAP Practica 1:

Aqui dejo los recursos expuestos en mi practica:

  • Primer recurso: JavaScript Tutorial.Con este tutorial de JS podremos ver los tipos de datos,operadores, estructuras de control,funciones... de este útil lenguaje.5 Puntos
  • Segundo recurso: Perl Tutorial. Otro tutorial , en este caso de PERL, quizás menos completo que el análogo en JS.4 Puntos.
  • Tercer recurso: Ejemplos de Mashups.En este enlace podemos ver algunos ejemplos de mashups ya creados, en ellos tenemos desde mashups para busqueda de tutoriales a fotos... Por si deseamos crear este tipo de aplicaciones híbridas aqui dejo algunos de los pasos que debemos dar antes : Mashups. 4 Puntos.
  • Cuarto recurso: ArsTechnica:De las páginas web mas famosas en cuanto a informatica,posee un foro con abundante información de todo tipo, desde redes, pasando por hardware, móbiles... La pega que en verdad no lo es, es que esta en inglés.5 Puntos.
  • Quinto recurso: Foro de programacion:Un foro para cualquier duda de programación en casi cualquiera de los lenguajes que actualmente se usan en aplicaciones o servicios online (Ajax,ASP,bases de datos,Java,XML,Ruby...).4 Puntos.
La calificacion ha sido un 9 debido principalmente al enlace a ArsTechnica que es demasiado genérico.

jueves, 5 de marzo de 2009

AAP bloque T1.2 ejercicio1: 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.

Aqui muestro el codigo utilizado:


function tabla(filas,columnas){

print( marca('table'));

for ( i=0;i<filas;++i){
print( marca( 'tr' ));
for ( j=0;j<columnas;++j){
print ( celda('casilla'+(i+1)+','+(j+1)));
}
print ( finmarca('tr'));
}
print (finmarca('table'));

}

function marca( m ) {
return "<"+m+">";
}

function finmarca( m ) {
return "";
}

function celda( contenido ) {
return marca("td")+contenido+finmarca("td");
}

var fil=2;
var col=3;

tabla(fil,col);


Y aqui pongo lo generado por el interprete que podemos obtener facilmente si utilizamos :

>js bloqueT12.js > bloqueT12.html












casilla1,1casilla1,2casilla1,3
casilla2,1casilla2,2casilla2,3





bloque T1.1 ejercicio1: Comentar en la bitácora diferentes lenguajes que se puedan usar en el navegador, y qué ventajas e inconvenientes tiene...

Algunos de ellos son:

  • HTML
  • CSS
  • JavaScript
  • Java (applet)
  • AJAX
  • Perl
  • ASP
  • Flash
  • PHP
  • VBScript
  • JScript
  • ...

martes, 3 de marzo de 2009

AAP Bloque 1.3 ejercicio 2: Instalar algún cliente de gnutella (por ejemplo, gtk_gnutella) y buscar un fichero popular para bajarlo...

He instalado Shareaza y buscado la pelicula de batman the dark knight (la que mas fuentes tenia era en frances y es la que he seleccionado por ser la mas "popular"), la busqueda ha tardado unos 20 seg en listar la lista "completa" y unos 5 segundos en listar la entrada seleccionada para descargarla.

La pelicula comienza a descargar a los 5 minutos (mientras se van listando las mas de 1200 fuentes que encuentra...) a una velocidad de unos 20kBs (¬¬) y poco a poco la velocidad va oscilando en torno a 25kBs, 30kBs, 40kBs,3okBs,0kBs,20kBs... no tengo paciencia para estar viendo cuanto tarda y no se porque llistando tantas fuentes como parece que tiene no se acelera la bajada. Editare la entrada si me armo de la paciencia requerida para completar la descarga...

AAP bloque 1.3 ejercicio 1: Buscar un fichero de tamaño conocido (por ejemplo, una ISO de alguna distro Linux) y probar qué tiempo se tarda...

Probamos los distintos metodos de descarga:
  • Comienzo probando la descarga directa de la distribucion Fedora 10 edicion escritorio live CD, tiene un tamaño de unos 683 Mb, la duracion aproximada ha sido de 29 minutos a una velocidad media de 450 kBs.
  • Ahora utilizo un programa para la descarga de torrents como puede ser bitcomet, vemos que al principio tarda en arrancar y lo hace de forma suave, poco a poco va incrementando su velocidad. Debido a la mala conexion que poseo, donde las reconexiones son habituales, el fichero ha tardaro unos 50 minutos en descargarse bajando cuando podia a 200-300 y picos de 350 kBs

AAP bloque1.2 ejercicio 2: Hacer un programa o buscar un ejemplo que use un interfaz REST para acceder a algún servicio Web, como del.icio.us.

Navegando por la red he encontrado un enlace para realizar en MyStrands llamadas REST. Para el que no lo conozca, mystrands en una comunidad, en la que los usuarios puntúan a los artistas, sus discografías, debaten sobre ellos, etc. (Yo lo desconocia). El enlace es el siguiente http://www.antonioserrano.es/samples/MyStrandsApi/MyStrandsApp.html# , en el podemos buscar discografias de grupos famosos.

AAP bloque1.2 ejercicio 1: Discutir cuáles son los principales obstáculos a la escalabilidad en un sistema distribuido.

Los principales impedimentos para la escalabilidad en un sistema distribuido son:

  • Al aumentar el numero de maquinas se hace mas dificil su gestion y el mantenimiento del sistema.
  • Se hace necesaria la ampliacion de recursos si el aumento de maquinas es significativo, ya que mas maquinas utilizaran mas recursos. Entiendase por recursos ancho de banda, lista de fuentes...
  • Cuantas mas maquinas mayor probabilidad de que haya distancias grandes entre un par cualquiera lo que provoca retardos en las comunicaciones por red.
Como vemos estos son solo algunos factores que pueden provocar que un sistema que sea distribuido no se escale bien al incrementar el numero de maquinas.

lunes, 23 de febrero de 2009

AAP bloque1.1 ejercicio 3: Identificar un producto para sistemas Grid, y diferentes instalaciones que lo usen.

Grid Engine es un software desarrollado por Sun Microsystems que hace mas facil agregar maquinas al grid y automaticamente toma ventaja de la energia incrementada, por lo que ahorra tiempo y recursos a traves de un grid rapido, eficiente y confiable para el manejo y despliegue. Funciona sobre múltiples plataformas, incluyendo:

Otras aplicaciones software open source son: EGEE para grandes proyectos, Globus Solutions para proyectos medios.

AAP Bloque 1.1 ejercicio 2: Identificar diferentes productos para crear clústers de computadores, e instalaciones comerciales que los usen.

Los componentes principales de un cluster incluyen:
– Nodos:
• Procesadores.
• Almacenamiento en disco.
• Memoria.
– Software de base
• Sistemas operativos.
– Comunicaciones:
• Redes de alta velocidad.
– Interfaces y software para comunicaciones.
– Middleware.
– Entornos de programación.
– Bibliotecas y herramientas de desarrollo.

Algunos ejemplos de clusters conocidos son:

-Mare nostrum, ya comentado por el profesor, cuenta con las siguientes caracteristicas:

- 42.144 Teraflops de rendimiento de pico teórico (42.144x1012=42 billones de operaciones por segundo).
- 4.800 procesadores PowerPC 970FX en 2400 Nodos duales de 2.2 GHz.
- 9.6 TB de memoria.
- 236 TB de almacenamiento en disco.
- 3 redes de interconexión:
• Myrinet.
•Gigabit Ethernet.
•Ethernet 10/100.

Algunos usos del Mare Nostrum son la investigacion del genoma humano, la estructura de las proteinas y el diseño de nuevos medicamentos entre otros.

-RoadRunner en New Mexico (Los Alamos National Laboratory), maquina mas potente actualmente.

-1,7 petaflops de pico
-Diseño hibrido de procesadores:
•12,960 IBM PowerXCell 8i a 3.2 GHz (12,960 PPE y 103,680 SPE), total de 116,640 nucleos IBM.
•6,480 AMD Opteron 2210 a 1.8 GHz procesadores de doble nucleo y otros 480 para operaciones, total de 13824 nucleos AMD.
•El total de nucleos supera los 130,000.
-103,6 TB de memoria.
-2 redes de interconexión:
•10 Gb ethernet.
•Infinyband.

Usos de Roadrunner: Segun el DOE se pretende utilizar para ver como envejecen los materiales nucleares con el fin de ver si el arsenal estadounidense de armas nucleares es fiable y seguro, otros de sus fines seran las ciencias, industria aeroespacial...

AAP Boque 1.1 ejercicio 1 : Buscar ejemplos de sistemas P2P.

Aqui comienzo el primer bloque con su primer ejercicio donde debo buscar sistemas p2p que sean utiles, actuales y no muy conocidos, quien no sabe del emule? o de cualquier sistema de descargas similar.

Es por eso que intentare poner varios que no sean de tanto calado y explicar para que se usan... quien sabe quizas un dia se utilicen mas que la burra...

Bueno como hemos comentado estan los sistemas de descargas como emule, kazaa y bittorrent, o algunos menos conocidos como Pando y Shareaza, pero tambien se utiliza p2p para otros fines como Skype para mantener conversaciones de voz con otros usuarios que ofrece tambien la posibilidad de intercambio de ficheros entre los mismos (de forma manual), Hello de piccasa para compartir fotos, el propio protocolo DNS para resolucion de direcciones IP, Livestation de MicroSoft para la difusion de TV, GPU que es un cliente de GNUtella para compartir recursos de CPU y poder hacer procesamiento distribuido, su funcionamiento es similar al un fps (file program sharing), tu prestas tu cpu para calculos ajenos y como respuesta, tambien podras usar la cpu de pc's ajenos para tus calculos y por ultimo hablare de Cspace que permite el intercambio de mensajes instantaneos.

AAP the beginning...

Bien pues hoy es cuando comienzo a darle forma al blog tras presenciar las primeras clases de esta curiosa asignatura, y es que tras solo un par de horas , en realidad menos, uno se da cuenta de que ni el profesor ni sobre todo la forma de abordar la materia son corrientes, pues para realizar los ejercicios tenemos a nuestra disposicion numerosos medios online que nos permiten sobre todo compartir tanto nuestros apuntes como cosas que nos parezcan interesantes, opiniones ...

Pues bien una vez escrita la entrada y con ganas de ver que nos deparara la siguiente clase empezamos...