Wednesday, 25 February 2009

Trabajando con bits en Java

Muchas veces nos encontraremos que queremos trabajar a nivel de Bit dentro de aplicaciones en Java, y este nos ofrece la misma potencia que C a la hora de trabajar con los registros bit a bit. Los operadores más comunes en Java son los siguientes:

 &  AND (Y lógica)
| OR (O lógica)
~ NOT (Negación)
^ XOR (Suma exclusiva)
<< SHL (Rotación de bits a la izquierda)
>> SHR (Rotación de bits a la derecha)


  • Algunos ejemplos del funcionamiento de los operadores:
AND:
0 & 0 = 0;
0 & 1 = 0;

1 & 0 = 0;
1 & 1 = 1;

OR:
0 | 0 = 0;
0 | 1 = 1;

1 | 0 = 1;
1 | 1 = 1;

NOT:
~0 = 1;
~1 = 0;

XOR:
0 ^ 0 = 0;
0 ^ 1 = 1;

1 ^ 0 = 1;
1 ^ 1 = 0;

SHL:
0001 << 1 = 0010;
0010 << 1 = 0100;
0100 << 1 = 1000;
1000 << 1 = 0000; (no se conservan los bits)

SHR:
1000 >> 1 = 0100;
0100 >> 1 = 0010;
0010 >> 1 = 0001;
0001 >> 1 = 0000; (no se conservan los bits)

  • Agrupando operadores:
Podemos ir acoplando todos estos operadores en una misma operación, como por ejemplo negar un registro y rotarlo o hacerle una operación XOR:

int i = 00011001 (25 decimal)
int j = ~i << 1 =11100110 << 1 = 11001100 (204 decimal)




Codificando ficheros en UTF-8

UTF-8 (8-bit Unicode Transformation Format), es un formato de codificación que emplea un grupo de bits para codificar cualquier carácter. Podemos encontrar toda la información referente a la codificación en la wikipedia.
Para que cambie la codificación de un fichero y podamos diferenciar si está en codificación ANSI o UTF-8, solo tenemos que mirar la cabecera de este en Hexadecimal. Si queremos modificarlo, y pasar el fichero a UTF-8, tenemos que cambiar la cabecera con el valor 0xFFFE, por lo tanto, si tenemos el fichero:



Su codificación en UTF-8, tendrá la cabecera 0xFFFE, y entre cada carácter aparecerá un byte más codificado en 0x00, en el ejemplo siguiente lo podemos ver:



Por lo tanto si queremos modificar la codificación, ahora sabemos como modificarlo binariamente, pero muchos de los lenguajes de programación ya permiten hacer el cambio directo a cada tipo de fichero.

  • Más información en:
http://www.fileformat.info/info/unicode/char/fffe/index.htm
http://www.utf-8.com/

Monday, 23 February 2009

Realizar pruebas unitarias con JUnit en Java

Para poder realizar correctamente las pruebas unitarias de nuestras clases, debemos utilizar los JUnit, que nos permiten evaluar si el comportamiento de los métodos de nuestra clase son correcto o no. JUnit son un conjunto de bibliotecas creadas por Erich Gamma y Kent Beck, estas las podemos encontrar en la página principal de JUnit.

  • Descargando las librerias:
Podemos descargar desde aquí la última libreria jUnit-4.x.jar
Descargamos la utilidad T2 del framework T2-jar version x.x.x.x.jar

Descargamos estas librerias y las copiamos dentro de la carpeta pluggins del Eclipse. Yo en principio las dejo aquí, también las podemos dejar en otra ubicación, siempre teniendo en cuenta que el Eclipse las tendrá que utilizar.

  • Creando un proyecto de ejemplo y cargar las librerias:
Seleccionamos las propiedades del proyecto, y añadimos JARs externos:



Ahora, generamos una nueva clase llamada ThingTeste.java, y haremos que herede de TestCase de JUnit. Una vez tenemos hecha la clase, creamos los métodos que queremos probar, y mediante un assert haremos que el sistema valide.
En este caso el código seria el siguiente:



import java.io.File;
import junit.framework.*;

public class ThingTester extends TestCase
{
public ThingTester (String name)
{
super (name);
}

public void testGetName() throws Exception
{
File myFile = new File("c:\file.txt");
assertEquals("file1.txt", myFile.getName());

}
}
---------------------

import org.junit.Test;

public class MyTest {

@Test
public void test1() {
// llamamos a T2 y le pasamos el nombre de nuestra clase:
Sequenic.T2.Main.Junit(ThingTester.class.getName());
}
}

Una vez tenemos las 2 clases creadas, arrancamos la clase MyTest.java como JUnit:



Una vez lo tenemos arrancado, podemos comprobar las pruebas unitarias desde la herramienta de JUnit:





Podemos comprobar como falla la validación de la unidad, y nos informa de donde está el error. Mediante la herramienta T2, no hace falta que creemos los métodos de comprobación, ya que el própio framework se encarga de ir a buscar los métodos de la clase y ponerlos a prueba. Podemos generar los métodos de prueba mediante la segunda opción que comento a continuación.

  • Creando un JUnit Test Case
Si en vez de generar la clase de la anterior forma, queremos generar nuestra clase y a la vez una clase Test, lo podemos hacer creandola de esta manera:

En el IDE de Eclipse, nos dirigimos a File -> New -> JUnit Test Case, y desde allí generamos una nueva clase de test para una clase existente.

En mi caso, genero una clase nueva, por ejemplo Rectangle.java:





public class Rectangle {
// State variables.
private int height;
private int width;

// Constructors
Rectangle() {
height = 0;
width = 0;
}

Rectangle(int h, int w) {
height = h;
width = w;
}

// Readers
public int getH() {
return height;
}

public int getW() {
return width;
}

public int getA() {
return height * width;
}

// Writers
public void setH(int h) {
height = h;
}

public void setW(int w) {
width = w;
}

public String toString() {
return "Rectangle: height=" + height + "; width=" + width + "; area=" +
getA() + ".";
}
}
// End of Rectangle class



Una vez tenemos la clase creada, desde el IDE de Eclipse:




Desde esta unidad de test, creamos un Objeto Rectangle, y desde ahí generamos todas las pruebas unitarias que queramos:



Podemos ver desde la herramienta del JUnit como han pasado los diferentes test sobre la clase Rectangle.java.

Thundax TFN Converter (Conversor de Base)

Aquí os dejo una pequeña herramienta que seguro que os irá muy bien a aquellos que quieran realizar conversiones de base a numeraciones no típicas (decimal, binario, Hexadecimal, Octal), ya que alguna vez queremos fabricar nuestros números en función de una base totalmente diferente, por ejemplo que tal en base 18 o en base 3... pues bien, desde esta herramienta lo podremos hacer: Thundax TFN Converter 1.02



En el ejemplo podemos ver como el valor 22221122 en base 3, corresponde al valor I17 en base 19. Para la creación de bases más grandes que la Hexadecimal, simplemente hay que incrementar el charset en un carácter más del abecedario, por lo tanto en base 17 tendremos las letras ABCDEFG yi en base 19 ABCDEFGHIJ, etc.

Se denomina TFN converter, porque utilizo el el Teorema Fundamental de la Numeración, así para generar cualquier número siempre se tiene en cuenta la Base Decimal como base intermedia para realizar los cálculos, y luego se crean las otras bases con divisiones sucesivas o por medio de suma de potencias.

  • Más información:
http://es.wikipedia.org/wiki/Teorema_fundamental_de_la_Aritmetica
http://es.wikipedia.org/wiki/Sistema_de_numeración

  • Conversor On-line:
http://www.efunda.com/units/base_n.cfm?base_from=10

Sunday, 22 February 2009

Instalando un Captcha en PHP con Securymage PHP CAPTCHA

Securymage PHP Captcha, es un componente Open Source, que permite implementar Captchas. Un captcha es el acrónimo de Completely Automated Public Touring test to tell Computers and Humans Apart (Prueba de Turing pública y automática para diferenciar a máquinas y humanos). Se utiliza para evitar el Spam en los formularios de contacto, ya que sin esta validación, se puede forzar el envio desde el formulario de contacto de nuestra página web. Con este CAPTCHA diferenciamos si quien nos envia el Spam es una persona o una máquina.
Un ejemplo de captcha es el siguiente:



Para instalar el siguiente captcha, nos dirigimos a la página web Securimage, y allí podemos descargar la última revisión del código fuente del captcha.
Una vez descargamos el paquete para el servidor, veremos todo el código fuente y algún ejemplo de funcionamiento del captcha. Para probarlo, solo hay que crear un pequeño formulario, e incrustar el código siguiente para hacer la prueba de la creación del objeto captcha:

require_once 'securimage.php';
$image = new Securimage();
$image->show();
// Code Validation
$image = new Securimage();
if ($image->check($_POST['code']) == true) {
echo "Correcte!";
} else {
echo "Codi no vàlid";
}

Mejorando un poco el código, podemos conseguir un ejemplo como este:


  • Más información en:

http://es.wikipedia.org/wiki/Captcha
http://www.phpcaptcha.org/

Octave una alternativa a Matlab

GNU Octave, es un lenguaje de alto nivel, para resolver cálculos numéricos. Proporciona una interfaz de comandos para resolver problemas numéricos lineales y no lineales, y permite realizar muchos tipos de experimentos y es altamente compatible con Matlab. También se puede utilizar como lenguaje tipo batch.



Mediante su interfaz de comandos, podemos realizar todas la operaciones que queramos:



  • Más información en:

http://es.wikipedia.org/wiki/GNU_Octave
http://www.gnu.org/software/octave/index.html

Wednesday, 18 February 2009

Instalar un formateador de código java para Eclipse

Una de las herramientas más interesantes para formatear código desde el IDE de Eclipse es el de JALOPY. Es una herramienta Open source, muy fácil de instalar i que se integra directamente en el menú contextual del Eclipse.
Desde el siguiente enlace podemos encontrar el plugin para Eclipse :
http://jalopy.sourceforge.net/jalopy-eclipse/downloads.html
Una vez descargado, lo descomprimimos y la carpeta que nos genera :

de.hunsicker.jalopy.plugin.eclipse_0.2-1.5rc3

la copiamos dentro de la carpeta plugins del Eclipse. Una vez allí iniciamos el Eclipse y con el botón derecho sobre el código marcamos "Format with Jalopy"



  • Más información en:
http://jalopy.sourceforge.net/

Perfil de una aplicación Java usando TPTP para Eclipse

Para poder visualizar las métricas de tiempo de ejecución de nuestra aplicación, podemos usar el plugin TPTP (Java Application Profiling). Lo podemos descargar directamente de la página web de Eclipse : http://www.eclipse.org/tptp/home/downloads/, podemos descargar el plugin Runtime del siguiente enlace: http://www.eclipse.org/downloads/download.php?file=/tptp/4.5.1/TPTP-4.5.1/tptp.runtime-TPTP-4.5.1.zip

Una vez bajamos el paquete, descomprimimos el zip, i obtenemos una carpeta features i otra plugins. El contenido de estas dos carpetas hay que copiarlo dentro de el Eclipse que tenemos instalado, en mi caso C:\Archivos de programa\dev\Eclipse\


Una vez tenemos copiado el contenido, reiniciamos el Eclipse, y ahora en el menú contextual sobre cualquier proyecto, nos aparecerá la opcion de "profile As":



Una vez lo arrancamos, en las opciones del Profile, marcamos la opcion que queremos visualizar del Profiling:



Una vez estamos ejecutando la aplicación con el Profiling, nos irá marcando las estadísticas de las clases y métodos que se van ejecutando:



  • Más información en:
http://www.eclipse.org/articles/Article-TPTP-Profiling-Tool/tptpProfilingArticle.html

Tuesday, 3 February 2009

ECO FONT, una fuente que permite ahorrar un 20% más de tinta

EcoFont, ha sacado su versión 2.0 de la fuente Spranq_Eco_sans_regular que permite ahorrar hasta un 20% de tinta en las impresiones. Podemos descargar las fuentes en el siguiente enlace :
http://www.ecofont.nl/descarga_es.html
Una vez la descargamos, la ponemos dentro de la carpeta "Fonts" de windows. La tipografia es perfectamente legible, pero las letras tienen unos pequeños agujeros blancos. Es ahi donde podemos ahorrar la tinta de nuestra impresora.


Más información en Ecofont.

Monday, 2 February 2009

Modificar Firefox y Internet Explorer para poder ejecutar scripts largos mediante Javascript

A veces, nos encontramos que ciertos scripts hechos en javascript duran un poco más de lo normal. Eso es debido a que se ejecutan bucles dentro de estos, y eso hace que el explorador se queje a la que tarda más de 10 segundos o si se sobrepasan las 5 millones de declaraciones en javascript. Para solucionar esto es bastante fácil.





  • Internet Explorer:
Para que no se queje Internet explorer, tenemos que ir al registro de windows:

Mi PC\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Styles

Nos dirigimos a la clave Styles, y si no existe, la tenemos que crear. Luego dentro de la clave, creamos un nuevo valor DWORD llamado "MaxScriptStatements", y le ponemos un valor en decimal de más de 5 Millones. De esta manera no nos saldrá el mensajito y podremos dejar nuestro script roncando el tiempo necesario.

  • Firefox:
Desde firefox, es más sencillo, nos ponemos en la barra de direcciones y ponemos about:config







Luego creamos la clave dom.max_chrome_script_run_time , donde el valor es un entero y indica el número de segundos de ejecución. Por lo tanto subimos a los segundos que necesitemos y listo.

Más información en:
http://kb.mozillazine.org/Dom.max_chrome_script_run_time
http://support.microsoft.com/kb/175500