Java en un Raspberry PI, desde cero

Resumimos cómo configurar un Raspberri PI para poder trabajar con java desde el momento en el que lo sacamos de la caja.
Contamos con un Raspberry Pi B 512K de memoria, ya nos hemos aproximado varias veces a micro placas:

https://unpocodejava.wordpress.com/?s=raspberry+pi

Y tenemos un avance de los esfuerzos por tener una distribución de Java en un Pi:

https://unpocodejava.wordpress.com/2012/05/30/java-corriendo-intentando-correr-sobre-raspberry-pi/
https://unpocodejava.wordpress.com/2012/08/14/corriendo-tomcat-7-en-un-raspberry-pi/

El objetivo es dar un “paso a paso” sencillo de opciones probadas, que nos permitan empezar a trabajar cuanto antes.

 

Escribir última versión del SO en la Targeta SD


Primero hay que elegir una imagen de sistema operativo que descargaremos de internet. En la web encontramos dos sistemas recomendados:

Descomprimimos la imagen del zip descargado (por ejemplo la imagen de Raspbian llamada 2013-05-25-wheezy-raspbian.img) y pasamos al siguiente paso.

Necesitamos un Lector de tarjetas

Una tarjeta SD(o microSD con adaptador) de 4 GB o mas.

Y utilizamos un software gratuito que permita escribir la imagen descargada anteriormente sobre la tarjeta. Uno que da buen resultados testeado en Windows7:

http://sourceforge.net/projects/win32diskimager/


 

Arranque y Configuración


Insertamos la tarjeta en la bahía correspondiente, enchufamos el cable HDMI a un monitor (o televisor), el adaptador mini-usb a la toma de corriente (5V), un cable Ethernet a la red, ratón y teclado usb2.0

Cuando lo conectamos a la corriente el Pi arranca e interactúa con los los dispositivos de entrada y salida muy satisfactoriamente. La primera vez mostrará automáticamente el menú de configuración:

Podemos volver al mismo menú más adelante cuando queramos mediante la orden >sudo raspi-config

  • expand_rootfs: Expande el espacio de la tarjeta SD
  • overscan: Para evitar que el Pi solo use una parte de la televisión.
  • configure_keyboard: Elegir compatible de una Lista de teclados.
  • change_pass: para cambiar la password del Usuario de sistema. La password por defecto es

    usuario: pi
    password: raspberry

  • change_locale: locale por defecto del sistema operativo.
  • change_timezone: franja horaria.
  • memory_split: balancea la memoria entre graficos y procesador.
  • Si planeamos instalar Java con opciones graficas (JavaFx) es recommendable aunmentar la memoria grafica a 128K.
  • ssh: Permite la comunicacion con un servidor ssh.
  • boot_behaviour: Si queremos arrancar por defecto en un escritorio con ventanas o en una consola.
  • update: intenta descargar la ultima version del raspi-config, necesario estar conectado a internet (como se comenta mas adelante)

Si todo ha ido bien, al reiniciar y tras logarnos encontraremos una pantalla semejante a esta:

En el escritorio contamos con el LXTerminal, una consola de comandos:

>sudo raspi-config

>sudo reboot

>sudo halt

Menu de configuraciones

Reiniciar el PI

Apagar el sistema

 

Configurar una red con router DHCP


Si hemos conectado el cable de red correctamente al router y al PI, los LEDs de la red deberían parpadear.

Si el router ofrece un servicio DHCP, no es necesario realizar más configuraciones. El Pi habrá recibido una ip que podemos consultar con:

>ifconfig

 

Configuracion WIFI

Es necesario un adaptador WIFI que soporte el chipset RTL8192cu. Ambas distribuciones Raspbian y Occidentalis son compatibles.

Lo conectamos a un puerto usb (y nos quedamos con un solo puerto, ahora seria recomendable tener un hub usb para ampliarlos). Si tenemos un SO Raspbian, para la configuracion podemos optar por una aplicación grafica:

Doble click en el icono del escritorio para lanzar el menu:

Hacemos click en el botón “scan” y aparecerán las redes al alcance.

Seleccionamos nuestra red local y se abre el menu:

Introducimos la clave wifi en el campo PSK y pulsamos “add”. La red y la ip apareceran configuradas en la pantalla principal.

Alternativamente se puede configurar el fichero:

>sudo nano /etc/network/interfaces

Busca las líneas de abajo y reemplaza el nombre ssid y password de la wifi (manteniendo las comillas):

wpa-ssid “ssid”
wpa-psk “password”

Despues reiniciar el sistema.

>sudo reboot

 

Usar SSH


Si tenemos el servicio ssh activado (en raspi-config) acceder desde un PC mediante ssh con putty es tan sencillo como escribir la IP:

Si al conectarnos encontramos un error connection reset by peer, podria haber un problema con las claves SSH. Se pueden resetear las claves mediante los siguientes comandos:

>sudo rm /etc/ssh/ssh_host_*

>sudo dpkg-reconfigure openssh-server

Borrar las viejas claves

Regenerarlas

 

Escritorio Remoto VNC


Instalaremos una versión ligera del famoso escritorio remoto tightvncserver. Trabajando en modo “terminal remota” ahorraremos la necesidad de los interfaces (teclado, raton, monitor) en el pi.

Para instalar el servidor escribimos en la consola:

>sudo apt-get update
>sudo apt-get install tightvncserver

Para arrancar el servidor escribir el comando:

>vncserver :puerto

en “puerto” escribimos el numero de puerto libre que nos apetezca. Por ejemplo:

>vncserver :1 -geometry 1440×900
(el parámetro geometry define el tamaño en pixels de la pantalla)

La primera vez nos pedirá una password (máximo 8 caracteres):

>raspberry

Aqui vemos el servicio en accion:

 

Configuracion Cliente VNC

Primero descargaremos en nuestro PC una versión de cliente VNC desdehttp://www.realvnc.com/

La pantalla de conexión no es como la siguiente:

Escribimos la ip:puerto del servicio vnc del Pi y pulsamos “connect”. La primera vez dara un aviso (por no tener el certificado) y pasara a la ventana de autenticación:

Y sin más problemas accederemos al escritorio.

 

Configurar el Servicio al arrancar el PI

Acceder al directorio

>cd /home/pi/.config

y crear un nuevo directorio

>mkdir autostart
>cd autostart

crear un nuevo fichero:

>nano tightvnc.desktopt

con el contenido:

[Desktop Entry]
Type=Application
Name=TightVNC
Exec=vncserver :1
StartupNotify=false

 

Transferir Ficheros sftp


Para transferir ficheros entre nuestro PC y el Pi valdrá cualquier aplicación que haga transferencias sftp. La aplicación winscp es gratuita y funciona correctamente http://winscp.net/download/winscp515setup.exe

La transferencia es sencilla e intuitiva, con ventanas tipo total comander:

 

El Conector GPIO


Aunque no es el propósito de este tutorial “primeros pasos”, conviene recordar por su importancia del conector GPIO (General Pourpose Input Output) que conecta el PI a dispositivos externos.


Podemos encontrar un buen tutorial de introducción al conector:
http://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup?view=all

Tutoriales GPIO phyton
http://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup?view=all

Como escribir en los puertos GPIO desde Java
https://blogs.oracle.com/hinkmond/entry/rpi_and_java_embedded_gpio3

 

JDK 8 (con JavaFX) para ARM


No es imprescindible, pero para poder hacer descargas http cómodamente recomendamos el chromium:

>sudo apt-get install chromium-browser

 

Recordar que desde el raspi-config balanceamos la memoria video-cpu a 128 para los graficos. Menos memoria causará fallos de memoria VRAM en JavaFX.

Es recomendable elegir en el raspi-config no arrancar el desktop, para ganar recursos adicionales.

Del fichero de configuración:

>sudo vi /boot/config.txt

Descomentar las lineas:

framebuffer_width=1280
framebuffer_height=720

Llegó el momento de descargar la distribucion de Java8 para procesador ARM desde http://jdk8.java.net/fxarmpreview

Descomprimimos la descarga en el direcotrio opt:

>sudo tar zxvf /home/pi/Downloads/jdk-8-ea-b36e-linux-arm-hflt-29_nov_2012.tar.gz -C /opt

Borramos el descargado

>rm /home/pi/Downloads/jdk-8-ea-b36e-linux-arm-hflt-29_nov_2012.tar.gz

Y listo. Aseguramos que java se ejecuta correctamente.

>sudo /opt/jdj1.8.0/bin/java –versión

 

Ejecutar un ejemplo Java


Podemos probar que la maquina virtual esta correctamente instalada con un ejemplo mínimo

>cd /home/pi

Editamos un fichero de código fuente:

>nano HelloPi.java

Compilamos a un class

>/opt/jdk1.8.0/bin/javac *.java

Y ejecutamos

>/opt/jdk1.8.0/bin/java HelloPi

 

Referencias


Tutorials de Adafruit:
http://learn.adafruit.com/category/learn-raspberry-pi

Impresionante herramienta para la corrección de imágenes desenfocadas o movidas

SmartDeblur es una aplicación que permite hacer una corrección casi mágica de imágenes desenfocadas o movidas.

SmartDeblur es capaz de corregir desenfoques y distorsión por movimiento a la hora de tomar una foto.

Los ejemplos que muestran son impresionantes, alguien se cree que de aquí:

Se puede llegar a aquí?

SmartDeblur es software libre (GPL v3), está implementada en C++ usando varias técnicas (Wiener, Tikhonov, Total Variation prior) y soluciona estos defectos: Out of Focus blur (with kernel deep tuning), Motion blur y Gaussian blur.

Existen versiones para Windows y para Mac.

Encuesta sobre uso de Open Source en organizaciones

es una subsidiaria de Progress Software. La component unacomunidad de expertos en opensource que proven software, soporte, formación y consultoría sobre proyectos Apache como ServiceMix, ActiveMQ, Camel y CXF.

En 2011 realizaron una encuesta entre su comunidad y las organizaciones con las que colaboran (que incluyen industrias de todo tipo) sobre el uso de software Open Source en las organizaciones.

Un resumen de la encuesta:

Qué ha motivado la decisión de desplegar open source:

En qué se ha beneficiado la organización del despliegue de Open Source:

Cuál es el porcentaje de proyectos en el que planea usar Open Source:

Las conclusiones principales que salen de la encuesta son:

· La mayoría de las empresas están considerando el software Open Source para sus proyectos IT

· La flexibilidad es el beneficio principal al adaptar open source

· El despliegue conlleva ahorros de costes como ventajas tecnológicas.

Podéis descargaros la encuesta completa aquí.

RedHat: la primera empresa Open Source en conseguir 1 billón de dólares de ingresos para 2012

dompdf: HTML to PDF converter

Dompdf, se trata de una librería de código abierto con la que poder transformar páginas de HTML a PDF.

Para su funcionamiento es necesario PHP 5, pero sus ejemplos me parecen espectaculares

http://pxd.me/dompdf/www/examples.php#samples

El código lo podemos encontrar aquí: http://code.google.com/p/dompdf/

IDE Python: Ninja-IDE

A pesar de lo “radical” de su logo Ninja IDE es un IDE para trabajar con Python muy interesante. También soporta plugins.

Podéis descargarlo para Windows desde aquí.

Cachés y Spring: Iterando hasta la solución

Con la idea de implementar una Caché que funcionase en base a anotaciones me puse a googlear:

Primera Idea:

Lo primero que encontré fue este artículo, que coincidía exactamente con lo que tenía en la cabeza: una anotación para cachear y otra anotación para descachear:

El ejemplo es autoexplicativo:

Con la anotación Cachea cachea info y con la Descachea borra la caché.

Leyendo el artículo me topé con varios inconvenientes:

· El primordial es que la implementación no soportaba la caché de métodos por parámetros.

· Mucho código

· Configuración de Spring 2 (no Spring 2.5)

· Funcionamiento sobre OSCache

Segunda Opción: Cómo no! Spring me lo da resuelto!!!

Buscando un poco más llegué a Spring Caché Module (de Spring Modules).

En su guía de referencia explicaba lo que ofrecía:

· Funcionamiento sobre diversos motores de caché: EHCaché, JCS, OSCache, JBoss Cache

· Integración con Spring por diversos mecanismos: configuración, Anotaciones,…

· Soporte de caché por métodos con parámetros: en la caché se almacena por HashCode

Cuando me iba a poner a ello (hoy) descubro que la Web ha dejado de estar disponible en dev.java.net. Buscando consigo obtener las dependencias

Cuando se ha puesto a compilar se ha intentado descargar enemil dependencias (hasta Jini.jar) que no ha podido. Además tiene dependencias de una versión de Spring antigua.

Solución final: no es tan buena como la segunda pero es sencilla

Así que llegué a la tercera (y definitiva por el momento) solución:

Ehcache Annotations for Spring es según sus creadores: “A successor in spirit of the annotations provided by the Spring-Modules Cache library“

Para hacerlo funcionar basta con importar

<dependency>

<groupId>com.googlecode.ehcache-spring-annotations</groupId>

<artifactId>ehcache-spring-annotations</artifactId>

<version>1.1.2</version>

</dependency>

Ofrece 2 anotaciones: @Cacheable y @TriggersRemove.

Lo mejor es leerse este Getting Started::

Básicamente necesitamos:

1) Anotar la clase con las Anotaciones:

2) Añadir configuración de Spring:

3) Crear fichero ehcache.xml:

A %d blogueros les gusta esto: