martes, 30 de diciembre de 2008

Cantidad de Visitas al Articulo:

Visual Studio 2005/2008 – Desarrollo Web

VS2008 Desde que comenzó el desarrollo de soluciones web, hace ya varios años, hubo siempre temas comunes en los sistemas que llevaban tiempo a los desarrolladores, y se repetían una y otra vez.

Visual Studio, desde su versión 2005 y heredada en 2008, ofrece una forma sencilla y potente de implementarlos sin necesidad de escribir demasiado código, y con la posibilidad de adaptarlos de acuerdo a cada necesidad.

Desde el punto de vista de los que nos dedicamos a desarrollo de productos, mas que a sistemas a medida, son características mas que importantes, en pos de la flexibilidad y productividad.

Los invito entonces, a esta introducción sobre los temas mas relevantes, basados en esas premisas.

Características Nuevas

Desarrollaré aquí una breve descripción de algunas nuevas características que permiten el desarrollo de soluciones web de forma fácil y rápida, dejando las puertas abiertas a adaptaciones y cambios de look and feel, sin demasiado esfuerzo.

Master Pages
Normalmente, los sitios mantienen una misma imagen en todas sus páginas, variando solamente en contenido y eventualmente las opciones de acceso dependiendo de los permisos por usuario. Esta características, en un principio, había que programarlas individualmente. VS2005 agregó el concepto de Página Principal o Master Pages. Las Master Pages definen una interfaz común para un grupo de páginas. Son en sí una página ASPX más, con extensión .master, y pueden ser referenciadas por las páginas del sitio, heredando de la master las características gráficas. La referencia se ve de la forma:”
<%@ Page Language=C# MasterPageFile=~/PaginaMaster.master ...

En estas páginas maestras, se definen espacios de información dinámicos, que permiten el cambio de contenido en las páginas finales, llamados ContentPlaceHolder.
Temas y Skins
Con las Master Pages solucionamos en parte el tema de la imagen uniforme para todas nuestras páginas del sitio, pero, si deseamos cambiar fácilmente esa interfase gráfica, todavía nos falta algo: Temas y Skins. Esta característica se basa en:
  • Hojas de estilo en cascada (Cascading Style-Sheets o CSS), las cuales pueden ser heredadas por las páginas ASPX al igual que un html, y permiten definir los estilos (colores, fuentes, etc.)
  • Creación de temas y máscaras (skin), a través de una carpeta llamada APP_themes, en la cual se pueden agregar uno o mas temas, donde básicamente se definen los estilos asociados a cada uno de los controles incluidos en las páginas, o bien a la página en general.
  • Asignación de los temas, ya sea a nivel página de la forma:
    <%@ Page Theme="TemaDefault" ... %>
    o a nivel sitio desde la configuración general del mismo en el archivo Web.Config, con la directiva:
    <?xml version="1.0"?>
    <configuration xmlns=
    http://schemas...>
    <system.web>
    <pages theme="TemaDefault"/>
    </system.web>
    </configuration>
Manejo de Sesiones
Si bien esta característica ya estaba desde las versiones anteriores de ASP, en esta versión se cambia algo pero sigue siendo análogo. Siendo HTTP un protocolo sin estado, ASP.NET guarda en la cabecera un ID único que el servidor envía al cliente en su primera petición. Este ID se mantiene dependiendo de que el cliente no cierre browser o del tiempo configurado en el servidor de duración de la misma.
Variables de Aplicación y Caché
En las versiones anteriores solo existían las variables de Aplicación para compartir ciertos datos entre todos los usuarios de una aplicación. Con un mecanismo de bloqueo para evitar errores. En esta versión se agrega el concepto de Caché, que permite incluir datos que son difíciles y costosos de conseguir (ejemplo: un query complejo en un dataset), incluso refrescándose solos cada cierto tiempo solos, para que cuando algún usuario lo necesite lo tome inmediatamente. Como siempre, dependerá de la lógica de negocios para saber si es factible utilizar esta característica o no. Para insertar un nuevo valor en el cache se puede hacer de la forma:
Cache("Clave") = Valor
o mejor aún:
Cache.Insert("MyData", datos, New CacheDependency(Server.MapPath("MyData.xml")))
Donde se define una dependencia del objeto en caché con el archivo MyData.xml. Si este cambia, entonces el objeto desaparece del Caché y se recarga la próxima vez que se use.
Existe además el Caché de Salida que permite definir que páginas se pueden guardar y por cuanto tiempo antes de regenerarse.
Autenticación y Autorización
La nueva versión permite definir en el archivo Web.Config, que tipo de autenticación tendrá el sitio y que accesos a páginas o subsitios tendrá cada usuario.
Además, surge el concepto de una nueva API: Membership y Roles, con la cual es muy fácil implementar (y extender) un sistema de administración de usuarios y roles, combinándolo con los Controles Web de Seguridad, que dan un look and feel básico para el ingreso de datos.

Conclusiones y Referencias Finales

Cuando se comienza a utilizar este tipo de características, uno no puede dejar de pensar en lo artesanal que era todo hace nada mas que un par de años. Por suerte las tecnologías avanzan, y permiten dejar las “iluminaciones creativas” para otro tipo de temas.

Existen en el sitio de MSDN de Microsoft, muchos tutoriales en español, que explican paso a paso estas y otras características de diversos productos, que son un excelente punto de partida en la utilización de los mismos. La invitación es entonces, a compartir cualquier duda o sugerencia.

So Far, So Good!

Leer más...
Cantidad de Visitas al Articulo:

Feliz Navidad y Muy Próspero Año 2009!!!

Solo quería terminar este 2008 deseando a través de este espacio los mejores augurios para el año que se viene.

Año 2008 que pasó rápido para mi, con muchos cambios y muchas lecciones aprendidas.

Definitivamente puedo decir que la balanza arroja saldo positivo, con el nacimiento de mi segundo hijo, el título de MBA de mi esposa, los nuevos desarrollos personales en otros ámbitos, etc..

Ojalá podamos seguir encontrándonos en este u otro espacio, y compartiendo ideas, siempre con la buena onda instaurada como base de la comunicación.

Feliz Año Nuevo!!

Que se cumplan todos nuestros deseos!!!

So Far, So Good!!

Imágenes by Flickr

Leer más...

lunes, 15 de diciembre de 2008

Cantidad de Visitas al Articulo:

Firma Digital en PDF

Firma_PDF Días atrás estuve probando las firmas digitales en PDF. Hacía buen tiempo que no trabajaba en temas relacionados con PKI, y me interesé en el tema debido a un artículo de un diario español, donde decían que un sistema de notificaciones a infractores de tránsito sería implementado con PDF firmado digitalmente.

Lo primero fue descargar las herramientas necesarias y luego, hacer un ejemplo básico con un certificado autogenerado. Aquí detallo la problemática, las herramientas utilizadas y los ejemplos desarrollados, para que sirva de punto de partida, si alguien necesita implementar algo del estilo.

Herramientas Utilizadas

Las herramientas que utilicé son:

Ejemplo

El proceso es el siguiente:

  1. Se genera con o lee un archivo PDF.
  2. Se carga un certificado digital en un formato PKCS12.
  3. Se genera un objeto de firma.
  4. Se lo inserta dentro del documento PDF original.

El código sería algo como:

import java.io.*;
import java.security.*;
import java.security.cert.Certificate;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;

public boolean sign(String pathpdf, String pathPKCS12, String passwordPKCS12) {
String fileKey = pathPKCS12 ;
String fileKeyPassword = passwordPKCS12 ;
try {
//Crea un KeyStore
KeyStore ks = KeyStore.getInstance("pkcs12");
//Carga Certificado
ks.load(new FileInputStream(fileKey), fileKeyPassword.toCharArray());
String alias = (String)ks.aliases().nextElement();
//Recupera Clave Privada
PrivateKey key = (PrivateKey)ks.getKey(alias, fileKeyPassword.toCharArray());
//Recupera Cadena de Certificacion si existe
Certificate[] chain = ks.getCertificateChain(alias);
//Lee Documento PDF y crea archivo de salida con otro nombre para no pisar el original
PdfReader pdfReader = new PdfReader((new File(pathpdf)).getAbsolutePath());

File outputFile = new File(pathpdf + ".signed.pdf");
// Crea la firma en el objeto PdfStamper de la librería iText
PdfStamper pdfStamper;
pdfStamper = PdfStamper.createSignature(pdfReader, null, '\0', outputFile);
PdfSignatureAppearance sap = pdfStamper.getSignatureAppearance();
sap.setCrypto(key, chain, null, PdfSignatureAppearance.SELF_SIGNED);
sap.setReason("Test GGS");
sap.setLocation("");
// Posiciona la Firma
sap.setVisibleSignature(new Rectangle(10, 10, 50, 30), 1, "sign_ggs");
pdfStamper.setFormFlattening(true);
pdfStamper.close();
}
catch (Exception key) {
key.printStackTrace();
return false;
}
return true;
}

Pendientes

Lo que quedaría pendiente, y si alguien lo completa les agradecería incluya un comentario es:

  1. Probar con versiones diferentes de JRE.
  2. Investigar en versiones anteriores de iText si ya estaba esta característica incluida.

So far, so good!

Imágenes by Tinypic

Leer más...
 
Este Weblog, InforMateando..., está licenciado bajo Licencia Creative Common - por Gustavo Suhit