domingo, 11 de septiembre de 2011

Las Variables de Entorno en Ubuntu

¿Que son?
Una variable de entorno es una variable el cual contiene un nombre, un valor, pueden ser declararas o eliminadas. En Ubuntu, pueden estar disponibles para cierto usuario, para todos los usuarios o para un grupo en especifico, pueden ser temporales o permanentes.

Las variables de entorno influyen en el comportamiento del software en el sistema. Por ejemplo la variable de entorno "LANG" determina el idioma en el que los programas de software se presentaran al usuario(etiquetas, titulos de botones, mensajes de error, etc,.).

Normalmente el significado y el formato del valor de una variable de entorno es interpretado por la aplicacion que ha de usarlo. Incluso entre varias aplicaciones se puede llegar a un acuerdo sobre el formato y significado del valor de ciertas variables de entorno.


Las variables PATH y CLASSPATH son ejemplos de variables de entornos muy usadas. La variable PATH tiene como contenido una cadena que contiene rutas de directorios, por ejemplo la ruta donde se encuentra el compilador de java. Para agregar mas directorios a esta variable es necesario separarlas con :
La variable CLASSPATH tiene una funcion parecida al PATH, en ella se definen directorios, librerias (.jar u otros) que nuestra programa en java vaya a usar, al igual que el PATH si son varios directorios estos se separan con un .

Definición de una variable de entorno.
Para definir una variable abrimos nuestra consola y la definimos de la siguiente manera.

usuario@Linux:~$ nombreUno=”Esta es una variable de entorno”

Podemos concatenarla con otra variable.

usuario@Linux:~$ nombreUno= $otraVariable:”Esta es una variable de entorno”

Una vez definida la variable es necesario exportarla al entorno.

El comando export.
Para que una variable de entorno este disponible se dice que hay que exportarla a nuestro entorno. El comando export es el indicado, su sintaxis es la siguiente y la ejecutamos en la misma terminal despues de definir.

usuario@Linux:~$ export nombreVariable

Tanto la exportación cómo la definición pueden hacerse en un mismo paso.


usuario@Linux:~$ export variableDos=”2”

Incluso se pueden exportar más de una variable a la vez.

usuario@Linux:~$ export variableTres=”Tres” variableCuatro=”Four"
Variables de Entorno persistentes.
Como dije anteriormente hay variables de entorno temporales y permanentes. En ocasiones se requiere que el valor de cierta variable de entorno quede guardado aun despues de cerrar sesion, es decir guardarlo en el disco duro.

Variables de Entorno ligados a un usuario en particular.
Si queremos que ciertas variables de entorno solo esten disponibles para cierto usuario cada que este inicie session, entonces debemos colocar las sentencias de exportación  para que estas variables sean exportadas a nuestro entorno como variables temporales cada que se inicia session, las sentencias se colocan en el archivo oculto bashrc que se localiza en el directorio home de nuestro usuario, este archivo ademas de definir variables de entorno nos permite guardar distintas configuraciones .

Algunos ejemplos:

export PATH=$PATH:"/home/automaton/netbeans-7.0.1/bin"
export PATH=$PATH:~/bin
export SUDO_PASSWORD=roberto10
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export CATALINA_HOME=/usr/share/tomcat6
export CATALINA_OPTS="-server -Djava.awt.headless=true -Xms384M -Xmx1536M -XX:MaxPermSize=256M"




miércoles, 24 de agosto de 2011

El principio de la unica responsabilidad

Las clases solo deberian tener una responsabilidad, una tarea, conocer una cosa. Mas concretamente no deberia haber mas de una razon para cambiar una clase.
Considera la siguiente figura, esta clase conoce demasiado. Sabe como calcular un total y los impuestos, como leer y escribir a si misma en el disco, como convertirse a si misma desde y hacia XML y como imprimirse en varios formatos de informes. Puedes oler la fragibilidad? Cambia de SAX a DOM y deberas cambiar Venta, cambia de guardar a un archivo a guardar en una base de datos y tendras que cambiar Venta. Cambia el formato de los informes y tendras que cambiar Venta, te das cuenta a lo que quiero llegar, cuantas razones hay para cambiar la clase Venta? Si, existen 3 razones para cambiar nuestra clase, esto viola completamente el principio de la unica responsabilidad. Este diseno esta malamente acoplado.

El objetivo es separar todos estos conceptos en sus propias clases de forma que cada clase tenga una y solo una razon para cambiar. Nos gustaria que la clase Venta tratara de calculaTotal y calculaImpuestos que una clase XML relacionada tratara con la conversion de instancias de Venta desde y hacia XML, que una clase GuardarVenta tratara con la lectura y escritura de Venta al disco duro y que hubiera una clase para visualizar los informes. En resumen queremos separar cada tarea .

A continuacion muestro un diagrama de como pudiera quedar el conjunto de las nuevas clases.