jueves, 26 de julio de 2018

Redes IV: Practica y Ejercitación

En esta entrega plantearemos algunos ejercicios para comprender mejor como trabajar con subredes.

1.- Suponiendo que tenemos un Edificio con un Departamento distinto en cada piso, los cuales queremos diferenciar en la delegación de IP. Aunque no sabemos con cuantos dispositivos contamos en cada piso, sabemos que tenemos 7 pisos.

Siguiendo los parámetros del enunciado, debemos crear 7 subredes, con cantidad desconocida de dispositivos. Nos bastará (mientras los dispositivos no sean demasiados), con utilizar una mascara de Clase C 255.255.255.0 a la cual le pediremos tantos bits sea necesario del último octeto como para formar 4 subredes.

Para saber cuantos bits tomaremos prestado debemos traspasar 7 a binario, que sería 111. son 3 bits resignados, con lo cual conseguiríamos 8 subredes.

Nos quedaría de la siguiente manera 11111111.11111111.11111111.11100000, que es igual a 255.255.255.224 ó /27 (porque son 27 los bits utilizados).

Ahora, siguiendo las fórmulas, tendremos (2^5)-2 = 30 IPs disponibles por subred.
La tabla nos queda de la siguiente manera:

Dirección de Red                           Rango de IPs                                                      Dirección de Broadcast
192.168.0.0/27                               192.168.0.1     - 192.168.0.30                            192.168.0.31
192.168.0.32/27                             192.168.0.33   - 192.168.0.62                            192.168.0.63 
192.168.0.64/27                             192.168.0.65   - 192.168.0.94                            192.168.0.95
192.168.0.96/27                             192.168.0.97   - 192.168.0.126                          192.168.0.127
192.168.0.128/27                           192.168.0.129 - 192.168.0.158                          192.168.0.159
192.168.0.160/27                           192.168.0.161 - 192.168.0.190                          192.168.0.191
192.168.0.192/27                           192.168.0.193 - 192.168.0.222                          192.168.0.223
192.168.0.224/27                           192.168.0.225 - 192.168.0.254                          192.168.0.255

2.- Supongamos que tenemos que crear subredes en un call-center que esta dividido en varias áreas no mayor a 20 personas por área. Una vez que llegan a 20 personas se crea una nueva área.
Según los datos que tenemos las subredes van creciendo a medida que mas puestos se suman, pero siempre mantiene un máximo de 20 dispositivos.
Ahora, siguiendo la conversión, 20 en binario sería 10100, son 5 bits, por lo cual quedarían solo 3 bits para subredes 2^3= 8 y usando los 5 bits conseguiríamos (2^5)-2=30 IPs disponibles por rango.
La tabla de subredes quedaría de la siguiente forma:

Dirección de Red                           Rango de IPs                                                      Dirección de Broadcast
192.168.0.0/27                               192.168.0.1     - 192.168.0.30                            192.168.0.31
192.168.0.32/27                             192.168.0.33   - 192.168.0.62                            192.168.0.63 
192.168.0.64/27                             192.168.0.65   - 192.168.0.94                            192.168.0.95
192.168.0.96/27                             192.168.0.97   - 192.168.0.126                          192.168.0.127
192.168.0.128/27                           192.168.0.129 - 192.168.0.158                          192.168.0.159
192.168.0.160/27                           192.168.0.161 - 192.168.0.190                          192.168.0.191
192.168.0.192/27                           192.168.0.193 - 192.168.0.222                          192.168.0.223
192.168.0.224/27                           192.168.0.225 - 192.168.0.254                          192.168.0.255

3.- En este último ejercicio identificaremos la subred a la que pertenece una IP. Supongamos que tenemos la IP 192.168.0.166/29

Y la IP se traslada a 11000000.10101000.00000000.10100110

Teniendo la conversión, debemos poner en cero los bits resignados a host del octeto  de la IP, es decir

10100000

Como resultado, ahora sabemos que la dirección de subred de la IP 192.168.0.167/29 es la 192.168.0.160/29, esa sería su dirección de broadcast.


jueves, 19 de julio de 2018

Redes VI: Subredes


Empezamos con la parte importante y que mas dolores de cabeza traerá.

Antes de avanzar mas, debemos tener algo en claro, el numero de IP, no define la clase en la que se encuentre, de ello se encarga la mascara de red. Es decir, ejemplificando, supongamos que tenemos una IP 192.168.0.1, y a simple vista dirán que es de Clase C, por el rango en el que se encuentra, pues si, el rango se corresponde con la Clase C, pero si tenemos como mascara de red 255.255.0.0 entonces significaría que esta red es de Clase B. Como ven, lo que define la Clase de red es la mascara, mas que el rango de direcciones.
Otra cosa que debemos tener presente es que la primer IP del rango y la última, no son utilizables, ya que la primera es la dirección usada para identificar la subred y la última es la dirección de dominio de broadcast. Por ejemplo, en una red Clase C de rango 192.168.0.X la dirección de identificación de subred es la 192.168.0.0 y la dirección de dominio de broadcast sería la 192.168.0.255, por ende, solo nos quedan 255-2 direcciones asignables.

BIT a BIT
Como dijimos antes, lo que nos identifica la clase de red, es la mascara, y si la mascara define la clase, por lógica también definirá la subred.
Cuando debemos crear una subred, lo primero que tenemos que tener presente, es la cantidad de dispositivos a conectar (suponiendo que no se trata de una red compleja con permisos y accesos por zonas), ya que esto determinara primeramente, la clase en la que nos posicionaremos para empezar a crear las subredes.
Vamos a suponer que estamos en una oficina con 50 dispositivos, divididos en impresoras, computadoras y dispositivos wireless (celulares, tablets, notebooks), y queremos crear una subred por cada tipo de dispositivo. Por la cantidad, podemos ubicarnos tranquilamente en la Clase C que nos permite 255-2 direcciones asignables. Ahora debemos identificar la cantidad de subredes o de dispositivos que debemos conectar (siempre partimos de la cantidad de subredes cuando no conocemos la cantidad de dispositivos que irán en cada subred, o bien, si sabemos cuantos dispositivos tendremos por subred haremos el cálculo desde allí), en este caso tenemos 50 dispositivos pero no sabemos cuantos van en cada subred.
Para crear una subred, debemos tomar el primer octeto destinado a identificación de host y de izquierda a derecha, tomar tantos bits como sea necesario para crear la subredes necesarias. 
Como 3 en binario se escribe 11 solo tomaremos dos bits del octeto, quedándome 6 mas para asignar direcciones.

11111111.11111111.11111111.00000000
Bits ocupados para designar las subredes
Bits restantes para designar a los host.

Con la cantidad de bits identificada, ya podemos formar la mascara de red que tendremos, esos bits que tomamos para identificar las subredes se representaran con 1 correspondientemente. Esto significa que para toda subred tendremos de mascara 255.255.255.192 ya que el último octeto quedaría como 1100000000 que en decimal es 192. 
Con esos dos bits podemos formar hasta 4 subredes, que serían 00, 01, 10 y 11, y como direcciones a host nos quedan (2^6)-2 = 62 IPs asignables.

Las 4 subredes resultantes serían:

Dirección de Red                           Rango de IPs                                                      Dirección de Broadcast
192.168.0.0/26                               192.168.0.1     - 192.168.0.62                            192.168.0.63
192.168.0.64/26                             192.168.0.65   - 192.168.0.126                          192.168.0.127
192.168.0.128/26                           192.168.0.129 - 192.168.0.190                          192.168.0.191
192.168.0.192/26                           192.168.0.193 - 192.168.0.254                          192.168.0.255

No se preocupen si ahora no lo entienden, en la próxima entrega estaremos haciendo practica de todo esto, para poder dejarlo mas claro y les sirva de ejercitación.

miércoles, 11 de julio de 2018

Curso de Java Orientado a Web: POO II


POO II

La clase Auto escrita hasta ahora, si bien utiliza la sintaxis de Java, no responde correctamente a algunos conceptos de POO. Por lo tanto, es correcto aclararlos para continuar escribiendo programas Java correctamente.

Estado Interno
Este concepto se refiere a las variables que le pertenecen a los objetos y no son visibles para el resto. 
En Java, se aplica con el modificador private, por ejemplo:

public class Empleado{
    private double sueldo;
}



De esta manera, si creamos dos instancias de Empleado (empleado1 y empleado2), entre ellos no podrian conocer el sueldo del otro.

La Teoria de Objetos nos dice que un objeto no debe modificar directamente los atributos de otro, sino que debemos crear metodos desde las clases que se encarguen de esa modificacion. De tal manera, supongamos que queremos aumentarle el sueldo al empleado. No hacemos asi:

empleado1.sueldo = empleado1.sueldo+ 1000;

Lo que hacemos es presentar desde la clase Empleado un método que permita modificar el sueldo de las instancias. Asi:

public class Empleado {
    private double sueldo;
    
    public void AumentarSueldo(double aumento) {
        sueldo = sueldo+aumento;
    }
}



De tal manera, en la instancia empleado1 se modifica el sueldo asi:

empleado1.AumentarSueldo(1000.0)


Por lo tanto, en ProyectoAuto modificaremos la clase Auto. para que los atributos ahora sean privados.




Guardamos con Ctrl + S y vamos a la clase Main, vemos muchos errores del tipo "Color has private access in Auto". Debemos entonces, declarar metodos para inicializar los valores. Pero recuerden: tenemos que hacerlo en la clase Auto.

En la clase Auto vamos a Code ==> Generate...  y seleccionamos Getters and Setters. Seleccionamos todas las variables y damos a Ok.



Entonces, para darle valores a los objetos debemos usar los metodos Setter y para Consultar los valores debemos usar los metodos Getter. Por ejemplo, para "settear" el color del objeto Gol1 a "Rojo" usaremos la siguiente sintaxis:

Gol1.setColor("Rojo");

Y para consultar el color, usaremos:

Gol1.getColor();

Reemplacen como corresponda en Main.java.



Guardamos con Ctrl + S y Damos en Run ==> Run Main.

Obtendremos el mismo resultado que antes. Pero ahora estamos respetando un poco más el Paradigma de Objetos.

Curso de Java Orientado a Web: Creando Instancias


Crear Instancia Gol1

Recordemos que tenemos esta Clase Auto:

public class Auto {
    int NumeroDePuertas;
    int VelocidadMaxima;
    int CaballosDeFuerza;
    int VelocidadActual;
    String Patente;
    String Modelo;
    String Marca;
    String Origen;
    String Estado;
    String Color;

    String Prender(){
        Estado = "Prendido";
        return "Auto Encendido";
    }

    String Acelerar(int Aceleracion){
        VelocidadActual = VelocidadActual + Aceleracion;
        return "El auto se encuentra a: "+ VelocidadActual;
    }
}
Hecha en base a lo planteado a continuacion:
Queda crear la instancia Gol1 de la clase Auto. Para ello vamos a crear en la carpeta src una clase Main que contendrá justamente el metodo main.

La sintaxis de Java para crear una instancia de una clase es la siguiente:

Clase instancia = new Clase();

Donde Clase es el nombre de la clase a la que pertenece el objeto, instancia es el nombre de la variable o instancia y Clase() es el método constructor vacio. Este tema lo veremos en el siguiente Capitulo.

En el caso de la instancia Gol1 de la clase Auto se escribe asi:

Auto Gol1 = new Auto();

Entonces el archivo Main.java

public class Main {
    public static void main(String[] args){
        Auto Gol1 = new Auto();

    }
}

Ahora, para ir modificando los valores del objeto, por ejemplo, el color, debemos usar la siguiente sintaxis:

Objeto.atributo = valor;

Entonces, para modificarle el color usamos:

Gol1.Color = "Rojo";

Seguimos modificando el objeto para que quede como necesitabamos:


Por ultimo hagamos el llamado a los metodos del objeto. Usando una sintaxis similar:

Objeto.Metodo();

Entonces, Llamamos a los metodos Prender y Acelerar (con 20 de aceleracion) y luego lo imprimimos por consola, enviandolo como parametro en el metodo println().


Tiempo de Correr el programa! Por si las dudas, vayan a File ==> Save All o apreten Ctrl + S. Luego vayan a Run ==> Run Main.


Ahora vamos a pasar a explicar unos conceptos importantes de POO.

Curso de Java Orientado a Web: Clase Auto


Clase Auto

Ahora vamos a crear nuestra primer clase. En el capitulo anterior vimos como abstraer de la realidad el concepto de objeto al paradigma POO. Si no tienes idea de lo que hablo, te invito a que revices el capitulo anterior.

Vamos a usar esta imagen como base: 

En el IntelliJ Creen un nuevo proyecto llamado "ProyectoAuto". (File ==> New ==> Project) 
En src creen una nueva clase llamada Auto. 

No voy a dedicar un apartado especial a los tipos de variables o propiedades, ya que son muchisimos. Lo importante es saber que hay algunos tipos nativos y muchas clases que usaremos como tipos, pero que no son mas que instancias de clases.

Un ejemplo de tipo de dato nativo es el int para variables enteras. Por otro lado para cadenas de texto usaremos instancias de la clase String.

Entonces, agreguemos las propiedades relacionadas con numeros primero:




¿Qué estamos haciendo en verdad? Estamos declarando los espacios de la clase. Es como si hiciéramos una plantilla que rellenaremos en cada caso particular. Por ahora, solo estamos creando campos en esa plantilla general.

Sigamos. Vamos a agregar el resto de las propiedades, que son de tipo Cadena de Texto o String.



Si tenes experiencia en Programacion quizas te incomode el tipo de variable que es Estado. Si sabes cambiarla convenientemente, adelante. Sino, espera que ya lo haremos.

Ya tenemos todos los atributos de la clase agregados. Ahora vamos a crear algunos métodos.

Para crear un método de una clase se necesita tener en claro:
* Tipo de Dato de Salida
* Datos de Entrada (Con sus respectivos tipos)
* Nombre del método

Vamos despacio con el primer ejemplo: Prender. Esta accion modificará la variable interna del objeto llamada "Estado", cambiandola de "Apagado" a "Prendido". Entonces queda claro que no hay ningun dato de entrada, pero devolveremos un mensaje diciendo "Auto encendido", que es un dato de salida de tipo String.

Entonces: No entra ningun dato, se procesa el encendido y se devuelve un String.

En codigo Java esto seria:

String Prender(){
        return "Auto Encendido";
}

"return"  es la sentencia utilizada en java para aclarar que va a devolver lo que le especifiquemos a la derecha. Luego veremos que existe la posibilidad de no retornar nada.
Por ahora el metodo no modifica nada. Hagamos que sí modifique el Estado del objeto.



Aclaracion: esta no es la forma perfecta de escribir un método. Pero estamos yendo despacio, dentro de las posibilidades del lenguaje.

Metodo Acelerar:
En este método necesitaremos que se especifique cuanto acelerar el objeto. A partir de ese numero se le sumará a la VelocidadActual la Aceleracion y devolverá un mensaje diciendo "El Auto se encuentra a" (VelocidadActual).

Entonces: Recibe un int aceleracion , Procesa la VelocidadActual sumandole la aceleracion y retorna un String.

Hagamoslo en codigo Java:

String Acelerar(int Aceleracion){
        VelocidadActual = VelocidadActual + Aceleracion;
        return "El auto se encuentra a: "+ VelocidadActual;
}

Si miramos dentro del parentesis, "int Aceleracion" es la forma de especificar que el método aceptará un parametro de tipo entero, que dentro del mismo lo llamaremos "Aceleracion". Esto no significa que la variable a enviar tenga que llamarse así, solo es una declaracion y usamos nombres adecuados para poder entender el codigo, ya que, no debemos olvidarnos que el objetivo de Java junto con Poo es abstraer la realidad. Parte de la abstraccion es utilizar nombres de variables utiles.

Luego veremos que aceptaremos más de un parametro, de distintos tipos.

En la segunda linea vemos una suma. Lo que hace el programa es Asignarle a la variable VelocidadActual el valor que se encuentre en VelocidadActual y sumarle el parametro Aceleracion.
Vale la aclaracion que Java inicializa los enteros en Cero (0).

Finalmente tenemos la clase Auto.java (Que compilada resultará en la clase Auto.class) escrita de la siguiente manera :


En el proximo capitulo veremos como crear el objeto o instancia Gol1.

Curso de Java Orientado a Web: Poo

POO

Poo hace referencia a las siglas de Programación Orientada a Objetos. 
Java es un lenguaje orientado a Objetos. Básicamente podemos decir que todo en Java es un Objeto. 

Si ya estás naturalizado con el paradigma, sáltate esta explicación. Pero si no es el caso, te invito a mirar esta pequeña introducción y a continuar investigando en internet. 

POO es un Paradigma de programación. Un paradigma es algo que "no se discute" y usaremos como base para construir el resto. Los conceptos aportados por el paradigma, las reglas y restricciones no deben ser cuestionadas (O al menos dentro de lo posible).

Si vienes del paradigma funcional (con lenguajes del estilo de C), estas acostumbrado a las funciones. Las funciones son porciones de código reutilizables, que utilizan entradas para procesarlas y obtener salidas. 



Es fácil hacer una vinculación con las funciones que vemos en matemáticas, pero con menos restricciones... podemos hacer que tengan varias salidas, varias entradas, que estén anidadas, etc.

El cambio de mentalidad con Objetos es el siguiente: Los objetos manipulan sus propios datos e interactúan con otros para ser modificados o alterarlos de forma indirecta. De igual manera interactúan entre ellos para obtener información.

El paradigma de Objetos sirve debido a la posibilidad de abstraer la realidad a bloques de código.

Vamos de a poco...

Un objeto es una Instancia de una clase. Tienen Propiedades, métodos e identidades.
Una clase es lo más parecido a una plantilla donde se rellenan los datos propios de la instancia.
Una propiedad es un atributo que tiene un objeto en el caso particular del mismo. Estas propiedades son "variables" del programa, pero asociadas al objeto en sí. Los nombres suelen ser sustantivos o adjetivos.
Un método es una acción que puede ejercer el objeto. Se puede hacer una relación con las Funciones del paradigma funcional. Los nombres suelen ser verbos.
La identidad es una propiedad que permite diferenciar al objeto del resto de su misma clase.

Un ejemplo para ir entendiendo un poco mas.

Vamos con un ejemplo bastante típico: La clase Auto.

Un auto tiene un numero de patente que lo diferencia del resto, ese será su identificador (id). También tiene otras propiedades en común con el resto de los autos: tiene un Color, un NumeroDePuertas, VelocidadMaxima, CaballosDeFuerza, Modelo, Marca, PaisDeOrigen, VelocidadActual, Estado (Prendido o Apagado)... solo por enumerar unas pocas.
Bien, también un auto puede ejercer ciertas acciones que modifican el entorno en el que se encuentra o a si mismo. Por ejemplo, para ir de un lado al otro debe Acelerar. Si hay que usarlo, se debe poder Prender.
Ya con esto podemos hacer una clase. Parece poco, pero es bastante. El desafío en POO es saber abstraer la realidad (En este caso, un Auto) y llevarlo a código de la manera mas intuitiva posible. 

Ya analizamos la clase Auto y en la siguiente parte veremos como llevarla a código Java. Pero antes terminemos de entender Poo. 

Con la clase lista, podemos crear instancias de la misma u objetos. Por ejemplo el objeto Gol1 de la clase Auto. 

Un gol tiene 5 puertas, una velocidad máxima de 185km/h, 75 caballos de fuerza y es fabricado en Brasil.
Nuestra instancia Gol1 tendrá una patente "AXT 100011", será de color Rojo y, en un principio, estará apagado y quieto. 

Por ultimo vale aclarar que la instancia tendrá los métodos (acciones) Prender y Acelerar.

Aquí una imagen resumiendo: 

Curso de Java Orientado a Web: Hola Mundo

Hola Mundo

A la hora de aprender un lenguaje de programación, algo Básico, Necesario, Útil e Interesante es afrontar el desafío "Hola Mundo". Es decir, de la manera más simple posible, usando las herramientas más básicas que nos aporta la tecnología, lograr iniciar un programa y emitir un mensaje diciendo "Hola, Mundo". En Java en particular este desafío es considerablemente difícil, debido que conlleva entender conceptos complejos. 

Vamos paso a paso. 

Primero, vamos a crear un nuevo proyecto Java en IntelliJ (File ==> New ==> Project)


Aquí es donde van a tener que especificar el Jdk instalado. En mi caso: 

No elegimos ninguna librería ni framework adicional, damos en Next , Next. A continuación, nos pedirá un nombre de proyecto. Convenientemente lo llamaremos "HolaMundo".

Finlizamos con "Finish". 
Si observamos el Explorador del Proyecto a la izquierda, veremos al siguiente estructura:

En .idea veremos archivos de configuración del Ide. 
En External Libreries veremos las librerías de externos como el mismo jdk que incluimos anteriormente.
Por otro lado, en src  es donde crearemos las clases para trabajar. Mas adelante entraremos en detalles.

Por ahora, en src damos click derecho ==> New ==> Java Class.


Les generará el fichero HolaMundo.java. Borren el contenido del mismo y peguen lo siguiente: 

public class HolaMundo{

    public static void main(String[] args) {
        // Imprime "Hola, Mundo!" en la consola del Ide.
        System.out.println("Hola, Mundo!");
    }

}

Este es el momento de un "Mas despacio, cerebrito" necesario.

Voy a explicar este "pequeño" programa Java. Con conceptos en los que luego nos explayaremos.

public: Esto indica que es "visible" para el resto de las clases.
class: Todo codigo en java debe estar dentro de una clase.
HolaMundo: Este es el nombre de la clase.
static: Este modificador indica que no es necesario crear una Instancia de la clase para usarla.
void: Este modificador indica que el metodo no devolverà ningun valor.
main: Nombre del metodo. Este método es importante, debido a que al ejecutar, el programa java siempre empieza por la clase que tiene el método man. En este caso, la clase HolaMundo.
String[] args: Al correr un programa java podemos enviarle parametros que usemos en el programa. Esto es bastante avanzado, pero es necesario colocarlo para que corra el programa.
System.out.println: Es el metodo usado para imprimir en la consola.


Ya comete la maldita naranja!

En la barra de herramientas, buscamos Run ==> Run 'HolaMundo' . Esperamos un poco y este será el resultado: 



Curso de Java Orientado a Web: Instalando Ide


Instalando Jdk e IDE




Para descargar el Jdk tenemos que ser concientes de nuestro sistema operativo y su arquitectura.





Click Aquí para ir a descargar el jdk. Actualmente la ultima version es la 8. Descargarte siempre la ultima versión.

Una vez descargado, en el instalador, elegir la carpeta de destino para el jre (Java Runtime Environment), por ejemplo:


(Es importante recordar esta ubicacion).

Para el IDE elegí para este curso el IntelliJ Idea. Si prefieres usar Eclipse o un block de notas, eres libre de googlear como hacerlo. Pero te recomiendo este Pedazo de Ide. Si ya haz usado otros, vamos, dale una oportunidad, te facilitará mucho la labor!

En el Siguiente Link, descargate la version Community compatible con tu Sistema Operativo.
La instalacion del IntelliJ es Next, Next, Next.
En la siguiente Ventana dejenla asi:


Todo deberia salir bien si eligieron las versiones correctas para sus sistemas operativos.


Curso de Java Orientado a Web: ¿Que es Java?


¿Qué es Java?



El diccionario lo define como algo que no se puede aprender. Que NO se puede aprender.

Enserio, vamos a buscarlo en wikipedia:

Java es un lenguaje de programación de propósito general, concurrente, orientado a objetos, que fue diseñado específicamente para tener tan pocas dependencias de implementación como fuera posible. Su intención es permitir que los desarrolladores de aplicaciones escriban el programa una vez y lo ejecuten en cualquier dispositivo (conocido en inglés como WORA, o "write once, run anywhere"), lo que quiere decir que el código que es ejecutado en una plataforma no tiene que ser recompilado para correr en otra. Java es, a partir de 2012, uno de los lenguajes de programación más populares en uso, particularmente para aplicaciones de cliente-servidor de web, con unos diez millones de usuarios reportados.
Su sintaxis deriva en gran medida de C y C++, pero tiene menos utilidades de bajo nivel que cualquiera de ellos. Las aplicaciones de Java son compiladas a bytecode (clase Java), que puede ejecutarse en cualquier máquina virtual Java (JVM) sin importar la arquitectura de la computadora subyacente.

Voy a intentar dar conceptos para dos tipos de gente que ingresen al blog: Uno para gente del palo y que ya entiende conceptos básicos, pero otro para gente que no entiende ni lo básico. Si sos uno de ellos, apretá en los enlaces "MAS DESPACIO CEREBRITO".






¿Jvm?

La Java Virtual Machine (Maquina Virtual de Java)  sirve para ejecutar código compilado Java (el Bytecode Java). La misma nos permite aislarnos del contexto donde se ejecuta el programa, ya que se encarga de adaptarse al hardware.

Curso de Java Orientado a Web: Presentacion


Presentación

En este curso veremos los conceptos básicos necesarios para comenzar a programar en Java en un soporte Web.
Dentro de los temas se encuentran:
* Conceptos básicos de Java.
* Conceptos de POO.
* Conceptos de MVC.
* Concepos de Html + CSS.
* Manejo del protocolo HTTP
* Peticiones a base de datos y paginacion de resultados.

La idea es realizar un curso que te lleve de la mano a la realización de aplicaciones útiles pero dejándote la posibilidad de ampliar tus conocimientos usando Google. Como desarrollador, el buscador es una gran herramienta.

Por mi parte, soy programador Java hace 3 años, me especializo en soluciones Web, pero he desarrollado algunas aplicaciones de escritorio. Actualmente estoy desarrollando en Spring Batch 3.0. (Spring Batch es un Framework de Java).

Entiendo que si sos nuevo desarrollando muchos de los conceptos de mi presentación te son desconocidos (¿Java? ¿Spring? ¿Batch? ¿Framework?) Tranquilo. Juntos iremos dilucidando el camino para ser programadores Java.

viernes, 6 de julio de 2018

Redes V: Dominios de Colisión y Broadcast

Antes de poder proseguir con subredes y demás temas, debemos saber que es una colisión, cuales son los dominios de colisión y broadcast. Para ello también debemos distinguir la función y características de algunos dispositivos de red.

DISPOSITIVOS

Todos los dispositivos cumplen una función determinada, aplicado siempre a la capa en la que estos se encuentren.

Dispositivos Según Capas de TCP/IP


ROUTERS
Un router es el dispositivo principal para la conexión con Internet, es el que hace de intermediario entre el ISP y nuestra red, aunque también pueden usarse router para otras funciones.
Un router hogareño (y sobre todo uno profesional) nos brinda la posibilidad de servicio DHCP, DNS, GateWay, Firewall, etc. Esto posibilita que podamos hacer una administración, por lo menos, básica en la red de nuestro hogar, por ejemplo, viendo que clientes se conectan a nuestra red, y bloquear los dispositivos desconocidos con un filtrado de MAC.
El router por sus posibilidades y funciones es un dispositivo de capa 3.


Símbolo del Router


SWITCH
Un switch es un segmentador de red, lo cual nos da la posibilidad de tomar una conexión y derivarla en varias mas. Dependiendo del switch que tengamos, nos permitirá también una administración bastante profesional. Existen dos tipos de switches, los de capa 2 y los de capa 3, los primeros solo nos permitiran segmentar la red, mientras que los últimos, los de capa 3, nos brindan funciones como subredes, dhcp, redes virtuales.

Símbolo del Switch


HUB
Aunque es un dispositivo ya en desuso, sirve para explicar las colisiones mas adelante. Es muy parecido al switch pero este, no segmenta la red, sino que la multiplica. Es, de manera lógica, lo mismo que una zapatilla eléctrica, solo toma un cable y lo multiplica en varios.

Símbolo del Hub


DOMINIOS DE COLISIÓN
Una colisión es cuando "chocan" los paquetes de información que viajan a través de la red, ya sea porque el canal de transmisión estaba ocupado por otra conexión o porque mas de un dispositivo quiso enviar información a otro equipo a la vez. Esto generalmente pasaba con los hubs, ya que el hub no reconoce que dispositivos tiene conectados, así que cuando le llega información, este lo envía por todas sus conexiones, siendo así, un inmenso dominio de colisión. En conclusión, un dominio de colisión es la menor división de la red, donde mas de un paquete pueda colisionarse con otro.


Esta imagen representa un solo dominio de colisión, ya que, como dijimos, el hub no segmenta la red, por lo que una trama enviada al hub, será reenviada a todos los puertos en donde este tenga una conexión.
Según la CSMA/CD cuando se produce una colisión, los transmisores interrumpen su transmisión durante un periodo de tiempo aleatorio y vuelven a enviar las tramas que se colisionaron.


DOMINIO DE BROADCAST
El broadcast es un paquete de datos que se envía a todos los nodos de la red, y que posee una dirección propia (llamado dirección de broadcast) para ser identificado, generalmente es la IP que se identifica con doscientos cincuenta y cinco (255) en la parte de host, es decir la última IP del rango. Por ejemplo la dirección de broadcast en una red 192.168.0.0/24 (el /24 significa que que 24 de sus 32 bits son para identificar a la red y 8 son para identificar a los host, es decir una red de clase C) , su dirección de broadcast sería 192.168.0.255.
Un Dominio de Broadcast es el conjunto de dispositivos que pertenece a un mismo segmento de red.

Tomando el mismo ejemplo anterior, pero con un switch en el lugar del hub, podemos decir que este es un solo dominio de broadcast, pero con la diferencia que ahora cada una de sus conexiones es un único dominio de colisión, ya que como dijimos, el switch segmenta los dominios de colisión por cada uno de sus puertos.

EJEMPLOS DE DOMINIOS DE COLISIÓN Y BROADCAST



jueves, 5 de julio de 2018

Redes IV: IP y Máscara de Red

Cada dispositivo conectado a una red, debe poseer algo que lo identifique de manera lógica y de manera física.
De manera física se identifica con el número de MAC. Este código hexadecimal, lo asigna el fabricante de dicho dispositivo y no puede cambiarse (no de manera lícita). Pero de esto hablaremos en otra ocasión.
La manera lógica en la cual se identifica (y administra) los dispositivos en la red, es mediante el número de IP. Este número esta conformado por 4 octetos de bits (es decir, cuatro conjuntos de 8 bits, con cada uno de sus bits con valor 0 o 1) y separados por puntos, aunque esta notación resulta difícil de manipular a simple vista, por lo cual es convertida a decimal siendo el menor valor 0.0.0.0 y el mayor 255.255.255.255.
Cada IP consta de dos partes, una que identifica la red y otra que identifica el host, es decir, traspasándolo a un domicilio, una parte indica la calle y la otra la altura. Esto significa que puede haber muchos domicilios con la misma calle, pero solo uno con esa altura.
Generalmente en una red siempre hay un servidor DHCP (Dynamic Host Configuration Protocol o Protocolo de Configuración Dinámica de Host) que es quien se encarga de asignar las IP disponibles.
Todo el pool o pila de números de IP están clasificados en 5 clases, de las cuales, solo son 3 las que llegan a utilizarse, las restantes están reservadas para usos militares o de investigación, entre otras cosas.

REDES DE CLASE A
En las redes de clase A, tenemos el primer octeto binario que identifica a la red y los 3 restantes para identificar al host, esto significa 256x256x256=16.777.216 IPs disponibles para asignar en una red, esta red se caracteriza porque su primer octeto comienza en 0, y los restantes 7 bits pueden ser 0 o 1, es decir 0xxxxxxx
Ej:
 01000000.xxxxxxxx.xxxxxxxx.xxxxxxxx = 64.x.x.x
Los valores que están en "x" es porque es la parte reservada para host y su valor no infiere en la clase de la red.
El menor valor que podemos llegar a formar en la red de clase A es el 1.0.0.0 y el mayor valor es el 127.255.255.255.
Generalmente en esta clase, se toma el rango de IP que estan dentro del 10.x.x.x para ser diseminadas en los dispositivos.
Además, se debe dejar claro que dentro de cada clase hay un rango reservado para usos especiales. En el caso de la clase A, el rango reservado es 127.x.x.x que es usado para el loopback, por ende, este rango no se debe ocupar para ser asignado dentro de la red.
Algunos ejemplos de redes de clase A son:

10.1.125.200
5.145.10.1
32.0.0.1

REDES DE CLASE B
En este grupo, para identificar la red ya se ocuparan los primeros 2 octetos de la IP para identificar la red, y los restantes 2 para identificar el host.
A la clase B se la caracteriza porque su IP siempre comienza con el primer octeto en 10 y los restantes 6 bits y los 8 del segundo octeto, pueden contener tanto 1 como 0 indistintamente, es decir 10xxxxxx.xxxxxxxx.
El menor valor que podemos llegar a usar en esta red es el de 128.0.x.x y el mayor es el 191.255.x.x y el rango reservado en esta clase es el 169.254.x.x.
Generalmente en esta clase, se toma el rango de IP que estan dentro del 172..x.x para ser diseminadas en los dispositivos.
Con una red de clase B, podemos llegar a asignar hasta 256*256=65.536 direcciones de host.
Ejemplos de redes de clase B:

172.10.12.58
164.125.0.7
128.0.200.250

REDES DE CLASE C
Esta clase es la mas extendida de todas, ya que por defecto, los modems o routers hogareños o que suelen dejar los ISP (Internet Services Providers o Proveedores de Servicio de Internet), entregan IPs dentro de este rango.
Las IP de esta clase tienen 3 octetos para identificar la red y solo 1 para identificar el host, dejando solo 256 IP para ser asignadas a los dispositivos. Comienzan en su primer octeto con 110 y los restantes 5 bits del primer octeto y los 8 bits de los dos siguientes octetos pueden contener tanto 1 como 0. Siendo el menor valor 192.0.0.x y el mayor 223.255.255.x.
En esta clase, no hay un rango reservado para algún uso especial.
Ejemplos de clase C:
192.168.0.1
192.168.1.10
200.10.20.30

MASCARA DE RED
Si bien, tenemos definido los números de IP según las clases, la verdad es que el tipo de clase al que pertenece, está marcado por la mascara de red.
La mascara de red, al igual que la IP, es un número formado por 4 octetos, que señala cuantos bits son para identificar la red y cuantos son para identificar los host.
Por ejemplo, una red de clase C, independientemente de la IP asignada, será identificada como tal porque llevara una mascara de red 255.255.255.0, esto quiere decir que los tres primeros octetos son par identificar la red y el ultimo para identificar los host. En la mascara de red los bits destinados a identificar los host nunca cambian, solo cambian los que identifican la red, es decir, sin importar cuantos dispositivos tengamos en una red, si esta es de clase C, todos los dispositivos tendrán la misma mascara de red 255.255.255.0, así mismo, si la red es de clase B la mascara será 255.255.0.0 para todos los dispositivos que estén en la red.
En resumen, la mascara de red es la que nos identificara a que tipo de red/subred pertenecemos, y si esto esta mal configurado, no podremos acceder a otras ubicaciones en la LAN.

Sobre todo lo expuesto aquí profundizaremos mucho más, en las próximas entregas.

miércoles, 4 de julio de 2018

Redes III: Conformación y Topologías

ARMADO DE CABLE DE RED (PATCHCORD) 
 Las redes son implementaciones que representan una solución a la problemática de la comunicación, y dependiendo del tipo de problemática, convendrán distintos tipos de implementaciones.

CONFORMACIÓN DE UN CABLE DE RED (PATCHCORD)
Un patchcord (o tramo de cable de red con sus correspondientes fichas), se conforma por un tramo de cable UTP y en la mayoría de los casos, un conector tipo RJ45 en cada uno de sus extremos.
UTP es un tipo de cable que se entrega con 4 pares de cables internos (es decir 8 alambres en total), y cada par está identificado con un color. Ademas de la nomenclatura de colores, tenemos categorías que añaden mayor calidad en la transmisión, aunque esto viene emparejado con un coste mucho mayor a medida que subimos de categoría.
Lo mas usual es que internamente en un hogar o en oficinas sin mucho caudal de información, o con datos que no tengan un nivel de criticidad alto, se ocupe el UTP Categoría 5e. Mientras que en bancos o empresas de seguridad, está establecido por estandares, que debe usarse el UTP Categoría 6e, que es mas reforzado que el anterior y ademas trae un separador de pares para minimizar la interferencia que se pueda generar entre ellos.
UTP Cat 5e
UTP Cat 6e

Además, en la misma categoría tienes lo que serían cables para exterior y para interior, siendo los de exterior, mas reforzados para poder resistir las injerencias climáticas.
En cuanto al conector, si hablamos de redes cableadas, lo mas usual, será siempre que nos encontremos con el RJ45, que es una pequeña ficha plástica, que en un extremo tiene 8 pines y en el otro, el orificio por donde se introduce el cable. Como aclaración, cuando vayamos a armar nuestros propios patchcord debemos dejar solo un pequeño tramo de los hilos descubierto, lo suficiente para que puedan ser introducidos en los pines acanalados de la ficha, y al menos unos dos milímetros de la parte recubierta quedaran dentro de la ficha. Esto es para evitar que esa parte descubierta sufra contaminación electrónica por ruidos o interferencias.


Conector RJ45
Correcto Armado de RJ45

Dependiendo de que es lo que vayamos a conectar, podemos encontrar dos tipos de Normativas o Estándares. Están la Norma 568-A y la Norma 568-B.
Cuando lo que vamos a conectar son dos dispositivos igual (PC y PC, Switch y Switch), el patchcord se dice que debe ser de Par Cruzado, esto significa que en un extremo tendremos una norma y en el otro extremo la otra norma. En cambio, cuando los dispositivos que conectemos son distintos (Switch y PC, Router e Impresora), se dice que debe ser el Par Paralelo, que como se imaginarán, es porque lleva la misma norma en los dos extremos.
Ahora, se preguntarán que significa cada norma? Pues bien, cada norma define el código de colores que tendrá y el orden de los pares.



Vista de Frente
Vista Superior





TOPOLOGÍAS
Una vez que ya tenemos nuestros patchcord, lo restante es saber la topología o el tipo de conexionado que debemos realizar. Esto dependerá siempre de que tipo de necesidades tengamos en la empresa, oficina u hogar.

DE ESTRELLA
La topología en estrella reduce la posibilidad de fallo de red conectando todos los nodos a un nodo central. Cuando se aplica a una red basada en la topología estrella este concentrador central reenvía todas las transmisiones recibidas de cualquier nodo periférico a todos los nodos periféricos de la red, algunas veces incluso al nodo que lo envió. Todos los nodos periféricos se pueden comunicar con los demás transmitiendo o recibiendo del nodo central solamente. Un fallo en la línea de conexión de cualquier nodo con el nodo central provocaría el aislamiento de ese nodo respecto a los demás, pero el resto de sistemas permanecería intacto. El tipo de concentrador (hub) se utiliza en esta topología, aunque es muy obsoleto; se suele usar comúnmente un switch.
La desventaja radica en la carga que recae sobre el nodo central. La cantidad de tráfico que deberá soportar es grande y aumentará conforme vayamos agregando más nodos periféricos, lo que la hace poco recomendable para redes de gran tamaño. Además, un fallo en el nodo central puede dejar inoperante a toda la red. Esto último conlleva también una mayor vulnerabilidad de la red, en su conjunto, ante ataques.
Si el nodo central es pasivo, el nodo origen debe ser capaz de tolerar un eco de su transmisión. Una red, en estrella activa, tiene un nodo central activo que normalmente tiene los medios para prevenir problemas relacionados con el eco.

DE ARBOL
Una topología en árbol (también conocida como topología jerárquica) puede ser vista como una colección de redes en estrella ordenadas en una jerarquía. Este árbol tiene nodos periféricos individuales (por ejemplo, hojas) que requieren ‘transmitir a’ y ‘recibir de’ otro nodo solamente y no necesitan actuar como repetidores o regeneradores. Al contrario que en las redes en estrella, la función del nodo central se puede distribuir.
Como en las redes en diagonal convencionales, los nodos individuales pueden quedar aislados de la red por un fallo puntual en la ruta de conexión del nodo. Si falla un enlace que conecta con un nodo hoja, ese nodo hoja queda aislado; si falla un enlace con un nodo que no sea hoja, la sección entera queda aislada del resto.
Para aliviar la cantidad de tráfico que se necesita para retransmitir en su totalidad, a todos los nodos, se desarrollaron nodos centrales más avanzados que permiten mantener un listado de las identidades de los diferentes sistemas conectados a la red. Estos switches de red “aprenderían” cómo es la estructura de la red transmitiendo paquetes de datos a todos los nodos y luego observando de dónde vienen los paquetes también es utilizada como un enchufe o artefacto.

DE BUS
Una red en bus es aquella topología que se caracteriza por tener un único canal de comunicaciones (denominado bus, troncal o backbone) al cual se conectan los diferentes dispositivos. De esta forma todos los dispositivos comparten el mismo canal para comunicarse entre sí.
Es la tercera de las topologías principales. Las estaciones están conectadas por un único segmento de cable. A diferencia de una red en anillo, el bus es pasivo, no se produce generación de señales en cada nodo o router. En la topología de bus todos los nodos (computadoras) están conectados a un circuito común (bus). La información que se envía de una computadora a otra viaja directamente o indirectamente, si existe un controlador que enruta los datos al destino correcto. La información viaja por el cable en ambos sentidos a una velocidad aproximada de 10/100 Mbps y tiene en sus dos extremos una resistencia (terminador). Se pueden conectar una gran cantidad de computadoras al bus, si un computador falla, la comunicación se mantiene, no sucede lo mismo si el bus es el que falla. El tipo de cableado que se usa puede ser coaxial, par trenzado o fibra óptica. En una topología de bus, cada computadora está conectada a un segmento común de cable de red. El segmento de red se coloca como un bus lineal, es decir un cable largo que va de un extremo a otro de la red, y al cual se conecta cada nodo de ésta. El cable puede ir por el piso, las paredes, el techo o por varios lugares, siempre y cuando sea un segmento continuo.

martes, 3 de julio de 2018

Redes II: Tipos de Redes


Para poder llegar a cada rincón, hay distintos tipos de redes, cada una con estándares y características propias, pero por sobre todo, esta división de tipos viene dada mas por su alcance geográfico, que por otras cosas.

LOCAL AREA NETWORK
Las Local Area Network (LAN), o por su traducción al español Redes de Área Local, son el tipo de red más extendido, utilizándose primordialmente para el intercambio de datos y recursos entre las computadoras ubicadas en un espacio relativamente pequeño, como un edificio o grupo de ellos, como por ejemplo instituciones educativas o gubernamentales y hasta en nuestra propia casa.
Sin embargo, una LAN puede estar conectada a otras redes de área local sin importar la distancia, ya que se vale de otros mecanismos, como la transmisión de datos por radio y otros. A esto se lo denomina WAN o Red de Area Amplia, como podremos ver más abajo en este artículo. Sin duda alguna, la característica más significativa de la LAN es que permite la interconexión de múltiples nodos o equipos individuales, para acceder a los datos y recursos que estos posean, es decir que podremos usar impresoras, unidades de almacenamiento y otros dispositivos aun cuando no se encuentren conectados físicamente a nuestra computadora. Otra característica de las LAN es que transmiten datos entre sí a altísima velocidad, sin embargo las distancias a las que pueden hacerlo es limitada, así como el número de nodos que se pueden conectar a una sola LAN.
Esquema de una red LAN con un servidor central y varios host finales

METROPOLITAN AREA NETWORK (MAN)
MAN o Metropolitan Area Network, cuya traducción al castellano es Red de Área Metropolitana, es una red de datos diseñada específicamente para ser utilizada en ámbitos de ciudades o pueblos. La primera característica, hablando en términos de cobertura geográfica, es que las Redes de Área Metropolitana o MAN son más grandes que las redes de área local o LAN, pero menores en alcance geográfico que las redes de área amplia (WAN).
MAN se caracterizan por conexiones de muy alta velocidad utilizando cable de fibra óptica u otros medios digitales, lo que le permite tener una tasa de errores y latencia mucho más bajas que otras redes armadas con otro tipo de conductores. Además son muy estables y resistentes a las interferencias radioeléctricas. Este hecho hace a las redes de área metropolitana muy adecuadas para entornos de tráfico multimedia, lo que permite entre otras cosas, implementar sistemas de vigilancia a través de cámaras de video con una relación coste/beneficio muy significativa.
En una ciudad la conexión entre distintos puntos de ella.

WIDE AREAN NETWORK
La llamada Red de Área Amplia, o WAN (Wide Area Network) como también se la conoce es básicamente una o más redes LAN interconectadas entre sí para poder abarcar mucho más territorio, a veces incluso, hasta continentes.
Las redes WAN son mayormente utilizadas por grandes compañías para su propio uso, mientras que otras WAN son utilizadas por ISP para ofrecerle el servicio de Internet a su clientela. Las computadoras conectadas a través de una Red de Área Amplia o WAN generalmente se encuentran conectados a través de redes públicas tales como el sistema telefónico, sin embargo también pueden valerse de satélites y otros mecanismos.
Conexiones en distintos puntos alrededor del mundo.

Tal vez te preguntes, ¿Cómo puede ser que podamos estar tan comunicados entre continentes, incluso con miles de kilómetros de océano de por medio? Y la respuesta es mas sencilla de lo que imaginas; quizás pensaste que había satélites superpotentes que transmiten a super alta velocidad todo el tiempo alrededor del mundo, pues bueno, la verdad es un poco mas decepcionante, pero no menos imponente y sorprendente. Hay cables apostados en el fondo del océano que llevan las conexiones de un continente a otro.
Este mapa representa los cableados apostados en el fondo del mar.

Un cable transoceánico es un cable de varios centímetros de grosor que fue diseñado para resistir las inclemencias del fondo del oceánico la forma mas común de estos cables es un centro o núcleo de un material con gran capacidad conductora hoy la mejor opción es la fibra óptica y esta está recubierta de materiales de gran fuerza para evitar que este se rompa uno de estos materiales
Esto funciona desde una estación que codifica la información y la dirige atreves del cable por medio de pulsos de energía o de luz según sea el material con el cual fue fabricado, la estación receptora decodifica la información.
Las reparaciones de estos cables dependen de convenios y burocracia con cada país. En Canadá, Nicaragua o Colombia, por ejemplo, un fallo en un cable submarino puede repararse en menos de cinco días. Venezuela, Japón o Indonesia son los que más trabas ponen a este tipo de mantenimiento, con plazos de hasta 35 días de demora en la reparación del cable dentro de sus aguas territoriales. En contra de lo que se pueda pensar, las causas más habituales de daños en la conexión no son naturales. El 63% de las averías se deben a la actividad humana, sobre todo derivadas de la pesca. 
Hoy en día, el 90% del tráfico de Internet pasa por estos cables submarinos que unen Europa, Asia, América y Oceanía. En la página Web www.submarinecablemap.com puede observar el mapa de estos “puentes” entre continentes. Sin este cableado muchas de las acciones que realizamos en nuestra vida cotidiana no serían posibles o tendrían un coste prácticamente inadmisible. El conjunto de estos cables convierte a los océanos en auténticas autopistas de la información, que nos permiten tener transmisiones intercontinentales de alta velocidad. Además, nos da la capacidad de enviar grandes volúmenes de datos con un retardo mínimo, algo que sería inadmisible con otros tipos de enlaces (por ejemplo enlaces por satélite).