jueves, 4 de febrero de 2010

Problema de Wireless con NetworkManager en Gentoo

Cuando instale gentoo, me conectaba a redes inalambricas desde consola, luego decidi instalar Network Manager, pero me daba dos problemitas: 1) Me cambiaba el nombre del host, 2) nm-applet me decia que mi tarjeta wireless no estaba conectada.

Despues de tanto leer y manipular mi gentoo la solucion era tan facil, solo una linea de comando

# emerge dbus

la solucion fue volver a compilar el dbus, mejor me dio risa al darme cuenta que la solucion a ambos problemas era una cosa tan facil y yo manipulando archivos a diestra y siniestra

sábado, 4 de julio de 2009

Junit y el uso de Asserts

Junit

Es un conjunto de bibliotecas creadas por Erich Gamma y Kent Beck que son utilizadas en programación para hacer pruebas unitarias de aplicaciones Java, es un conjunto de clases que permite realizar la ejecución de clases Java de manera controlada, para poder evaluar si el funcionamiento de cada uno de los métodos de la clase se comporta como se espera. Es decir, en función de algún valor de entrada se evalúa el valor de retorno esperado; si la clase cumple con la especificación, entonces JUnit devolverá que el método de la clase pasó exitosamente la prueba; en caso de que el valor esperado sea diferente al que regresó el método durante la ejecución, JUnit devolverá un fallo en el método correspondiente.

JUnit es también un medio de controlar las pruebas de regresión, necesarias cuando una parte del código ha sido modificado y se desea ver que el nuevo código cumple con los requerimientos anteriores y que no se ha alterado su funcionalidad después de la nueva modificación. El propio framework incluye formas de ver los resultados que pueden ser en modo texto, gráfico o como tarea en Ant.

Asserts

Los asserts nos permiten comprobar el resultado de las pruebas unitarias. Podemos destacar que existe un buen soporte para trabajar con genéricos, algo que nos puede facilitar mucho el trabajo a realizar a la hora de escribir nuestras pruebas.

  • Equal: Comprueba si dos objetos sean iguales.
  • NotEqual: Comprueba que dos objetos no sean iguales.
  • NotSame: Comprueba que dos objetos no sean la misma instancia.
  • Same: Comrpueba que dos objetos sean la misma instancia.
  • Contains, Contains: Verifica que una colección contiene un objeto dado.
  • DoesNotContain, DoesNotContain: Verifica que una colección no contiene un objeto dado.
  • DoesNotThrow: Comprueba que un bloque de código no lanza ninguna excepción.
  • Throws, Throws: Comprueba que un bloque de código lance una determinada excepción.
  • InRange: Verifica que un objeto se encuentra dentro de un rango.
  • NotInRange: Verifica que un objeto no se encuentra dentro de un rango.
  • IsAsignableFrom, IsAsignableFrom: Comprueba que un objeto sea del tipo dado o de uno derivado.
  • Empty: Comprueba que una colección no contenga elementos.
  • False: Verifica si una condición es falsa.
  • IsNotType, IsNotType: Verifica que un objeto no es exactamente del tipo dado.
  • IsType, IsType: Verifica que un objeto es exactamente del tipo dado.
  • NotEmpty: Comprueba que una colección tenga algún elemento.
  • NotNull: Verifica que una referencia a un objeto no sea nula.
  • Null: Verifica que una referencia a un objeto no sea nula.
  • True: Verifica que una condición es verdadera.

viernes, 26 de junio de 2009

Uniendo Apache con Tomcat

Lo primero que necesitamos es el conector el cual se puede descargar desde este url:


http://tomcat.apache.org/download-connectors.cgi


Vamos a compilar el módulo mod_jk.so el cual debería de colocarse en la carpeta de módulos del servidor Apache:

#cp -p jakarta-tomcat-connectors-1.2.15-src.tar.gz /usr/local/src/
#cd /usr/local/src
#tar xvzf jakarta-tomcat-connectors-1.2.15-src.tar.gz
#rm jakarta-tomcat-connectors-1.2.15-src.tar.gz
#cd jakarta-tomcat-connectors-1.2.15-src/jk/native/
#./buildconf.sh
#./configure --with-apxs=/usr/local/apache/bin/apxs
#make
#make install

El siguiente paso es configurar el conector, creamos un archivo llamado workers.properties en
/usr/local/apache2/conf

# cd /usr/local/apache2/conf
# gedit workers.properties

y escribimos lo siguiente en el archivo:

workers.tomcat_home=/usr/local/apache-tomcat-5.5.16/
workers.java_home=$JAVA_HOME
ps=/
worker.list=default
worker.default.port=8009
worker.default.host=localhost
worker.default.type=ajp13
worker.default.lbfactor=1

guardamos el archivo y lo cerramos, ahora editaremos el archivo de configuraciones de Apache en el mismo directorio

# gedit httpd.conf

y agregamos las siguientes lineas en el area de "LoadModules":


LoadModule jk_module modules/mod_jk.so


al final de ese mismo archivo agregamos las siguientes lineas:


JkWorkersFile "conf/workers.properties"
JkLogFile "logs/mod_jk.log"
JkLogLevel warn
JkMount /jsp-examples default
JkMount /jsp-examples/* default


JkWorkersFile es el path donde hemos guardado el archivo anteriormente escrito, JkMoutn esta parte cargara los ejemplos que trae tomcat al momento de instalarlo, guardamos y cerramos el archivo, ahora reiniciamos Apache y Tomcat:

#/etc/init.d/apache2 restart
#/etc/init.d/tomcat5.5 restart

Listo tendremos enlazado Apache con Tomcat, para accesar a los ejemplos de Tomcat desde Apache escribimos en el URL http://localhost/jsp-examples Apache enviara la peticion a Tomcat

STRUTS 2

Apache Struts2 es un framework MVC, pertenece a la segunda generación de frameworks de aplicaciones web, su versión anterior no tuvo mucha aceptación debido a su complejidad. Struts2 no se basa en el código de Struts1, originalmente se había conocido como Webwork2 pero después de varios años, Struts y Webwork unieron fuerzas para crear Strtus2 razón por la cual el mismo se basa en WebWork. Struts2 se construyo basado en las mejores practicas y patrones de diseño aceptados por la comunidad programadora. Esta herramienta provee una implementación clara del patron MVC.

Los principales componentes de framework son:

DispatcherFilter: Es el punto de entrada del framework. A partir de el se lanza la ejecución del procesamiento para cada request que involucre al framework. Sus principales responsabilidades son la de ejecutar los actions, comenzar la ejecución de la cadena de interceptors asociados al request, limpiar el contexto sobre el cual se ejecuta un action, a esto ultimo se le conoce como ActionContext.

Interceptors: Son clases que siguen el patrón interceptor, realizan tareas muy similares a los advice de AOP. Se encargan de interceptar la invocación a un Action. Permiten realizar operaciones antes y después de la invocación de un Action. También permiten evitar que un Action se ejecuto. Nos sirve para reutilizar cierta funcionalidad que queremos aplicar a un conjunto de Actions. Struts2 trae definidos un conjunto de interceptors por defecto, que le permite realizar un conjunto de acciones sobre los Actions. el Request y Response.

Actions: Serán lo encargados de ejecutar la lógica necesaria para manejar un reques determinado. Los Actions no estan obligados a implementar o heredar de una interfaz o clase ya definida. Pueden ser POJOs. Igualmente, struts2 posee una interfaz Action. Esta interfaz permite definir el método por defecto que se ejecutará sobre el Action para que no tengamos que definirlo por otro medio.

Results: Son Objetos que encapsulan el resultado de un Action. Los Actions de la aplicación simplemente devolverán un String en sus métodos. Un Action puede devolver diferentes resultados luego de su ejecución.

Como se ha mencionado anteriormente, este framework esta basado en el patrón modelo-vista-controlador (MVC), el cual busca reducir el acoplamiento dividiendo las responsabilidades en tres capas:

  • El modelo, que hace referencia a los datos que maneja la aplicación y las reglas de negocio que operan sobre ellos y que se traducen en Struts2 en las acciones.

  • La vista, encargada de generar la interfaz con la que la aplicación interacciona con el usuario. En Struts2 equivale a los resultados.

  • El controlador, que comunica la vista y el modelo respondiendo a eventos generados por el usuario en la vista, invocando cambios en el modelo, y devolviendo a la vista la información del modelo necesaria para que pueda generar la respuesta adecuada para el usuario. El controlador se implementa en Struts2 mediante el filtro filterdispatcher.


Entre las ventajas que provee este framework están:
  • Arquitectura simple, fácil de extender.

  • Las librerías son fáciles de manipular con FreeMaker

  • Se pueden utilizar espacios en blanco

  • En la validación, el lado del cliente solo funciona con reglas establecidas para las acciones

  • Brinda facilidad para realizar pruebas

  • Evita configuraciones obias y redundantes

  • Proveee una fácil instalacion de pluging

  • Utiliza las POJOForms en vez de ActionForms, esto provee la facilidad de utilizar cualquier JavaBeans para capturar la entrada de información y trasladarla a una ActionClass

  • Se codifica menos con la forma Stylesheat-driven la cual provee sus propias marcas

  • Brinda un mejor diseño.

La siguiente imagen muestra el funcionamiento básica de Struts2, el usuario primero realiza una peticion, esta pasa por el filtro FilterDespatcher, despues va al ActionMapper, luego al ActionProxy, se dirige al Struts.xml para buscar la clase de acción y por ultimo ejecuta la acción que en este caso es un Login.



Para el funcionamiento de este framework se necesitan cumplir con los siguientes requerimientos:
  • Servlet API 2.4

  • JSP API 2.0

  • Java 5

viernes, 12 de junio de 2009

Investigacion sobre Subversion, Hudson y Trac

Comandos habituales de Subversion


A continuación presento los comandos mas usados en subversion, para que sirven y su sintaxis.


  • Crear un repositorio nuevo

    svnadmin create nombre_repositorio

  • Añadir un árbol de directorios al repositorio

    svn import path_al_directorio nombre_repositorio

  • Obtener una copia de trabajo

    svn checkout file:///nombre_repositorio/dir directorio_de_trabajo

  • Obtener una copia sin control de versiones

    svn export file:///nombre_repositorio/dir directorio_destino

  • Hacer una copia de seguridad de todo el repositorio

    svnadmin dump nombre_repositorio > ficheroBackup

  • Restaurar una copia de seguridad en un nuevo repositorio

    svnadmin create nombre_nuevo_repositorio
    svnadmin load nombre_nuevo_repositorio <>

  • Ver el estado actual de la copia de trabajo

    svn status

  • Añadir nuevos ficheros o directorios

    svn add nombre_fichero

  • Eliminar ficheros

    svn del nombre_fichero --force

  • Actualizar la copia de trabajo con los últimos cambios en el repositorio

    svn update

  • Actualizar el repositorio con los cambios de tu copia de trabajo

    svn commit -m "Mensaje para etiquetar los cambios"

  • Permitir accesos anónimos al repositorio (si se usa svnserve)

    Editar el fichero nombre_repositorio/conf/svnserve.conf y descomentar según proceda las lineas:

    # anon-access = read

    # auth-access = write


Herramientas para Integración Continua


Describiré 2 herramientas similares a Hudson:


  • Luntbuild: Luntbuild es una herramienta para automatización y gestión. La Integracion Continua o builds nocturnos se puede setaer fácilmente utilizando una interfaz Web. Los builds ejecutados pueden ser gestionados utilizando funciones tales como búsqueda, clasificación, promoción, parches, etc. También actúa como un repositorio central de los artefactos generados en los builds y la zona de descarga para todo el equipo.

  • Apache Continnum: Apache Continuum, un socio que Apache Maven, es un servidor de integración, que funciona se basa en un calendario configurables. Al igual que CruiseControl, Continuum desarrolladores e-mails cuando se rompe la construcción, que se pedía que el culpable solucionar el problema. Para añadir a un proyecto continuo, al punto pom.xml en el sistema de control de código fuente, y que automáticamente hace el resto.


Tabla Comparativa



Apache Continnum

Luntbuild

Hudson

Instalación

Compleja

Fácil

Fácil

Documentación

Suficiente

Suficiente

Buena

Rendimiento

Bueno

Muy bueno

Muy bueno

Configuracion de seguridad

Fácil

Fácil

Muy Fácil

Integracion con herramienas de testeo

Buena

Buena

Muy Buena

Proyectos Java

Muy buena

Muy buena

Exelente

Proyectos No Java

Mala

Mala

Buena

Interfaz

Fácil

Complejo

Muy Fácil

Estabilidad

Buena

Buena

Buena


Herramienta de Gestion de Proyectos y Bug-tracking


Describiré 2 herramientas similares a Trac:


  • Redmine: Basado en la web de gestión de proyectos y la herramienta de seguimiento de fallos. Incluye calendario y la ayuda a las cartas de Gantt representación visual de los proyectos y sus plazos. Soporta múltiples proyectos. Redmine diseño está influido por Trac, un paquete de software similar. Redmine está escrito utilizando el marco de Ruby on Rails. Es multiplataforma y entre bases de datos.

  • Mantis Bug Tracker: Es un servicio gratuito basado en web bugtracking sistema. Está escrito en el lenguaje de scripting PHP y trabaja con MySQL, MS SQL, y bases de datos PostgreSQL y un servidor web. Mantis Fallo Tracker reclamaciones soporte para Microsoft Windows, Mac OS, OS / 2, y una variedad de sistemas operativos Unix. Es liberado bajo los términos de la GNU General Public License.



Conclusiones


Para herramientas de integración continua, yo en lo personal me inclino por Hudson debido a que es mucho mas fácil de utilizar, tiene una interfaz amigable y su instalación es muy sencilla, basta con bajar el .war y desplegarlo en el servidor de tomcat, además es mucho más compatibles con proyectos no Java, además de contar con infinidad de plugins para unirlo a varias herramientas de seguimiento de fallos.


Para herramientas de seguimieto de fallos, elijo TRAC debido a su alta compatibilidad con Hudson, aunque su instalación es un poco complicada, una vez que se instala, lo sorprende a uno con los detalles de los reportes, ademas poseo mucha mas experiencia con TRAC.

Instalando Subversion + Hudson + Track

En este post explicare como instalar y configurar estas tres herramientas bajo el ent# /etc/init.d/tomcat5.5 restartorno linux utilizando la distribución Ubuntu 9.04, para realizar instalación es necesario tener una conexión a internet, luego de instalar y configurar las tres herramientas explicare como utilizarlas con Netbenas 6.5. Todos los comando son ejecutados en modo root.

Para estar en modo root en la consola escribimos en la misma

# sudo su

Instalando Subversion

Para la instalación de subversion es necesario instalar el servidor apache:

# apt-get install apache2

luego de la instalación de apache necesitamos los paquetes de subversion y la libreria para apache:

# apt-get install subversion apache2-svn

Ahora crearemos un repositorio para nuestros trabajos,

# mkdir -p /var/svn

entramos a las carpetas creadas y en ellas crearemos nuestro repositorio del proyecto

# cd /var/svn

#svnadmin create practica

luego, hay que crear un grupo al cual llamaremos “svn” y le agregaremos el usuario “www-data”, y le daremos permisos:

# groupadd svn

# add user www-data svn

# chown -R www-data.svn /var/svn/

para poder acceder desde un explorador al repositorio de subversion, crearemos un archivo dentro del directorio /etc/apache2/sites-available. Al archivo lo llamaremos mi-host:

# gedit /etc/apache2/sites-available/mihost

dentro del archivo escribimos los siguiente:

  • Location: Nombre del directorio raíz del repositorio. No se especifica el PATH completo, sólo el PATH a partir de la raíz de documentos del servidor web (podemos tener varios repositorios cada uno apuntando a un lugar del sistema de ficheros).

  • Dav svn: Activamos el repositorio a través del protocolo web-DAV.

  • SVNPath: Ruta completa al repositorio, esta si que es la ruta física del sistema de ficheros.

  • SVNIndexXSLT: Hoja de transformación con la que se visualizará el contenido del repositorio si accedemos desde un navegador.

  • AuthUserFile: Ruta al archivo de los password (puede existir un archivo por repositorio).

  • Require valid-user: Especifica que solo acepta usuarios válidos, o sea aquellos que introduzcan un nombre y contraseña correctos.


Guardamos el archivo, lo siguiente es la activación de nuestro host virtual:

# a2ensite mihost

lo siguiente es la creación de un usuario y password para entrar al repositorio desde el explorador, para eso llenaremos el archivo /etc/apache2/avn-auth el cual contiene los usuarios:

# htpasswd -cm /etc/apache2/avn-auth usuario

el sistema nos pedirá establecer la contraseña para el usuario que ingresamos

reiniciamos el servidor de apache

# /etc/init.d/apache2 restart

ingresamos al navegador web y nos dirigimos al repositorio, en la dirección url escribimos http://localhost/svn/practica/, como podemos observar no tiene gran vista, para agregarle una mejor vista al repositorio, copiamos la hoja de estilo que viene con el servidor apache:

# cp /var/www/apache-default/svnindex.* /var/www/

reiniciamos el servidor de apache

# /etc/init.d/apache2 restart

ingresamos a la url del repositorio http://localhost/svn/practica/ y como podemos observar la vista del repositorio ha cambiado.

Para crear carpetas en el repositorio de la manera mas sencilla instalamos el paquete “rapidsvn”, el cual viene con una interfaz gráfica para que podamos ver nuestro repositorio:

# apt-get install rapidsvn

Para acceder a rapidsvn nos vamos ha aplicaciones>programacion>RapidSVN, en ella podemos ver nuestro repositorio, para crear una carpeta apretamos el click derecho y nos vamos a la opción “make directory” y escribimos el nombre que deseamos que tenga en nuestra carpeta.







Al finalizar la instalación de subversion debera de verse de la siguiente manera


instalando Hudson

para la instalación de Hudon es necesario tener el servidor Tomcat, para instalarlo escribimos lo siguiente:

# apt-get install tomcat5.5 tomcat5.5-admin

ahora hay que configurar los usuarios para poder ingresar a tomcat, para eso editaremos el archivo tomcat-users.xml

# gedit /usr/share/tomcat5.5/conf/tomcat-users.xml

editamos el archivo, en el mismo agregaremos 3 roles “admin, manager, tomcat” y agregaremos un usuario y su contraseña, al usuario le daremos los tres roles que creamos.

guardamos los cambios y reiniciamos tomcat

# /etc/init.d/tomcat5.5 restart

con eso tenemos instalado el servidor tomcat y podremos accesar con nuestro usuario.

para la instalación de Hudson es necesario descargar el .war, lo pueden descargar de aqui http://hudson.gotdns.com/latest/hudson.war

para instalar el war nos vamos al servidor de tomcat, en el navegador web ingesamos el siguiente url http://localhost:8180/manager/html nos pedira nuestro usuario y contraseña, la cual creamos en el archivo xml.

Para poder utilizar Hudson tenemos que desplegar el .war que descargamos, nos vamos a la opción de desplegar, y nos posicionamos en la opción “archivo WAR a desplegar” y presionamos el botón de examinar

una vez localizado el .war presionamos el botón “desplegar” y listo tendremos instalado Hudson en nuestro servidor tomcat, para comprobarlo ingresemos el siguiente url http://localhost:8180/hudson/


Instalación de Trac

para la instalación de trac escribimos lo siguiente en consola:

# apt-get install trac

ahora especificaremos la ruta del proyecto que creamos en Subversion:

# trac-admin /var/svn/practica initenv

ahora crearemos el directorio donde guardaremos nuestros proyectos

# mkdir -p /var/trac/projects/pratrac

# trac-admin /var/trac/projects/pratrac initenv


Al especificar la ruta del Project Enviroment con trac-admin, preguntará por el nombre que le daremos al proyecto, por la Database Connection String (por default sqlite), el tipo de control de versiones (por default svn), y luego la dirección del repositorio (si no queremos enlazarlo con uno lo dejamos en blanco), luego la locación de los templates (default /usr/share/trac/templates directorio donde se instalo trac).

Esto del Database Connection String, es una cadena para especificar los datos del gestor de base de datos que queremos usar. Podemos usar MySQL, PostgreSQL y SQLite, este úlitmo viene por defecto y ese utilizaremos en este ejemplo, en artículos posteriores veremos como se definen las cadenas para MySQL y PostgreSQL.

Ahora para configurar trac en modo de Webserver, es necesario el modo python de apache, para verificar de que este activado el modo apache:

# a3enmod python

si no estaba activado, lo activara y tendremos que reiniciar nuestro servidor apache

# /ete/init.d/apache2 restart

para que se pueda ingresar a Trac desde apache tendremos que crear un archivo en el directorio /etc/apache2/sites-available, al archivo lo llamaremos trac

# gedit /etc/apache2/sites-available/trac

y escribiremos en el lo siguiente



  • Location: Nombre del directorio raíz del proyecto. No se especifica el PATH completo, sólo el PATH a partir de la raíz de documentos del servidor web (podemos tener varios repositorios cada uno apuntando a un lugar del sistema de ficheros).

  • PythonOption TracEnv: Ruta completa al proyecto, esta si que es la ruta física del sistema de ficheros.

  • PythonOption TracUriRoot: Nombre del directorio raíz del proyecto.


Guardamos el archivo y reiniciamos apache:

# /etc/init.d/apache2 restart

y listo tendremos instalado trac en nuestro servidor apache, para ingresar a el nos vamos al navegador web e ingresamos el siguiente url http://localhost/projects/pratrac se vera de la siguiente manera


Creación de un proyecto Java

Para esto utilizaremos el IDE Netbeans 6.5, el proyecto lo cargaremos al repositorio de Subversion en la carpeta “trunk” y lo enlazaremos a Hudson y tambien a Trac.

Como primer paso ingresamos a Netbeans, nos vamos a la opcion Control de versiones>Subversion>extracción nos aparecerá la siguiente ventana preguntándonos el url del repositorio de Subversion, el usuario y la contraseña:

al terminar el sistema nos preguntará si deseamos crear un proyecto al cual le decimos que si, en esta practica se creo un proyecto simple como el “hola mundo” lo llamaremos “analisis2”.

Para exportar el proyecto al repositorio de Subversion, le damos un click derecho al proyecto y nos dirigimos a contro de versiones>exportar a Subversion, y listo nuestro proyecto estara en el repositorio de Subversion.

Ahora uniremos Hudson y Trac al repositorio de Subversion

Como vamos a unirlo con Trac, primero hay que descargar el plugin desde aqui https://hudson.dev.java.net/files/documents/2402/127186/trac.hpi

para instalar el plugin nos vamos al servidor de hudson y nos dirigimos a la Manage Hudson>Manage Plugins>Advance, estando ahi nos vamos a donde dice “Upload Plugin” presionamos el botón de examinar y buscamos el plugin, para finalizar presionamos el boton de “Upload” y listo nuestro plugin de trac estara instalado.

Para unir Hudson a Subversion y Trac, ingresamos al servidor de Hudson y nos vamos a la opcion “New Job”, nos aparecera un asistente amigable, escribimos el nombre del proyecto en mi caso lo llamare “Practica de Analisis 2” en la siguiente pantalla nos aparecerá un formulario el cual llenaremos las siguientes opciones:


  • como lo vamos a unir a Trac en el renglon “Trac website” escribimos la url de trac.

  • En la opción “Source code managment” escogemos la opción de Subversion. Nos pedira la url del repositorio de subversion, si es la primera vez que lo ligamos a subversion nos pedira ingresar el usuario y el password para tener acceso al repositorio de subversion.

Lo salvamos y listo nuestro proyecto de netbeans esta unido a Subversion, Hudson, Trac.

Si entramos al proyecto podremos ver que tenemos hudson ligado a Trac, en el lado izquierdo aparece el simbolo de Trac y su respectivo link.

Ahora para ver si funciona modificamos el código de nuestro proyecto de java en netbenas, cada modificación que hagamos tendremos que darle un commit, para esto hacemos click derecho sobre el proyecto, y nos vamos a subversion>commit

para ver si se han realizado cambios en el proyecto, nos vamos al servidor de hudson, entramos al proyecto y presionamos la opción “Build Now”, para revisar si se han hecho cambios nos vamos a la opción de “Changes”, ahí podremos observar los cambios que se han realizado y podremos ver los detalles de los mismos.

Como muestro a continuación yo he realizado 3 builds.