miércoles, 27 de agosto de 2008

Cursos Online de la MSDN

Hola, en esta ocasión vengo a comentarles que la MSDN está ofreciendo cursos en línea mediante presentaciones y videos sobre varios temas como SilverLight, introducción a C#, SQL Server 2005, SharePoint, SmartClients, etc.

Todo obviamente gratis y en español:

http://www.microsoft.com/spanish/msdn/spain/cursosonline.mspx

Que los disfruten, saludos !

jueves, 21 de agosto de 2008

Ya soy MCPD

No había escrito nada estos últimos días porque estaba calladito repasando para el examen del MCPD (Web) y haciendo hartas pruebas.

En un principio tenía pensado dar el examen éste viernes 22 pero no habían horas disponibles en la mañana así que decidí adelantarlo para hoy jueves y afortunadamente salió todo bien.

Como resumen muy corto del libro puedo comentar que me cambió la perspectiva de lo que tenía visto hasta ahora. Ya no son sólo conceptos técnicos y cómo usarlos, esto es un proceso de desarrollo completo desde la recepción de los requerimientos, su análisis, evaluación, documentación, selección y evaluación de alternativas para cumplir con los requerimientos, puesta en marcha del proceso de desarrollo, implantación e instalación y posterior soporte y mantenimiento de la aplicación.

Respecto al examen en sí éste consta de 40 preguntas y te dan 2 horas y media para completarlo, como siempre el tiempo es holgado pero las preguntas en ésta ocación fueron más orientadas a si las soluciones propuestas satisfacían los requerimientos indicados, también un poco de seguridad y acceso a datos.

¿Que se viene ahora? Pues yo creo que al menos una semana de descanso y de ahi ver con que sigo, en uno de mis posts anteriores planteé varias cosas que tengo pendientes por estudiar, es muy probable que las empieze a revisar ya con más calma o tal vez me dedique a sacar otra certificación entre las cuales podría ser la 70-529 (aplicaciones distribuidas) o la 70-526 (aplicaciones windows), también tengo pendiente sacar alguna de Sql Server 2005 ojalá, bueh el tiempo dirá por ahora sólo quiero descansar un poco.

Ahora puedo usar éste logo:

20061107_MCPD

Cualquier duda me comentan, saludos !

martes, 12 de agosto de 2008

Microsoft en las olimpíadas

Sólo unos pocos se habían dado cuenta de la prescencia de Microsoft en las olimpíadas pero como siempre hay gente con mucho tiempo libre para dedicarse a revisar hasta los más mínimos detalles de eventos como este.

Y como siempre nuestra querida amiga BSOD no quiso quedarse afuera de tan magno evento y realizó una visita fugaz a la inauguración de los juegos olímpicos (click en las fotos para agrandar):

BSOD

BSOD

BSOD

viernes, 8 de agosto de 2008

Compresión de contenidos vía Deflate o Gzip

Hola, en esta ocasión explicaré un poco este tema de cómo comprimir los contenidos generados por nuestras páginas.

El objetivo a lograr es reducir el peso del contenido HTML generado por nuestras páginas, de ésta forma se pretende aumentar la performance de nuestra aplicación al reducir los tiempos de espera usados para que se dibuje la página en el cliente y el transporte del contenido entre el cliente y el servidor sean menores.

Un beneficio directo de esta técnica es alivianar la carga existente para la red de la empresa si nuestra aplicación funciona sobre una intranet y en caso contrario (internet) mejorar el tiempo de descarga del contenido para los clientes. Otro beneficio indirecto es que se aprovecha la capacidad de los clientes al usar la descompresión automática de contenidos soportada por la mayoría de los clientes (browsers) actuales.

Desde la versión de IIS 6 en adelante es posible habilitar la compresión automática de contenidos, para habilitarla sobre el IIS 6 podemos ver el siguiente ejemplo en inglés:

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/502ef631-3695-4616-b268-cbe7cf1351ce.mspx?mfr=true

Y también tenemos éste ejemplo en español:

http://www.mygnet.net/articulos/iis/comprimir_archivos_http_en_iis_6_dot_0.271

El problema viene cuando nuestro ambiente de producción no tiene habilitada la compresión automática de contenidos, esto puede pasar por diferentes razones como por ejemplo que en la misma máquina estén funcionando otras aplicaciones además de la nuestra y las otras aplicaciones no sean compatibles con ésta compresión de contenidos o también puede pasar que simplemente no tengamos acceso a las máquinas de producción.

Para revisar si nuestra aplicación en ambiente producción (suponiendo que es visible desde internet) tiene habilitada la compresión automática de contenidos podemos usar la siguiente aplicación donde pondremos la dirección de nuestra aplicación:

http://www.aspnetresources.com/tools/httpcompression.aspx

Si el resultado del análisis nos entrega lo siguiente:

Content type: UTF-8
Page size: 46,775 bytes
Served uncompressed

Significa que no está habilitada la compresión automática de contenidos por lo tanto podríamos intentar usar la compresión manual.

Para implementar la compresión manual de contenidos en ciertas páginas podemos hacer lo siguiente, primero crearemos un método que nos indicará si el cliente soporta la compresión, primero probaremos con el método deflate y luego con gzip, básicamente porque el método deflate se comporta mejor que gzip en cuanto a tiempo de respuesta:

/// <summary>
/// Determines if GZip is supported
/// </summary>
/// <returns></returns>
protected static bool IsGZipSupported()
{
    string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];
    if (!string.IsNullOrEmpty(AcceptEncoding) &&
 (AcceptEncoding.Contains("deflate") || AcceptEncoding.Contains("gzip")))
return true;
    return false;
}

Como ya tenemos el método que nos indicará si la compresión es soportada a continuación creamos el método que usaremos para realizar la compresión propiamente tal:


/// <summary>
/// Sets up the current page or handler to use GZip through a Response.Filter
/// IMPORTANT: 
/// You have to call this method before any output is generated!
/// </summary>
protected static void GZipEncodePage()
{
    if (IsGZipSupported())
    {
        HttpResponse Response = HttpContext.Current.Response;
 
        string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];
        if (AcceptEncoding.Contains("deflate"))
        {
            Response.Filter = new System.IO.Compression.DeflateStream(Response.Filter,
                                      System.IO.Compression.CompressionMode.Compress);
            Response.AppendHeader("Content-Encoding", "deflate");
        }
        else
        {
            Response.Filter = new System.IO.Compression.GZipStream(Response.Filter,
                                      System.IO.Compression.CompressionMode.Compress);
            Response.AppendHeader("Content-Encoding", "gzip");
        }
    }
}

Lo ideal es tener este par de métodos en alguna clase base o de utilitarios de manera que podamos invocarlos de la forma más fácil que podamos, en éste caso ambos métodos los puse en una clase base y como son estáticos basta con llamar al método que realiza la compresión en el Page_Load de la página donde lo vamos a usar:


protected void Page_Load(object sender, EventArgs e)
{
    GZipEncodePage();
if (!IsPostBack)
    {

Como restricción para usar esta técnica es que debemos usar la llamada al método de compresión (en nuestro caso GZipEncodePage) en la primera línea del método Page_Load de la página donde lo usemos.

Una buena razón para usar la compresión manual es que podremos realizar una compresión selectiva de las páginas a las que queremos aplicarles compresión.

Debemos considerar que el uso de compresión crea un consumo extra de tiempo de CPU a la hora de usar ésta técnica aunque es mínimo y realizado por el cliente si es que lo soporta, por lo tanto lo ideal es implementar la compresión en aquellas páginas que consideremos como buenas candidatas para ésta técnica, un buen ejemplo son aquellas páginas que generan mucho contenido HTML.

Para ejemplificar mejor lo que podremos conseguir con ésta técnica podemos ver a continuación una página de ejemplo sin la compresión habilitada:

Prueba_Gzip-antes-mini

Como podemos ver el contenido HTML de la página es de 54.6K con un tiempo de respuesta de 12.04s.

Ahora veremos los resultados de la misma página pero con la compresión habilitada:

Prueba_Gzip-despues-mini

Como podemos ver pasamos de 54.6K a 13.2K de contenido HTML con un considerable ahorro de datos transportados entre el cliente y el servidor y aún mejor el tiempo de respuesta que bajó de 12.04s a 5.917s, si imaginamos resultados similares con muchos clientes concurrentes podemos hacernos una idea de las mejoras que podremos obtener con nuestra aplicación.

Como mencioné anteriormente si ésta técnica es bien usada donde corresponde puede ayudar a alivianar un poco la carga de datos entre el cliente y el servidor pero no debe ser interpretada como una fórmula mágica.

Como referencia usé este artículo de Rick Strahl (MVP):

http://www.west-wind.com/weblog/posts/10564.aspx

Ojalá les sirva, saludos.


Pd.: Sorry por el código si se ve mal formateado.

lunes, 4 de agosto de 2008

Cursos sobre el FW .Net 2.0 y SQL 2005 gratuitos para estudiantes

Para los que sean estudiantes y estén pensando sacar alguna certificación relacionada con el FrameWork 2.0 de .Net y/o con SQL Server 2005 les comento que Microsoft con su programa Student Partners está ofreciendo una serie de cursos y workshops gratuitos.

Los cursos están orientados a los siguientes 5 ámbitos:

  • Windows Developer
  • Web Developer
  • Database Developer
  • Windows Server IT Professional
  • Windows Client IT Professional

Se ven bastante buenos especialmente los workshops sobre web ya que según la lista me parecen muy similares a lo que tuve que estudiar para el examen 70-528.

Link: Microsoft Student Partners – LATAM

Fuente de la noticia: Blog de Jesús Gonzales