Introspección y Reflexión en Java para testear clases de utilidades

En una nueva colaboración con el portal AdictosAlTrabajo.com, hablo sobre el uso que podemos dar en Java a los paquetes de Reflexión e Introspección que tiene desde hace algunas versiones.

Así, aprovecho para hacer un validador de clases de utilidades que comprueba que es una clase final, que tiene un constructor privado, que éste, en el caso de que lo “truquen” lanza una excepción al ser invocado, y que todos sus métodos y campos son estáticos…

Disfruta de la lectura:

Introspección y Reflexión en Java para testear clases de utilidades

Cómo usar una dependencia local en Maven

En algunas ocasiones, sobre todo en pruebas de concepto, necesitamos usar una dependencia java (un .jar) que no está en ningún repositorio.

En el caso de que usemos Maven, esto puede ser un impedimento porque no tendremos repositorio  público  en el que esté ese .jar. Para solucionarlo lo mejor es montarte un repositorio propio con Nexus por ejemplo. Pero si no tienes tiempo o eres demasiado vago, se puede hacer a través del pom.xml

¡Ojo! Esta técnica utilízala únicamente para casos puntuales en entornos de pruebas. ¡Nada de usarlo para salir a producción!

Partiendo de un pom.xml normal, declaramos un nuevo repositorio, que podemos llamar my-local-repo:

<repositories>
...
    <repository>
        <id>my-local-repo</id>
        <url>${project.basedir}/src/main/resources/</url>
    </repository>
...
</repositories>

Como puedes ver, he elegido que en src/main/resources estará el fichero .jar que quiero incluir en el proyecto. En mi caso es el fichero src/main/resources/FilterDecoratorForSpringDelegatingFilterProxy-0.0.1.jar

El siguiente paso es indicar la dependencia como si de un repositorio normal se tratase:

<dependencies>
...
    <dependency>
        <groupId>com.alberto</groupId>
        <artifactId>FilterDecoratorForSpringDelegatingFilterProxy</artifactId>
        <version>0.0.1</version>
    </dependency>
...
</dependencies>

Y ya está🙂

Securizando conexiones a servidores web (HTTPS) con Let’s Encrypt

Hace un tiempo que se creó Let’s Encrypt como organización que prové de certificados gratuitos al que disponga de un sitio Web. Mejor dicho, certificados gratuitos y reconocidos por autoridades certificadoras. Así, cuando un usuario acceda a nuestra Web no le aparecerá el típico mensaje de que está accediendo a un sitio inseguro.

Así, pues, nos da gratuitamente certificados generados por ellos.

La instalación en un Ubuntu 14.04 no puede ser más sencilla:

  • Nos bajamos el código del programa de instalación (tenemos que tener el cliente de git): git clone https://github.com/letsencrypt/letsencrypt.
  • Accedemos al directorio con cd letsencript
  • Ejecutamos: ./letsencrypt-auto –apache
  • Y seguimos las instrucciones, indicando los nombres de los dominios que queremos securizar (www.dominio.com y dominio.com son dos dominios diferentes).

Y ya está…🙂

Podemos comprobar cómo ha quedado con nuestro navegador o a través de: https://www.ssllabs.com/ssltest/analyze.html?d=dominio.com

Creando vídeos time-lapse de una cámara de seguridad con FFmpeg

Recientemente he adquirido una cámara IP de seguridad para ponerla en el patio de mi casa. Ha habido robos últimamente y me gustaría saber qué sucede por las noches cuando yo no miro🙂

Una de las funciones de esta cámara (Foscam FI9804W ) es la de poder sacar una fotografía y subirla a un FTP cada X segundos. Para no sobrecargar la red, y porque lo importante, que es la detección de movimiento, ya lo tenía activado, decidí configurarla para obtener una foto cada 60 segundos.

El resultado es que tengo una serie de imágenes capturadas cada minuto:

Schedule_20151205-081032.jpg
 Schedule_20151205-081132.jpg
 Schedule_20151205-081232.jpg
 Schedule_20151205-081332.jpg
 Schedule_20151205-081432.jpg
 Schedule_20151205-081532.jpg
 Schedule_20151205-081632.jpg
 Schedule_20151205-081732.jpg
 Schedule_20151205-081832.jpg
 Schedule_20151205-081932.jpg

Como puedes ver, refleja el día y la fecha de la captura. Combinándolas se va a poder ver el paso del día (movimiento de luces, viento, crecimiento de hojas…) en un vídeo bastante bonito.

¿Cómo puedo crear un vídeo a partir de las imágenes? En internet, sobre todo para Windows, hay multitud de opciones, pero yo quería usar algo open-source que funcionase en mi ubuntu, y eso no es otro que FFmpeg.

Sólo unos pocos pasos:

1. Nos descargamos las fotos a un directorio cualquiera en el que estén todas juntas. En mi caso me las he bajado usando “scp” porque las tengo en un servidor ubuntu también con ssh activado. También instalamos ffmpeg

sudo apt-get install ffmpeg -y

2. Si queremos usar FFmpeg, tenemos que tener las fotos con nombres consecutivos del estilo: imagen1.jpg;imagen2.jpg…. y así hasta imagen 967.jpg por ejemplo. Si falta alguna FFmpeg dejará de funcionar. ¿Cómo hacemos esto?  Fácil, gracias a la ayuda de la shell. Yo encontré esta forma:

N=1; for X in $( ls *.jpg | sort ); do mv $X imagen$N.jpg; N=$(($N+1)); done

3. Ahora tenemos todas las imágenes con el formato adecuado. Es hora de usar FFmpeg. Ejecutamos:

ffmpeg -framerate 25 -i imagen%00d.jpg -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv420p output.mp4

…donde imagen%00d.jpg quiere decir que debe tomar los nombres de ficheros del estilo imagen1.jpg …. imagen234.jpg, que es lo que necesitamos.

Y tras esperar un ratillo, dependiendo de nuestro ordenador y de la cantidad de fotos, ya tenemos el video output.mp4

El resultado final es este: https://www.youtube.com/watch?v=7m-zhjmWxaI

 

Securizando un directorio de Apache 2.4 con user/password en un fichero. Ubuntu 14.04 Servr

Es algo realmente típico y sencillo. Vamos con los pasos fundamentales. Asumimos que tenemos el Apache 2.4 ya montado corriendo una aplicación en Ubuntu 2.4.

Creamos el fichero de Passwords (si no está creado).

  1. Instalamos la utilidad para crearlo:
    sudo apt-get install apache2-utils
  2. Creamos un usuario/password para el fichero deseado. Si no existe el fichero lo genera con el parámetro -c. Si queremos añadir usuarios ya exsitentes, quitamos el -c
    sudo htpasswd -c /etc/apache2/.htpasswd antonio
  3. Comprobamos que el fichero se ha creado y que los password están cifrados
    cat /etc/apache2/.htpasswed

Indicamos que se utilice el fichero.

  1. Localizamos el fichero de configuración del site que estamos utilizando
    cd /etc/apache2/sites-available/
  2. Localizamos el fichero de configuración del site que estamos utilizando. Suele ser el que se indica a continuación.
    vim 000-default.conf
  3. Añadimos esta configuración para restringir el directorio /var/www/administrator
    <Directory "/var/www/administrator">
     AuthType Basic
     AuthName "Restricted Content"
     AuthUserFile /etc/apache2/.htpasswd
     Require valid-user
     </Directory>
  4. Reiniciamos el Servidor para reflejar los cambios.
    sudo /etc/init.d/apache2 restart

Accedemos a la dirección web que necesitamos y vemos que nos pide el usuario y password, y que funciona indicando uno de los proporcionados en el fichero.

Esto debería ser todo ^_^

Big Data Spain 2015

Este año 2015, gracias a Autentia, he podido asistir a las conferencias Big Data Spain 2015 sobre los últimos avances en Big Data. Aquí os dejo el storify hecho a base de tweets que tuve la oportunidad de publicar durante el evento.

https://storify.com/4lberto/big-data-spain-2015

También hemos publicado 3 entradas en la página adictosAlTrabajo.com de Autentia con las crónicas y el stack de tecnologías.