martes, 28 de julio de 2009

Generar un PDF en Java usando iText JAR






 El propósito de este post es generar un pdf sencillo mediante Java.

Descargar la librería.

Nos vamos a la página http://www.lowagie.com/iText/download.html y descargamos iText core. La importamos en nuestro proyecto yendo al menú Project / Properties / Java Build Path / Libraries / Add External JARs ... y seleccionamos dicho paquete

El código.

Se trata de una aplicación muy sencilla que escribirá en el pdf un párrafo con un saludo y otro con la fecha actual.
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;

import com.lowagie.text.Document;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;

public class GeneratePDF {

    public static void main(String[] args) {
        try {
            OutputStream file = new FileOutputStream(new File("C:\\Test.pdf"));

            Document document = new Document();
            PdfWriter.getInstance(document, file);
            document.open();
            document.add(new Paragraph("Hola a todos!"));
            document.add(new Paragraph(new Date().toString()));

            document.close();
            file.close();

        } catch (Exception e) {

            e.printStackTrace();
        }
    }
}

Fuentes.


http://viralpatel.net/blogs/2009/05/20-useful-java-code-snippets-for-java-developers.html




Monitorizar red Symio / Alcatel X060 con Conky

Introducción.


Vamos a ver cómo monitorizar el tráfico de la red Symio usando el modem Alcatel X060 mediante Conky. Podremos ver los Mb de bajada y subida desde que iniciamos la sesión, así como la tasa de subida y de bajada.



Empezamos.


Como vimos en el post Personalizar Conky, yo parto del tema CONKY-colors, descargable desde http://gnome-look.org. A partir de ahí, podemos modificarlo editando .conkyrc colocándonos en nuestro directorio personal y tecleando:


   gedit ./conkyrc

Debemos saber cómo se llama el interfaz a monitorizar. Si hace poco que instalamos el modem, al hacer ifconfig veremos que tenemos una nueva, llamada ppp0. Ésa es la que nos interesa.

Ya que hemos abierto .conkyrc en gedit, buscamos el párrafo donde pone RED. Lo que he hecho ha sido copiar el código de uno de los otros interfaces y añadirlo debajo cambiando su nombre por el de ppp0. Después de modificar, el apartado red quedará así (lo que yo he añadido está en negrita):


   RED ${hr 2}
   ${if_existing /proc/net/route wlan0}
   ${voffset -6}${font PizzaDude Bullets:size=14}O${font} Up: ${upspeed wlan0} kb/s ${alignr}${upspeedgraph wlan0 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}U${font} Down: ${downspeed wlan0} kb/s ${alignr}${downspeedgraph wlan0 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}N${font} Upload: ${alignr}${totalup wlan0}
   ${voffset 4}${font PizzaDude Bullets:size=14}T${font} Download: ${alignr}${totaldown wlan0}
   ${voffset 4}${font PizzaDude Bullets:size=14}Z${font} Señal: ${wireless_link_qual wlan0}% ${alignr}${wireless_link_bar 8,60 wlan0}
   ${voffset 4}${font PizzaDude Bullets:size=14}a${font} Ip Local: ${alignr}${addr wlan0}
   ${voffset 4}${font PizzaDude Bullets:size=14}b${font} Ip Pública: ${alignr}${execi 1 ~/.scripts/ip.sh}
   ${else}${if_existing /proc/net/route eth0}
   ${voffset -6}${font PizzaDude Bullets:size=14}O${font} Up: ${upspeed eth0} kb/s ${alignr}${upspeedgraph eth0 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}U${font} Down: ${downspeed eth0} kb/s ${alignr}${downspeedgraph eth0 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}N${font} Upload: ${alignr}${totalup eth0}
   ${voffset 4}${font PizzaDude Bullets:size=14}T${font} Download: ${alignr}${totaldown eth0}
   ${voffset 4}${font PizzaDude Bullets:size=14}a${font} Ip Local: ${alignr}${addr eth0}
   ${voffset 4}${font PizzaDude Bullets:size=14}b${font} Ip Pública: ${alignr}${execi 1 ~/.scripts/ip.sh}
   ${endif}${else}${if_existing /proc/net/route eth1}
   ${voffset -6}${font PizzaDude Bullets:size=14}O${font} Up: ${upspeed eth1} kb/s ${alignr}${upspeedgraph eth1 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}U${font} Down: ${downspeed eth1} kb/s ${alignr}${downspeedgraph eth1 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}N${font} Upload: ${alignr}${totalup eth1}
   ${voffset 4}${font PizzaDude Bullets:size=14}T${font} Download: ${alignr}${totaldown eth1}
   ${voffset 4}${font PizzaDude Bullets:size=14}a${font} Ip Local: ${alignr}${addr eth1}
   ${voffset 4}${font PizzaDude Bullets:size=14}b${font} Ip Pública: ${alignr}${execi 1 ~/.scripts/ip.sh}
   ${endif}${else}${if_existing /proc/net/route ppp0}
   ${voffset -6}${font PizzaDude Bullets:size=14}O${font} Up: ${upspeed ppp0} kb/s ${alignr}${upspeedgraph ppp0 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}U${font} Down: ${downspeed ppp0} kb/s ${alignr}${downspeedgraph ppp0 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}N${font} Upload: ${alignr}${totalup ppp0}
   ${voffset 4}${font PizzaDude Bullets:size=14}T${font} Download: ${alignr}${totaldown ppp0}
   ${voffset 4}${font PizzaDude Bullets:size=14}a${font} Ip Local: ${alignr}${addr ppp0}
   ${voffset 4}${font PizzaDude Bullets:size=14}b${font} Ip Pública: ${alignr}${execi 1 ~/.scripts/ip.sh}
     ${endif}${else}
   ${font PizzaDude Bullets:size=14}4${font} Red No disponible
   ${endif}

Ya solo tenemos que reiniciar Conky: Primero lo paramos tecleando "killall conky". Y lo arrancamos mediante la combinación Alt+F2 y escribiendo Conky.






 

 

 

 

Agradecimientos


A Borja por su excelente post "Simyo + Alcatel X060 + Ubuntu 9.04" y a Javi por su aportación imprescindible. Gracias a ellos he configurado mi módem en Ubuntu.




viernes, 24 de julio de 2009

Copia de Archivos en Java

http://ubuntuarte.com/wordpress/wp-content/uploads/2008/06/java-orangebox.png




La librería java.nio


Esta librería apareció con java 1.4 y básicamente lo que hace es definir buffers, los cuales contienen datos. En este post se verá cómo haciendo uso de su clase FileChannel, podemos conseguir una copia de archivos de alto rendimiento.




El código




public static void copyFile(File sourceFile, File destFile) throws IOException {

if(!destFile.exists()) {

destFile.createNewFile();

}



FileChannel source = null;

FileChannel destination = null;

try {

source = new FileInputStream(sourceFile).getChannel();

destination = new FileOutputStream(destFile).getChannel();

destination.transferFrom(source, 0, source.size());

}

finally {

if(source != null) {

source.close();

}

if(destination != null) {

destination.close();

}

}

}





Y desde nuestro main podemos llamar a este método así:




public static void main(String[] args) throws IOException {

File archivoEntrada = new File("C:/archivoEntrada.txt");

File archivoSalida = new File("C:/archivoSalida.txt");

copyFile(archivoEntrada, archivoSalida);

}





Explicación


La línea que realiza la transperencia es " destination.transferFrom(source, 0, source.size()); ". El algoritmo utilizado está muy optimizado y su rendimiento será mucho mayor que si la operación la hiciéramos usando bloques de memoria de tamaño arbitrario. Además puede ser opimizado según la plataforma, el contexto y tipo de canal, ó puede usar un método nativo en las llamadas.


Se pueden hacer pruebas usando archivos de entre 50 y 100 megas por ejemplo, y se verá que el tiempo utilizado es muy similar al usado por el sistema operativo.




Fuentes


NIO: High Performance File Copying de http://www.javalobby.org




jueves, 16 de julio de 2009

Añadir texto a un archivo en Java



Vamos a ver un ejemplo de lo más simple en el manejo de archivos. Consistirá simplemente en añadir un texto a un archivo. Si el archivo no existe se creará.



Ejemplificando


Queremos añadir el texto "Hola" al archivo prueba.txt que está en la unidad C. El código sería el siguiente:


BufferedWriter out = null;   
try {   
    out = new BufferedWriter(new FileWriter("C:/prueba.txt", true));   
    out.write("Hola");   
} catch (IOException e) {   
    // error processing code   
} finally {   
    if (out != null) {   
        out.close();   
    }   
} 



Fuentes


http://viralpatel.net/blogs/2009/05/20-useful-java-code-snippets-for-java-developers.html




martes, 14 de julio de 2009

Usar Breakpoints Condicionales en Eclipse

Los beakpoints (puntos de ruptura) condicionales son una buena forma de reducir el tiempo y una de esas características que puede que tu no conocieras. En este artículo se va a explicar como usarlos en el ide Eclipse.



Parte práctica


¿Has intentado depurar un problema que ocurre en alguna posición de una lista de 100 objetos?. Pensemos que tenemos este código:


for (int i = 0; i<100; i++)
                {
                        System.out.println(i);
                }

Y queremos depurar la posición 90. Tenemos que crear un breakpoint, luego pinchamos con botón derecho sobre el símbolo azul del breakpoint y elegimos "Breakpoint Properties". En la ventana Propiedades, marcamos "Enable Condition" y escribimos la condición o condiciones en el cuadro de texto.



De esa forma, llegará hasta la posición 89 y se parará. De modo que habremos llegado a la posición que queríamos depurar.





 

 

 

 

 

 

 


 


 


Fuentes


http://www.java-hair.com/2008/06/30/using-conditional-breakpoints/




sábado, 11 de julio de 2009

Técnicas CSS. Parte 1

Éste es el primero de una serie de post dedicados a CSS, es decir hojas de estilos.



Técnica 1. Pequeña indicación.


Consiste en que al pasar el ratón sobre la palabra coloreada muestra un mensaje:




<style type="text/css">
a:hover {
  background:#ffffff;
  text-decoration:none;} /*BG color is a must for IE6*/
a.tooltip span {
  display:none;
  padding:2px 3px;
  margin-left:8px;
  width:130px;
}
a.tooltip:hover span{
 display:inline;
 position:absolute;
 background:#ffffff;
 border:1px solid #cccccc;
 color:#6c6c6c;
 }
 </style>
 
 
 Mi <a class="tooltip" href="#">consejo<span>No fume</span></a>.



Técnica 2. Elegir el color del texto seleccionado


El siguiente código nos va a permitir indicar el color de selección del texto mediante un valor hexadecimal.

::selection {
  background: #ffb7b7; /* Safari */
}

::-moz-selection {
  background: #ffb7b7; /* Firefox */
}





 










Fuentes:


http://www.catswhocode.com/blog/10-astonishing-css-hacks-and-techniques




Compartir Carpetas en VMWare





 Cuando estamos usando un sistema operativo de forma virtual, puede hacernos falta acceder a archivos y carpetas de un disco duro real. En este post vamos a mostrar cómo hacerlo usando Windows XP como SO huesped.
 

1. Seleccionar la carpeta a compartir.

  • En VMWARE accedemos al menú VM y pinchamos en Settings. Luego en pesataña Options seleccionamos Shared Folders.
  • Pulsamos Add para añadir un directorio, al que le ponemos nombre. Y ya nos aparecerá en el recuado Folders como añadida.

2. Agregar como nuevo sitio de red.

  • Ya en Windows nos vamos a Menú Inicio/Mis sitios de red. Pinchamos en Agregar nuevo sitio de red y pinchamos siguiente hasta que nos aparezca el botón Examinar.
  • Luego pinchamos en Examinar y nos movemos a / Toda la red / VMware Shared Folders y ahí buscamos la carpeta.
  • Pulsamos Siguiente hasta el final y ya tendremos nuestra carpeta compartida.
  • Ahora siempre que queramos, podremos acceder a las carpetas compartidas en la dirección \\.host\Shared Folders




jueves, 9 de julio de 2009

Archivos hbm en Hibernate



 

 

 

 

 

¿Qué son?


Los hbm son archivos de mapeo de hibernate. Son de tipo xml y representan a una clase y tabla determinada. Haremos un ejemplo para ilustrar esta explicación.


Vamos a lo práctico


Pensemos que queremos implementar una relación muchos a muchos con las siguientes tablas:
  • Autobus (id, marca, antiguedad)
  • Conductor (id, nombre, edad)
Lo primero es indicar en hibernate.cfg, donde está los archivos de mapeo:
/src/hibernate.cfg.xml

<hibernate-configuration>
<session-factory>

...

<mapping resource="es/felipe/compañia/Conductor.hbm.xml" />
<mapping resource="es/felipe/compañia/Autobus.hbm.xml" />

</session-factory>

</hibernate-configuration>

Posteriormente creamos Conductor.hbm.xml. Mirando el código nos tendremos que dar cuenta de:
  • Las Tablas: Se creará una tabla AUTOBUS_CONDUCTOR que relacionará la tabla AUTOBUS y la tabla CONDUCTOR.
  • Los Objetos: Se relacionarán así: una colección de objetos de tipo Set en la clase Conductor, contendrá objetos Autobus. (Nota: Se ha usado un Set, pero podría haber sido cualquier otra coleccion de objetos).

/src/es/felipe/compañiaAutobus/conductor.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="es.felipe.compañia">
<class name="Conductor">
<id name="id" column="CONDUCTOR_ID">
<generator class="native"></generator>
</id>
<property name="nombre" />
<property name="edad" />
<set name="autobuses" table="AUTOBUS_CONDUCTOR">
<key column="CONDUCTOR_ID" />
<many-to-many column="AUTOBUS_ID"
class="Autobus" />
</set>
</class>
</hibernate-mapping> 

Y ahora el código de autobus.hbm.xml, que representa sólo la tabla Autobus:

/src/es/felipe/compañiaAutobus/autobus.hbm.xm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="es.felipe.compañia">
<class name="Autobus" table="AUTOBUS">
<id name="id" column="AUTOBUS_ID">
<generator class="native" />
</id>
<property name="antiguedad" />
<property name="marca" />
</class>
</hibernate-mapping> 

Luego vienen las clases respectivas. Veamos que en la clase Conductor existe la propiedad del tipo Set, que será una colección de objetos Autobus.
/src/es/felipe/compañiaAutobus/conductor.java

public class Conductor {private Long id;
private String nombre;
private int edad;
private Set autobuses = new HashSet();
public Conductor(){}
public Long getId() {}
public void setId(Long id) {}
public String getNombre() {}
public void setNombre(String nombre) {}
public int getEdad() {}
public void setEdad(int edad) {}
public Set getAutobuses() {}
public void setAutobuses(Set autobuses) {}
}
/src/es/felipe/compañiaAutobus/autobus.java

public class Autobus {
private Long id;
private int antiguedad;
private String marca;
public Autobus() {}
public Long getId() {}
private void setId(Long id) {}
public int getAntiguedad() {}
public void setAntiguedad(int antiguedad) {}
public String getMarca() {}
public void setMarca(String marca) {}
}
Espero que haya servido de ayuda y haya aclarado los conceptos, sobretodos a aquellos que empiezan con Hibernate.




Imprimir con PL/SQL: dbms_output.put_line




 

 

 

 

 

 

 

Introducción


Hoy vamos a ver la manera de imprimir por pantalla en PL/SQL. Lo haremos mediante put_line del paquete dbms_output. Éste es un método muy utilizado, sobretodo para realizar operaciones de depuración. Estudiaremos dos ejemplos muy sencillos.



El código


Concatenar una cadena de caracteres y un número, y mostrarlo:

Los string van entre comillas simples y se concatenan mediante ||. La función to_char convierte un número en cadena de caracteres.

 
  
   SQL> 
   SQL> set serveroutput on 
   SQL> declare 
   2 myNumber number := 1; 
   3 begin 
   4 myNumber := 1 + 1; 
   5 dbms_output.put_line( '1 + 1 = ' || to_char( myNumber ) || '!' ); 
   6 exception 
   7 when others then 
   8 dbms_output.put_line( 'We encountered an exception!' ); 
   9 end; 
   10 / 
   1 + 1 = 2! 
     
   PL/SQL procedure successfully completed. 
     
   SQL> 
   SQL> 
    
           

Mostrar valor de una variable:

Se muestra los distintos valores de una variable en las distintas iteracciones del bucle. Como hemos dicho antes, puede ser útil a la hora de depurar nuestros procedimientos:

 
  
   SQL> 
   SQL> --Basic loop 
   SQL> 
   SQL> 
   SQL> SET SERVEROUTPUT ON 
   SQL> DECLARE 
   2 x NUMBER := 1; 
   3 BEGIN 
   4 LOOP 
   5 DBMS_OUTPUT.PUT_LINE('This loop has executed'||TO_CHAR(x)||' time(s)'); 
   6 x := x +1; 
   7 EXIT WHEN x > 5; 
   8 END LOOP; 
   9 END; 
   10 
   11 
   12 / 
   This loop has executed1 time(s) 
   This loop has executed2 time(s) 
   This loop has executed3 time(s) 
   This loop has executed4 time(s) 
   This loop has executed5 time(s) 
     
     
   PL/SQL procedure successfully completed. 
    
           



Fuentes


http://www.java2s.com/Code/Oracle/PL-SQL/DBMS_OUTPUT.htm




miércoles, 8 de julio de 2009

Personalizar Conky



Qué es Conky


Para el que no lo conozca, Conky es una aplicación que se coloca en el escritorio y nos da diversa información: uso de cpu, memoria RAM, tasa de bajada y subida de la red, etc... Resulta muy aconsejable puesto que además de visualizar dichos datos, requiere pocos recursos.

En este post se verá cómo personalizarlo, añadiendo funcionalidad y cambiando su aspecto. Partiremos del tema conky-colors, que se puede descargar desde aquí o buscándo CONKY-colors en la página http://gnome-look.org. Se le pueden instalar unos scripts como Conky Weather ó Conky SSL Mail, pero eso será en otro momento. Lo que se va a explicar en concreto es cómo modificar el color de Conky, mostrar la temperatura de la CPU y visualizar los procesos que más recursos consumen.



Manos a la obra


El archivo .conkysrc situado en la carpeta personal podemos modificar cualquier parámetro. Así que tecleamos en consola:

 
gedit /home/usuario/.conkyrc

De ese modo podremos podremos modificarlo mediante gedit, aunque podemos usar cualquier editor de textos.


Modificación del color de Conky.


Buscamos mediante Control+F la variable default_color y la modificamos. Hay que tener en cuenta que es un valor hexadecimal. Yo he querido que Conky me aparezca en azul, así que le he puesto el valor 2b3acd, quedaría así:

 
default_color 2b3acd


Añadir la temperatura de la CPU.


La variable acpitemp nos dice dicha temperatura. Para que nos aparezca con el icono y la fuente de letra adecuados, añadimos ésta línea:


   ${font StyleBats:size=16}A${font} CPU Tº: ${acpitemp}º C

Realmente lo que da el valor es sólamente ${acpitemp}. El listado completo de las variables que podemos usar está aquí.


Mostrar los procesos que más recursos consumen.


Cuando el ordenador se nos ralentiza mucho, es bueno saber qué programas son los causantes. Por ello podemos mostrar los tres que más cpu consumen y los tres que más memoria usan. Conseguiremos eso añadiendo las siguientes líneas:


PROGRAMAS ${hr 2}

Highest CPU $alignr CPU% MEM%

${hr 1}

${top name 1}$alignr${top cpu 1}${top mem 1}

${top name 2}$alignr${top cpu 2}${top mem 2}

${top name 3}$alignr${top cpu 3}${top mem 3}

Highest MEM $alignr CPU% MEM%

${hr 1}

${top_mem name 1}$alignr${top_mem cpu 1}${top_mem mem 1}

${top_mem name 2}$alignr${top_mem cpu 2}${top_mem mem 2}

${top_mem name 3}$alignr${top_mem cpu 3}${top_mem mem 3}


Espero que haya sido de utilidad y un primer paso para que cada uno lo modifique según sus gustos y necesidades.




Felinfo: Java, Linux, Virtualización. Open Source.  ©Template Blogger Green by Dicas Blogger .

TOPO