Social

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:



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.

sábado, 27 de abril de 2013

Java: Leer/Escribir Json con Gson

Gson es un parser que nos permite leer cadenas obtenidas de archivos Json hecho para Java que fue realizado por Google. A diferencia de otros parsers detecta la estructura del .json y nos permite asignarle estos valores aun Objeto definido por nosotros si las estructuras coinciden, en otras palabras nos permiten parsear objetos json a objetos java.

Se puede descargar la librería Gson de code.google.com o directamente de este link <-click.

En este caso se usará la clase Hijo para definir la estructura que tendrá el json. Hijo es un pojo sencillo como se ve a continuación:

El siguiente código muestra como leer una cadena json haciendo uso de la librería gson y sus métodos, para instanciar un objeto Hijo con sus datos según el json:


Este código da como resultado lo siguiente:

  45
  Pepe

Por otro lado si se desea escribir una cadena json en base a un objeto, en este caso Hijo, simplemente se debe utilizar el siguiente código:


El código anterior da como resultado la siguiente salida en consola:

{
   "nombre":"Juan",
   "apellido":"Carabela",
   "edad":46,
   "hijo":{
      "nombre":"Rambo",
      "apellido":"Carabela",
      "edad":21
   }
}

jueves, 25 de abril de 2013

JavaFX: Tabla Editable


Dentro de las capacidades de las tablas de JavaFX esta la posibilidad de crear celdas personalizadas con otros elementos visuales. En este caso usamos un TextField para permitir crear el efecto de una tabla editable. 


Para entender el código es recomendable haber leido el post que se indica al principio. Ya que se usa una lista de objetos base para llegar la tabla, se necesita definir en este objeto. En este caso es el mismo de la entrada anterior.


Para lograr editar la tabla, se necesita crear un nuevo tipo de celda. En este caso se crea la clase EditingCell que hereda de la celda. Luego se sobrescriben los métodos. El método start inicia la edición y si la celda es nula inicializa el TextField con el método createTextField() con un listener para detectar las teclas Enter y Esc. Luego el método cancel simplemente llama al de la clase superior y maneja el TextField. El método uptate también llama al de la clase superior y actualiza la visualización de la celda mostrando el TextField o no cuando se esta editando. El ultimo método simplemente devuelve el contenido de la celda.

Finalmente le asignamos a la columna deseada una función de retorno o callback. En este caso se le asigna solamente a la columna Teléfono.

lunes, 22 de abril de 2013

HTML: La ñ y vocales con tilde

Debido a la gran cantidad de exploradores web, que usan diferentes métodos de codificación muchas veces la letra ñ y las vocales con acentos suelen tener problemas para desplegarse. Sí usan codificaciones com la UTF-8 se pueden evitar estos problemas. Para utilizarla basta con definir dentro de la metadata lo siguiente para el HTML:


Pero esto no aplica en otra codificaciones, por tal motivo existe la opción de reemplazar estos caracteres por códigos. Estos códigos son los siguientes:

  • &ntilde;    =    ñ
  • &Ntilde;   =   Ñ
Y en el caso de las vocales con acento:
  • &aacute   =   á
  • &eacute   =   é
  • &iacute    =   í
  • &oacute   =  ó
  • &uactue   =  ú
  • &Aacute  =  Á
  • &Eacute  =   É
  • &Iacute   =   Í
  • &Oacute  =  Ó
  • &Uactue  =  Ú
Intercambiando estos códigos por los caracteres se puede escribir el siguiente mensaje:

       La compa&ntilde;&iacute;a &copy;

y obtendriamos:
    
       La compañía ©

Como se puede observar se uso &copy; para representar el simbolo de copyrights. Existen mas códigos que los mencionados aquí. Estos los pueden observar en la este enlace.

HTML: Códigos HTML - Caracteres y símbolos

En la siguiente tabla se observan los códigos ASCII estándar, nombres de entidades HTML, ISO 10646, ISO 8879, ISO 8859-1. Estos son soportados por todos los navegadores de Internet:

HTMLHTML
DecHexSímboloNumeroNombreDescripción

32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F

!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
&#32;
&#33;
&#34;
&#35;
&#36;
&#37;
&#38;
&#39;
&#40;
&#41;
&#42;
&#43;
&#44;
&#45;
&#46;
&#47;

&quot;



&amp;








espacio
signo de cierre de exclamación / admiración
comillas dobles
signo de número
signo de dólar
signo de porcentaje
signo "&" / ampersand
comilla / apóstrofe
paréntesis izquierdo
paréntesis derecho
asterisco
signo de más / adición
coma
signo de menos / sustracción / guíon / raya
punto
barra oblicua - barra de división
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
&#48;
&#49;
&#50;
&#51;
&#52;
&#53;
&#54;
&#55;
&#56;
&#57;
&#58;
&#59;
&#60;
&#61;
&#62;
&#63;











&lt;

&gt;
cero
uno
dos
tres
cuatro
cinco
seis
siete
ocho
nueve
dos puntos
punto y coma
signo de menor que
signo de igual
signo de mayor que
signo de interrogación - cierre
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
&#64;
&#65;
&#66;
&#67;
&#68;
&#69;
&#70;
&#71;
&#72;
&#73;
&#74;
&#75;
&#76;
&#77;
&#78;
&#79;















símbolo arroba














80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
50
51
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
&#80;
&#81;
&#82;
&#83;
&#84;
&#85;
&#86;
&#87;
&#88;
&#89;
&#90;
&#91;
&#92;
&#93;
&#94;
&#95;


























corchete izquierdo
barra inversa
corchete derecho
signo de intercalación - acento circunflejo
signo de subrayado
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
&#96;
&#97;
&#98;
&#99;
&#100;
&#101;
&#102;
&#103;
&#104;
&#105;
&#106;
&#107;
&#108;
&#109;
&#110;
&#111;















acento grave














112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
70
71
72
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
&#112;
&#113;
&#114;
&#115;
&#116;
&#117;
&#118;
&#119;
&#120;
&#121;
&#122;
&#123;
&#124;
&#125;
&#126;


























llave de apertura - izquierda
barra vertical
llave de cierre - derecho
signo de equivalencia / tilde
(no definido en estándar HTML 4)
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
80
81
82
83
84
85
86
87
88
89
8A
8B
8C
8D
8E
8F













































(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
90
91
92
93
94
95
96
97
98
99
9A
9B
9C
9D
9E
9F













































(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
(no definido en estándar HTML 4)
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
AA
AB
AC
AD
AE
AF

¡
¢
£
¤
¥
¦
§
¨
©
ª
«
¬

®
¯
&#160;
&#161;
&#162;
&#163;
&#164;
&#165;
&#166;
&#167;
&#168;
&#169;
&#170;
&#171;
&#172;
&#173;
&#174;
&#175;
&nbsp;
&iexcl;
&cent;
&pound;
&curren;
&yen;
&brvbar;
&sect;
&uml;
&copy;
&ordf;
&laquo;
&not;
&shy;
&reg;
&macr;
espacio sin separación
signo de apertura de exclamación / admiración
signo de centavo
signo de Libra Esterlina
signo de divisa general
signo de yen
barra vertical partida
signo de sección
diéresis - umlaut
signo de derechos de autor - copyright
género feminino - indicador ordinal feminino
comillas anguladas de apertura
signo de no - símbolo lógico
guión débil
signo de marca registrada
macrón - raya alta
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
B0
B1
B2
B3
B4
B5
B6
B7
B8
B9
BA
BB
BC
BD
BE
BF
°
±
²
³
´
µ

·
¸
¹
º
»
¼
½
¾
¿
&#176;
&#177;
&#178;
&#179;
&#180;
&#181;
&#182;
&#183;
&#184;
&#185;
&#186;
&#187;
&#188;
&#189;
&#190;
&#191;
&deg;
&plusmn;
&sup2;
&sup3;
&acute;
&micro;
&para;
&middot;
&cedil;
&sup1;
&ordm;
&raquo;
&frac14;
&frac12;
&frac34;
&iquest;
signo de grado
signo de más o menos
superíndice dos - cuadrado
superíndice tres - cúbico
acento agudo - agudo espaciado
signo de micro
signo de fin de párrafo
punto medio - coma Georgiana
cedilla
superíndice uno
género masculino - indicador ordinal masculino
comillas anguladas de cierre
fracción un cuarto
fracción medio - mitad
fracción tres cuartos
signo de interrogación - apertura
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
À
Á
Â
Ã
Ä
Å
Æ
Ç
È
É
Ê
Ë
Ì
Í
Î
Ï
&#192;
&#193;
&#194;
&#195;
&#196;
&#197;
&#198;
&#199;
&#200;
&#201;
&#202;
&#203;
&#204;
&#205;
&#206;
&#207;
&Agrave;
&Aacute;
&Acirc;
&Atilde;
&Auml;
&Aring;
&AElig;
&Ccedil;
&Egrave;
&Eacute;
&Ecirc;
&Euml;
&Igrave;
&Iacute;
&Icirc;
&Iuml;
A mayúscula con acento grave
A mayúscula con acento agudo
A mayúscula con acento circunflejo
A mayúscula con tilde
A mayúscula con diéresis
A mayúscula con anillo
diptongo AE mayúscula (ligadura)
C cedilla mayúscula
E mayúscula con acento grave
E mayúscula con acento agudo
E mayúscula con acento circunflejo
E mayúscula con diéresis
I mayúscula con acento grave
I mayúscula con acento agudo
I mayúscula con acento circunflejo
I mayúscula con diéresis
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
E0
E1
E2
E3
E4
E5
E6
E7
E8
E9
EA
EB
EC
ED
EE
EF
à
á
â
ã
ä
å
æ
ç
è
é
ê
ë
ì
í
î
ï
&#224;
&#225;
&#226;
&#227;
&#228;
&#229;
&#230;
&#231;
&#232;
&#233;
&#234;
&#235;
&#236;
&#237;
&#238;
&#239;
&agrave;
&aacute;
&acirc;
&atilde;
&auml;
&aring;
&aelig;
&ccedil;
&egrave;
&eacute;
&ecirc;
&euml;
&igrave;
&iacute;
&icirc;
&iuml;
a minúscula con acento grave
a minúscula con acento agudo
a minúscula con acento circunflejo
a minúscula con tilde
a minúscula con diéresis
a minúscula con anillo
diptongo ae minúscula (ligadura)
c cedilla minúscula
e minúscula con acento grave
e minúscula con acento agudo
e minúscula con acento circunflejo
e minúscula con diéresis
i minúscula con acento grave
i minúscula con acento agudo
i minúscula con acento circunflejo
i minúscula con diéresis
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF
Ð
Ñ
Ò
Ó
Ô
Õ
Ö
×
Ø
Ù
Ú
Û
Ü
Ý
Þ
ß
&#208;
&#209;
&#210;
&#211;
&#212;
&#213;
&#214;
&#215;
&#216;
&#217;
&#218;
&#219;
&#220;
&#221;
&#222;
&#223;
&ETH;
&Ntilde;
&Ograve;
&Oacute;
&Ocirc;
&Otilde;
&Ouml;
&times;
&Oslash;
&Ugrave;
&Uacute;
&Ucirc;
&Uuml;
&Yacute;
&THORN;
&szlig;
ETH islandesa mayúscula
N mayúscula con tilde - eñe mayúscula
O mayúscula con acento grave
O mayúscula con acento agudo
O mayúscula con acento circunflejo
O mayúscula con tilde
O mayúscula con diéresis
signo de multiplicación
O mayúscula with slash
U mayúscula con acento grave
U mayúscula con acento agudo
U mayúscula con acento circunflejo
U mayúscula con diéresis
Y mayúscula con acento agudo
THORN islandesa mayúscula
s minúscula (alemán) - Beta minúscula
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
F0
F1
F2
F3
F4
F5
F6
F7
F8
F9
FA
FB
FC
FD
FE
FF
ð
ñ
ò
ó
ô
õ
ö
÷
ø
ù
ú
û
ü
ý
þ
ÿ
&#240;
&#241;
&#242;
&#243;
&#244;
&#245;
&#246;
&#247;
&#248;
&#249;
&#250;
&#251;
&#252;
&#253;
&#254;
&#255;
&eth;
&ntilde;
&ograve;
&oacute;
&ocirc;
&otilde;
&ouml;
&divide;
&oslash;
&ugrave;
&uacute;
&ucirc;
&uuml;
&yacute;
&thorn;
&yuml;
eth islandesa minúscula
eñe minúscula - n minúscula con tilde
o minúscula con acento grave
o minúscula con acento agudo
o minúscula con acento circunflejo
o minúscula con tilde
o minúscula con diéresis
signo de división
o barrada minúscula
u minúscula con acento grave
u minúscula con acento agudo
u minúscula con acento circunflejo
u minúscula con diéresis
y minúscula con acento agudo
thorn islandesa minúscula
y minúscula con diéresis

viernes, 19 de abril de 2013

Java: Convertir fecha y hora entre zonas horarias o timezones

Para cambiar fechas y horas en Java se usa la clase TimeZone. Existen varias formas de realizar esta conversión pero en este caso usaremos un DateFomat para obtener la fecha transformada en forma de un String. El siguiente código realiza el cambio de zona horaria:

La salida sería la siguiente:


Java: Manejo de Cadenas. Método String.split().

En Java el método split(String regEx) nos permite dividir una cadena en base a las ocurrencias de una expresión regular definida dentro. Ya que es una expresión regular puede ser simplemente una letra, coma, signo o una construcción mas elaborada.

Hay que tomar en cuenta que existen símbolos especiales en las expresiones regulares como el punto, el signo más, los corchetes, etc. No se pueden agregar literalmente ya que dan problema. En caso de querer usarlos como cadenas se debe indicar usando \\. Por ejemplo \\. \\+ \\[ etc.

A continuación código para ejemplificar el método:


La salida del código seria la siguiente:

jueves, 18 de abril de 2013

Java: Convertir Date a String

Para convertir un objeto del tipo Date a String debemos tomar en cuenta que java usa siempre un formato por default. Por suerte existe la clase DateFormat que tiene varias implementaciones pero en este caso la veremos con SimpleDateFormat. Estas clases nos permiten convertir un objeto Date a String usando un formato o sintaxis que se adecue a nuestra necesidades.

El siguiente ejemplo muestra el cambio de la fecha actual a varios formatos:


El código anterior nos permite obtener la fecha y la hora, pero se pueden obtener los minutos, los segundos, el año y cualquier otro tipo de información que este dentro de la fecha. 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.


lunes, 8 de abril de 2013

Instalar Linux Centos 6.4

CentOS es una distribución de Linux basada en Red Hat, y muy utilizada en entornos de Computación, donde las herramientas de clustering tienen un peso superior al resto de herramientas, y es que CentOS incorpora de forma nativa muchas aplicaciones dedicadas al agrupamiento de servidores.

Si bien es cierto estas aplicaciones pueden ser instaladas en cualquier otra distribución Linux, la facilidad que introduce CentOS ha hecho que esta distribución sea muy vista en Centro de Computación y todos aquellos lugares donde se desee mantener agrupaciones de servidores.



El siguiente video muestra como instalar CentOS paso a paso en su version 6.4:




jueves, 4 de abril de 2013

Java: Operadores especiales

Muchas veces nos encontramos en Java con un operador mas-igual (+=), por-igual (*=), etc. Sin saber que realizan. Aunque el título del post menciona operadores especiales, estos lo que tienen es que no son muy usados. La idea de usar estos operadores es reducir el numero de visitas de memoria que se hacen, aunque no se percibe en una corrida, si se usa en un bucle con miles de ciclos puede hacer una diferencia. El siguiente código muestra algunos ejemplos.



Como se puede observar, estos operadores no se limitan simplemente a operaciones entre variables tipo int. También puede usarse en cualquier tipo de variable u objeto que utilice los operadores básicos (+,-,*,/) como se ve en el String para concatenar. El código anterior, daría como resultado lo siguiente:

miércoles, 20 de marzo de 2013

JavaFX: DialogBox/MessageBox

Actualmente dentro de las utilidades de JavaFX no existe la opción para desplegar Dialog Box o Message Box. Estas utilidades se pueden crear desde cero pero puede que lleven un poco de tiempo. A continuación se mostrará un alternativa que usa la siguiente librería. <-click.


Si no saben como agregar la librería en eclipse pueden visitar este post. Al importar y usar esta librería se podrán desplegar mensajes como el de la imagen anterior usando las siguientes lineas de código:

Como se puede observar el método MessageBox.show(), requiere cuatro parámetros que son: Un Stage padre, mensaje a desplegar, titulo de la ventana y los botones e iconos que se deseen desplegar. El primer caso despliega la imagen anterior y el segundo un mensaje de error con un botón de aceptar. 

Como retorno el método de MessageBox.show() devuelve un Integer o int con el valor de la acción seleccionada el cual se puede usar para continuar con el flujo del programa.

martes, 19 de marzo de 2013

JavaFX: Agregar Botón a Tabla

Tema relacionado: Agregar y eliminar filas en TableView

En una entrada anterior (esta) se mostró como crear una tabla con JavaFX. En este caso se hará un ejemplo agregando un botón en las celdas de la tabla. La tabla quedará como lo muestra la siguiente imagen:


En las tablas de JavaFX existe la opción de agregar celdas personalizadas, como se puede ver en la imagen existe un botón dentro de la celda. Otro punto importante es el manejo del contenido de la tabla por medio de una lista observable que realiza los cambios en la tabla cuando la lista cambia. El código de la tabla anterior es el siguiente:



Para que la tabla funcione con el patrón observador es necesario que cree un POJO (Plain Old Java Object) que represente a la tabla y se haga una lista observable con estos. También se le debe indicar a las columnas de la tabla que elemento del POJO representan. Dentro del POJO se le dan atributos del tipo propiedad y en el caso del botón se le agrega el método que desee que ejecute. El código del POJO es el siguiente:



lunes, 18 de marzo de 2013

JavaFX: Agregar Tabla

Para crear una tabla o TableView en JavaFX, desde la versión 2.0 y posteriores, se cuenta con una interfaz amigable al igual que para muchos de sus elementos. De por sí las tablas ya traen consigo un diseño bastante aceptable como el que se muestra a continuación:



Para realizar una tabla en JavaFX hay que tomar en consideración algunos elementos nuevos que trae. Por ejemplo existe la opción de agregar celdas personalizadas. Otro punto importante es el manejo del contenido de la tabla por medio de una lista observable que realiza los cambios en la tabla cuando la lista cambia. El código de la tabla anterior es el siguiente:



Para que la tabla funcione con el patrón observador es necesario que cree un POJO (Plain Old Java Object) que represente a la tabla y se haga una lista observable con estos como se ve en la linea 28. También se le debe indicar a las columnas de la tabla que elemento del POJO representan. Esto se hace con el método setCellValueFactory() de la clase TableColumn, a la cual se le indica que la propiedad a tomar apuntando que objeto y atributo del objeto elegir. El código del POJO es el siguiente:

miércoles, 13 de marzo de 2013

Eclipse: Crear un JAR

Cuando se ejecuta un programa desde eclipse, lo que se hace generalmente es compilar el código fuente y ejecutar los .class sin la necesidad de crear un JAR que se pueda ejecutar. Para generar o crear un JAR en eclipse basta con seguir los siguientes pasos:

Damos click derecho en el proyecto y elegimos la opcion Export...


Esto mostrará una ventana en la cual podemos elegir 3 opciones:

  • JAR file: Esta opción permite crear un JAR en forma de librería, lo cual permite que se pueda importar cualquier clase dentro del mismo y hacer uso de sus métodos y utilidades.
  • Javadoc: Esta opción es un auxiliar de la anterior, ya que permitirá crear un JAR que brindará la documentación necesaria de las clases y métodos del JAR anterior.
  • Runnable JAR file: Esta opción nos permite crear un JAR que se puede ejecutar con el comando "java -jar <archivo.jar>". Si deseamos poder ejecutar el programa esta es la opción a utilizar.



De haber elegido la opción "Runnable JAR file" se presentara la siguiente ventana en la cual simplemente determinamos la ubicación del JAR generado, la configuración de inicio (en caso de tener más de un método Main, se puede elegir con cual iniciar y con que argumentos) y el manejo de librerías (ya sea extrayendolas o empaquetandolas dentro del JAR).


Al final se tendrá el JAR listo para ser utilizado como ejecutable, librería o documentación.

jueves, 7 de marzo de 2013

Java: Convertir un Array de Bytes a un Archivo

Para convertir un arreglo de bytes en un archivo se puede utilizar la clase FileOutputStream de Java. Esta clase contiene el método "write(byte[] array)" el cual permite convertir el array de bytes al archivo usando el array de bytes que se le da como parámetro. El código muestra como lo hace.


Lo primero que se hace en el código anterior es leer los bytes de un archivo y luego se usan estos mismos bytes para crear un archivo idéntico con diferente nombre. Para que el ejemplo funcione debe existir el primer archivo.

martes, 5 de marzo de 2013

Java: Escribir un Json

Post relacionado: Java: Leer/Escribir Json con Gson

Como ya se había mencionado en un post anterior los archivos JSON son una opción para sustituir a los archivos DOM. JSON usa una sintaxis basada en listas separadas por comas y agrupadas por llaves para manejar a los hijos dentro de las listas.

En java para poder escribir estos archivos desde java existen librerías que nos facilitan el trabajo. En este caso usaremos json-simple la cual pueden descargar con este link -> librería o de la pagina de code.google.com. Para realizar la lectura simplemente basta agregar la librería (descrito este post) y usar el siguiente código para escribir la información dentro del archivo.


Se puede observar que el método que permite agregar nuevos elementos a la lista es "put()". Este método ingresa en nombre de una variable y su valor. El valor pueden ser los tipos básicos de variables (int, long, String, etc) una lista del tipo JSONArray o un objeto del tipo JSONObject los cuales se pueden ir anidando para agregar mas niveles. Al final el código anterior creara un archivo que contendrá el siguiente JSON:

lunes, 4 de marzo de 2013

Java: Leer un Json

Post relacionado: Java: Leer/Escribir Json con Gson

Los archivos JSON son una opción para sustituir a los archivos DOM. JSON usa una sintaxis basada en listas separadas por comas y agrupadas por llaves para manejar a los hijos dentro de las listas.

En java para poder leer estos archivos existen librerías que nos facilitan el trabajo. En este caso usaremos json-simple la cual pueden descargar con este link -> librería o de la pagina de code.google.com. Para realizar la lectura simplemente basta agregar la librería (descrito este post) y usar el siguiente código para obtener la información dentro del archivo.



Es importante notar que se pueden leer objetos tipo JSONObject dentro de otro del mismo tipo como un hijo, lo cual nos permite anidar información. Luego de haber ejecutado el código el resultado que obtendrán en consola sera el siguiente:


Con esta librería se debe conocer que parámetros existen dentro del archivo para mandarlos a llamar.
Para la prueba se utilizo el siguiente JSON:

sábado, 23 de febrero de 2013

Java: Codificar archivos y cadenas a Base64

En una entrada anterior (esta) se mostró una herramienta que hacia posible convertir archivos y/o cadenas a su respectivo código Base64. Para realizar esta operación ya existen librerías que permiten hacer la conversión simplemente importándola. 

Tal es el caso de la librería commons-codec de Apache, la cual se puede descargar en el siguiente link o directamente de la pagina de Apache. El siguiente código muestra como realizar la codificación ya sea con archivos o cadenas.


Podemos observar que se importa la clase "org.apache.commons.codec.binary.Base64", la cual esta disponible al agregar la librería descargada. Para aprender como agregar la librería en eclipse pueden ver la siguiente entrada. El resto del código es relativamente sencillo. Convertimos el archivo o cadena a un array de bytes y se lo agregamos como parámetro al método encodeToString() de la clase Base64. Luego simplemente desplegamos el código en Base64.

jueves, 7 de febrero de 2013

Java: Operador Ternario

El operador ternario, o el if de una linea, es otra forma de evaluar una condición y devolver un valor dependiendo si la condición es falsa o verdadera. Tiene tres parámetros: Condición, valor si verdadero y valor si falso. En la siguiente linea de código se puede observar un If normal que le asigna un valor a una variable.

La forma de trasformar este if sencillo en una sentencia con operador ternario es de la siguiente forma.

La condición puede ser tan compleja como se desee, lo único que se necesita es que regrese una variable tipo boolean.

sábado, 2 de febrero de 2013

JavaFX: Abrir y Guardar Archivos

Para abrir y guardar archivos en JavaFX, simplemente usamos la clase FileChooser que sustituye al viejo JFileChooser. Esta clase esencialmente tiene dos métodos importantes que son:

showOpenDialog(Stage stage) <- Para abrir archivos showSaveDialog(Stage stage) <- Para guardar archivos

Ambos tienen un atributo "stage" que es la ventana actual de la cual fueron llamados.


La lectura y escritura de archivos sigue siendo con las clases del paquete io de java. En el siguiente código esta una clase funcional que les permite abrir/guardar y leer/escribir archivos.



lunes, 28 de enero de 2013

Convertir a Base64

Base 64 es un sistema de numeración posicional que usa 64 como base. Es la mayor potencia de dos que puede ser representada usando únicamente los caracteres imprimibles de ASCII. Esto ha propiciado su uso para codificación de correos electrónicosPGP y otras aplicaciones. Todas las variantes famosas que se conocen con el nombre de Base64 usan el rango de caracteres A-Z, a-z y 0-9 en este orden para los primeros 62 dígitos, pero los símbolos escogidos para los últimos dos dígitos varían considerablemente de unas a otras.

Algunos ejemplos de las equivalencias que existen entre diferentes codificaciones se pueden ver ne la siguiente tabla:

En el siguiente cuadro de texto, pueden escribir una cadena o bien subir un archivo para obtener el código en Base64 correspondiente:




NOTA: Para ver el código detrás de esta aplicación pueden leer la siguiente entrada.


jueves, 24 de enero de 2013

Eclipse: Agregar Librería de Usuario

Agregar librerías de usuario es una de las diversas funcionalidades que nos ofrece Eclipse. Al configurar estas librerías es mas fácil administrar globalmente los Jars agrupándolos dentro librerías que luego pueden ser usadas en diversos proyectos.

El procedimiento es muy sencillo. Primero vamos a: 
    Windows -> Preferences

En la ventana que aparecerá nos dirigimos a:
    Java -> Build Path -> User Libraries


Oprimimos el botón "New" el cual nos desplegara una ventana para nombrar a la nueva librería y luego ya estamos listos para agregar Jars. Simplemente elegimos Add External JARS, donde podremos elegir los Jars que se deseen agrupar en esa librería. Al final se tendrá la librería armada, la cual puede ser editada luego, y lista para usarse. 

Para agregar la nueva librería de usuario a un proyecto basta con dar click derecho en el proyecto e ir a:
     Build Path -> Configure Build Path..

Acá un vídeo del proceso completo: 

viernes, 18 de enero de 2013

Agregar Página Web en JavaFX

En la versión 2+ de JavaFX existen elementos visuales que nos permite explorar una pagina web, estos elementos son el WebView y el WebEngine. La clase WebView nos permite visualizar un Html cargado mediante la clase WebEngine.

En el siguiente ejemplo usamos un WebView configurado para ser direccionado hacia la pagina de Google o la de Oracle.



En el script anterior simplemente usamos el metodo getEngine() del WebView para darle funcionalidad y luego podemos cargar la pagina de Oracle o Google dependiendo del botón precionado. Podemos usar google para explorar la web como normalmente lo hacemos.


Para descargar el programa funcional pueden usar este enlace: WebViewExample.jar

martes, 15 de enero de 2013

Dibujar dentro de un Google Map

El API Javascript de Google Maps permite mas que solo mostrar un mapa exprorable de cualquier parte del mundo. También ofrece un conjunto de utilidades que permiten dibujar figuras, realizar calculos, determinar lugares, etc.
 
En el siguiente ejemplo se demuestra el funcionamiento de los dibujos en los mapas. Lo principal es agregar la librería cuando se llama al script de google:
 
src="http://maps.google.com/maps/api/js?sensor=false&libraries=drawing"  type="text/javascript"


El código anterior define como las opciones del mapa, descritas en el siguiente post: Agregar GoogleMap. Lo importante viene luego al definir las acciones que deseamos que el DrawingManager de Google Maps realice. Definimos la posición del panel, las posibles opciones (rectangulo esta comentado, si se descomenta permitirá usar esa opción) y lo agregamos al mapa. También se definen las propiedades que tendran las figuras disponibles.
 
Al final tendremos lo siguiente:

lunes, 14 de enero de 2013

Agregar GoogleMaps (v3) en una página web

Google Maps ofrece una amplia matriz de APIs que permiten al usuario insertar las funciones más completas y la utilidad diaria de mapas en un sitio web y en aplicaciones, así como agregar sus propios datos sobre ellas. Entre los APIs que ofrecen estan:
  • JavaScript API
  • Flash API
  • Google Earth API
  • Static Maps API
  • Servicios Web
  • Maps Data API
Para el siguiente ejemplo se usará el API de JavaScript, el cual nos permite configurar un Mapa indicando los parametros iniciales y las funciones que incluira dentro del mapa. El siguiente script se encarga de ello.
 
 
 

 
Con el codigo que se observa hacemos la llamada al script de google que maneja los mapas, luego empezamos a definir la funcion el la cual tendremos la información necesaria para incializar el mapa. Primero definimos la posición incial del mapa, luego las funciones básicas del mapa y finalmente buscamos un elemento HTML en este caso un div para agregarlo. Luego se da un lector de eventos y tenemos lo siguiente:
 
 


Un Mapa de Google que usa la configuración para ser manipulado.