domingo, 29 de enero de 2012

Tutorial Java 8 - Sockets

En este capítulo intentaré mostrar el uso de sockets con un programa muy sencillo pero a la vez muy...cutre, podría escribirlo más bonito pero no más claro:

Clase servidor.java:

import java.io.*;
import java.net.*;

public class servidor {

public static void main(String[] args) throws IOException { /*mejor con try & catch */
ServerSocket puerto = null; //inicializamos
Socket canal = null;
InputStream buffer_in; /* creamos un buffer de datos para el canal de entrada*/
DataInputStream contenedor_flujo; /*creamos un sitio donde guardar el contenedor que nos envian, aviso según el eclipse de esta forma es no necesariamente seguro para acceso multithread*/
puerto = new ServerSocket(11000);  /*por donde recibimos los datos*/
canal = puerto.accept();/*escucha conexiones en ese puerto y las acepta*/
buffer_in = canal.getInputStream();/*trae un flujo de datos desde nuestro socket*/
contenedor_flujo = new DataInputStream(buffer_in); /*guardamos ese flujo de datos en el contenedor*/
String string = new String(contenedor_flujo.readUTF());/*obtiene cadena de la información del contenedor que está codificada en UTF-8 modificado*/
System.out.print(string); /*imprimimos la cadena*/
contenedor_flujo.close();/*cerramos el contenedor*/
buffer_in.close();/*cerramos el buffer*/
canal.close();/*cerramos el canal*/
}
}


Clase cliente.java (como veis es similar en muchos aspectos) :

import java.io.*;
import java.net.*;


public class cliente {

public static void main(String[] args) throws IOException {
Socket canal = null;
OutputStream buffer_out;
DataOutputStream contenedor;
canal = new Socket("127.0.0.1", 11000);/*indicamos a que ip y puerto enviamos,en este caso la ip localhost(nuestro equipo)*/
buffer_out = canal.getOutputStream();
contenedor = new DataOutputStream(buffer_out);
String info_a_enviar = "Enviamos información\n";
contenedor.writeUTF(info_a_enviar);/*escribe la información en UTF-8 modificado*/
contenedor.close();
buffer_out.close();
canal.close();
}
}

miércoles, 25 de enero de 2012

Cómo compartir carpetas entre Windows 7 y windows Vista

Si has buscado esto en google supongo que quieres evitar que desde vista te pida una cuenta y contraseña para entrar en la carpeta alojada en el equipo con windows 7, para eso puedes compartirla siguiendo estos pasos (todo desde el equipo con windows 7):

1. Panel de control
2. Redes e internet
3. Elegir grupo en el hogar y opciones de uso compartido
4. Cambiar configuración de uso compartido avanzado
5. Desactivar el uso compartido con protección por contraseña

Guardamos cambios, luego sobre la carpeta que queremos compartir:

1. Click derecho
2. Propiedades
3. Uso compartido avanzado
4. Compartir esta carpeta
5. Configuramos los permisos

Aceptar guardar y listo.

Nota: Ambos equipos deben formar parte del mismo grupo de trabajo.


martes, 24 de enero de 2012

Tutorial Java 7 - Recursividad

La recursividad consiste en llamar a un método desde el mismo método creando de esta forma estructuras de control útiles, ejemplo:

Calcular la suma de un número más sus naturales anteriores:

import java.util.Scanner; 

public class recursividad {

public static void main(String[] args) {

    Scanner entrada = new Scanner(System.in);
    System.out.print("Introduzca un número: ");
    int num = entrada.nextInt();
    System.out.println("La suma de naturales igual y menores a " + num + " es " + suma(num));
  }

  public static long suma(int num) {
    if (num == 0) 
      return 0;
    else
      return num + suma(num - 1);  /*entramos en la clase pero con el número anterior*/
  }
}

Tutorial Java 6 - Herencia

La herencia en java consiste en crear clases(hijo) que hereden atributos de otra clase(padre), es decir, disponer en la nueva clase de las variables y métodos del padre sin tener que repetirlos, para implementar esto usaremos la clase ordenador de cualquiera de los anteriores tutoriales y crearemos estas clases:

Empezamos por la clase hijo(herencia.java), que es la que tiene las novedades:

public class herencia extends ordenador {
/*extends ordenador indica que hereda los atributos de la clase ordenador.java*/
String Sistema_operativo;
/*Añadimos por ejemplo esta neueva variable, para que esta clase sea más específica*/
public herencia(String proce, String gra, int frec, int me, String SO)
/*Constructor similar al de ordenador pero ampliado*/
{
super(proce, gra, frec, me);
/* super sirve para utilizar las variables de la clase padre, es decir las usamos(llenamos) desde aqui*/
Sistema_operativo = SO;
}
/* Añadimos get y set para la nueva variable */
public String getSistema_operativo() {
return Sistema_operativo;
}
public void setSistema_operativo(String sistema_operativo) {
Sistema_operativo = sistema_operativo;
}
}

Y continuamos con la clase principal(programa1.java):

import java.util.Scanner;
public class programa1 {

public static void main(String[] args) {
herencia software;
software = new herencia("string", "string", 0, 0, "String"); 

/*inicializamos las variables*/
/*y el resto de código es similar al del tutorial de objetos*/

Scanner entrada = new Scanner(System.in);
System.out.println("Introduzca tipo de procesador o escriba salir:");
String procesador = entrada.nextLine();
System.out.println("Introduzca frecuencia en GHz:");
int frecuencia = entrada.nextInt();
System.out.println("Introduzca tipo de gráfica:");
entrada.next();
String grafica = entrada.nextLine();
System.out.println("Introduzca cantidad de memoria en Mb:");
int memoria = entrada.nextInt();
System.out.println("Introduzca sistema operativo:");
entrada.nextLine();
String so = entrada.nextLine();

System.out.println("Usa el siguiente sistema operativo1:" + so);

software.setProcesador(procesador);
software.setFrecuencia(frecuencia);
software.setGrafica(grafica);
software.setMemoria(memoria);
software.setSistema_operativo(so);

System.out.println("Tiene un procesador de tipo " + software.getProcesador() + " a " + software.getFrecuencia() + " GHz");
System.out.println("Tiene una gráfica de tipo " + software.getGrafica() + "con " + software.getMemoria() + " Mb");
System.out.println("Usa el siguiente sistema operativo: " + software.getSistema_operativo());
}

}


domingo, 22 de enero de 2012

Tutorial Java 5 - Collections

Collections es una interfaz que nos permitirá ordenar la lista con respecto a los parámetros que queramos.
Ejemplo comentado de como ordenar con Collections, usamos de base las clases del tutorial 4:

En la clase ordenador añadimos:

public class ordenador implements Comparable<ordenador>{ }
cambiamos int por Integer:
private Integer frecuencia, memoria;
Y escribimos el método señalando lo que vamos a comparar:

public int compareTo(ordenador o) {
return (frecuencia.compareTo(((ordenador) o).frecuencia));
}


En la clase programa1 añadimos:
import java.util.Collections;
Y después del bucle While, para que al terminar la lista la ordene con nuestro método:
Collections.sort(ordenadores);


Ahora al presentar los ordenadores los pondrá en orden ascendente de frecuencias.

Códigos completos:

Clase programa1:

import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;
public class programa1 {

static private LinkedList<ordenador> ordenadores = new LinkedList<ordenador>();
public static void main(String[] args) {

ordenador cpu;
cpu = new ordenador("string", "string", 0, 0);

String procesador="procesador";
String salir = "salir";
while(!(procesador.equals(salir)))
{
Scanner entrada = new Scanner(System.in);
System.out.println("Introduzca tipo de procesador o escriba salir:");
procesador = entrada.nextLine();
if (procesador.equals(salir)) break;
System.out.println("Introduzca frecuencia en GHz:");
int frecuencia = entrada.nextInt();
System.out.println("Introduzca tipo de gráfica:");
entrada.next();
String grafica = entrada.nextLine();
System.out.println("Introduzca cantidad de memoria en Mb:");
int memoria = entrada.nextInt();

ordenadores.add(new ordenador(procesador, grafica, frecuencia, memoria));
}
Collections.sort(ordenadores);

for (ordenador o : ordenadores) //recorremos los objetos "o" de tipo ordenador de la lista ordenadores
{
System.out.println("Tiene un procesador de tipo " + o.getProcesador() + " a " + o.getFrecuencia() + " GHz");
System.out.println("Tiene una gráfica de tipo " + o.getGrafica() + "con " + o.getMemoria() + " Mb");
}
}
}

Clase ordenador:


public class ordenador implements Comparable<ordenador> {
private String procesador, grafica;
private Integer frecuencia, memoria;

public ordenador(String proce, String gra, int frec, int me)
{
procesador=proce;
grafica=gra;
frecuencia=frec;
memoria=me;
}

public String getProcesador() {
return procesador;
}

public void setProcesador(String procesador) {
this.procesador = procesador;
}

public String getGrafica() {
return grafica;
}

public void setGrafica(String grafica) {
this.grafica = grafica;
}

public int getFrecuencia() {
return frecuencia;
}

public void setFrecuencia(int frecuencia) {
this.frecuencia = frecuencia;
}

public int getMemoria() {
return memoria;
}

public void setMemoria(int memoria) {
this.memoria = memoria;
}

public int compareTo(ordenador o) {
return (frecuencia.compareTo(((ordenador) o).frecuencia));
}

}


Opcional en orden descendente con comparator:
Añadimos en la clase principal:
import java.util.Comparator; 
Si queremos que sea en orden descendente cambiamos el collections.sort por este:
Collections.sort(ordenadores,new ordenar());
 y creamos la clase ordenar en la clase principal:
class ordenar implements Comparator<ordenador> {
public int compare(ordenador o_1, ordenador o_2) {
return (-(o_1.compareTo(o_2)));
}
}

sábado, 21 de enero de 2012

Tutorial Java 4 - Lista enlazada

Una lista enlazada (LinkedList) nos permitirá tener una lista de objetos que podremos recorrer cómodamente para luego mostrarlas, facilitando además tareas de ordenación, en este capítulo simplemente crearemos una lista enlazada, añadiremos objetos y luego mostraremos su contenido:
Usando la misma clase ordenador del tutorial 2, y haciendo unas pequeñas modificaciones en la clase principal:


import java.util.LinkedList;  //importamos la librería correspondiente
import java.util.Scanner;
public class programa1 {
static private LinkedList<ordenador> ordenadores = new LinkedList<ordenador>(); /*Creamos la lista enlazada LinkedList<nombre_de_la_clase> nombre_de_la_lista = new LinkedList<nombre_de_la_clase>*/
public static void main(String[] args) {

ordenador cpu;  
cpu = new ordenador("string", "string", 0, 0);

String procesador="procesador";
String salir = "salir";
while(!(procesador.equals(salir))) //bucle para añadir ordenadores hasta que queramos salir
{
Scanner entrada = new Scanner(System.in);
System.out.println("Introduzca tipo de procesador o escriba salir:");
procesador = entrada.nextLine();
if (procesador.equals(salir)) break;
System.out.println("Introduzca frecuencia en GHz:");
int frecuencia = entrada.nextInt();
System.out.println("Introduzca tipo de gráfica:");
entrada.next();
String grafica = entrada.nextLine();
System.out.println("Introduzca cantidad de memoria en Mb:");
int memoria = entrada.nextInt();

ordenadores.add(new ordenador(procesador, grafica, frecuencia, memoria)); /*añadimos nuevo objeto con sus propiedades*/
}

for (ordenador o : ordenadores) //recorremos los objetos "o" de tipo ordenador de la lista ordenadores
{
System.out.println("Tiene un procesador de tipo " + o.getProcesador() + " a " + o.getFrecuencia() + " GHz");
System.out.println("Tiene una gráfica de tipo " + o.getGrafica() + "con " + o.getMemoria() + " Mb");

}
}
}


Tutorial Java 3 - Ficheros


Pequeño ejemplo comentado:

/*Añadimos las librerías de ficheros, excepción entrada/salida, escritura y lectura*/
import java.io.File;    
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;


public class fichero {


public static void main(String[] args) throws IOException { //importante el throws para que no proteste
Scanner entrada = new Scanner(System.in);
System.out.println("Que cadena quiere guardar en el fichero? ");
String cadena = entrada.nextLine();
System.out.println("En que fichero quiere escribir los datos? ");
String fichero = entrada.nextLine();


File fichero_variable = new File(fichero); /*nueva variable de tipo File a la que le asignamos la dirección del fichero*/

if (fichero_variable.exists()) //Comprobamos que el fichero no exista para no sobreescribir
{
System.out.println("Ya existe un fichero con ese nombre");
System.exit(0);
}


PrintWriter salida = new PrintWriter(fichero_variable); //uso similar al Scanner

salida.println(cadena); //destino.escribir(cadena)
salida.close(); //cerramos la salida, obligatorio para que se guarden los cambios


Scanner entrada_fichero = new Scanner(fichero_variable); /*un Scanner cambiando System.in por el fichero nos permite su lectura*/

System.out.println("Dentro del fichero " + fichero + " hay " + entrada_fichero.nextLine());

entrada.close(); //cerramos la entrada
}

}

Edit: repasando el codigo sería entrada_fichero.close()


Tutorial Java 2 - Objetos

Java es un lenguaje de programación orientado a objetos, los objetos podríamos definirlos como paquetes de datos...y de momento llega, porque he dicho que serían tutoriales concisos así que empezaremos con la parte práctica y espero que desde ahí se vaya entendiendo el funcionamiento de los mismos:

Creamos un nuevo proyecto, pero esta vez, aparte de crear una clase principal, crearemos otra más sin la opción "main" marcada y la llamaremos por ejemplo "ordenador".

Código de clase principal:


import java.util.Scanner;
public class programa1 {
public static void main(String[] args) {

ordenador cpu;     /*Creamos una objeto "cpu" de tipo "ordenador" que es nuestra clase nueva,  esto quiere decir que la variable cpu podrá utilizar los métodos de la clase ordenador.*/

cpu = new ordenador("string", "string", 0, 0);  /*cpu será un nuevo objeto de tipo ordenador, además inicializamos sus variables. Esto lo entenderéis mejor cuando veamos la clase ordenador.*/


Scanner entrada = new Scanner(System.in);
System.out.println("Introduzca tipo de procesador:");
String procesador = entrada.nextLine();
System.out.println("Introduzca frecuencia en GHz:");
int frecuencia = entrada.nextInt(); /*Para leer el siguiente entero introducido por teclado.*/
System.out.println("Introduzca tipo de gráfica:");
entrada.next(); /*Para mover el puntero de Scanner y que lea la siguiente instrucción correctamente.*/
String grafica = entrada.nextLine();
System.out.println("Introduzca cantidad de memoria en Mb:");
int memoria = entrada.nextInt();

cpu.setProcesador(procesador); //mandamos el procesador al objeto cpu.
cpu.setFrecuencia(frecuencia); //mandamos la frecuencia al objeto cpu.
cpu.setGrafica(grafica); //mandamos la gráfica al objeto cpu.
cpu.setMemoria(memoria); //mandamos la memoria al objeto cpu.


System.out.println("Tiene un procesador de tipo " + cpu.getProcesador() + " a " + cpu.getFrecuencia() + " GHz");
System.out.println("Tiene una gráfica de tipo " + cpu.getGrafica() + "con " + cpu.getMemoria() + " Mb"); //Si en vez de usar set, usamos get, recibiremos la información
}

}

Clase ordenador:


public class ordenador {

private String procesador, grafica; //Cadenas "private" solo accesibles desde los métodos de esta clase
private int frecuencia, memoria;

public ordenador(String proce, String gra, int frec, int me) /*Constructor del objeto, indicamos las variables que llegarán desde la clase principal.*/
{
procesador=proce;  //Guardamos las variables en la clase.
grafica=gra;
frecuencia=frec;
memoria=me;
}
}

Y ahora para crear los métodos de "get" y "set" podemos hacer lo siguiente:  ir a "Source" y "Generate Getters and Setters" y marcamos todas las variables con las que querremos manejarnos desde la clase principal, y le damos a "ok", el clipse automaticamente nos generará el resto del código y en total nos debería quedar esto:

Clase ordenador:


public class ordenador {

private String procesador, grafica;
private int frecuencia, memoria;

public ordenador(String proce, String gra, int frec, int me)
{
procesador=proce;
grafica=gra;
frecuencia=frec;
memoria=me;
}

public String getProcesador() {
return procesador;  //devuelve la variable procesador a la clase principal
}

public void setProcesador(String procesador) {
this.procesador = procesador; /*this indica cual es el procesador de la clase, el que queremos "rellenar".*/
}

public String getGrafica() {
return grafica;
}

public void setGrafica(String grafica) {
this.grafica = grafica;
}

public int getFrecuencia() {
return frecuencia;
}

public void setFrecuencia(int frecuencia) {
this.frecuencia = frecuencia;
}

public int getMemoria() {
return memoria;
}

public void setMemoria(int memoria) {
this.memoria = memoria;
}

}



Ahora guardais ambas clases y podeis darle a "Run"





viernes, 20 de enero de 2012

Cosas que puedes hacer para cambiar el mundo

1 - Informarte de lo que pasa en él, pero informarte bien. Menéame (Español) Reddit (Inglés).
2 - Donar tapones de plástico.
3 - Aprovechar lo que no uses de cpu para ayudar a investigar contra el cancer y otras enfermedades.
      Por ejemplo en la World Comminty Grid. (Incluso de fondo de pantalla)
4 - Consumir sabiendo la procedencia y las implicaciones de lo que consumes, siendo ecológico, donar a alguna ong, por ejemplo si te sobra saldo del contrato mensual enviarlo en forma de sms... y  en definitiva haciendo todas esas cosas que de tanto repetirlas no parecen importantes, pues lo son.
5 - Pensar.

Tutorial Java 1 - Primer programa

Una presentación quizá no es suficiente para el propósito antes mencionado(conseguir visitas) así que seguramente postee de vez en cuando tutoriales o guías relacionadas con informática, telecomunicaciones y/o ingeniería en general, porque ya que estamos, me parece una forma de contribuir positivamente a internet.

Intentaré que estas guías sean útiles y concisas, así que, empecemos!

Para un primer acercamiento a Java empezaremos por instalar el entorno de desarrollo desde el cual programaremos en este tutorial, el Eclipse (hacer click y descargar la versión correspondiente a vuestro sistema) una vez hecho esto voy a explicar paso a paso como correr vuestro primer programa:

1-Una vez clickeamos nos preguntará que workspace queremos, es decir, donde queremos guardar los proyectos en los que trabajaremos, elegid el directorio que más os guste, pero luego tened en cuenta de estar en el sitio correcto para las siguientes ocasiones.

2-Una vez abierto, clickeamos en "File", "New", "Java Project" y ponemos el nombre que queramos, por ejemplo "programa1".

3-Ahora deberíamos tener una carpeta abierta con ese nombre, es decir, está activa, entonces podemos crear una nueva clase de Java que se asignará a ese proyecto, las clases son los bloques funcionales de Java, los documentos en los cuales escribimos el código. Hacemos "File", "New", "Class"

4-En la nueva ventana, escribimos un nombre para nuestra clase, y marcamos "public static void main(String[] args)"

5-El texto que se encuentra entre "/*  */"  y después de "//" son comentarios, no tienen ninguna validez aparte de explicar el propio código para que el propio usuario lo organice para si mismo o para otras personas.

6-Explicaciones rápidas de lo que tenemos delante(no obligatorio para seguir pero útiles):
public significa que podemos acceder a esa clase(o método) desde otras clases(o métodos).
class es basicamente eso, indica el nombre de la clase(que coincide con el nombre del archivo, si cambiamos eso el programa no funcionará)
public static void main(String[] args) es el método principal del programa, si un programa no tiene este método no funciona, "main" es el nombre del método, "void" indica que, despues de que el método haga lo que tenga que hacer no nos dará ningún resultado hacia afuera del mismo.(no nos devuelve nada) Esto se entenderá mejor cuando tengais mayores conocimientos de programación.

7-En el método es donde "está la miga" donde pasan las cosas, así que escribiremos en él el programa del tutorial 1, añadimos estas líneas:

Scanner entrada = new Scanner(System.in);  //Estamos declarando una variable llamada "entrada" que recogerá información del sistema. Importante! Las mayúsculas se tienen en cuenta al programar, si algo no está exactamente como debe no funcionará.
System.out.println ("Introduce algo"); //Mandamos imprimir por pantalla "Introduce algo"
String cadena = entrada.nextLine(); //Creamos una nueva String(cadena de caracteres) llamada "cadena" y hacemos que la pida por teclado, es decir entrada(para que venga del sistema).nextLine(para que guarde la línea que introduzcamos).
System.out.println("Ha introducido " + cadena); //muestra por pantalla el texto más el contenido del String cadena.

Seguramente os habréis fijado que el Eclipse "se queja" al utilizar Scanner, si es el caso es porque no le habéis dicho donde están "las instrucciones" para utilizarlo, para eso tenéis que importar la librería correspondiente añadiendo al principio del todo de vuestro código "import java.util.Scanner;" si no se queja seguramente es porque ya lo ha hecho automáticamente.

import java.util.Scanner;

public class programa1 {

public static void main(String[] args) {

Scanner entrada = new Scanner(System.in);
System.out.println ("Introduce algo");
String cadena = entrada.nextLine();
System.out.println("Ha introducido " + cadena);
}
}

8-Ahora solo queda darle a "Run" y probar vuestro programa :)

Notas: el eclipse suele guiar bastante mientras programáis, avisando de ciertos fallos y dándoos opciones para solucionarlos, soy un estudiante y quizá cometa numerosos errores, si encontráis alguno y me avisais estaré muy contento de poder arreglarlo :).



Hello world y esas cosas...

Una de las mil cosas entretenidas que siempre se me pasan por la cabeza mientras estoy en época de exámenes y que justo terminar los exámenes se ocultan a la espera de chinchar en el siguiente momento oportuno es esta: hacer un blog, no es el primero que hago y tengo cierta experiencia, pero siempre que abro uno enseguida me aburro y quedan ahí en la maraña de pseudo-basura de internet, consumiendo unos pocos megabytes y con entropía casi nula...

¿De que voy a hablar? Aún no lo tengo claro... Pero intentaré que sea algo fresco, que sea el típico blog que llegues y aunque sea por su rareza le des una segunda oportunidad, bah ni siquiera se porque me molesto tanto sabiendo que esta primera entrada nadie* la lee..

*Excepto cuando eres conocido y quieren saber como empezaste...y claro, en el fondo espero equivocarme.