lunes, 13 de junio de 2011

Drupal y Google: SiteMap, Analytics y AdSense

El principal cometido de un sitio web no es otro que dar promoción a alguna entidad a través de un medio tan global como es la red. Esta promoción necesita lógicamente las visitas de internautas que se cruzan con nuestro sitio por cualquier tipo de necesidad que nosotros podemos solucionar. Si además, podemos sacar rendimiento económico a esas visitas, mejor que mejor.

Nuestra página en Drupal nos puede ayudar gracias a algunos módulos a gestionar todo lo que hemos visto anteriormente, ya que la podremos combinar y promocionar en un buscador tan potente como Google que nos puede proporcionar numerosas visitas.

Vamos a ver como tres módulos nos puede ayudar a gestionar las visitas a nuestro espacio e intentar sacarle algún eurillo a nuestro sitio.

SiteMap

Si hay algo que valora el buscador Google a la hora de indexar una página es su orden y la capacidad de actualización y crecimiento en contenidos de la misma. Del crecimiento depende la voluntad del webmaster o de las necesidades informativas o de actualización del sitio. Del orden se ocupará el módulo SiteMap. Este módulo nos permitirá generar un Mapa Web de nuestro sitio de manera automática sin tener que escribir una sóla línea de código, amén de poder actualizar el mismo simplemente añadiendo o modificando los contenidos de nuestra página, es decir, si añado un nuevo apartado automáticamente SiteMap me lo ubicará en el mapa del sitio.

Instalar y poner a andar SiteMap es extremadamente fácil. Lo descargas (la url la tienes en el enlace de arriba), lo descomprimes, lo subes a tu sites/all/modules y lo activas. Si pones http://misitioDrupal/sitemap , ¡voilá! ahí tenemos nuestro mapa web. Más fácil y mejor imposible. En la administración del módulo podremos configurar si deseamos que algunas partes de nuestra web no aparezcan en el mapa.

Analytics

Una vez tenemos nuestro 'índice' del sitio web, Google nos facilita una herramienta para gestionar todo lo que rodea al tráfico web de nuestra aplicación. Tráfico, páginas vistas, ficheros descargados, media de tiempo de visita, motores de búsqueda desde los que se accede... es decir, con esta herramienta podrías ver desde donde obtienes más visitantes (Google, Bing, ...), que partes de la página son más visitadas y, por tanto, más interesantes para los visitantes, etc, etc. Interesante, ¿no?. 'Toneladas' de información que puedes obtener de tu sitio que 'dejan' los visitantes. Si quieres profundizar sobre esta herramienta y hacer auténticas 'virguerías' pueden entrar en Trucos Google Analytics

Una vez te has registrado en Google Analytics y has dado de alta tu sitio (no profundizaremos demasiado, ya que no es complicado), nos bajamos el módulo para Drupal llamado Google Analytics , lo descomprimimos, lo subimos a nuestro directorio de módulos y lo habilitamos. Accedemos a la administración del mismo y añadimos el ID para el sitio que hemos dado de alta en analytics indicando 'Único Dominio' y le indicamos que añada a todos los roles el seguimiento. Guardamos la configuración y en el plazo de un día (seguramente menos) cuando accedamos a nuestro Panel de Control de Google Analytics observaremos que empezamos a ver resultados, es decir, al lado de nuestro perfil del sitio veremos la señal de visto bueno verde y empezaremos a ver las visitas subir.

AdSense

Ya que tenemos organizado nuestro sitio y tenemos controlado y estudiado todo el tráfico que transcurre por él, es buena idea intentar sacarle rendimiento económico. Google AdSense es otra herramienta integrable en Analytics que te permitirá colocar anuncios en tu web y proporcionarte beneficios por clic.


Deberás darte de alta en Google AdSense, rellenar tus datos y esperar a que el programa de AdSense dé de alta tu solicitud. 

Cuando estés dado de alta, accediendo a tu panel de AdSense podemos ver todas las opciones y para empezar es recomendable crear un anuncio. En la pestaña "Mis Anuncios" podremos crear un panel con anuncios de diferentes tamaños y estilos personalizados, para que los podamos adaptar a la apariencia de nuestro sitio. Una vez creado, te saldrá en tu listado de Anuncios. La pantalla del listado de anuncios nos será útil en un futuro


Ahora vamos a integrar todo en Drupal. Nos bajamos el módulo AdSense, lo descomprimimos, lo subimos a nuestra localización de módulos y lo activamos (es necesario activar el módulo del Core Profile para poder activar AdSense). 

Pues vamos al menu de administración y entramos en el Apartado AdSense para incluir nuestro Id de usuario en la pestaña 'Publisher ID'.


A continuación, marchamos a la configuración y creamos un bloque (llámalo como quieras pero recuerda el nombre, recomiendo algo referente a AdSense). En el Body del bloque vamos a añadir el código que nos proporciona el listado de AdSense de anuncios para un anuncio creado, por ejemplo:



<script type="text/javascript"><!--
google_ad_client = "ca-pub-0000000000000000";
/* Bloque1 */
google_ad_slot = "0000000000";
google_ad_width = 250;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

Quítale los comentarios // y /* y publica el bloque. Ponlo en una zona visible y asegurate de que para tí no está activado, es decir, sólo para usuarios anónimos, por ejemplo. Así, no prodrás picar ni te aparecerán los anuncios, Google es muy escrupuloso con la gente que pica en sus propios anuncios, no es recomendable hacerlo.



Al rato, se activarán los anuncios en tu sitio y podrás empezar a ganar dinero por clic. 


Una vez realizadas todas estas operaciones tienes un sitio con anuncios que te rentan, con herramientas de seguimiento de visitas, buscadores, etc y una organización como si de un sitio profesional se tratara. Opcionalmente, tendrás la opción de profundizar en las herramientas de Google, que tienen muchísima "chicha" y con las que se puede jugar muchísimo, pero eso os lo dejo a vosotros, :P

martes, 7 de junio de 2011

Relleno de PDF Editables con iText 2.1.7

La librería iText tiene bastantes usos entre los que se encuentran las herramientas y métodos necesarios para la generación de un archivo pdf a partir de una información. Podemos decir que es la responsable última de crear el archivo PDF.


Sin embargo, nos hemos encontrado con un problema:


  • La librería de generación de informes, implementada en base a DynamicJasper, mostraba los informes a través de la clase JasperViewer, la cual daba opciones de exportación diversas (ODT, PDF, XLS,...). Sin embargo, con la versión antigua de iText (2.0.1) daba una excepción:

1   java.lang.NoSuchMethodError: com.lowagie.text.pdf.PdfWriter.setRgbTransparencyBlending(Z)V

  • Lógico es pensar en actualizar la librería. Actualizando a la última versión estable 2.1.7, arreglamos el problema anterior, pero a la hora de rellenar ficheros PDF que disponen de campos rellenables (Certificados de paternidad, de incapacidad temporal, ...) obteníamos el siguiente error:

1   com.lowagie.text.exceptions.BadPasswordException: PdfReader not opened with owner password

Explicamos las implementaciones con las que se ha solucionado el error.


Implementación para iText 2.0.1


Para el relleno de un formulario PDF con campos editables hemos seguido un algoritmo sencillo con el que no hay ninguna pega:


 1 public static void printPDFFields(String pathIN, String pathOUT) throws IOException, DocumentException {

 2    PdfReader reader = new PdfReader(pathIN);
 3    // Creamos el pdf de salida
 4    PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(pathOUT));

 5    // Rellenamos los campos
 6    //Obtenemos el formulario
 7    AcroFields form1 = stamp.getAcroFields();
 8    //Obtenemos los campos

 9    HashMap map = form1.getFields();
10    //Obtenemos el conjunto de claves de los campos que no es más que el nombre de los mismos
11    Set s = map.keySet();
12 

13    int i = 0;
14    //Recorremos todos las claves
15    for (Iterator it = s.iterator(); it.hasNext();) {

16         String key = (String) it.next();
17         int j = i++;
18         //Grabamos en el campo el valor de un contador
19         form1.setField(key, new Integer(j).toString());

20         if (form1.getFieldType(key) == AcroFields.FIELD_TYPE_CHECKBOX) {
21             //Comprobación de si el campo es un check
22             form1.setField(key, "");
23         }

24    }
25 
26    stamp.setFormFlattening(true);
27    stamp.close();
28 }

Esto sería un ejemplo para crear un pdf en 'pathOUT' a partir del formulario que se encuentra en la ruta 'pathIN' y cuyos campos estarían rellenos con un número que se iría incrementando. Esto da la excepción que hemos visto arriba si lo lanzamos con iText 2.1.7



NOTA: Para encontrar los valores válidos de un check hay que abrir el pdf como texto plano y buscar la etiqueta >>/N<< y a la derecha de ella se encontrará el valor que toma el check.



Implementación para iText 2.1.7



Para el relleno de un formulario PDF con campos con la siguiente versión de iText seguimos el siguiente método teniéndo en cuenta el atributo OWNER que hemos creado.



 1 private static final byte[] OWNER = "inss".getBytes();

 2 
 3 public static void printPDFFields(String pathIN, String pathOUT) throws IOException, DocumentException {

 4    PdfReader reader = new PdfReader(pathIN, OWNER);
 5    // Creamos el pdf de salida
 6    PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(pathOUT));

 7    // Rellenamos los campos
 8    //Obtenemos el formulario
 9    AcroFields form1 = stamp.getAcroFields();
10    //Obtenemos los campos

11    HashMap map = form1.getFields();
12    //Obtenemos el conjunto de claves de los campos que no es más que el nombre de los mismos
13    Set s = map.keySet();
14 
15    int i = 0;

16    //Recorremos todos las claves
17    for (Iterator it = s.iterator(); it.hasNext();) {
18         String key = (String) it.next();

19         int j = i++;
20         //Grabamos en el campo el valor de un contador
21         form1.setField(key, new Integer(j).toString());
22         if (form1.getFieldType(key) == AcroFields.FIELD_TYPE_CHECKBOX) {

23             //Comprobación de si el campo es un check
24             form1.setField(key, "");
25         }
26    }
27 

28    stamp.setFormFlattening(true);
29    stamp.close();
30 }

Así evitamos la excepción, pues con el OWNER le estamos proporcionando el ownerPassword del documento al constructor del PdfReader. Pero, ¿cómo obtenemos ese password?: Existen numerosas aplicaciones por la red que te ayudan a desencriptar o recuperar contraseñas de archivos PDF de este tipo. En particular, podemos usar la denominada Recovery PDF Password que nos dirá cual es la cadena de la que debemos obtener los bytes para pasarsela a OWNER y así poder trabajar correctamente con nuestro PDF editable

miércoles, 30 de marzo de 2011

Java: SCJP 310065: Aprueba en un mes

En esta entrada voy a describir el proceso que he seguido para aprobar el examen de certificación de Java (SCJP 310065). Te indico y te proporciono todo el material que he usado. No te aseguro que apruebes, pero si sigues estas indicaciones lo tendrás bastante encarrilado.

Paso 1: Teoría


Para empezar lo suyo es que le des una lectura rápida o una lectura a los resúmenes del libro de la editorial McGraw Hill de Kathy Sierra. Está muy bien y abarca todos los objetivos que se pide en el examen SCJP. Lo dicho, lo suyo es que te lo leas (aunque son 890 páginas) porque ahí viene todo y bien explicado. Lo puedes encontrar aquí

Paso 2: Afianzar Conocimientos

A continuación, haz ejercicios de http://www.javaranch.com/game/game2.jsp . Es un jueguecito donde te ponen preguntitas teóricas, no se parecen en nada a las del examen, pero para afianzar conocimientos está bastante bien, con preguntas sobre aspectos teóricos básicos y preguntas-trampa bastante interesantes. Te recomiendo que cada pregunta que falles la apuntes para luego ir repasando. Aquí tienes también las preguntas y respuestas en PDF que me curré tras crackear el applet del juego.

Paso 3: Exámenes

Sigue el método anterior y apúntate las preguntas que falles para luego repasarlas.

Te recomiendo las preguntas de JavaCertifications.net (están aquí) y los examenes de Marcus Green ( http://www.jchq.net/mockexams/exam1.htm , http://www.jchq.net/mockexams/exam2.htm , http://www.jchq.net/mockexams/exam3.htm )

Cuando hayas hecho todos estos exámenes te recomiendo que hagas los ejercicios del libro de Kathy Sierra para rematar. Están por capítulos y vienen las respuestas a continuación, están bastante bien y son similares a lo que te puedes encontrar en el examen.

Opcionalmente (yo sólo hice uno) y si quieres ver como es el examen, hay una aplicación que se llama ExamLab que contiene 5 exámenes con el formato del examen real, es decir, el examen que hagas ahí es como el examen que vas a hacer para la certificación. Son bastante complicados, aunque lo positivo es que encontrarás, una vez finalices cada examen, las respuestas y una explicación pregunta a pregunta. La aplicación está en http://examlab.tk/scjp6.html .

Pues eso, como te darás cuenta son muchas cosas. Pero en un mes intensivo te da tiempo a todo y llegas más o menos preparado al examen.