Social

martes, 28 de mayo de 2013

Instalar Java en Centos 6.4

Para instalar Java en cualquiera de sus versiones basta con seguir los siguientes pasos, (donde diga versión, lo cambiamos con la el paquete descargado):

1. Descargar Java
Java se puede descargar en la página de Oracle. Se puede utilizar el siguiente enlace http://www.oracle.com/technetwork/java/javase/downloads/index.html. Se debe descargar el paquete .rpm ya sea el de 64 ó 32 bits, JDK ó JRE.

2. Cambiar a usuario root:
sudo -i
sudo su

3. Instalar el JDK o JRE
//JDK
rpm -Uvh /ruta/al/directorio/jdk-<version>.rpm
//JRE
rpm -Uvh /ruta/al/directorio/jre-<version>.rpm

4. Instalar java, javaws, libjavaplugin.so (para Mozilla) y javac con el comando alternatives --install
// java
alternatives --install /usr/bin/java java /usr/java/latest/jre/bin/java 20000
// javaws
alternatives --install /usr/bin/javaws javaws /usr/java/latest/jre/bin/javaws 20000

// Java Browser (Mozilla) Plugin 32-bit
alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /usr/java/latest/jre/lib/i386/libnpjp2.so 20000

// Java Browser (Mozilla) Plugin 64-bit
alternatives --install /usr/lib64/mozilla/plugins/libjavaplugin.so libjavaplugin.so.x86_64 /usr/java/latest/jre/lib/amd64/libnpjp2.so 20000

// Se instala javac solo si descargamos el JDK
alternatives --install /usr/bin/javac javac /usr/java/latest/bin/javac 20000
alternatives --install /usr/bin/jar jar /usr/java/latest/bin/jar 20000

5. Verificar las versiones de java, javaws, libjavaplugin.so y javac
java -version
java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b04)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)

6. Cambiar entre las versiones disponibles.
Este paso se debe realizar para cada comando. Java, javaws, javac, etc.
alternatives --config java

There are 4 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*   1           /usr/java/jdk1.6.0_24/jre/bin/java
 +  2           /usr/java/jdk1.6.0_26/jre/bin/java
    3           /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
    4           /usr/java/jdk1.7.0_21/jre/bin/java

Enter to keep the current selection[+], or type selection number: 4

Al final solo queda crear o cambiar la variable de entorno. Esto se hace con el comando:
// export con JDK
export JAVA_HOME="/usr/java/jdk<version>"
// export con JRE
export JAVA_HOME="/usr/java/jre<version>"


viernes, 24 de mayo de 2013

Java: Eliminar elementos repetidos en ArrayList

Muchas veces nos es necesario quietar cualquier elemento que este duplicado dentro de un ArrayList<T> de Java. Para realizar tal acción existen colecciones del tipo HashSet<T> que nos permiten agregar todos los elementos del array y nos devuelve una colección de objetos sin duplicados.

Para realizar tal acción simplemente hay que agregar la colección del ArrayList<T> al HashSet<T> y luego regresar la información. Se puede observar en el siguiente código:


En el código anterior hay dos casos, el primero usa un HashSet<T> el cual elimina los duplicados de un array de String pero nos lo devuelve sin ningún orden en particular. En el segundo caso se usa un LinkedHashSet<T> el cual elimina los repetidos de un ArrayList de objetos Datos y mantiene el orden con el que venía. Si se desea que la respuesta este ordenada LinkedHashSet es la solución. 

Es importante que al trabajar con objetos con varios atributos como lo es Datos sobrescribamos sus métodos equals() y hashCode(). Pueden leer sobre esto en el siguiente post.

Al final la respuesta nos quedaría asi:

Cadena2
Cadena3
Cadena4
Cadena1
Info: 1-Nombre1-Empresa1
Info: 2-Nombre2-Empresa2
Info: 3-Nombre3-Empresa3
Info: 4-Nombre4-Empresa4
Info: 5-Nombre5-Empresa5
Info: 1-Nombre2-Empresa2

miércoles, 22 de mayo de 2013

Eclipse: Sobrescribir metodos equals() y hashCode()

Para determinar si un objeto es diferente o igual a otro a veces es necesario compararlos con el método equals(). Cuando comparamos objetos compuestos creados por nosotros muchas veces esta comparación no es muy certera. Por tal motivo es muy útil sobrescribir los métodos equals() y hashCode() de la clase. Por suerte eclipse ya trae una utilidad que nos permite generarlos automáticamente sin necesidad de estar armándolos paso a paso.

Para realizar esto damos click derecho al proyecto, luego nos dirigimos a Source y finalmente a Generate hashCode() and equals()....

Esto nos abrirá una ventana en la cual nos mostrará que atributos estarán involucrados en la generación de dichos métodos. Elegimos los que sean necesarios y al final nos da opciones de comparación y generación de código. Si desean las pueden explorar un poco. Al finalizar le damos OK.

Por ejemplo al tener una clase como la siguiente:

Nos dará el siguiente resultado:

Ya con esto se pueden comparar dos instancias del mismo objeto cuando sea necesario y usará los atributos seleccionados para detectar si son iguales.

sábado, 18 de mayo de 2013

Java: Embeber un Jnlp a HTML

Luego de haber creado un Jnlp, este se puede agregar a un HTML. Es una forma de agregar una aplicación de JavaFX a un HTML. Oracle provee una librería de Javascript que nos permite cargar la aplicación dentro de una página web. Esta librería se puede descargar en el siguiente enlace o en los recursos de Oracle.

Para que nuesto Jnlp pueda correr en un ambiente web es importante que este certificado. De no contar con una institución certificadora se puede realizar un certificado propio que tiene duración limitada. Para realizar este certificado abrimos una linea de comandos o consola y ejecutamos las siguientes instrucciones en el directorio del archivo:


keytool -genkey -keystore tracker2.ks -alias tracker2
keytool -selfcert -alias tracker2 -keystore tracker2.ks
jarsigner -keystore tracker2.ks C:\Jars\tracker2.jar tracker2
Luego de esto nuestro jnlp ya esta listo para ser cargado desde un ambiente web. Si siguieron el post que esta al inicio de la página, al ejecutar el comando javafxpackager se debió de haber creado un archivo .html. Este archivo tiene la siguiente estructura.


Se puede observar que lo primero que se hace es importar la librería de Javascript. Luego tenemos 2 funciones. La primera es lanzarlo como webstart y la segunda embeberlo en la página. La información necesaria es la ubicación del Jnlp, si esta en una maquina local puede ser el directorio pero en este caso se subio a un site de Google. Lo siguiente es el Base64 del archivo Jnlp. Si realizamos un cambio es necesario recalcular este Base64. Para calcular esto pueden usar la siguiente página. Luego solo ingresamos la version de JavaFX. En el caso de la función para embeberlo es necesario indicar en que <div> se colocara y datos de altura y anchura. Al final tendremos nuestra aplicación de JavaFX en Html como se ve en la siguiente página.

Java: Crear un JNLP

Muchas veces nos topamos con archivos .jnlp, los cuales son una especificación usada por Java Web Start, también conocido como el comando javaws. Básicamente un JNLP (Java Network Language Protocol) no es mas que un archivo de texto que puede editarse. En este archivo se puede definir la fuente de la información, en este caso el jar. Muchas aplicaciones de JavaFX son compatibles con esta tecnología

El siguiente ejemplo es de como se be un archivo .jnlp

Básicamente solo se define la información básica de la aplicación, definimos su fuente en la etiqueta <jnlp>, los recursos que necesita (como la ubicación del .jar) y su configuración inicial.

Si no deseamos crear el Jnlp desde cero java incluye desde su versión 7 o en el SDK de JavaFX para la versión 6 la utilidad "javafxpackager". Esta utilidad la podemos agregar las variables de entorno del sistema para poder utilizarala en todos lados. Para realizar esto simplemente abrimos una linea de comandos (cmd), vamos al directorio donde esta nuestro .jar y escribimos la siguiente instrucción

C:\Directorio javafxpackager -deploy -outdir C:\AlgunDirectorio -outfile Archivo
-width 600 -height 500 -srcdir -srcfiles archivo.jar -appclass ruta.al.Main
-name "Nombre" -vendor "Rawr" -v
Esta instrucción genera dos archivos. Un .jnlp que podemos usar de inmediato y un .html que tiene embebido el .jnlp en la página web. El archivo .jnlp se puede lanzar con doble click si esta bien configurado o se puede usar el comando javaws para lanzarlo. Al final nos mostrará este mensaje antes de abrir la aplicación.
 

El es siguiente enlace se puede observar como continuar agregarlo a un html.

martes, 7 de mayo de 2013

Javascript: Cifrar cadena a SHA

Existen varias formas para obtener el hash SHA en alguna de sus versiones usando varios lenguajes de programación. En el caso de Javascript existe una implementación, jsSHA, que nos permite obtener las versiones SHA-1, SHA-224, SHA-256, SHA-384 y SHA-512 de un cadena de texto. 

Pueden obtener el script de jsSHA en el siguiente enlace <-click, o pueden descargarlo directamente de su pagina en GitHub.

El siguiente código muestra como utilizar jsSHA dentro de un html.

Como se puede observar se debe incluir el script. Esta dirección varia según la estructura de los directorios o puede ser una dirección web. La función simplemente obtiene el texto de un input, obtiene el hash del texto y lo muestra en otro input.

El constructor de jsSHA necesita el texto a cifrar y su codificación que puede ser texto plano, base64 o hexadecimal. El método getHash necesita la version de SHA y la forma de salida que puede ser base64 y hexadecimal.

Al final se obtendrá algo como lo siguiente, un cifrado sha512 online, en este caso:



viernes, 3 de mayo de 2013

Java: Generar hash SHA y encriptar cadenas

Muchas veces es necesario cifrar, encriptar o generar hashes de passwords u otros textos delicados. Para realzar esto en Java se utiliza la clase MessageDigest la cual nos permite cargar una algoritmo y encriptarlo en forma de bytes.

La clase MessageDigest permite el uso de los algoritmos MD2, MD5, SHA-1, SHA-256, SHA-348, SHA-512. 

En el siguiente código se puede observar un ejemplo de MD5, SHA-1 y SHA-512:


Como se puede observar simplemente obtenemos la instancia del algoritmo que se desea, le agregamos la cadena en forma de bytes con el método update y lo trasformamos. Para poder visualizarlo en forma Hexadecimal se utiliza la clase Hex que se obtiene de la librería commons-codec de Apache, la cual se puede descargar en el siguiente link o directamente de la pagina de Apache.

Al final se obtiene lo siguiente:

793d5ecd344bd91c808917d8821ae74b4c84550964b67906bdeb6c7dc0146bef90b5a2b326ac31049b0e3930a0d697b760c13236596da2d142e6947a1e3386b5
8e8725edeaa090c62110e9c7b23a243873d61b36
1462a2da3e9d67e5824c71b2ac91bc66

jueves, 2 de mayo de 2013

Instalar Python en CentOS

Las últimas versiones de CentOS (6.4 para abajo) ya traen instalado Python 2.6 por defecto. Se pueden instalar otras versiones como la 2.7 y la 3.3 pero puede que cause problemas de versiones. Para instalar las nuevas versiones sin problema se pueden utilizar los comandos descritos a continuación como un usuario root.

Primero se instalan herramientas de desarrollo que den mayor funcionalidad a python, se ejecuta el siguiente comando:
#yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
Luego dependiendo de la versión que deseemos instalar la descargamos, descomprimimos y luego la instalamos. Es importante que usemos make && make altinstall y no make && make install ya que esto puede sobrescribir la versión actual de python. En este caso instalaremos la version 3.3.1

# wget http://www.python.org/ftp/python/3.3.1/Python-3.3.1.tar.bz2
# tar xf Python-3.3.1.tar.bz2
# cd Python-3.3.1
# ./configure --prefix=/usr/local
# make && make altinstall
Nuestro nuevo python esta disponible en /usr/local/bin/python3.3 Para que los paquetes de las diferentes versiones de python no se mezclen es recomendable que se instale Distribute. Por cada versión de python se debe instalar un distribute. Para instalarlo basta con realizar los siguiente:

# wget https://pypi.python.org/packages/source/d/distribute/distribute-0.6.36.tar.gz
# tar xf distribute-0.6.36.tar.gz
# cd distribute-0.6.36
# python3.3 setup.py install
Con esto se obtendrá el script /usr/local/bin/easy-install-3.3 que permitirá instalar los paquetes de la versión correspondientes un directorios aparte, en este caso /usr/local/bin/python3.3/site-packages/. Si se desea instalar otra versión, digamos la 2.7, se puede usar el mismo procedimiento. Simplemente se cambia el numero de versión en todas las instrucciones de 3.3 a 2.7.