Social

sábado, 24 de enero de 2015

Java: Convertir una lista en arreglo o array

En algunos casos puede ser mas conveniente tener nuestros objetos dentro de un arreglo (Object[]) que dentro de una lista (List<Object>) . En tal caso puede se puede realizar la conversión de lista a arreglo muy fácilmente.

En el siguiente ejemplo se puede observar como se define una lista de Integer (List<Integer>) y luego se convierte en una arreglo de Integer (Integer[]).
Luego de ejecutar el código el resultado sería la misma lista que se definió al inicio del código.

Java: Sumar y restar horas en un Date

Muchas veces es necesario realizar operaciones sobre una fecha. No solamente sumar o restar horas sino también minutos, segundos, semanas, años, meses, etc. Para tal tarea existe en Java la clase Calendar. Esta clase nos permite modificar una fecha (Date) base a nuestro gusto usando los métodos que tiene predefinidos.

En el siguiente código se puede observar los cambios en un objeto del tipo Date usando Calendar.


Al ejecutar el codigo se obtendra el siguiente resultado:

viernes, 7 de noviembre de 2014

Java: Convertir un arreglo o array a una lista.

En algunos casos puede ser mas conveniente tener nuestros objetos dentro de una lista (List<Object>) que dentro de un arreglo (Object[]). En tal caso puede se puede realizar la conversión de arreglo a lista muy fácilmente.

En el siguiente ejemplo se puede observar como se define un arreglo de Integer (Integer[]) y luego se convierte en una lista de Integer (List<Integer>). Luego esta un ejemplo de como definir una lista de String (List<String>) directamente utilizando el métodos Arrays.asList().

Luego de ejecutar el código el resultado sería el siguiente.

martes, 4 de noviembre de 2014

Java: Convertir String a Date

Para convertir un objeto del tipo String a Date debemos definir primero el formato en que usa el String a convertir. Para tal caso existe la clase DateFormat que tiene varias implementaciones pero en este caso la veremos con SimpleDateFormat. Estas clases nos permiten convertir un objeto String a Date usando un formato o sintaxis que se adecua a el String que enviamos.

El siguiente ejemplo muestra varios String los cuales deseamos pasar a fecha:


El código anterior nos permite parsear el String buscando por los elementos que se definio en el formato. El resultado del código anterior es el siguiente:

En la siguiente imagen se pueden observar algunos ejemplos de SimpleDateFormat con sus resultados en String.


martes, 29 de abril de 2014

Java: Agregar imagen a botón

En esta entrada se agregara una imagen a un botón en Java. Existen varias formas pero observaremos como hacerlas usando la clase URL para ubicar el archivo que deseamos. Al final obtendremos algo como esto:

La imagen puede que se un archivo dentro de nuestro proyecto o con una imagen en la web. Luego simplemente se agrega la imagen al botón por medio de su constructor. El siguente script muestra la forma de hacerlo:


Si ponen la imagen dentro de su proyecto es recomendable usar un paquete para guardarlas.

A continuación el código completo de la solución:


jueves, 24 de abril de 2014

Java: Archivos Temporales

Un ejemplo de como escribir información en un archivo temporal en Java. No existe diferencia entre lo que se puede escribir en un archivo normal y uno temporal. Generalmente los temporales nos sirven cuando queremos crear archivos en un applet.

En este ejemplo se crea el archivo "archivo.tmp" y se le escribe información de dos formas diferentes.



jueves, 16 de enero de 2014

Java: Convertir double a long.

Muchas veces no es necesario convertir en java una variable del tipo double a long. Para realizar esto existen varias formas, pero se mostraran las mas sencillas. Para hacerlo se puede simplemente castear o utilizar el método round como se ve en el siguiente script:

Si se castea simplemente se truncaran los decimales. Si se utiliza el método round utilizará técnicas de redondeo. El código anterior devolvería lo siguiente:
1234
1235

lunes, 13 de enero de 2014

Java: Popup con swing.

Entre las utilidades de la librería swing de java existe la de JPopup. Esta clase nos permite crear un panel emergente o pop up al cual se le pueden agregar JMenuItem y realizar acciones dependiendo de la selección. Aquí un ejemplo de como se ve:
Para realizar el ejemplo anterior se puede utilizar el siguiente código:

Java: Menu con swing.

En java se pueden utilizar los elementos gráficos de swing para crear menús, con la clase JMenu, con una gran cantidad de elementos diferentes. En el siguiente ejemplo se mostrara como hacer menús y agregarles elementos con funcionalidad básica. Dentro de el menú se pueden observar checkbox, radiobuttons, etc.
Se debe agregar un ActionListener a cada elemento de los menús para darles funcionalidad. Aca se puede observar el código para realizar el menú del ejemplo:

miércoles, 11 de diciembre de 2013

Java: Ordenar un ArrayList

Para colocar los elementos de una lista en orden dentro de un ArrayList se puede utilizar la clase Collections. El siguiente código muestra el resultado de utilizar el método sort() de la clase Collections en un ArrayList:




En la primera parte se puede observar que con objetos del tipo String al utilizar el método sort con un List nos permite ordenar alfabéticamente los elementos sin mucho problema.

Luego se observa la forma de ordenar por medio de atributos de un objeto. Primero se muestra ordenando el objeto Hijo por medio de fechas (que pueden ser de nacimiento, registro, etc.) y luego se ordena la lista por medio de la edad.

Aquí se puede observar la clase Hijo:



De esta forma se facilita mucho ordenar objetos por medio de uno de sus atributos.

lunes, 10 de junio de 2013

JavaFX: Agregar y eliminar filas de una tabla (TableView) dinamicamente

Es recomendable ver antes: JavaFX: Agregar Tabla

Los elementos del tipo TableView en JavaFX usan una lista observable para permitir administrar su contenido. Además JavaFX permite la creación de celdas personalizadas, podemos agregar muchos elementos visuales. En este caso usamos un botón (Button) para permitir para eliminar un elemento de la tabla.


Para realizar lo anterior se puede utilizar el siguiente código:


Básicamente los elementos del código son  la inicialización de la ventana y tabla, agregar las columnas (incluyendo la que muestra el botón a la tabla), el área para agregar una nueva fila (línea 100) que básicamente solo agrega más objetos a una lista observable, la clase ButtonCell que nos permite agregar el botón dentro un celda (donde se agrega la funcionalidad) y el pojo persona para manejar la información.

sábado, 8 de junio de 2013

Python: Escribir un Json

Para leer un json en python este trae desde la versión 2.6 incluida la librería de json. Esta librería nos permite escribir una cadena json a un archivo o fichero. Con el siguiente código fácilmente se puede obtener la información de una cadena json, parsear el contenido y escribirlo en archivo.



Básicamente parseamos nuestra cadena con el método dumps, buscamos un fichero donde guardarlo y lo escribimos en este con el método dump.

Python: Leer un Json

Para leer un json en python este trae desde la version 2.6 incluida la librería de json. Esta librería nos permite leer una cadena json desde un archivo y explorarla a través de sus etiquetas. En el siguiente ejemplo se puede tener un archivo .json con el siguiente contenido:

Y con el siguiente código facilmente se puede obtener la información del archivo cargarlo a un objeto Json y explorarlo para leerlo luego.

Básicamente abrimos el archivo o fichero json y luego obtenemos con el método load la cadena para ubicarla dentro de la variable json para luego explorar su contenido. El resultado del código anterior es el siguiente:

'http://javainutil.blogspot.com'
'Escribir un JSON'
'tag 2'

domingo, 2 de junio de 2013

Compilar C / C++ en Windows

En Windows existen 2 muy buenas alternativas de compilar nuestros programas hechos en C/C++ y así obtener el ejecutable. La primera es utilizar en compilador que Visual Studio trae consigo. Visual Studio trae consigo muchas herramientas que nos permiten realizar nuestro proyecto desde cero.

En caso de que no deseemos utilizar las el compilador de Visual Studio, existe una muy buena alternativa que es MinGW. MinGW permite crear un pequeño entorno de desarrollo que nos permite utilizar las funcionalidades de las librerías de Microsoft C.

En el siguiente video se muestra el proceso de instalación y compilación de un ejemplo usando MinGW.


Siguiendo el tutorial, se podrá compilar nuestro código en C/C++ para generar un .exe que podemos ejecutar luego.

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: