sábado, 28 de diciembre de 2013

Música para Programadores

Muchas veces, mientras nos encontramos programando, necesitamos fuentes de inspiración que nos hagan sentir que lo que estamos escribiendo no es cualquier cosa sino que es algo que cambiará el mundo. Y justamente es la música uno de estos elementos que realmente influye en nuestra capacidad de abstracción. En este post les compartiré algunos temas que, a mi parecer, motivan nuestro espíritu de profesionales de la tecnología.

Aquí va el primer tema. Quién no se quiere sentir como Ivan Vanko (IronMan 2) mientras desarrolla el traje con el que hará frente a Tony Stark. Un excelente tema como para cuando estamos intentando romper la seguridad WEP de la wifi de nuestros vecinos.


El segundo tema es muy bueno cuando necesitamos un poco de tranquilidad. De pronto algo no nos funciona y necesitamos una voz motivadora, ahí viene Optimus Prime para decirnos que, a pesar que aparentemente no hay ningún plan, al final todo estará bien.


El tercer tema lo recomiendo si nos encontramos desarrollando algún proyecto de electrónica o robótica. Ser como IronMan es algo que muchos programadores anhelamos. A pesar de solo estar grabando un programilla que encienda un led utilizando un 16F84A, muchos programadores sienten que a la larga podrán tener su propio traje de IronMan (Adelante gente, sí se puede!).


Y no necesariamente los temas tienen que ser películas de ciencia ficción, este cuarto tema es una prueba de ello. Quizás nos toca implementar el algoritmo de la cerradura convexa en 3D (que no es para nada sencillo) y necesitamos transportarnos a otros tiempos, despejar la mente. Utilizemos este tema.


Tampoco debe ser necesariamente el soundtrack de alguna película. Dejé esta canción en esta 5ª posición a propósito pues si la colocaba en primer lugar quizás no hubiesen terminado de leer este artículo. Y es que mucha gente debe detestar estas canciones que hace algunos años eran la música de fondo de cualquier tontería que uno suele encontrar en youtube. Al márgen de ello, son muy agradables mientras uno programa. 


También a los endings de algunos animes vale la pena incluirlos en esta lista. Slam Dunk, por ejemplo, nos ofrece uno de los mejores temas que he podido escuchar y que merece estar en el m3u de cualquier programador de esta era.


Y para cuando toque amanecerse, el elegir las canciones correcta puede ayudarnos a olvidar el sueño y la cama. Amigos programadores me han sugerido esta canción que sin duda nos librará de las tentaciones de dormir.

Y así, la lista puede continuar. Poco a poco iré actualizando este artículo con la sugerencia de ustedes amigos lectores. Un saludos y felices fiestas de fin de año.

lunes, 23 de diciembre de 2013

Agregar imágen a reporte con IText y Java

IText es una librería de código abierto que nos permite crear y manipular archivos PDF. Entre las bondades de esta librería está el poder manejar imágenes en nuestros documentos generados de manera dinámica. En este artículo les voy a mostrar cómo insertar imágenes en un tabla dentro de un reporte. Lo primero que debemos hacer es tener agregado el archivo jar a nuestro proyecto tal como se muestra en la siguiente imagen:


Luego de esto, deberíamos tener una clase como la que se muestra:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rolandopalermo.blog.facturacion;

/**
 *
 * @author Rolando
 */
import com.itextpdf.text.BadElementException;
import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.net.MalformedURLException;

public class Reporte {

    public static final String RESULTADO = "D:\test.pdf";

    public void crearPDF(String filename) throws IOException, DocumentException {
        // Paso 1
        Document document = new Document(PageSize.A4, 30, 30, 30, 30);
        // Paso 2
        PdfWriter.getInstance(document, new FileOutputStream(filename));
        // Paso 3
        document.open();
        // Paso 4
        PdfPTable table = crearTabla();
        document.add(table);
        // Paso 5
        document.close();
    }

    public static PdfPTable crearTabla() throws DocumentException, BadElementException, MalformedURLException, IOException {
        PdfPTable table = new PdfPTable(2);
        table.setWidthPercentage(100f);
        PdfPCell cell;
        Image image = Image.getInstance("mudvayne.jpg");
        cell = new PdfPCell(image);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase("Mudvayne es una banda de metal alternativo formada en Peoria, Illinois en 1996. Consta de cuatro miembros, el cantante principal Chad Gray, Greg Tribbett en guitarras, Ryan Martinie en bajos y Matthew McDonough en batería."));
        table.addCell(cell);
        return table;
    }

    public static void main(String[] args) throws IOException, DocumentException {
        new Reporte().crearPDF(RESULTADO);
    }
}
Y este sería el resultado sería el siguiente:


Como vemos, poder agregar imágenes con iText es relativmanete sencillo. En un siguiente artículo les mostraré algunas cosas adicionales que podemos hacer con iText. Saludos y hasta una próxima oportunidad.

domingo, 1 de diciembre de 2013

Java a XML (Marshalling)

En este artículo vamos a hablar un poco acerca de cómo convertir objetos Java a XML. Este proceso de conversión recibe el nombre de Marshalling, que en computación define el proceso de transformar la representación de un objeto en memoria a un formato de transmisión o almacenamiento. En este contexto Marshalling es convertir un objeto Java en su respectiva representción XML.

Bien, empecemos creando una clase en Java con una serie de atributos.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rolandopalermo.test;

/**
 *
 * @author Rolando
 */
@XmlRootElement
public class Factura {

    protected String razonSocial;
    protected String nombreComercial;
    protected String ruc;
    protected String claveAcceso;
    protected String codigoDoc;

    public String getClaveAcceso() {
        return claveAcceso;
    }

    public void setClaveAcceso(String claveAcceso) {
        this.claveAcceso = claveAcceso;
    }

    public String getCodigoDoc() {
        return codigoDoc;
    }

    public void setCodigoDoc(String codigoDoc) {
        this.codigoDoc = codigoDoc;
    }

    public String getNombreComercial() {
        return nombreComercial;
    }

    public void setNombreComercial(String nombreComercial) {
        this.nombreComercial = nombreComercial;
    }

    public String getRazonSocial() {
        return razonSocial;
    }

    public void setRazonSocial(String razonSocial) {
        this.razonSocial = razonSocial;
    }

    public String getRuc() {
        return ruc;
    }

    public void setRuc(String ruc) {
        this.ruc = ruc;
    }
}
A partir de esa clase nosotros podemos crear su representación XML a través del siguiente código:
public static void main(String[] args) {
    Factura f = new Factura();
    f.setClaveAcceso("123456789");
    f.setCodigoDoc("0149");
    f.setNombreComercial("Rolando Palermo Consultores");
    f.setRuc("10456095424");
    OutputStreamWriter out = null;
    try {
        JAXBContext context = JAXBContext.newInstance(
                new Class[]{Factura.class});
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty("jaxb.encoding", "UTF-8");
        marshaller.setProperty("jaxb.formatted.output",
                Boolean.valueOf(true));
        out = new OutputStreamWriter(new FileOutputStream(
                "D:\test01.xml"), "UTF-8");
        marshaller.marshal(f, out);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}
El resultado de la ejecución de este método main dará el siguiente resultado: