Pintando informes horizontales con ireport

Os parecerá una tontería, pero algo mas de media mañana me he pasado averiguando como leches se imprimían informes horizontales con ireport. Como no podía ser de otra forma al final apareció, tan fácil como ir edit > report properties y en la pestaña more… de las propiedades del informe tenemos una opción Print Order para indicar si queremos que el informe se pinte en vertical u horizontal.

Captura pantalla informe horizontal ireport

2 Comments

Lanzando informes jasperreports “pdf / xls” desde un servlet

Amiguetes, por aquí seguimos probando y reprobando informes jasperreports. Hoy dejaré un par de apuntes de código que muestran como generar el informe final en pdf o xls teniendo ya el informe diseñado en un fichero .jasper, yo lo he hecho con el ireport, ¿alguien se atreve a hacerlo a mano?, por cierto, y ahora que nadie nos ve, habéis oído hablar de jarvis?, intentaré seguirlo de cerca, parece un plugín para generar informes jasperreport gráficamente en netbeans, pero todavía esta en betas. No me enrollo mas vamos al meollo:

A un informe jasper podremos pasarle tantos parametros como necesitemos para ello debemos crear un Hastable para luego pasarlo como parámetro en la generación del informe: [java]
Map parameters = new HashMap ();
//A nuestro informe de prueba le vamos a enviar la fecha de hoy
parameters.put (“fechainicio”, new Date() );
[/java]

Para exportar a formato pdf:
[java]
ServletOutputStream out;
// Creamos un objecto jasper con el fichero previamente compilado
JasperReport jasperReport = (JasperReport)JRLoader.loadObject (“/javi/InformeDemo.jasper”);

// Generamos el informe pasandole como parametros el objecto creado anteriormente jasperReport, parameters que es el hashmap
// creado anteriormente con todos los parametros que necesitemos enviarle al informe y conn una conexión activa con vuestro
// servidor de BD
byte[] fichero = JasperRunManager.runReportToPdf (jasperReport, parameters, conn);

// Y enviamos el pdf a la salida del navegador como podríamos hacer con cualquier otro pdf
response.setContentType (“application/pdf”);
response.setHeader (“Content-disposition”, “inline; filename=informeDemo.pdf”);
response.setHeader (“Cache-Control”, “max-age=30″);
response.setHeader (“Pragma”, “No-cache”);
response.setDateHeader (“Expires”, 0);
response.setContentLength (fichero.length);
out = response.getOutputStream ();

out.write (fichero, 0, fichero.length);
out.flush ();
out.close ();
[/java]

Y esta vez probaremos también a generarlo como un xls para excell:
[java]
int bit;
File f;
InputStream in;
ServletOutputStream out;

JasperPrint jasperPrint=JasperFillManager.fillReport (“/javi/InformeDemo.jasper”, parameters, conn);
String xlsFileName = “informeDemo.xls”;

//Creacion del XLS
JRXlsExporter exporter = new JRXlsExporter ();
exporter.setParameter (JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter (JRExporterParameter.OUTPUT_FILE_NAME, xlsFileName);
exporter.setParameter (JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
exporter.exportReport ();

// En este punto ya esta Creado el XLS
// Ahora leemos el fichero y forzamos al navegador a que nos descargue el fichero.
f = new File ( xlsFileName);

response.setContentType (“application/vnd.ms-excel”); //Tipo de fichero.
response.setHeader (“Content-Disposition”, “attachment;filename=\”" + xlsFileName + “\”"); //Configurar cabecera http

in = new FileInputStream (f);
out = response.getOutputStream ();

bit = 256;
while ((bit) >= 0)
{
bit = in.read ();
out.write (bit);
}

out.flush ();
out.close ();
in.close ();
[/java]

Y esto ha sido todo por hoy, todavía me queda mucha estadística que machacar, para la próxima mas!

31 Comments

Liberado ‘NetBeans IDE 6.0 RC2′

Logo NetbeansHoy nos hemos levantado con la RC2 de Netbeans 6 que parece será la última hasta su liberación definitiva el 3 de Diciembre.

Esta nueva versión trae consigo novedades y mejoras muy significativas, entre las más importantes: soporte para ruby, magnífica integración con subversion, importantes mejoras en el editor, soporte javascript / css / xhtml (coloreado de sintaxis, autocompletado de código, rename refactoring, etc), modelado UML, integración con profiler, soporte jpa y muchas mas que podeis consultar con detalle en http://wiki.netbeans.org/wiki/view/NewAndNoteWorthy.

Descarga desde http://download.netbeans.org/netbeans/6.0/rc2/

Leave a comment

¿Que es Jasper Reports?

Logo Jasper ReportsJasperReports es una herramienta gratuita y opensource que se compone de un conjunto de librerias java para facilitar la generación de informes en nuestras aplicaciones tanto web como de escritorio.
Los informes se definen en un fichero xml el cual será compilado por las librerías jasper report y generarán un fichero .jasper que utilizaremos para rellenar y mostrar el informe final. La salida de los informes puede ser a la impresora, pdf, cvs, xml, txt, html, xls, rtf, jasper viewer, y a medida que liberen versiones seguramente alguna mas. La definición de los informes se puede realizar directamente sobre los xml descriptores o podemos utilizar la herramienta ireport para diseñarlo gráficamente.

Uno de los puntos fuertes de jasper report es su comunidad http://www.jasperforge.org y la compañía que está detrás, JasperSoft nacida del éxito alcanzado por las primeras versiones de jasperreport y centrada en el desarrollo de herramientas Business Intelligence.

Personalmente he de comentar que me ha gustado mucho ireport, funciona a la perfección en mi ubuntu, nos proporciona todo lo necesario para diseñar informes de una complejidad media, y la curva de aprendizaje para comenzar a tener resultados productivos no es muy elevada. Claro que cuando necesitamos diseñar informes mas complejos en los que intervienen gran cantidad de tablas y relaciones de nuestra BD, ireport se vuelve farragoso, comienzas a tener que crear multitud de subinformes o enviar mas parámetros de los deseados para obtener los datos necesarios. Ya os contaré mis próximas experiencias en este entorno, todavía me queda pendiente echarle un vistazo a jasper server, jasperETL y DynamicJasper, si encuentro el momento dejaré por aquí mis impresiones.

Wiki JasperReports
Requirimientos JasperReports

2 Comments

Google&Company = OpenHandSetAlliance => Android


A nadie se le escapaba ya que google se estaba preparando para entrar en el mundo móvil, algunos mas fantasiosos y a pesar de los desmentidos de la compañía seguían creyendo en que presentaría un teléfono similar al iphone de apple, otros de forma mas acertada creían a google e insistían en que su negocio era software no hardware que su modelo de negocio se basaba únicamente en la publicidad.
Pues bien el pasado día 11, un grupo de mas de 30 empresas liderados por google, la openhandsetalliance (alianza de terminal abierto), presentaban android, una plataforma abierta para terminales móviles en la que se incluye un sistema operativo basado en el kernel de linux 2.6, un conjunto de aplicaciones (contactos, sms, email, calendario, navegador(basado en webkit), etc…) y un framework escrito en java para desarrollar aplicaciones.

Android esta llamado a marcar época por muchos motivos; poner de acuerdo tantas y tan importantes empresas en este negocio es un hecho sin precedentes; el apoyo de google que hasta la fecha ha convertido en oro todo lo que ha tocado, con la segura portabilidad de todos sus servicios web de los que se intuye que google maps formará una parte estratégica; la decisión de liberar la plataforma bajo licencia apache(ASL) hace posible su uso de formas y bajo modelos de negocio muy diferentes.

Desde google ya han comenzado a soltar la pasta para comenzar a formar comunidad y desde su blog bajo el título de Calling all developers: $10M Android challeng anuncian un concurso para desarrolladores, premian con 10 millones de dólares al mejor proyecto software para la plataforma, nada mal.

Fuera de la openhandsetalliance se quedan por el momento compañías importantes como Nokia, Sony Ericsson, Blackberry o Microsoft, con posturas muy diferentes, mientras que Nokia ya ha anunciado su disposición a desarrollar terminales compatibles con android, Microsoft sigue apostando por su windows mobile y saca a relucir su ventaja (40 millones de telefonos, acuerdos con 166 operadoras, 55 fabricantes de dispositivos, 18.000 aplicaciones, etc). Solo el tiempo nos dirá en que posición quedará cada uno, desde luego se avecina una dura batalla, iphone;windows mobile;openmoko;simbian;Palm OS;Blackberry…

Unas capturas de pantalla:

Y un par de enlaces a la presentación de android, y a un primer vistazo sobre como contruir una aplicación para android:
http://www.youtube.com/watch?v=1FJHYqE0RDg
http://www.youtube.com/watch?v=I6ObTqIiYfE

1 Comment

Captura de pantalla desde java, la clase Robot.java

Buscando la forma de realizar una captura de pantalla desde java me he encontrado con la clase Robot.java, con ella podemos simular eventos del usuario (movimiento de ratón y control de teclado) y realizar una captura de pantalla claro :-) , sun nos lo deja bien claro:

“This class is used to generate native system input events for the purposes of test automation, self-running demos, and other applications where control of the mouse and keyboard is needed. The primary purpose of Robot is to facilitate automated testing of Java platform implementations.”

Enviar captura de pantalla a un BufferedImage:
[java]
BufferedImage bImage = null;
Robot robot = null;
try
{
robot =new Robot();
robot.delay(0); //sleep
bImage = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
}
catch(AWTException e1)
{
System.out.println( e1.getMessage());
}
[/java]

Leave a comment

Conceptos básicos de estadística

Después de un largo y duro fin de semana he decidido dejar por escrito algunos conceptos básicos sobre estadística (una de las asignaturas que he escogido para este semestre).

Población: Conjunto de individuos que queremos estudiar.

Muestra: Subconjunto cualquiera de la población.

Variable: Característica de los individuos objeto de nuestro estudio, las variables cualitativas/categóricas no se expresan numéricamente mientras que las cuantitativas si. Entre estas últimas diferenciamos cuantitativas discretas que solo toman valores enteros y cuantitativas continuas que toman cualquier valor en un intervalo.

Frecuencia absoluta ni de cada valor de la variable: Número de individuos para los que la variable toma ese valor.

Frecuencia relativa fi de cada valor de la variable: proporción de individuos en los que la variable toma ese valor.

Distribución de frecuencias de una variable: Es el conjunto de los valores que adopta una variable y la frecuencia con que los adopta.

Medidas de centro

Moda: Es el valor mas repetido, el que tiene una mayor frecuencia.

Mediana: Es el valor que ocupa el lugar central una vez ordenadas las observaciones de menor a mayor.

Media: Es el valor medio de todas las observaciones de la variable, se obtiene dividiendo la suma de todas las observaciones por el numero de individuos.

Medidas de dispersión

Primer cuartil(Q1): Valor numérico tal que al menos el 25% de las observaciones son menores o iguales que el.

Segundo cuartil(Q2): Es la mediana.

Tercer cuartil(Q3): Valor numérico tal que al menos el 75% de las observaciones son menores o iguales que el.

Rango intercuartílico: Es la diferencia entre el primer y el tercer cuartil Q3-Q2.

Varianza σ: Suma al cuadrado de las desviaciones respecto a la media divido por el número de observaciones N.

Desviación típica/estándar: Raíz cuadrada positiva de la varianza.

Probabilidad

Experimento aleatorio: Aquel que tiene diferentes resultados posibles y no tenemos certeza de cual se producirá realmente.

Espacio muestral Ω: Conjunto de resultados posible que podemos obtener al realizar un experimento aleatorio.

Acontecimiento / Suceso aleatorio: Subconjunto del espacio muestral.

Suceso seguro: Es el que está formado por todos los resultados posibles. Es el mismo que el espacio muestral Ω.

Suceso imposible Ø: Es el suceso que no ocurre nunca, denotado por el conjunto vacío Ø.

Sucesos incompatibles: Son dos sucesos que no tienen ningún resultado en común.

Sucesos independientes: Dos sucesos A y B son independientes cuando el hecho de que ocurra uno no altera la probabilidad de que ocurra el otro.

Leave a comment

Aportación española a OpenMoko

Neo1973
Vía barrapunto me entero de que ya tenemos españolitos colaborando con openmoko. Los sujetos en cuestión, kernel-labs, disponen en su web de información técnica muy interesante sobre la plataforma.

Open Moko es un una comunidad cuyo objetivo es crear el primer sistema operativo open source para teléfonos móviles. En un principio OpenMoko está diseñado para Neo1973 de FIC, el teléfono mas parecido al ya por todos conocido iphone que he visto hasta la fecha, tan parecido que a veces a uno le entran dudas acerca de la autenticidad de cada cual.

Para quien le entre el gusanillo y se lo pueda permitir ya podemos encargarlo desde https://direct.openmoko.com/ su precio ronda entre 300$ y 450$. Quien sabe, quizás dentro de no mucho tiempo podamos hacer algo como apt-get install gnome-mobile en nuestro teléfono sin tener que firmar un contrato de 3 años con la respectiva compañía telefónica.

En el wiki y el repositorio de proyectos oficial de openmoko tienen toda la información disponible sobre esta plataforma.

Leave a comment

Automatizar copias de seguridad con rsync

Esta semana me he decidido por fin y he terminado de automatizar las copias de seguridad de mi escritorio ubuntu “Gutsy Gibbon” a un servidor debian “etch”.

He utilizado rsync para transmitir todos mis ficheros, herramienta muy versátil con la que realizo mis copias de seguridad de forma incremental en un único sentido, para mantener sincronizados 2 directorios en ambos sentidos podemos utilizar unison.

Partimos de que los scripts los ejecutaremos desde la máquina cliente hacia el servidor. Lo primero que debemos conseguir para transferir los ficheros de forma programada es tener acceso al servidor sin que sea necesaria nuestra intervención. Para ello debemos generar un par de claves publica/privada sin palabra de paso en la máquina cliente y autorizar nuestra clave pública en el servidor. Ejecutamos la utilidad ssh-keygen y generamos las claves:

[code]
javi@javi-dell:~/.ssh$ ssh-keygen -d
Generating public/private dsa key pair.
Enter file in which to save the key (/home/javi/.ssh/id_dsa): hola
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in hola.
Your public key has been saved in hola.pub.
The key fingerprint is:
cf:f5:d1:58:52:20:1a:4d:17:70:4c:fa:fc:e0:fc:f5 javi@javi-dell
[/code]

Hemos generado 2 ficheros: hola (clave privada) y hola.pub (clave pública). Con la opción -d indicamos que utilice el algoritmo dsa (ssh v1 utiliza claves rsa, mientras que ssh v2 utiliza claves dsa), a la primera pregunta respondemos con “hola” que será el nombre de nuestra clave, a continuación nos pedirá la palabra de paso, pulsaremos enter ya que no la necesitamos.

Ahora le mostraremos a nuestro servidor cual es la clave pública con la que nos vamos a conectar. Para ello copiamos el contenido del fichero hola.pub (nuestra clave pública) a una nueva linea del fichero /home/usuario/.ssh/authorized_keys de nuestro servidor, si no existe lo creamos.
Y probamos a conectar utilizando la clave creada:
[code]
ssh -i /home/usuario/.ssh/hola host
[/code]
Podemos utilizar la opción -v para imprimir los pasos que se realizan para conectar y la opción -2 para forzar a que conecte mediante ssh2 si este no es nuestro protocolo por defecto.

Con esto ya deberíamos tener nuestros equipos autentificados mediante claves dsa.

Procedemos a crear el script que ejecutará los backups backup.sh

[code]
#!/bin/bash

# ARRAY con los directorios origen a copiar
ORG[1]="/home/usuario/_TEMP/org1";
ORG[2]="/home/usuario/_TEMP/org2";
ORG[3]="/home/usuario/_TEMP/org3";

# ARRAY con los directorios destino
DEST[1]="/home/usuario/_TEMP/dest1";
DEST[2]="/home/usuario/_TEMP/dest2";
DEST[3]="/home/pepe/";

# Usuario y host de la conexion, dejar en blanco para copiar al mismo equipo o unidad extraible
conn[1]="";
conn[2]="";
conn[3]="pepe@picaso:";

# Opciones de rsync
opts[1]=" -ah";
opts[2]=" -ah";
opts[3]=" -avhe";

# Especificamos el fichero de clave para autentificación, dejar en blanco si no se utiliza
key[1]="";
key[2]="";
key[3]="ssh -i /home/pepe/.ssh/hola";

fecha=`date`

# Recorremos los arrays con los directorios a copiar
i=1;
for j in ${ORG[*]}; do

if (rsync ${opts[i]} "${key[i]}" ${ORG[i]} ${conn[i]}${DEST[i]} --log-file=backup.log ) then
echo "$fecha Sincronización terminada con EXITO" >> backup.log;
else
echo "$fecha se ha producido un ERROR durante la sincronización" >> backup.log;
fi
echo "-----------------------------------------------------------" >> backup.log;

i=`expr $i + 1` #Incrementamos contador en 1
done
[/code]

Y finalmente lo añadimos a nuestro cron para que se ejecute periódicamente, por ejemplo:
[code]
crontab -e

# m h dom mon dow command
00 22 * * * /home/usuario/backup.sh
[/code]
Le decimos que se ejecute todos los días a las 22h.

Leave a comment

Rememberthemilk – Gestor de tareas online

Mi situación profesional de una tiempo a esta parte incluye tanto proyectos en pleno desarrollo como multitud de pequeñas tareas de mantenimiento, sistemas, estimaciones e investigación de nuevas herramientas para hacer que nuestro trabajo diario sea más productivo, esto, junto con mis estudios en la uoc hacen que la organización de mi tiempo sea algo fundamental para no agobiarme y terminar sin hacer nada bien y a tiempo.

Desde hace tiempo vengo utilizando diferentes gestores de tareas, evolution; gtodo; el outlook de mi axim x50; los gadgets de igoogle; hasta que me he topado con rememberthemilk.
Rememberthemilk

Rememberthemilk es otra web etiquetada beta/2.0 con la que podremos gestionar nuestras tareas desde cualquier lugar. La interfaz que nos ofrece es de lo mas sencilla e intuitiva que nos podamos encontrar. Prueba del gran nivel de usabilidad lo constatamos al insertar una fecha de vencimiento o repetición, solo nos acepta cadenas del tipo ayer,ahora,mañana,el lunes a la 1, etc., no os imaginais lo intuitivo que es insertar una fecha de esta forma.

Además de la web, en rememberthemilk nos ofrecen la posibilidad de integrar nuestras tareas con windows mobile, google gears, igoogle gadget, netvides y otros servicios que podemos consultar en esta dirección http://www.rememberthemilk.com/services/.

Como mejora a veces echo en falta la posibilidad de añadir algún nivel mas de prioridad y el poder agrupar tareas.

1 Comment