viernes, 22 de abril de 2016

Sencillo ejemplo de JAVA RMI

Hola a todos. El día de hoy he estado trabajando en la creación de un sencillo proyecto JAVA RMI (el famoso hola mundo). Para los que no saben que es JAVA RMI les comentó así brevemente que es una solución diseñada por JAVA para la creación de aplicaciones distribuidas con el objetivo de invocar de forma remota código que ha sido programado en el lado del servidor pero que se quiere que se ejecute desde el cliente; para ello se pensó en la posibilidad de crear objetos remotos y que esos objetos a su vez tuviesen métodos remotos; los métodos remotos ofrecen su funcionalidad mediante la invocación remota que se tendrá que realizar desde el lado del cliente. Lo más bonito de todo ello es que el código es bastante reducido y no se programan muchos aspectos referentes a la red (IP, nombre, etc.)

La arquitectura que propongo para el ejercicio es la siguiente; tres proyectos creados en Eclipse:

Lado común (common); es utilizado tanto en el servidor como en el cliente
  • IServidor - Es la interfaz que contendrá todos los métodos remotos

Lado del servidor
  • MainServidor - Es la clase que contiene el main del servidor y exporta los objetos remotos para que puedan ser utilizados por los clientes
  • ServidorImpl - Es la clase que implementa la interfaz IServidor y que contiene el código de lo que hacen los métodos remotos

Lado cliente
  • MainCLiente - Es la clase que contiene el main del cliente y que utiliza los objetos remotos proporcionados por el servidor

Para hacer esto se requiere tener instalado Eclipse, JAVA JDK y entender un poco la forma de trabajar con un lenguaje de programación orientado a objetos, específicamente JAVA.

Los códigos de cada una de las clases e interfaces descritas anteriormente son los siguientes:

Primero se debe empezar creando la interfaz que servirá para definir los métodos que serán utilizados como remotos. Esta interfaz debe estar ubicada en el proyecto common, dentro del archivo IServidor.java.

Luego se debe codificar una clase que implemente dicha interfaz y que a su vez codifique el cuerpo de los métodos remotos incluyéndose ahí la funcionalidad que se quiera obtener. En nuestro caso devolver el famoso "Hola mundo" desde un método remoto denominado "devolverMensaje()". Esta clase debe estar ubicada en el proyecto servidor, dentro del archivo ServidorImpl.java.

Ahora restaría programar la parte correspondiente al servidor en donde se debe exportar el objeto remoto a través de un ID de tipo cadena de caracteres. Para nuestro caso el objeto remoto a exportar es de tipo IServidor y su ID es "remoteServidor". Esta clase debe estar ubicada en el proyecto servidor, dentro del archivo MainServidor.java.

Para verificar que todo lo que se ha codificado hasta este punto este correcto; se deberá hacer lo siguiente:

En el proyecto del servidor
Clic derecho New → File
Poner en File name:
security.policy
Escribir dentro de ese archivo lo siguiente:
grant
{
permission java.security.AllPermission;
};


Luego hay que decirle al servidor que al compilar debe usar el proyecto common para ello se debe hacer lo siguiente:
Clic derecho en el archivo MainServidor.java
  Seleccionar Build Path
    Luego dirigirse a Configure Build Path...
      Java Build Path
        Projects
  Add...
    En Select project to add: marcar el que dice common
      Clic en OK


Ahora hay que configurar unas variables de entorno para la JAVA Virtual Machine para que el proceso de ejecución no de problemas:
Editar el archivo MainServidor.java
  Ir a: Run -> Run configurations...
    Seleccionar MainServidor
      Luego dirigirse a Arguments
Luego escibir en VM arguments:
  -Djava.security.policy=file:${workspace_loc}/servidor/security.policy
  -Djava.rmi.server.codebase=file:${workspace_loc}/common/bin/
Clic a Apply
      Clic a Close

Por último antes de ejecutar el servidor es obligatorio ejecutar el servicio de rmiregistry. Para ello desde el terminal se debe ejecutar lo siguiente:

Ahora si estamos listos para ejecutar el servidor. Para ello nos dirigimos al código dentro del archivo MainServidor.java y damos clic derecho Run As → Java Application

Al ejecutar el servidor debería salir algo como lo siguiente:

Dejemos el servidor ejecutándose y pasemos a codificar el código del cliente. Aquí se debe hacer uso del objeto remoto (referido a partir del ID "remoteServidor") e invocar al método remoto "devolverMensaje()" proporcionado por dicho objeto.

Probemos finalmente la ejecución del cliente y su respectiva invocación hacia el método remoto. Para ello nos dirigimos al código dentro del archivo MainCLiente.java y damos clic derecho Run As → Java Application

Al ejecutar el cliente debería salir algo como lo siguiente:

Espero que este pequeño ejemplo de como usar JAVA RMI les sea de utilidad para introducirse en este mundo ahora solo resta cambiar, mejorar, ampliar las funcionalidades ofrecidas por los métodos remotos y adaptarlas a una implementación en concreto.

Por acá les dejo el link con el código de los tres proyectos aquí descritos.

Algunas referencias que pueden ser de utilidad son las siguientes:

jueves, 21 de abril de 2016

Ahorrar 5000 galones (aprox.) de agua en un año

Solo el hecho de pensar que se puede reutilizar el agua que muchas veces desperdiciamos día a día es genial. Por acá les dejo una idea que permite ahorrar 5000 galones (aprox.) de agua en un año.

La idea es un invento que permite reutilizar y filtrar el agua que usamos al lavarnos la manos en el lavamanos y en vez de tirar esa agua a la alcantarilla o aguas negras reusarla para llenar el tanque de agua de nuestro inodoro y luego lavar el inodoro al bajar la palanca.


El sistema recoge el agua del lavamanos y, después de filtrarla y desinfectarla, la utiliza para llenar el tanque del inodoro. Según sus inventores, con este sistema se puede ahorrar una media de 35 litros de agua por persona y día (diez litros de agua por minuto promedio cada vez que lo usamos). Inicialmente se puede adaptar fácilmente a cualquier equipo de aseo.

El agua es un bien escaso hoy en día, y como tal, también cada día mas caro. Por lo que el sistema AQUS® parece una solución bastante ingeniosa y sencilla para ahorrar agua y dinero en nuestros hogares.

El funcionamiento del sistema es muy sencillo: el agua procedente del desagüe del lavamanos se recoge, se filtra y se desinfecta, y se conduce hasta el tanque del inodoro. Como no se va a utilizar como agua potable bastaría con una desinfección básica. Según el fabricante se podría ahorrar entre 7.000 y 30.000 litros de agua al año por hogar, una cifra que escalada a una ciudad o un país, nos daría unos número escandalosos.

Si existen este tipo de tecnologías, ¿porque los gobiernos o las grandes empresas no apuestan por ellas? Yo creo que la respuesta no es trabajo de los gobiernos ni de las empresas sino de los propios ciudadanos que debemos tomar estas medidas en nuestros hogares para hacerlos un hábito sano y ecologicos que transmitamos a las futuras generaciones. ¿cuánta agua hemos desperdiciado hasta la fecha?, ¿cuánta agua podemos empezar a ahorrar? Manos a la obra se ha dicho tu puedes hacer la diferencia para cambiar los malos habitos ecologicos que tenemos en el mundo.

Por acá les dejo un vídeo que explica el funcionamiento con un sistema que lo tiene instalado, espero les guste.

Fuente: EcoInventos


Platos hechos con hojas de árbol - Tapari

La idea de desarrollar ideas novedosas que permitan conservar por mucho más tiempo nuestro medio ambiente me animan a cuidar cada día más de nuestro planeta. Estoy convencido que todos podemos cuidar de la tierra respetándola y regresandole adecuadamente todo lo que le hemos quitado.

En la actualidad los platos de poroplast, de plástico o mejor conocidos como desechables tardan unos 150 años aproximadamente en degradarse, pero en Nepal se usan platos que son 100% biodegradables y que no demoran en degradarse.

Estos platos desechables se llaman “Tapari”, hechos con hojas totalmente biodegradables y respetuosos con el medio ambiente , ademas de ser muy baratos y totalmente artesanales. Los Tapari son realizados con múltiples hojas del árbol de “sal o sala” cuyo nombre científico es Shorea Robusta, las hojas son unidas por fibras de vegetales y pequeños palos de bambú.



La idea se ha venido promoviendo, industrializando y masificando gracias a que en Nepal hay dos tipos de platos y cuencos, los hechos de hojas verdes y los de hojas secas, los primeros son muy flexibles y son usados para rituales religiosos, ceremonias de la alimentación, festividades y hasta en las ceremonias de matrimonio. Mientras que los platos de hojas secas se utilizan para días de campo, en restaurantes, fiestas de pueblo, y en los puestos de comida callejera (fritangas).

Fuente: gamatv

miércoles, 6 de abril de 2016

Creación de una Red Mesh utilizando routers inalámbricos con el firmware DD-WTque implemente el protocolo OLSR

Hace un tiempo atrás participe como parte del jurado evaluador del trabajo titulado como: "Creación de una Red Mesh utilizando routers inalámbricos con el firmware DD-WT que implemente el protocolo OLSR".

En dicho trabajo se presenta un caso de implementación de una red MESH mediante openWRT instalado dentro de router del tipo Linksys WRT.


Para poder  hacer  uso  de  Internet es  necesario  desplegar redes  que  permitan  el  acceso  de manera eficaz y a bajo coste. Esto puede conseguirse de dos formas: redes cableadas o redes inalámbricas. El  acceso  de  forma  cableada  impide  la  movilidad  de  los  usuarios  de  la  red  y  es más  costoso,  al tener que desplegar infraestructura en todos aquellos puntos en los que se desea tener acceso, estas limitaciones están provocando el importante auge que está experimentando la utilización de la tecnología inalámbrica.

Aunque uno de los mayores problemas de las redes inalámbricas es el crecimiento o expansión del área de servicio para las estaciones que tengan acceso a la red, esta necesidad nos lleva a descubrir algún tipo de tecnología que nos ayude a ofrecer redundancia e inteligencia en la red a un bajo coste. La solución a este  problema  es  la  implementación  de una  de  las  tecnologías emergentes más interesantes  en  redes inalámbricas, Redes Mesh.

Las Redes  Mesh son  un  modelo  de  comunicaciones  donde  no  existe  un  punto  de comunicación principal donde los APS se interconectan entre todos, mediante enlaces inalámbricos, combina las topologías Ad-Hoc e infraestructura, son muy útiles porque permiten una amplia cobertura, además de balancear la carga de tráfico y soportar la tolerancia a fallos, de modo que si un nodo se cae, la red puede auto-reconfigurarse para encontrar otras rutas alternativas; esto mediante el protocolo OLSR.

Por ende el objetivo fundamental del trabajo aquí presentado es desplegar un entorno de pruebas controlado, utilizando dispositivos de bajo coste preparados con el firmware DD-WRT para implementar una Red Mesh, con la finalidad de obtener una red que tenga amplia flexibilidad en los enlaces y que sea estable.

Por acá les dejo el documento completo en donde pueden analizar la implementación completa incluyendo las pruebas realizadas. (Documento)