¡Feliz Cumpleaños Linux!

Estándar
birthday

¡Feliz Cumpleaños Linux!

Y en los tiempos cuando los hombres eran hombres y escribían sus propios drivers, en la inmensidad de usenet, en el grupo comp.os.minix, un 25 de Agosto de 1991 Linus Benedict Torvalds proclamó:

“I’m doing a (free) operating system (just a hobby, won’t be big and
professional like gnu) for 386(486) AT clones. This has been brewing
since april, and is starting to get ready. I’d like any feedback on
things people like/dislike in minix, as my OS resembles it somewhat
(same physical layout of the file-system (due to practical reasons)
among other things).

I’ve currently ported bash(1.08) and gcc(1.40), and things seem to work.
This implies that I’ll get something practical within a few months, and
I’d like to know what features most people would want. Any suggestions
are welcome, but I won’t promise I’ll implement them 🙂

Linus (torvalds@kruuna.helsinki.fi)

PS. Yes — it’s free of any minix code, and it has a multi-threaded fs.
It is NOT protable (uses 386 task switching etc), and it probably never
will support anything other than AT-harddisks, as that’s all I have :-(.”

Y el resto es una historia que aún continúa, felicidades a Linux, a la comunidad y los usuarios :D.

Anuncios

Creando archivos Excel en Java, Un ejemplo MÁS práctico

Estándar

En un comentario se me mencionó algo que ya sospechaba, que el ejemplo que puse en la entrada Creando archivos Excel desde Java con Apache POI es demasiado simple y no particularmente práctico :P, por lo que llegó el momento de corregir eso con un ejemplo que muestre algunos de los “detalles” con los que hay que lidiar al momento de usar las librerías Apache POI.

Para este ejemplo haremos algo más elaborado, simularemos un reporte anual que nos presenta el siguiente formato:

  • La primera columna nos debe mostrar los nombres de los doce meses del año
  • La primera fila debe mostrar la numeración del 1 al 31 de modo que sepamos a qué día corresponde cada valor
  • Las filas 2 en adelante nos deben mostrar los porcentajes de cada día de ese mes

Y para que quede más claro veamos como se verá el resultado.

 

2016-08-24 (1)

Como se vería nuestro reporte

Antes de pasar al código recuerde agregar las librerías de Apache POI a su proyecto, pues de lo contrario no tendrá las clases necesarias y no compilara, dicho esto vamos al código, espero que los comentarios dejen en claro que hace cada sección.

package ejemploexcel;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

/**
 *
 * @author David
 */
public class EjemploExcel {

    /**
     * Programa de ejemplo para la creacion de un archivo de excel
     * 
     * El programa simulara un reporte anual mostrando los porcentajes de cada
     * dia del año (simulados via numeros aleatorios) en el formato:
     * 
     * <nombre mes> <dia 1> <dia 2> <dia 3>...
     * 
     * Cada fila tendra el largo correspondiente a los dias de dicho posicion
     * 
     * @param args
     */
    public static void main(String[] args) {
        // Creamos nuestro libro de excel
        HSSFWorkbook workbook = new HSSFWorkbook();
        
        // Creamos una hoja de calculo llama "Reporte" en dicho libro de excel
        HSSFSheet sheet = workbook.createSheet("Reporte");
        
        // Un arreglo con los nombres de los meses del año
        String[] meses = {"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"};
        // Un arreglo con la duración de cada mes
        Integer[] diasMes = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        
        // Creamos un formato para las celdas
        HSSFCellStyle style = workbook.createCellStyle();        
        // Especificamente que *siempre* muestre dos digitos enteros y dos decimales
        style.setDataFormat(workbook.createDataFormat().getFormat("00.00"));
        
        // En la primera fila ponemos el numero del dia
        Row encabezado = sheet.createRow(0);
        // i empieza en 1 para alinear el numero de dias con los datos ya que
        // la columna 0 se usara para el nombre del posicion
        for (int i = 1; i < 32; i++) {
            Cell celda = encabezado.createCell(i);
            celda.setCellValue(i);
        }
        
        
        // Este ciclo ira creando las *filas*, una por cada mes del año
        // la variable posicion indicara en que fila nos encontramos, mientras que mes
        // selecionara el nombre del mes.
        // posicion comienza en 1 para compensar que ya usarmos la fila 0 para
        // poner los dias
        for(int posicion = 1, mes=0; mes < meses.length; posicion++, mes++) {
            // Creamos una fila en la posicion indicada por el contador del ciclo
            Row fila = sheet.createRow(posicion);
            
            // Creamos la celda para el nombre del mes, en la primera posicion de la fila
            Cell celdaMes = fila.createCell(0);
            // Indicamos que valor debe tener
            celdaMes.setCellValue(meses[mes]);
            
            // Este ciclo ira llenando las *celdas* en la fila que acabamos de
            // crear, llenando solo el numero de celdas indicado por el numero
            // de dias
            
            // Empezamos en 1 y le sumamos 1 a los dias del posicion para compensar
            // que la celda 0 la usamos para el nombre del posicion
            
            for (int dia = 1; dia < diasMes[mes] + 1; dia++) {
                // Creamos una celda en posicion indicada de la fila en la que
                // estamos trabajando
                Cell celda = fila.createCell(dia);
                // Indicamos el formato que la celda usara
                celda.setCellStyle(style);
                // Creamos el porcentaje de ese dia
                Double porcentaje = Math.random() * 100;
                // Almacenamos el porcentaje en la celda del dia
                celda.setCellValue(porcentaje);                
                
            }  
            // Al momento que el ciclo de otra vuelta el valor de posicion se incrementara
            // de modo que al crear una nueva fila, esta estara ubicada en la
            // *siguiente* fila y no sobre escribira la que hemos creado
        }
        
        // Ahora almacenaremos el archivo en disco
        try {
            File archivo = new File("ejemplo.xls");
            FileOutputStream out = new FileOutputStream(archivo);
            workbook.write(out);
            out.close();
        } catch (IOException e) {
            System.err.println("ERROR AL CREAR EL ARCHIVO!");
            e.printStackTrace();
        }
        
        System.out.println("Reporte generado");
        
    }
    
}

La caida de Struts

Estándar
2016_08_12_struts_fall

Hubo Complicaciones…

Pues si, intentar usar la nueva versión de Struts dio demasiada lata, así que de aquí en adelante los tutoriales de aplicaciones web serán con Spring MVC

Panel 1
Parecia simple, hacer unos ejemplos con Struts 2.5 para e blog..

Hash: ¡¿Que diablos paso?!, ¡Faltan jars!, ¿¡Xwork-core!?, ¡Tomcat 8 NO soportado!, ¿¡Java 8 no soportado?!

Pero hubo complicaciones

Panel 2
Hash: ¿Hm?

Panel 3
Al parecer la nueva version de Struts tiene ciertos “detalles”

Panel 4
Que seria mejor evitar
Hash: ¡YA ESTUVO!, ¡NOS CAMBIAMOS DE FRAMEWORK!

Panel 5
¡Nos pasamos a Spring MVC!