jueves, 2 de diciembre de 2010

PROGRAMA FINAL

este era un programa que me parecia bueno intentar pero no lo pude terminar
lo que iba a hacer era tener unos archivos donde tendria sus datos, checaria la fecha de hoy, y buscaria todas las actividades que tenga que hacer el dia de hoy y lo mostraria en una ventana, al igual que podrias ingresar nuevos eventos y asi poder checarlos tambien tenia el calendario de fime y te lo mostraba, me falta ajustarle varios detalles pero lo terminare.

AQUI EL CODIGO:

import javax.swing.*;
import java.util.Calendar;
import java.util.Date;
import java.io.*;
import javax.swing.JOptionPane;
import java.util.GregorianCalendar;

public class CalendarioFime2 {
    public static void main(String args[]){
         String opcion,
                salida=" ",
                salida2=" ";


         JTextArea areaSalida= new JTextArea (10,10);//crea las ventanas
         java.util.Date fecha=new Date();//de texto
         JOptionPane.showMessageDialog(null,fecha,"Esta es la fecha del dia Bienvenido",JOptionPane.INFORMATION_MESSAGE);
         System.out.println("ahi vamos");
         //try{


         //System.out.println("aveer");
         //File diciembre=new File("diciembre.txt");
         //FileReader frdiciembre=new FileReader(diciembre);
         //BufferedReader bfdiciembre=new BufferedReader(frdiciembre);
         //System.out.println("llegamos a un buen punto");
         //}
         //catch(Exception e){
           //  e.printStackTrace();
             //System.out.println("no se pudo");
         //}

         String dia,
                mes,
                anio,
                linea;
         Calendar c = new GregorianCalendar();//aqui es donde tomaba la hora
         boolean comparardia;//del sistema, esta comparaba si el dia de hoy
//con la cual se iba a comparar en el documento
         dia=Integer.toString(c.get(Calendar.DATE));
         mes=Integer.toString(c.get(Calendar.MONTH));
         anio=Integer.toString(c.get(Calendar.YEAR));
         int mesent=Integer.parseInt(mes);
         System.out.println("el mes es "+mesent);
         int diaent=Integer.parseInt(dia);
         System.out.println("el dia es "+diaent);



         if(mesent==10){
             try{
                 System.out.println("ya entramos alo del mes");
                 FileWriter eventosescritura= new FileWriter("C:\\eventos.txt",true);//estos era el escritor
                 System.out.println("si hizo el filewriter");//que leeiria los eventos de hoy y mostraria
                 PrintWriter pweventosescritura= new PrintWriter(eventosescritura);
                 System.out.println("tambien aqui");
                 File noviembre=new File("C:\\noviembre.txt");
                 FileReader frnoviembre=new FileReader(noviembre);
                 System.out.println("si hizo el reader");
                 BufferedReader bfnoviembre=new BufferedReader(frnoviembre);
                 String diaString="";
                 System.out.println("hizo todo");//estos solo eran para checar
             linea=" ";
             int diaent2;
             while((linea=bfnoviembre.readLine())!=null){//con este utilizaba el lector y leia linea por linea en un ciclo



                  for(int i=0;i<=1;i++){
                     diaString+=linea.charAt(i);//separaba los primeros 2 digitos para saber el dia del documentos
                    
                     }


                  System.out.println(diaString);
                  comparardia=dia.equalsIgnoreCase(diaString);//ESTA COMPARACOIN AUNQE YOO SABIA QUE ERA TRUE LA MARCABA COMO FALSE NUNCA ENTENDI PORQE
                  System.out.println("comparar dia es:"+comparardia);
                    if(comparardia==true){//si el dia era igual al dia de hoy se copiaria al archivo eventos
                                          //EL CUAL DEBERIA DE AVER MOSTRADO AL INICIO, PERO NO LO HACE
                     System.out.println("estoy leyendo los eventos");
                     pweventosescritura.println(linea);

                 }System.out.println(comparardia);
                 diaString=" ";
             }
             }
             catch(Exception e){//CUALQUIER ERROR QUE TUVIERA ME DIRIA
                 System.out.println("No se pudo leer la base de datos");
             }
         }
         try{

         File eventos= new File("C:\\eventos.txt");//LUEGO DESPUES DE COPIAR Y PEGAR MOSTRARIA ESTE
         FileReader freventos=new FileReader(eventos);
         BufferedReader bfeventos=new BufferedReader(freventos);
         salida=" ";
         while((linea=bfeventos.readLine())!=null){
             salida+=linea;
             }
          areaSalida.setText(salida);
          JOptionPane.showMessageDialog(null,areaSalida,"Visualizacion",JOptionPane.WARNING_MESSAGE);
         }
         catch(Exception e){
             System.out.println("No se pudieron leer los eventos");
         }


         salida2+="AQUI SE ENLISTAN LAS OPCIONES DEL CALENDARIO"+//AQUI MUESTRA LAS INSTRUCCIONES
                  "\n1.Ingresar una nueva fecha o evento"+
                  "\n2.Mostrar el calendario del mes actual en lista"+
                  "\n3.Mostrar fechas de fime";

         areaSalida.setText(salida2);
         JOptionPane.showMessageDialog(null,areaSalida,"Visualizacion",JOptionPane.WARNING_MESSAGE);


         int opcionent=0;

             opcion=JOptionPane.showInputDialog("Ingresa el numero de opcion");
             opcionent=Integer.parseInt(opcion);




         switch(opcionent) {//EN ESTE SE SUPONE QUE ESCRIBIRIAS UN NUEVO EVENTO PERO NO LO PUDE CALAR

             case 1: {
                 String dia2=JOptionPane.showInputDialog("Que dia quieres?(dia del mes)");
                 String nevento=JOptionPane.showInputDialog("Cual es el evento?");
                 int dia2ent=Integer.parseInt(dia2);
                try{
                 FileWriter noviembreescritura= new FileWriter("C:\\noviembre.txt");
                 PrintWriter pwnoviembre=new PrintWriter(noviembreescritura);
                 System.out.println("segun esto ya esta escribiendo");

                 salida=dia2ent+"/11/10"+nevento;
                 pwnoviembre.println(salida);
                 }

                catch(Exception e){
                    System.out.println("No se pudo escribir en el archivo");
                }

                }
             break;
             case 2:{//EN ESTE LEEIRIA SOLO LO QUE TENGO QUE HACER EN NOVIEMBRE
                 salida=" ";
                 try{
                 File noviembre=new File("C:\\noviembre.txt");
                 FileReader frnoviembre=new FileReader(noviembre);
                 BufferedReader bfnoviembre=new BufferedReader(frnoviembre);

                 while((linea=bfnoviembre.readLine())!=null){
                     salida+=linea+"\n";

                 }
                 areaSalida.setText(salida);
                 JOptionPane.showMessageDialog(null, salida,"Visualizacion",JOptionPane.INFORMATION_MESSAGE);
                 }
                 catch(Exception e){
                     System.out.println("Hubo un problema al abrir el archivo");
                 }

             }
             break;
             case 3:{//EN ESTE CASO PARA DICIEMBRE
                 salida=" ";
                 try{
                 File fime=new File("C:\\EventosFime.txt");
                 FileReader frfime=new FileReader(fime);
                 BufferedReader bffime=new BufferedReader(frfime);

                 while((linea=bffime.readLine())!=null){
                     salida+=linea+"\n";

                 }
                 areaSalida.setText(salida);
                 JOptionPane.showMessageDialog(null,salida,"Visualizacion",JOptionPane.INFORMATION_MESSAGE);

                 }
                 catch(Exception e){
                     System.out.println("no se pudo abrir el archivo");

                 }

             }
             break;

        }




}
}
YA TERMINADO ESO PODRIA MEJORARLO Y AUTOMATIZARLO, PERO NECESITO TERMINAR ESO
Y AQUI UNAS IMAGENES

 aqui muestra la hora del dia
 AQUIIIIIII SE SUPONE QUE SALDRIAN LAS COSAS DE HOY
COSA QU ENUNCA HIZO :@
PERO LO HARE
 AQUI SE ENLISTAN LAS OPCIONES
EN ESTE CASO PUSE 3, CALENDARIO DE FIME

AQUI APARECE TODOS LOS DIAS, EVENTOS EXAMENES ETC,
ME FALTO UN SCROLL DESPUES LO PONDRE




Y ES TODO DE MI PROGRAMA

Redes Peer to Peer


Las redes peer-to-peer administran y optimizan el uso del ancho de banda de los demas usuarios de la red por medio de la conectividad entre los mismos y obtiene mas rendimiento en las conexiones y transferencias que con algunos métodos centralizados ,donde cierta cantidad pequenia de servidores provee ele totar del ancho de banda y recursos compartidos para un servicio o aplicacion .
Es una red de computadores en la que todos o algunos aspectos funcionan sin clientes ni servidores fijos , sino una serie de nodos que se comportan como iguales entre si, actuan simultáneamente como clientes y servidores respecto a los demás nodos de la red.
Dichas redes don utiles par diversos propósitos a menudo se utilizan para compartir ficheros de cualquier tipo, la eficacia de los nodos en ele enlace y transmisión de datos puede variar según su configuración local , velocidad de proceso , disponibilidad de ancho de banda de su conexion a la red y capacidad de almacenamiento en disco.
Algunas caracteristicas son :
*escabilidad : las redes P2P tiene un alcance mundialcon cientos de millones de usuarios potenciales.
*robustez: en caso de haber fallos en la replica excesica de lso datos hacua multiples destinos
*descentralización :son redes desentralizadas y todos los nodos son iguales
*repartición de costes entre usuarios : se comparten o donan recursos a cambio de recursos
*anonimato: es  deseable que en estas redes quede anónimo el autor de un contenido , el editod ,el lector, el servidor que lo alberga y la petición para encontrarlo.
*seguridad: es una característica deseable de las redes P2P menos implementada , su objetivo seria identificia y evitar los nodos maliciosos.
Clasifiacion :
·         Redes P2P centralizadas : se basa en la arquitectura monolítica en la que todas las transacciones se hacen a través de u único servidor
·         Redes P2P hibridas: interaccion entre un servidor central que sirve como hub y administra los recursos de banda ancha.
·         Redes P2P “puras” : siendo las mas versátiles al no requerir de un gestionamiento central de ningún tipo

Un Programa hecho por mi

Este juego yo lo desarrolle esta muy simple pero pues mis conocimientos en java eran nulos hasta que empece con este juego, este es mi primer programa y aqui lo pondre, pensaba ponerlo como proyecto final pero a la ultima hora ya no tuve tiempo por estar haciendo el que seria mi proyecto final ahorita lo subire como quiera

Este el codigo

import javax.swing.*;//para las ventanas
import java.util.Random;//esta la tuve que utilizar para poder hace un rand
public class JuegoGato{//aqui empieza la clase JuegoGato
public static void main(String args[])
{
    int jugardenuevo=0;//esta la utilice para controlar si quiere
    do{//                jugar de nuevo o no por eso empieza con un do
    int tabla[][];//declare la matriz llamada tabla de enteros
    tabla=new int [3][3];//de 3x3



    int jugador=0,//inicializo variables
        juego=0,
        fila2=0,
        columna2=0,
    chequeo=0,
    c=0,
    ganador=0,
    decicion=0,
        compu=0;
        Random filacompu=new Random();//esta es la variable ran para fila
        Random columnacompu=new Random();//esta es para columna
        int filacompu2,columnacompu2;


    String fila,
       columna,
       decicion1;
    JOptionPane.showMessageDialog(null,"Bienvenido a mi Juego\n\tEl Gato\n\t De Mefisto","Bienvenida",JOptionPane.INFORMATION_MESSAGE);
    for(int i=0;i<=2;i++){//aqui crea la tabla del juego con puros 0
    for(int j=0;j<=2;j++){

        tabla[i][j]=0;

    }
    }
    JTextArea areaSalida= new JTextArea(7,10);
    String salida="";


     areaSalida.setText(//imprimira las instrucciones
        "\nEl jugador 1 Empieza"+
    "\nPrimero Ingresa el numero de fila"+
    "\nDespues Ingresa el numero de columna"+
        "\nAutomaticamente se pondra tu simbolo"+
    "\nLo mismo para el jugador 2");
    JOptionPane.showMessageDialog(null, areaSalida,"Intrucciones",
                  JOptionPane.INFORMATION_MESSAGE);

    while(juego!=1){//y empezara el juego con el jugador 1
chequeo=0;//la variable chequeo controla que no repita casillas
if(jugador==0){
        JOptionPane.showMessageDialog(null,"Turno de jugador 1",
                      "JUGADOR",JOptionPane.WARNING_MESSAGE);}
else{
        JOptionPane.showMessageDialog(null,"Turno de jugador 2","JUGADOR",
                      JOptionPane.WARNING_MESSAGE);}
        do{
        if(jugador==0){//aqui pide informacion de la matriz
        fila=JOptionPane.showInputDialog ( "Ingresa la fila" );
            columna=JOptionPane.showInputDialog ( "Ingresa la columna" );
        fila2=Integer.parseInt(fila);
        columna2=Integer.parseInt(columna);

            if(tabla[fila2-1][columna2-1]==0) {
        tabla[fila2-1][columna2-1]=1;
        chequeo=1;}//si en dado caso la casilla esta ocupada te avisa
            else{
        JOptionPane.showMessageDialog(null,"Ya esta ocupada esa casilla\n intenta de nuevo","checa esto",JOptionPane.WARNING_MESSAGE);
                  }
    }

        else{//si es turno del jugador 2 este sera su codigo
             //automatizado aunque es algo torpe y facil de vencer
        filacompu2=filacompu.nextInt(3)+1;
        columnacompu2=columnacompu.nextInt(3)+1;
        if(tabla[filacompu2-1][columnacompu2-1]==0){
        tabla[filacompu2-1][columnacompu2-1]=2;
        chequeo=1;
        }
        }
        }while(chequeo!=1);
        salida="";
    for(int i=0;i<=2;i++){
        for(int j=0;j<=2;j++){
        salida+= tabla[i][j];
        }
      salida+="\n";
    }
    areaSalida.setText(salida);
    JOptionPane.showMessageDialog(null,areaSalida,"Visualizacion",JOptionPane.WARNING_MESSAGE);
//y de aqui en adelante checara si hay un ganador
// se que es codigo innecesario asi, lo pude aver hecho con un ciclo
//pero pues asi lo deje
if(tabla[0][0]==1&&tabla[1][1]==1&&tabla[2][2]==1){
JOptionPane.showMessageDialog(null, "El Jugador 1 ha GANADO","GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}

if(tabla[0][0]==2&&tabla[1][1]==2&&tabla[2][2]==2){
JOptionPane.showMessageDialog(null,"El Jugador 2 ha GANADO",
"GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}

if(tabla[0][2]==1&&tabla[1][1]==1&&tabla[2][0]==1){
JOptionPane.showMessageDialog(null, "El Jugador 1 ha GANADO","GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}


if(tabla[0][2]==2&&tabla[1][1]==2&&tabla[2][0]==2){
JOptionPane.showMessageDialog(null, "El Jugador 2 ha GANADO","GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}


if(tabla[0][0]==1&&tabla[0][1]==1&&tabla[0][2]==1){
JOptionPane.showMessageDialog(null, "El Jugador 1 ha GANADO","GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}

if(tabla[0][0]==2&&tabla[0][1]==2&&tabla[0][2]==2){
JOptionPane.showMessageDialog(null, "El Jugador 2 ha GANADO","GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}

if(tabla[1][0]==1&&tabla[1][1]==1&&tabla[1][2]==1){
JOptionPane.showMessageDialog(null, "El Jugador 1 ha GANADO","GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}

if(tabla[1][0]==2&&tabla[1][1]==2&&tabla[1][2]==2){
JOptionPane.showMessageDialog(null, "El Jugador 2 ha GANADO","GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;

}

if(tabla[2][0]==1&&tabla[2][1]==1&&tabla[2][2]==1){
JOptionPane.showMessageDialog(null, "El Jugador 1 ha GANADO","GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}

if(tabla[2][0]==2&&tabla[2][1]==2&&tabla[2][2]==2){
JOptionPane.showMessageDialog(null, "El Jugador 2 ha GANADO","GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}

if(tabla[0][0]==1&&tabla[1][0]==1&&tabla[2][0]==1){
JOptionPane.showMessageDialog(null, "El Jugador 1 ha GANADO","GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}

if(tabla[0][0]==2&&tabla[1][0]==2&&tabla[2][0]==2){
JOptionPane.showMessageDialog(null,"El Jugador 2 ha GANADO","GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}

if(tabla[0][1]==1&&tabla[1][1]==1&&tabla[2][1]==1){
JOptionPane.showMessageDialog(null,"El Jugador 1 ha GANADO","GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}

if(tabla[0][1]==2&&tabla[1][1]==2&&tabla[2][1]==2){
JOptionPane.showMessageDialog(null,"El Jugador 2 ha GANADO","GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}
if(tabla[0][2]==1&&tabla[1][2]==1&&tabla[2][2]==1){
JOptionPane.showMessageDialog(null,"El Jugador 1 ha GANADO","GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}
if(tabla[0][2]==2&&tabla[1][2]==2&&tabla[2][2]==2){
JOptionPane.showMessageDialog(null ,"El Jugador 2 ha GANADO" ,"GANADOR",JOptionPane.WARNING_MESSAGE);
c=8;
ganador=1;
}




    if(jugador==0)//esto controla que jugador sigue
        jugador=1;
        else
        jugador=0;

        c=c+1;//el limite de movimientos totales son de 9
    if( c == 9){
        if(ganador!=1){//asi que si son 9 y nadie gano te dira empate
        JOptionPane.showMessageDialog(null,"Los 2 Jugadores han empantado","Empate!!",JOptionPane.WARNING_MESSAGE);
        }
        juego=1;
        decicion1=JOptionPane.showInputDialog("Juegas de nuevo\n1.si  2.no");
       decicion=Integer.parseInt(decicion1);
       if(decicion==1){
           jugardenuevo=0;}
       else{
           jugardenuevo=1;

        break;}
    }
    }

    }while(jugardenuevo==0);//si no quiere jugar de nuevo sera 1 y saldra
}
}

y unas capturas de pantalla









Sistemas distribuidos

Es una coleccion de computadoras conectadas por una red de comunuciones o la internet misma, que generalmente o asi debe ser es percibida por el usuario como un solo sistema, el usuario solo accesa a los documentos remotoso como si se tratara de sus mismos recursos locales.

Estos debe de ser confiables ya que si uno se descompone otro debe ser capaz de reemplazarlo, su tamnio no esta definido ya que pueden ser decenaas, centenas, miles de hosts interconectadas.

-Ventajas de los sistemas distribuidos con respecto de las PC independientes
Datos compartidos: Un sistema distribuido permite que varios usuarios tengan acceso a una base de datos comun.
Dispositivos compartidos: De igual manera, se pueden compartir perifericos entre diversos usuarios como puede ser una impresora.
Comunicación: un sistema distribuido facilita la comunicación entre computadoras aisladas con el e-mail, por ejemplo.
Flexibilidad: Un sistema distribuido difunde la carga de trabajo entre las máquinas disponibles en la forma más eficaz en cuanto a los costos.

-Desventajas de los sistemas distribuidos
Software: No hay mucha experiencia en el disenio, implantacion y uso del software distribuido, ademas existe poco software para los sistemas distribuidos en la actualidad.
Redes: Una vez que el sistema llega a depender de la red, la perdida o saturación de esta puede negar algunas de las ventajas que el sistema distribuido debia conseguir.
Seguridad: si las personas pueden tener acceso a los datos en todo el sistema, entonces tambien pueden tener acceso a datos con los que no tienen nada que ver.

y asi se veria de una forma grafica

http://html.rincondelvago.com/sistemas-distribuidos.html

SGML


Estandar Generalized Markup Language , un poco de su historia es que la organización internacional de estandares (ISO) normalizo este lenguaje en 1986 en si este es un sistema para la organización y etiquetado de documentos .
Sirve para especificar las reglas de etiquetado de documentos y no impone ningun conjunto de etiquetas en especial.
Un documento SGML se marca de modo que no dice nada respecto a su representacion en la pantalla o en papel , ensi es un prograam de presentacion debe unir el documento con la información de estudo a fin de producir una copia impresa en la pantalla o en el papel.
El lenguaje HTML esta definido en termisno SGML , XML es un estandar de creacion , que incorpora un subconjunto de la funcionalidad del SGML y resulta mas sencillo de poner porque evita algunas características avanzadas de SGML.
Uno de los principales principios del lenguaje SGML constituye la industria de la publicacion de documentos, usando este lenguaje se crean y se mantienen documentos que luego son llevado a otros formatos fianles como HTML, Postcript , RTF,  etc
fuente:  http://www6.uniovi.es/sgml.html

DOM

Que es la dom?

es un modelo de objetos del documento es una interfaz de programacion de aplicaciones(API por sus siglas en ingles) que proporsiona un conjunto estandar de objetos para representar documentos HTML y XML un modelos estandar sobre como se puede combinar dichos objetos y una interfaz estandar para acceder a ellos y manipularlos. es por atraves del DOM donde los programaas peuden acceder y modificar el contenido estilo etc de los documentos HTML y XML que es para lo cual se disenio principalmente.

El DOM define la manera en que objetos y elementos se relacionan entre sí en el navegador y en el documento. Cualquier lenguaje de programacion adecuado para el diseño web puede ser utilizado. En el caso de JavaScript, cada objeto tiene un nombre, el cual es exclusivo y unico. Cuando existen mas de un objeto del mismo tipo en un documento web, estos se organizan en un vector o un array.

fuente:http://es.wikipedia.org/wiki/Document_Object_Model

HTML5

Ya habia hablado de que era HTML ahora hablare un poco de los que es la nueva tecnologia, su ultima version, de html, la 5ta version.

La neuva tecnologia de la web tiene ahora nuevos elemtnos, de los cuales no tenia antes, tambien atributos que reflejan el uso tipico de los sitios web modernos. algunas etiquetas son similares a las que ya habia, otros elementos proporsionan nuevas funcionalidades a traves de una interfaz estandarizada tales como las nuevas etiquetas <audio> y <video>. Pero esto trajo consigo que algunos elementos de la 4.1 quedaran obsoletos inlcluyendo las clasicas de presentacion <font><center> cuyos efectos son manejados con el CSS.tambien hay un renovado enfasis del scripting DOM para el comportamiento de la web.

aqui en la pagina de la fuente esta una tabla donde vienen las nuevas etiquetas de la nueva tecnologia, y las que fueron eliminadas, asi tambien las que fueron renovadas.
aparte de todo esto hay mas novedades:

-Incorpora etiquetas tales como canvas 2D y 3D, audio, video etc. con codecs para mostrar los contenidos multimedia.
-Actualmente hay una lucha entre imponer codecs gratuitos tales como WebM  VP8 o de paga como (H.264).
-Etiquetas para manejar grandes conjuntos de datos: Datagrid, Details, menu y Command. Permiten generar tablas dinámicas que pueden filtrar, ordenar y ocultar contenido en cliente muy util por cierto.
-Mejoras en los formularios.
-Nuevos tipos de datos (eMail, number, url, datetime,entre otros) y facilidades para validar el contenido sin Javascript.
-Visores: MathML (formulas matemáticas) y SVG (graficos vectoriales). En general se deja abierto a poder interpretar otros lenguajes XML.
-Drag an Drop. Nueva funcionalidad para arrastrar objetos como imagenes.
entre otras novedades.
un ejemplo de lo que seria codigo en HTML5
increible por cierto
http://craftymind.com/factory/html5video/CanvasVideo.html
y aqui una pagina con demostraciones increibles, que en lo spersonal me gustaron
fuente :http://es.wikipedia.org/wiki/HTML_5