Preguntas del desarollo en C en el 2017

Estándar
Dudas de programación

Dudas de programación

Transcript

Narración: Al momento de dar el curso de C a una posible nueva generación de programadores, Hash cae en una gran duda existencial…

Narración: ¿#include se pronuncia “gato-include” o “hashtag-include” ?

Anuncios

Elenco

Estándar

No se si les he dicho, pero la idea con los comics que he hecho es hacer un webComic ya propiamente dicho y bueno en lo que resuelvo los detalles que aun me faltan para es (guiones, ver como hacer un comic sobre programación, etc) aqui va una foto con el potencial elenco :P.

Elenco

Elenco

Encabezados, pie de pagina y conteo de paginas en iText 7

Estándar

Recientemente la librería iText ha liberado su nueva versión la 7.0.2 y en algo que honestamente espero no se haga costumbre (aunque hay mal precedente si recuerda el cambio de la versión 4 a la 5…) las clases y varios de los métodos han sido re escritos desde cero, ¿Como le afecta esto? pues si quiere hacer uso de la versión mas reciente toca hacer una reescritura significativa ya que la versión 5 y 7 no son compatibles entre si y no espere que los ejemplos previos le ayuden.

Esto es particularmente latoso si ya estaba creando encabezado y conteos de pagina como se había descrito en este blog previamente (para la versión 5 de iText), pero no desespere, aquí esta como hacerlo en iText 7

Documento pdf con encabezado y pie de pagina

Documento pdf con encabezado y pie de pagina

En esta entrada veremos como usar iText 7 y el nuevo modelo de eventos para crear un encabezado con un mensaje personalizable y un pie de pagina con el numero de pagina actual, para evitar confundirlo si no a usado iText antes y que esta entrada sea demasiado larga, no se haran comparaciones con la versión anterior y nos enfocaremos en como hacerlo en iText 7.

Agregando iText 7 a su proyecto

Configuración Maven de iText 7

Configuración Maven de iText 7

Para este ejemplo usaremos Maven para agregar las librerias al proyecto, puede usar ya sea el pom.xml o agregar la dependencia itext7-core via NetBeans en este ejemplo usaremos la versión 7.0.2.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>mx.hashSoft</groupId>
    <artifactId>iText7</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext7-core</artifactId>
            <version>7.0.2</version>
            <type>pom</type>
        </dependency>
    </dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
</project>

Eventos de documento

El ejemplo que usaremos para explicar el uso de iText 7 es bastante sencillo, crea un documento pdf el cual solo contendrá lineas y lineas de “Hola Mundo!” y que tendrá un encabezado con el mensaje “Departamento de Recursos Humanos” y un pie de pagina con el numero de pagina actual.

El pie de pagina y encabezado son creados por una clase que implementa la interfaz IEventHandler esta clase se agrega como manejador de evento al objecto documento y se indica cual evento manejara, de modo que se pueden tener múltiples clases manejando diferentes eventos en el mismo documento.

En este caso particular manejaremos el evento PdfDocumentEvent.END_PAGE el cual se activa cuando se llega al final de la pagina, en este punto agregamos el encabezado, pie de pagina y obtendremos el numero de pagina en el que vamos.

Canvas y rectángulos

Al ver el código de la clase EventoPagina seguramente notara que aparte de las tablas que contienen el texto que deseamos mostrar notara que se crean varios objectos Canvas y Rectangle estos cumplen una función muy simple ya que nos permiten colocar los objectos Table donde queramos, sin mover los demás elementos, el objeto Rectangle indica el área donde colocaremos la tabla y con el objecto Canvas lo dibujaremos en ese lugar.

Código

Ahora si vamos a lo bueno, para este ejemplo usaremos dos clases la ya mencionada EventoPagina la cual manejara el evento PdfDocumentEvent.END_PAGE e iText7 esta clase crea el documento Pdf y su contenido, ambas clases tienen comentarios que espero sean suficientes para hacer comprensible su función.

package mx.hashsoft.itext7;

import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import java.io.FileNotFoundException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author david
 */
public class iText7 {

    static public void main(String[] args) {
        try {
            // Creamos el escritor del archivo pdf
            PdfWriter pdfWriter = new PdfWriter("./ejemplo_itext7.pdf");
            // Creamos el documento PDF que se almacenara via el escritor
            PdfDocument pdfDoc = new PdfDocument(pdfWriter);
            // Creamos el documento pdf en si, con pagina tamaño letra
            Document doc = new Document(pdfDoc, PageSize.LETTER);
            // Creamos el manejador de evento de pagina, el cual agregara
            // el encabezado y pie de pagina
            EventoPagina evento = new EventoPagina(doc);

            // Indicamos que el manejador se encargara del evento END_PAGE
            pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, evento);
            
            // Establecemos los margenes
            doc.setMargins(75, 36, 75, 36);

            // Creamos el contenido, por motivos de ejemplo es solo Hola Mundo!
            // una y otra vez
            for (int i = 0; i < 450; i++) {
                doc.add(new Paragraph("Hola Mundo!"));
            }

            // Cerramos el documento
            doc.close();

        } catch (FileNotFoundException ex) {
            Logger.getLogger(iText7.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
package mx.hashsoft.itext7;

import com.itextpdf.kernel.events.Event;
import com.itextpdf.kernel.events.IEventHandler;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Table;

/**
 *
 * @author david
 */
public class EventoPagina implements IEventHandler {

    private final Document documento;

    public EventoPagina(Document doc) {
        documento = doc;
    }
    
    /**
     * Crea el rectangulo donde pondremos el encabezado
     * @param docEvent Evento de documento
     * @return Area donde colocaremos el encabezado
     */
    private Rectangle crearRectanguloEncabezado(PdfDocumentEvent docEvent) {
        PdfDocument pdfDoc = docEvent.getDocument();
        PdfPage page = docEvent.getPage();        
        
        float xEncabezado = pdfDoc.getDefaultPageSize().getX() + documento.getLeftMargin();
        float yEncabezado = pdfDoc.getDefaultPageSize().getTop() - documento.getTopMargin();
        float anchoEncabezado = page.getPageSize().getWidth() - 72;
        float altoEncabezado = 50F;

        Rectangle rectanguloEncabezado = new Rectangle(xEncabezado, yEncabezado, anchoEncabezado, altoEncabezado);
        
        return rectanguloEncabezado;        
    }
    
    /**
     * Crea el rectangulo donde pondremos el pie de pagina
     * @param docEvent Evento del documento
     * @return Area donde colocaremos el pie de pagina
     */
    private Rectangle crearRectanguloPie(PdfDocumentEvent docEvent) {
        PdfDocument pdfDoc = docEvent.getDocument();
        PdfPage page = docEvent.getPage();
        
        float xPie = pdfDoc.getDefaultPageSize().getX() + documento.getLeftMargin();
        float yPie = pdfDoc.getDefaultPageSize().getBottom() ;
        float anchoPie = page.getPageSize().getWidth() - 72;
        float altoPie = 50F;

        Rectangle rectanguloPie = new Rectangle(xPie, yPie, anchoPie, altoPie);
        
        return rectanguloPie;
    }
    
    /**
     * Crea la tabla que contendra el mensaje del encabezado
     * @param mensaje Mensaje que desplegaremos
     * @return Tabla con el mensaje de encabezado
     */
    private Table crearTablaEncabezado(String mensaje) {
        float[] anchos = {1F};
        Table tablaEncabezado = new Table(anchos);
        tablaEncabezado.setWidth(527F);

        tablaEncabezado.addCell(mensaje);
        
        return tablaEncabezado;
    }
    
    /**
     * Crea la tabla de pie de pagina, con el numero de pagina
     * @param docEvent Evento del documento
     * @return Pie de pagina con el numero de pagina
     */
    private Table crearTablaPie(PdfDocumentEvent docEvent) {
        PdfPage page = docEvent.getPage();
        float[] anchos = {1F};
        Table tablaPie = new Table(anchos);
        tablaPie.setWidth(527F);
        Integer pageNum = docEvent.getDocument().getPageNumber(page);
        
        tablaPie.addCell("Pagina " + pageNum);
        
        return tablaPie;
    }
    

    /**
     * Manejador del evento de cambio de pagina, agrega el encabezado y pie de pagina
     * @param event Evento de pagina
     */
    @Override
    public void handleEvent(Event event) {
        PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
        PdfDocument pdfDoc = docEvent.getDocument();
        PdfPage page = docEvent.getPage();
        PdfCanvas canvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc);        
        
        Table tablaEncabezado = this.crearTablaEncabezado("Departamento de Recursos Humanos");
        Rectangle rectanguloEncabezado = this.crearRectanguloEncabezado(docEvent);        
        Canvas canvasEncabezado = new Canvas(canvas, pdfDoc, rectanguloEncabezado);        
        canvasEncabezado.add(tablaEncabezado);      

        Table tablaNumeracion = this.crearTablaPie(docEvent);
        Rectangle rectanguloPie = this.crearRectanguloPie(docEvent);
        Canvas canvasPie = new Canvas(canvas, pdfDoc, rectanguloPie);        
        canvasPie.add(tablaNumeracion);
    }
}

Espero que esta entrada halla sido de utilidad y nos vemos en la próxima :).

Subir un sitio a Apache Tomcat

Estándar
Subir un sitio a Apache Tomcat

Subir un sitio a Apache Tomcat

Subir un sitio a Apache Tomcat

Transcript
Panel 1
Hash: OK, ya diseño su sitio web ya demostro que SI entiende HTML, CSS, JavaScript y demas, solo queda una pregunta
Hash: ¿Como lo pongo en un servidor?
Hash: Aqui veremos como ponerlo en Apache Tomcat

Panel 2
Hash: Primero, coloque todos los archivos del sitio en una carpeta
Hash: No olvide verificar que los enlaces aun funcionen correctamente
Hash: Renombre la pagina inicial de su sitio como index.html
Hash: Y coloquelo directamente en el directorio de su sitio

Panel 3
Hash: Copie ese directorio directamente a la carpeta webapps de la instalación de Apache Tomcat

Panel 4
Hash: Inicie el servidor

Panel 5
Hash: ¡Y listo!
Hash: Con ir a <URL>:8080/<nombre carpeta> vera la pagina que nombro index.html

Panel 6
Hash: Espero que esto fuera de ayuda
Hash: Y nos vemos pronto

El precio del Nintendo Switch

Estándar

 

2017_02_08_precio

Me parece un poco exagerado

Transcript

El precio del Nintendo Switch

Panel 1
Narrador: Bueno, ahorré el aguinaldo y llevo ahorrando desde Diciembre.
Narrador: El precio del Nintendo Switch lo anuncian hoy

Panel 2
Narrador: Seguro me alcanza..

Panel 3
Narrador: Verdad…?

Panel 4
Narrador: NO
Narrador: Precio en Liverpool consultado el 2017-02-06

 

Maven para principiantes

Estándar
Maven para principiantes

Maven para principiantes

 

Transcript

Maven para principiantes

Panel 1

¿Buscando una sistema para realizar un proyecto con el minimo
de herramientas?

Maven es la opción

Una herramienta de software para la gestión y construcción de
proyectos Java creada por Jason van Zyl, de Sonatype, en 2002

Panel 2

Para comenzar, cree su entorno de trabajo con el comando

Panel 3

mvn archetype:generate -DgroupId=mx.hashCode.test -DartifactId=MavenCommand -DinteractiveMode=false

Hash: Que generara el directorio del proyecto conteniendo.

Panel 4

El archivo pom.xml es donde indicara como construir el
proyecto.

Hash: Y usando los comandos mvn compile mvn test

Hash: Compilara o realizara las pruebas al proyecto

Panel 5

Y si su proyecto necesita librerias extras Maven puede descargarlas
automaticamente

Panel 6

Agregarlas a su proyecto

Y estas se quedan en el caché de modo que puede usarlas sin conexión a
Internet

Panel 7

Para agregar librerias, agrege a su archivo pom.xml, en la sección de
dependencias.

<dependencies>
   <dependency>
      <groupId>idGrupo</groupId>
      <artifactId>IdArtefacto</artifactId>
      <version>verLibreria</version>
   </dependency>
</dependencies>

Los valores de idGrupo, idArtefacto y verLibreria para la libreria que
necesite se pueden hallar en https://mvnrepository.com/

Panel 8

Y tenemos el proyecto listo

Panel 9

No

Aun falta crear el .jar ejecutable

Panel 10

Para esto agrege en la seccion de su archivo pom.xml

<plugins>
   <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>3.0.0</version>
      <configuration>
         <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
         </descriptorRefs>
         <archive>
            <manifest>
               <mainClass>clasePrincipal</mainClass>
            </manifest>
         </archive>
      </configuration>
      <executions>
         <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
               <goal>single</goal>
            </goals>
         </execution>
      </executions>
   </plugin>
</plugins>

Panel 11

Hecho esto usamos mvn package..

Y lo tenemos un .jar ejecutable

Panel 12

Y no solo ejecutable con el plugin que usamos todas las dependencias
estan dentro del .jar

¿Y donde esta el .jar?

Panel 13

Lo hallará en la carpeta target del proyecto