Hace poco instalando Eclipse y el SDK de Android en Windows 7 (si lo se, un lapsus xD), siguiendo estas indicaciones, se me presento un pequeño inconveniente luego de instalar el SDK desde un ejecutable el cual recomiendan, resulta que luego de tener todo instalado y luego de crear un aplicacion simple, al ejecutarla tenia el siguiente error en la consola:
invalid command-line parameter: C:\Program Files\Android\android-sdk\tools/emulator-arm.exe
Y bueno, vaya sorpresa que me lleve, resulta que este error se da porque dentro de la configuracion en Eclipse en el SDK location, se tiene que especificar la ruta en donde tienes instalado el SDK, tal como se muesta en la imagen:

Pero por un posible bug, este no acepta espacios en blanco dentro de la ruta que se especifica. Entonces buscando algo de información vi que para esto existen alguna posibles soluciones:
- La primera, es bajarte el SDK en zip y colocarlo en una ruta que tu desees considerando lo antes mencionado
- O tambien puedes aplicar el siguiente comando para crearle una especie de link en un directorio especifico como por ejemplo en “C:\Android”, de la ruta del SDK instalado, de la siguiente manera:
MKLINK /J C:\Android "C:\Program Files\Android\android-sdk\"
Y bueno con esto ya colocaríamos la ruta del link creado en el “SDK Location”.
Una forma simple de poder hacer esta validación es implementando el método accept de la clase FilenameFilter, entonces imaginemos que queremos saber si tenemos uno o mas archivos “zip” en el directorio “/home/nachxs/Documentos/ClasesPrueba”, para esto solo haremos lo siguiente:
package evalextension;
import java.io.File;
import java.io.FilenameFilter;
/**
*
* @author nachxs
*/
public class Main {
public static void main(String[] args) {
String path = "/home/nachxs/Documentos/ClasesPrueba";
File fi = new File(path);
File[] listaObjetos = fi.listFiles();
for (int i = 0; i < listaObjetos.length; i++) {
if (new EvaluaExtension().accept(listaObjetos[i], ".zip")) {
System.out.println("Se encontro archivos zip: " + listaObjetos[i].getPath());
}
}
}
}
class EvaluaExtension implements FilenameFilter {
public boolean accept(File dir, String extension) {
return dir.getName().endsWith(extension);
}
}
Este es el directorio en donde realizmos la busqueda:

Básico para muchos, pero para otros espero les sirva.
Hace poco desarrollando una pequeña aplicación en Java, el cual consistía en el manejo de un Socket me vi en la necesidad de ver la forma de como asociar este Socket a un servicio ya que iba a manejar “n” servicios, y todo esto sobre un servidor Linux.
Como sabemos cada vez que se crea un proceso o servicio en Linux, este recae o se asocia a un PID el cual es guardado en un archivo en una ruta especifica, entonces veremos como asociar este Socket a un PID y dado el panorama al tener varios Sockets tendremos varios PID’s. Entonces para esto asumimos que ya tenemos nuestra aplicación compilada, en mi caso tendré la clase (compilada) del servicio en la ruta “/home/nachxs/bin/classes” y ademas manejaremos un JDK el cual lo tengo instalado en “/opt/jdk_1.6.0″, una vez definido esto solo creamos un script el cual contiene lo siguiente:
#! /bin/bash
. /etc/init.d/functions
RETVAL=$?
PATH_SERVICE=/home/nachxs/bin/classes
PATH=.:/opt/jdk1.6.0/bin:/usr/bin
export PATH_SERVICE
export PATH
start(){
echo -n $"Iniciando servicios"
exec java -Xrs -cp $PATH_SERVICE org.servicio.Servidor01 /dev/null 2>&1 &
echo $! > /var/run/Servicio01.pid
RETVAL=$?
[ $RETVAL -eq 0 ] && success || failure
echo
return $RETVAL
}
stop(){
echo -n "Deteniendo servicios"
kill -15 `cat /var/run/Servicio01.pid`
rm -rf /var/run/Servicio01.pid
RETVAL=$? [ $RETVAL -eq 0 ] && success || failure
echo
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|reload}"
exit 1
;;
esac
exit 0
exit $RETVAL
Entonces como se podran dar cuenta, tenemos “seteado” el PATH_SERVICE y el PATH con las ruta indicada anteriormente, ahora solo nos quedaria dar permiso de ejecucion al script y listo. Al ejecutar el script este creara el Socket al puerto que hayan definido en su clase y este asociado a un PID. Ahora si queremos tener varios servicios asociados a diferentes Sockets solo tendriamos que adaptar el script para cada servicio.
Esta es una forma simple de poder convertir fechas y hora de formato String a formato java.sql.Date y java.sql.Time respectivamente:
Convirtiendo Fecha de String a java.sql.Date:
String fecString = "2010-12-30"
java.sql.Date fecFormatoDate = null;
try {
SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd", new Locale("es", "ES"));
fecFormatoDate = new java.sql.Date(sdf.parse(fecString).getTime());
System.out.println("Fecha con el formato java.sql.Date: " + fecFormatoDate);
} catch (Exception ex) {
System.out.println("Error al obtener el formato de la fecha/hora: " + ex.getMessage());
}
Convirtiendo Fecha de String a java.sql.Time:
String horString = "10:28:31"
java.sql.Time fecFormatoTime = null;
try {
SimpleDateFormat sdf = new java.text.SimpleDateFormat("hh:mm:ss", new Locale("es", "ES"));
fecFormatoTime = new java.sql.Time(sdf.parse(horString).getTime());
System.out.println("Fecha con el formato java.sql.Time: " + fecFormatoTime);
} catch (Exception ex) {
System.out.println("Error al obtener el formato de la fecha/hora: " + ex.getMessage());
}
La verdad es increíble como muchos de los usuarios que trabajan en empresas no le toman la importancia debida a sus contraseñas y mas aun si son servicios como el correo electrónico.
Les comento que hace unos días atrás estuvimos con un Analista de Seguridad de la empresa donde laboro creando un pequeño laboratorio, el cual consistía en encontrar la mayor cantidad de usuarios que dejan sus contraseñas con palabras que son tan fáciles de encontrar que casi ni demando esfuerzo.
Para esto creamos una pequeña aplicación en Java, que consistía en leer una lista de usuarios colocando una contraseña al azar y comenzábamos a escanear la cantidad de usuarios que tenían esta contraseña y vaya sorpresa que nos dimos, no habíamos llegado ni a la mitad y ya teníamos 97 usuarios con esta contraseña.

La empresa tiene una política de capacitación y orientación para este tipo de temas, es mas, siempre se les indica que deben de cambiar la contraseña del correo de forma periódica, pero al parecer a los usuarios poco les importa lo critico que podría ser esto. Es tan cierto al decir que el eslabón mas débil en la seguridad son los usuarios.
Tal vez muchos se preguntaran, ¿y porque no utilizaron herramientas ya existentes?, bueno la verdad decidimos crear esta pequeña aplicación como punto de partida debido a que le seguiremos agregando mas cosas y tal vez mas adelante tener una herramienta definitiva para estos fines.
Hola de nuevo por aqui retomando el blog ya que lo he tenido un poco olvidado, pero no por no querer postear si no que el trabajo me esta consumiendo lamentablemente y casi no he tenido tiempo de poder escribir algo. Pero bueno trataremos en lo posible de seguir aportando en el poco tiempo que podamos tener. En esta oportunidad estuve trabajando con un servicio web sobre glassfish, el cual este servicio hacia uso de una libreria que esta a su vez utilizaba librerías del tipo *.so, esto obviamente sobre linux, el tema es que me dedique a buscar informacion para poder ver la forma de como agregar esta librerias al library_path para que se puedan utilizar desde glassfish, y era tan simple como parece.
Esto lo realice sobre un servidor RHEL 5.4 x64, y con la version 2.1.1 de glassfish. Entonces para esto solo tendremos que acceder a la configuración del servidor por intermedio del administrador web y ubicarnos en “Application Server” luego nos dirigimos a la pestaña “Configuración JVM” y luego en “Configuración de Ruta”, una vez alli nos ubicamos en el ultimo cuadro de texto que dice “Sufijo de ruta de biblioteca nativa” y alli agregamos la ruta de las librerias que utilizaremos

y prácticamente eso seria todo. Ojo que esto es una forma de hacerlo, no trato de decir que sea la única, tal vez alguien conoce de alguna otra manera de hacerlo y lo pueda compartir.
Creo que esta demás decir que los intereses de Microsoft es preparar el camino para que Windows Mobile cope parte del mercado en el cual Android es el lider indiscutiblemente, superando asi a sus competidores mas cercanos (iPhone y BlackBerry). No se hasta que punto Oracle, trate esto con Microsoft pero de lo que si estoy seguro es que Microsoft hara lo que sea para menguar el repunte que tiene Android y por lo general de estos señores se puede esperar culaquier cosa, uno nunca sabe.

Fuente: http://www.theregister.co.uk/2010/09/17/windows_phone_7_android_patents/
Hace poco me entero por intermedio de un compañero de un blog en donde la tematica es netamente todo lo relacionado a android, este sistema operativo para smartphones que la verdad esta dando mucho que hablar, siendo una fuerte competencia para el famoso iPhone; elandroidlibre es como se llama este interesante blog, he estado revisando y hay buen material, mas aun que estoy adentrandome a conocer android, es una buena opcion para inciar, y ademas de paso comentarles que se esta sorteando el famoso smartphone Nexus One, que la verdad no vendria nada mal si lo puedieramos tener en nuestras manos
, asi que no perdemos nada intentando.

Hace poco desarrollando un aplicacion en Java el cual consistia en consumir un servicio web para realizar una operación puntual, se me presenta un pequeño detalle; resulta que una de la operaciones de este servicio web tenia dos de los parametros de ingreso con el tipo date y time respectivamente, entonce cuando se realiza la “importación” de toda esta estructura mediante el archivo WSDL, estos tipos de datos pasan a ser del tipo XMLGregorianCalendar, esto debido al mapeo que se proporciona a traves del API JAXB el cual es utilizado para el desarrollo de servicios web, esto con la finalidad de vincular el XML con Java (mas detalle aqui).
Entonces teniendo la fecha y hora con el formato yyyy-MM-dd y hh:mm:ss respectivamente, vamos a realzar una manera simple de poder setear esta variales de la operacion de este servicio web. Para esto lo primero que tendriamos que hacer seria lo siguiente:
GregorianCalendar gcal = new GregorianCalendar();
XMLGregorianCalendar fec = DatatypeFactory.newInstance().newXMLGregorianCalendar(gcal);
XMLGregorianCalendar hor = DatatypeFactory.newInstance().newXMLGregorianCalendar(gcal);
Entonces de esta manera creamos dos variables (fec y hor) las cuales seran usadas para “setear” la variables de ingreso de la operacion del servicio web. Entonces ahora solo tendrias que llenar esas variables con los valores tanto de fecha a si como de hora, supongamos que tenemos la fecha 2010-04-26 y la hora 17:41:20 entonces solo hariamos lo siguiente
String fecha_actual = "2010-04-26"
String hora_actual = "17:45:20"
String[] fec_part = fecha_atual.split("-");
String[] hor_part = hora_actual.split(":");
hor.setHour(Integer.parseInt(hor_part[0]));
hor.setMinute(Integer.parseInt(hor_part[1]));
hor.setSecond(Integer.parseInt(hor_part[2]));
fec.setYear(Integer.parseInt(fec_part[0]));
fec.setMonth(Integer.parseInt(fec_part[1]));
fec.setDay(Integer.parseInt(fec_part[2]));
Y listo ya tenemos las variables con los valores necesarios para ser enviadas como parametros al servicio web. Por lo menos esta es una forma simple de poder trabajar con estos tipos de datos, tal vez existe alguna otra, solo me lo comentan. Espero les sirva.
Hace poco revisando información con respecto a los certificados que utiliza Glassfish para el tema de seguridad, me entero que los mecanismos de seguridad para la transmisión de mensajes requieren de los certificados con el estándar X.509 en su versión 3 y Glassfish trae por defecto dichos certificados pero en su versión 1, hago la aclaración que estoy trabajando con Glassfish V2. Entonces veremos una forma rápida y práctica de actualizar dichos certificados; para esto descargaremos este paquete que contiene dichos certificados y el script correspondiente para su actualización.
Entonces desempaquetamos el archivo y nos ubicamos dentro de ese directorio, en este caso tiene por nombre copyv3 y luego debemos tener en cuenta que si nosotros hemos cambiado la clave del keyStore anteriormente en algun momento configurando Glassfish, debemos modificar el archivo build.xml en la opción AS_KEYSTORE_PASSWORD y colocar dicha clave, si no en todo caso dejar todo por defecto (clave por defecto: changeit). Y luego hacemos lo siguiente tal como se muestra en la imagen:

Como pueden observar el primer comando que utilizo es export AS_HOME=/opt/glassfish esto por que el script busca esa variable de entorno seteada con la ruta de instalación de Glassfish, como pueden observar en mi caso yo lo tengo en /opt/glassfish. Luego el comando /opt/glassfish/lib/ant/bin/ant, esperamos unos segundos mientras se configura, luego lo que tenemos que hacer es iniciar el servicio y listo. Lo que ahora queda es verificar si se actualizo correctamente, para esto haremos lo siguiente:

Y listo eso seria todo. Espero les sea de utilidad, por el momento estoy trabajando esto como paso inicial para poder configurar webservices seguros.
Categorías:Centos, Comandos, Fedora, Glassfish, Java, Linux, NetBeans, Seguridad, Tutoriales
Etiquetas: Glassfish, Java, Keystore, Seguridad, Truestore, X.509