All posts by hablutzel1

Mis primeros pasos en Unit Testing – JAVA

Bueno, les cuento que me estoy introduciendo al mundo de las unidades de prueba, es una manera bastante entretenida de programar, y sin duda es una buena práctica, porque nos puede dejar seguros (despues de escribir una prueba unitaria para una determinada clase, metodo…) de que si esta parte del software cambia, entonces nosotros lo sabremos.

Básicamente las herramientas que he comenzado a explorar para realizar esto son JUnit 4, EasyMock y un buen entorno de desarrollo para facilitarme el trabajo, ésta vez decidí usar Netbeans 6.5, éste nos puede ayudar creándonos las plantillas para nuestras pruebas unitarias, bueno a continuacion les dejo un ejemplo de una simple prueba unitaria sin el uso de Mocks, esto lo dejaré para otra ocasión:

— Divisor.java —

</pre>
public class Divisor {

public static double dividir(int a, int b) throws Exception {
if (b == 0 ) {
throw new Exception("Intento de dividir entre cero");
}
double c = (float) a / (float) b;
return c;
}

public static void main(String[] args) throws Exception {
System.out.println(Divisor.dividir(3, 0));
}
}

— DivisorTest.java —

</pre>
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

public class DivisorTest {

public DivisorTest() {
}

/**
* Test of dividir method, of class Divisor.
*/
@Test(expected = Exception.class)
public void testDividir() throws Exception {
System.out.println("dividir");
int a = 4;
int b = 0;
Divisor.dividir(a, b);

}
@Test
public void testDivisorHappyPath() throws Exception {
System.out.println("Happy Path");
int a = 6;
int b = 3;
double expected = 2;
assertEquals(Divisor.dividir(a, b), expected, 0);
}
}

Creen la clase Divisor dentro de cualquier proyecto de Netbeans, y luego generen DivisorTest usando el Netbeans, para esto vayan a New y luego “Test for existing Class”, seleccionan la clase Divisor y Netbeans generara una plantilla que luego puedenmodificar para que se parezca a la de arriba. Ahora que ya tienen la clase y el test para un método de la misma pueden ejecutar el test haciendo clic en Run (con el test en la ventana actual), entonces verán un mensaje que confirmará el estado de los tests.

Bueno, con respecto a los métodos usados en este ejemplo:

@Test(expected = Exception.class) —-> Junit espera que este metodo de prueba arroje esta excepcion, y lo hara pues nuestra clase Divisor lo arroja cuando intentas dividir entre cero

assertEquals(Divisor.dividir(a, b), expected, 0); —-> Junit le da su visto bueno a este metodo de prueba si esto se cumple

Happy Path —–> http://en.wikipedia.org/wiki/Happy_path no es gracioso el termino??

Ahora, para que sirve esto realmente? Bueno imaginen que un día llegan de una fiesta(Ebrios) a casa y sin darse cuenta siquiera abren el Netbeans y modifican la clase Divisor, de tal forma que simplemente ya no funciona. Si escribieron un test para las diversas formas en las que ésta puede utilizarse lo mas probable es que al día siguiente, cuando se den cuenta de que hay un error, baste con ejecutar los tests para que estos le digan como está fallando su clase, ahora imaginen que tienen muchas clases, propensas a fallar después de darles mantenimiento (o de llegar ebrio a casa xD), acaso no creen que un unit test que nos haga recordar como deben funcionar nuestras clases no nos ayudaría?

Creando un modulo para Prestashop

En esta pequena entrada veremos como crear un modulo sencillo para prestashop, un sistema de tienda Virtual semejante a Oscommerce. Al decir modulo me refiero a uno de los bloques que pueden verse en la primera pagina.

Ejemplo:

ejemplo_de_modulos_prestashop

El ejemplo que veremos sera bastante sencillo, crearemos una carpeta con el nombre “hellototheworld” y dentro de ella crearemos dos archivos:
hellototheworld.php y hellototheworld.tpl (tambien podemos crear un tercer archivo “logo.gif” de 17px X 17px para verlo en el panel de administracion Prestashop)

Cabe mencionar que el archivo php es donde se almacena el controlador Smarty pues estos modulos siguen una arquitectura MVC y el archivo tpl es la vista (la V de MVC para los que no lo sepan).

Bueno, vayamos directo a nuestro ejemplo:

hellototheworld.php

<?php


class
hellototheworld extends Module

{

function __construct()

{

$this->name = ‘hellototheworld‘;

$this->tab = ‘Blocks’; // esto sirve para especificar el grupo dentro de modulos
$this->version = 0.1;
// la version de nuestro modulo


$this->page = basename(__FILE__, ‘.php’);
//ubicamos la ruta hacia nuestro archivo

$this->displayName = $this->l(‘Hola Mundo’);
// este es el nombreque veremos en el panel de administracion para nuestro modulo
$this->description = $this->l(‘Esta es solo una simple descripcion de nuestro modulo 🙂 ‘);

}


// funcion para instalar el modulo, esta sera usada cuando seleccionemos nuestro modulo y lo instalemos haciendo clic en el boton destinado para este proposito en el CP
function install()

{

if (!parent::install())

return false;

if (!$this->registerHook(‘rightColumn’) OR !$this->registerHook(‘leftColumn’))

return false;

return true;

}

//este metodo carga el template que creamos: hellototheworld.tpl
function hookRightColumn($params)

{

global $smarty;

return $this->display(__FILE__, ‘hellototheworld.tpl‘);

}

//este metodo copia el funcionamiento del anterior
function hookLeftColumn($params)

{

return $this->hookRightColumn($params);

}


}

?>

El siguiente archivo es:
hellototheworld.tpl

<div class=”block” >
<h4>Hola Mundo!</h4>
<div class=”block_content”>
<p>Hola Mundo soy un bloque nuevo y albergo un parrafo, aunque tambien podria almacenar
imagenes, ficheros flash, y archivos generados dinamicamente generados por nuestro
hellototheworld.php, pero esto no lo veremos en este pequeno tutorial
</div>
</div>

Como podemos ver existen dos clases CSS: “block” y “block_content”, estas son las que haran que nuestro modulo se vea muy parecido a los otros, quiero decir, con la misma cabecera y tipo de letra para el titulo, todo lo demas es configurable, tu puedes crear tus propias hojas de estilos sin problemas.

Despues de esto, ya estamos preparados para empaquetar nuestro modulo e instalarlo, para este fin empaquetaremos la carpeta completa en el formato .tar (no .tar.gz) y haremos referencia a la url que alberga esta carpeta desde la opcion de instalacion de modulos, esto se puede conseguir creando una carpeta en la raiz de nuestro dominio y copiando el comprimido en ella, luego haremos referencia a nuestro archivo asi:

http://www.example.com/carpeta_temporal/hellototheworld.tar

Y listo, ya tenemos instalado nuestro modulo, despues de esto solo nos queda activarlo, y asignarle una posicion usando la pestana posiciones dentro del menu de modulos.

ejemplo_culminado

PS:

– Este articulo es realmente sencillo, para profundizar mejor recomendaria estudiar lo siguiente: CSS y Smarty.

– He notado algunos errores al posicionar este modulo.

Centos 5 – NVIDIA – Compiz

Bueno, voy a relatar mi experiencia al configurar mi PC con Centos 5, una tarjeta NVidia y luego instalandome Compiz, lo que inicialmente me trajo algunos problemas.

Mi equipo de escritorio cuenta con cuatro procesadores XEON, lo que lo hace mas apropiado para un servidor. A este le instale Centos 5 hace un par de meses, y desde entonces venia usandolo sin prestarle atencion a la obtencion de los drivers correctos de video, hasta que me llegaron las ganas de probar alguno de esos gestores de ventanas con esos efectos del escritorio como un cubo.
Aqui pueden ver un ejemplo:

Bueno, el problema inicial contra el que me enfrente fue que despues de instalar Compiz usando la aplicacion Add/Remove Software ubicada en el menu Applications simplemente no podia activar Compiz yendo a System > Preferences > Desktop Effects, recibia un mensaje de error que si bien no recuerdo lo que decia exactamente, era algo como: Los efectos de escritorio no se pueden activar.

Me dirigi a System > Administration > Hardware y se podia ver que el sistema reconocia a mi tarjeta de video por su nombre, lo que me hizo pensar naturalmente que mi equipo contaba con los ultimos drivers para esta. Este es el nombre que aparecia: NV18GL [Quadro NVS 280 SD], bueno, el hecho es que no, al parecer nuestro amigo Linux es muy bueno reconociendo hardware y adaptando algunos de los drivers muy genericos con los que cuenta para que funcionen con nuestro hardware, entonces, sin pensarlo mas me puse en busqueda de los drivers apropiados para esta tarjeta y llegue hasta aqui: http://www.nvidia.com/object/unix.html. Los que a mi me sirvieron fueron los que se encuentran con este nombre: Linux IA32 96.43.xx series, logicamente esto dependera de tu tarjeta de video y de tu sistema (32bits o 64 bits).
Bueno me baje los drivers y despues de intentar ejecutarlos por primera vez me di con un mensaje de alerta que me decia que debia cerrar la sesion grafica (X server) y ejecutar el instalador sin un sesion grafica activa, esto descartaba la posibilidad de que pudiera solucionar el problema ejecutando el archivo descargado desde el TTY1 (ALT + CTRL + F1) porque no estoy muy seguro de la manera mas efectiva de matar el proceso de X Server.

La alternativa que escogi fue la de bootear en modo “single”, esto se consigue editando una linea en la linea de booteo del GRUB, mas detalles en el siguiente vinculo http://www.cyberciti.biz/faq/grub-boot-into-single-user-mode/ donde se muestra como realizar esta sencilla tarea.

Me dirigi hasta el driver que habia descargado en la carpeta /home/usuario/software y lo ejecute:

$sudo – root
password: (password de root)
#cd /home/usuario/software
#sh NVIDIA-Linux-x86-96.43.11-pkg1.run

Despues, solo seguir las instrucciones, reiniciar haciendo un:
#reboot

Iniciamos sesion en modo grafico como normalmente lo hariamos y nos dirigimos a: System > Preferences > Desktop Effects para activar los efectos de Compiz. Hasta aqui todo bien excepto porque las ventanas habian perdido los bordes decorativos en los que se encuentran los botones para maximizar, minimizar o cerrar la ventana. Despues de googlear un poco di con la solucion modificando un par de linea en el archivo /etc/xorg.conf como se detalla en el vinculo que les dejo: http://www.pendrivelinux.com/ubuntu-desktop-effects-fixing-the-missing-titlebar/

Esto es todo, si tienen algun problema para conseguir la misma configuracion, que sin duda les fascinara como a mi (que tuve que mostrarselo a toda mi familia =) no duden en hacerme saber sus problemas que hare lo que este en mi mano para ayudarlos.