Buenos días.
Hoy voy a publicitar nuestra nueva cuenta de android developer llamado "The PichuLabs" y las aplicaciones que hemos lanzado:
PicShake! Fail Edition
Es un visor de comics de FailBlog y otros blogs de viñetas de comics sobre fails y wins. Está en inglés y tiene la peculiaridad de que agitando el móvil te carga una viñeta random desde su extensa base de datos.
PicShake! Desmotivaciones
Tiene la misma funcionalidad y el mismo diseño que PicShake! Fail Edition solo que éste está en castellano y las viñetas tratan, como el nombre bien lo indica, sobre desmotivaciones.
Podéis descargaros las dos aplicaciones y futuras aplicaciones que lancemos en Google Play
No dudéis en comentar las aplicaciones y enviar un mensaje indicando sugerencias, mejoras o errores que hayáis podido apreciar.
Muchas gracias
lunes, 28 de mayo de 2012
miércoles, 28 de marzo de 2012
Añadir la fecha en ficheros de trazas log4j
Si queremos añadir la fecha a nuestros ficheros de trazas en log4j tenemos dos opciones.
Si nuestros programa va a estar constantemente en ejecución, queremos que cada día, hora o minuto se genere otro fichero log, para ello podemos usar el DailyRollingFileAppender. El properties que tendríamos que escribir sería el siguiente:
Si nuestros programa va a estar constantemente en ejecución, queremos que cada día, hora o minuto se genere otro fichero log, para ello podemos usar el DailyRollingFileAppender. El properties que tendríamos que escribir sería el siguiente:
log4j.appender.diario = org.apache.log4j.DailyRollingFileAppender log4j.appender.diario.File = diario.log log4j.appender.diario.Append = true log4j.appender.diario.DatePattern = '.'yyy-MM-dd log4j.appender.diario.layout = org.apache.log4j.PatternLayout log4j.appender.diario.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS}%m%n
De esta forma generaremos ficheros cada día. El problema de esto es que el fichero
de hoy no tendría fecha, puesto que los ficheros se renombran al pasar cada día,
almacenando las trazas de el mismo día en diario.log.
Si queremos ponerle fecha a nuestro fichero de trazas de hoy esclusivamente,
usando un RollingFileAppender u otro appender por ejemplo, podemos crearnos una
variable de sistema de esta forma:
static{ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); System.setProperty("current.date", dateFormat.format(new Date())); }escribimos esas líneas de código en nuestro fichero java, nada más ejecutar el programa. Después, nuestro properties de log4j tendría esta forma:
log4j.appender.Pesado=org.apache.log4j.RollingFileAppender log4j.appender.Pesado.file=registroHerramientaQJMT.${current.date}.log log4j.appender.Pesado.layout=org.apache.log4j.PatternLayout log4j.appender.Pesado.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS}%m%nAhora ya tenemos la fecha de hoy en nuestro fichero de trazas.
miércoles, 14 de marzo de 2012
Convertir jar en exe
Se puede generar un exe a partir de un jar con un montón de programas. Yo os comentaré como hacerlo usando el programa Autoit.
Primero generamos el script que ejecutará el programa para crear el exe. Podemos usar el programa Scite que viene con el Autoit, o podemos crear el script a mano. Basta con abrir un documento de texto y cambiar la extensión a .au3
En mi caso, he generado un jar ejecutable que se llama MiAplicacion.jar. Eso lo podemos generar con el eclipse, por ejemplo, exportando el proyecto. Es tan sencillo como:
Si tenemos que pasarle a nuestra aplicación parámetros, bastan con añadir los parámetros al final:
Y si deseamos que la consola de java no aparezca usaremos javaw en vez de java:
Podemos leer sobre esto en :
Ahora arrancamos el programa Aut2exe.exe y nos pedirá el archivo au3 y la ruta donde generar el exe.
Primero generamos el script que ejecutará el programa para crear el exe. Podemos usar el programa Scite que viene con el Autoit, o podemos crear el script a mano. Basta con abrir un documento de texto y cambiar la extensión a .au3
En mi caso, he generado un jar ejecutable que se llama MiAplicacion.jar. Eso lo podemos generar con el eclipse, por ejemplo, exportando el proyecto. Es tan sencillo como:
Run ("java -jar MiAplicacion.jar")
Si tenemos que pasarle a nuestra aplicación parámetros, bastan con añadir los parámetros al final:
Run ("java -jar MiAplicacion.jar parametro1")
Y si deseamos que la consola de java no aparezca usaremos javaw en vez de java:
Run ("javaw -jar MiAplicacion.jar parametro1")
Podemos leer sobre esto en :
The javaw command is identical to java, except that with javaw there is no associated console window. Use javaw when you don't want a command prompt window to appear. The javaw launcher will, however, display a dialog box with error information if a launch fails for some reason.
Ahora arrancamos el programa Aut2exe.exe y nos pedirá el archivo au3 y la ruta donde generar el exe.
miércoles, 22 de febrero de 2012
Luchando por una educación pública
Esta entrada no tiene nada que ver con la programación pero aprovecha este blog para poneros un corto que trata sobre la educación pública. Un tema que está en boca de todos estos días y que peligra a no ser que reaccionemos.
Me gustaría también pediros, si fuerais tan amables, de votar positivamente el video. Muchas gracias.
Me gustaría también pediros, si fuerais tan amables, de votar positivamente el video. Muchas gracias.
Internalización en Java
Podemos hacer que nuestros textos en nuestro programa sean traducidos de una manera muy fácil. De esta forma, si el sistema operativo está en español, los textos aparecerán en español y aparecerán en ingles si tenemos el sistema operativo en ingles.
Para conseguir esto debemos seguir varios pasos.
Primero creamos un archivo properties. Lo llamaremos recursos.properties Este archivo contendrá las traducciones.
Ahora crearemos ficheros properties iguales pero que contienen las traducciones. Los archivos se llamarán llamarse igual que este, pero añadiendo _xx o bien _xx_YY donde xx son dos letras que hacen referencia al idioma e YY dos letras que hace referencia al país donde se habla idioma.
Para conseguir esto debemos seguir varios pasos.
Primero creamos un archivo properties. Lo llamaremos recursos.properties Este archivo contendrá las traducciones.
MENU_INICIO=Inicio MENU_PAGINA_INICIO=Página de inicio MENU_SALIR=Salir
Ahora crearemos ficheros properties iguales pero que contienen las traducciones. Los archivos se llamarán llamarse igual que este, pero añadiendo _xx o bien _xx_YY donde xx son dos letras que hacen referencia al idioma e YY dos letras que hace referencia al país donde se habla idioma.
miércoles, 8 de febrero de 2012
Crear directorios en Java
Si queremos crear un directorio con Java, podemos usar la clase File. Después llamaremos a los metodos mkdir() o mkdirs().
Si únicamente ponemos el nombre de la carpeta a crear, deberemos de hacerlo sin barras. Son barras dobles porque sino java interpreta como un signo de escape.
mkdir() asume que la ruta de directorios existe y creará el último directorio.
mkdirs(), todos los directorios anteriores a la carpeta se crearán, existan o no. De este modo no saltará ninguna excepción si es que los directorios no existen.
Estos metodos lanzan SecurityException si es que existe un administrador de seguridad y no permite los nombres de los directorios.
File directorio = new File("c:\\Programas\\directorio"); directorio.mkdir();
Si únicamente ponemos el nombre de la carpeta a crear, deberemos de hacerlo sin barras. Son barras dobles porque sino java interpreta como un signo de escape.
mkdir() asume que la ruta de directorios existe y creará el último directorio.
mkdirs(), todos los directorios anteriores a la carpeta se crearán, existan o no. De este modo no saltará ninguna excepción si es que los directorios no existen.
Estos metodos lanzan SecurityException si es que existe un administrador de seguridad y no permite los nombres de los directorios.
martes, 17 de enero de 2012
Criptografía simétrica y asimétrica
La criptografía se usa para ntercambiar mensajes que sólo puedan ser leídos por usuarios a las que
van dirigidos y que poseen los medios para descifrarlos.
Mediante una clave secreta, ciframos un mensaje y después podemos descrifrar el mensaje con la misma clave u otra distinta. De esta forma hay dos tipos de algoritmos, según cantidad de claves:
Mediante una clave secreta, ciframos un mensaje y después podemos descrifrar el mensaje con la misma clave u otra distinta. De esta forma hay dos tipos de algoritmos, según cantidad de claves:
- Critografía simétrica
- Criptografía asimétrica
lunes, 16 de enero de 2012
Exclusión mutua en Java con Lock
java.util.concurrent.locks.ReentrantLock es una clase en Java para la exclusión mutua, con el mismo comportamiento que los monitores Synchronized pero con más funciones. Entre ellas podemos encontrar:
Para iniciarlo:
Un ejemplo de como asegurar una variable:
- 1. tryLock(): coger el cerrojo si es posible, sino devuelve false.
- 2. tryLock(long timeout, TimeUnit unit): coger el cerrojo antes del timeout y devuelve false después del timeout.
- 3. lockInterruptibly():intenta coger el cerrojo y entrar en el estado wait, pero puede ser interrumpido por otro hilos.
Para iniciarlo:
private Lock cerrojo = new ReentrantLock();
Un ejemplo de como asegurar una variable:
dialog.addWindowListener(new WindowAdapter(){ publicvoid windowClosing(WindowEvent we){ cerrojo.lock(); desconectando = true; cerrojo.unlock(); } });
Aquí tenéis la documentación: Enlace.
miércoles, 11 de enero de 2012
Ejemplo MD5 en Java
MD5 es uno algoritmo de reducción criptográfico.
MD5 se utiliza para comprobar que lo que descargamos de internet es el archivo original y no un troyano. También se utiliza para comprobar claves guardando el valor hash en disco y comparando con éste. Aplicando MD5 obtenemos un valor hash de 32 dígitos hexadecimales. Este valor se envía junto con el archivo. El usuario compara el valor hash del archivo obtenido con el valor hash que le han proporcionado y si no son iguales estamos seguros que el archivo ha sufrido un cambio y no es el original.
Podemos cambiar el algoritmo MD5 por MD2, MD4, SHA...
MD5 se utiliza para comprobar que lo que descargamos de internet es el archivo original y no un troyano. También se utiliza para comprobar claves guardando el valor hash en disco y comparando con éste. Aplicando MD5 obtenemos un valor hash de 32 dígitos hexadecimales. Este valor se envía junto con el archivo. El usuario compara el valor hash del archivo obtenido con el valor hash que le han proporcionado y si no son iguales estamos seguros que el archivo ha sufrido un cambio y no es el original.
import java.io.FileInputStream; import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5 { public static String getMD5(String entrada) { try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] messageDigest = md.digest(entrada.getBytes()); BigInteger number = new BigInteger(1, messageDigest); String hashtext = number.toString(16); while (hashtext.length() < 32) { hashtext = "0" + hashtext; } return hashtext; } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } public static void main(String[] args) throws NoSuchAlgorithmException { System.out.println(getMD5("Nuestra Clave")); } }
Podemos cambiar el algoritmo MD5 por MD2, MD4, SHA...
Añadir un evento a un botón Swing
Éste es el código para añadir un evento a un botón Swing en Java.
private JButton boton = new JButton("Botón"); boton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { System.out.println("Click!"); } });
Aquí tenéis la documentación: Enlace
No dejar redimensionar una ventana SWT
shell = new Shell(SWT.DIALOG_TRIM | SWT.MIN);
De esta forma bloqueamos el redimensionamiento de una ventana(shell) en SWT. Sería el equivalente en swing de
frame.setResizable(false);
Escribimos en el constructor del shell las propiedades y listo.
Si queremos añadir más restricciones a la ventana podemos concatenar cualesquiera de esta lista:
SWT.BORDER SWT.CLOSE SWT.MIN SWT.MAX SWT.RESIZE SWT.TITLE SWT.NO_TRIM SWT.SHELL_TRIM SWT.DIALOG_TRIM SWT.MODELESS SWT.PRIMARY_MODAL SWT.APPLICATION_MODAL SWT.SYSTEM_MODAL
Añadir una barra de progreso a un navegador embebido
Aquí os dejo el código para poder añadir una barra de de progreso a un navegador embebido que está incrustado en un composite de SWT.
Simplemente instanciáis un composite de este tipo y ya tenéis un navegador con su barra de progreso embebido. Con el método browser.setUrl podéis poner la url que queráis cargar.
public class NavegadorEmbebidoSWT extends Composite { private Browser browser; ProgressBar progressBar; boolean busy; int index; public NavegadorEmbebidoSWT(Composite parent, String urlEntorno) { super(parent, SWT.NONE); GridLayout layout = new GridLayout(2, true); setLayout(layout); browser = new Browser(this, SWT.NONE); GridData layoutData = new GridData(GridData.FILL_BOTH); layoutData.horizontalSpan = 2; layoutData.verticalSpan = 2; browser.setLayoutData(layoutData); //Barra de progreso progressBar = new ProgressBar(this, SWT.NONE); progressBar.setLocation(600, 5); progressBar.setSize(108, 23); browser.addProgressListener(new ProgressListener() { public void changed(ProgressEvent event) { if (event.total == 0) return; int ratio = event.current * 100 / event.total; if (progressBar != null) progressBar.setSelection(ratio); busy = event.current != event.total; if (!busy) { index = 0; } } public void completed(ProgressEvent event) { if (progressBar != null) progressBar.setSelection(0); busy = false; index = 0; } }); browser.setUrl(urlEntorno); } }
Simplemente instanciáis un composite de este tipo y ya tenéis un navegador con su barra de progreso embebido. Con el método browser.setUrl podéis poner la url que queráis cargar.
martes, 10 de enero de 2012
Referenciar librerías jar en un ejecutable .bat
Esta mañana he estado intentando crear un ejecutable .bat en windows donde ejecutaba un fichero jar. He tenido problemas a la hora de referenciar las librerías. El error que me daba era:
exception in thread main java.lang.noclassdeffounderror
Ahora os voy a explicar como lo he solucionado.