Silverlight vs Flash

Extractado del Blog de Jesse Ezell, quien ha tenido una amplia experiencia en desarrollo de herramientas, proyectos y soluciones usando flash.

Comparación entre Silverlight y Flash, principales características diferenciadoras de ambos productos.

(…)

Animaciones

Las animaciones en Flash son del tipo de transformación de matrices, uno puede aplicar una matrix a un elemento basado en frames para generar el movimiento, quiere mover algo a través de la pantalla en 3 segundos?, calcule cuantos frames estos 3 segundos necesitarán, luego calcule las matrices que cada frame requiere. No olvide que el reproductor no mantiene la misma tasa de frames a no ser que se coloque un archivo de audio en blanco, así que los 3 segundos pueden convertirse en 2, 6 o 5, dependiendo de que está haciendo el procesador.

Silverlight soporta el modelo de animaciones de WPF, que no solo es basado en tiempo más que en frames, sino que permite definir las condiciones de principio y fin y él se encargará de llevar la animación a donde se desea, no hay que trabajar con matrices, no hay que calcular posiciones en varios frames. La animación simplemente funciona.

Formas

Flash almacena sus formas usando un registro binario. Para escribir definiciones de forms, se necesita la licencia de un tercero del SDK del archivo flash o construir su propio SDK, no es muy difícil, pero requiere un curva de aprendizaje y la habilidad para manipular cosas al nivel de bit, no es el tipo de cosas que la mayoría de las personas puede escribir y depurar en una tarde.

Silverlight usa XAML, XAML está basado en texto y puede ser exportado usando cualquier simple objeto XAML, no se requiere comprar librerías especiales para escribir los archivos, tampoco hay necesidad de escribir sus propias librerías, solo se coloca algún texto en un archivo y listo, el tipo de cosas que pueden ser depurados y completados en una tarde.

Texto

Flash almacena sus fuentes usando la misma definición que usa para las formas. El reproductor no entiende archivos TTF, así que al final uno termina sumergido en las definiciones del API de Win32 y la vaga definición del formato de archivo de Flash, es posible que uno tarde años tratando de entenderse con todas las complicaciones de las fuentes.

Silverlight le permite a usted insertar la información de las fuentes true type directamente en su proyecto, y descargar esa información con el objeto que se descarga. No se necesita nada especial, no se necesita manejar nada especial, simplemente funciona.

Video / Audio

Flash soporta múltiples formatos de video, el último codec es realmente de alta calidad y con un excelente uso del ancho de banda. El problema es que si usted está creando una herramienta que exporta contenido flash…el formato que usa no está soportado por nadie más. El video codec original, la implementación H.263 propietaria de sorenson es una versión mutante de H.263. La compresion sigue la especificación muy cerca, pero hay un lista de características que se salen de la especificación y no permiten completar la construcción de un encoder propio. el ultimo encoder de On2 lo pone en una posición peor. Licenciar el Codec Sorenson no es muy costoso, pero el de On2 si lo es, la compañía está tratando de aumentar su valor de acción de los 2 dólares actuales a través del modelo de licenciamiento del codec usado por Flash. Los formatos de Audio que soporta flash son todos propietarios, excepto por el ADPCM, que nadie usa por sus problemas de compresion, y MP3 que requiere licencias de terceros para las librerías de conversión.

Comparando eso con la historia de Silverlight, Silverlight implementa el codec VC-1 para video (un estándar de la industria), también soporta WMV and WMA. Casi todo el mundo tiene Windows Movie Maker, pero si lo no tiene no importa, por que?, porque Microsoft libero un encoder gratuito para producir WMA y WMV. Así que, no solo usa formatos que la gente puede usar comúnmente, sino que Microsoft también provee su producto con SDKs si usted quiere hacer el encoding por sí mismo. La mejor parte de esto es que Microsoft no está basado en el licenciamiento de WMA/WMV para mantenerse. No solo es fácil de integrar sino que es barato.

Scripting

Usted puede reusar clases de C# (o de VB. Nota JCP) de su propia herramienta dentro del contenido exportado. Si se toma la ruta de flash todas las clases deberan escribirse dos veces, usted necesitara clases en .net para manejar la experiencia de tiempo y clases Flash para manejar el tiempo de ejecución. Si tiene componentes de servidor tendrá que volver a .net y escribir todas las clases que el componente de runtime están usando. Por ejemplo, digamos que uno está escribiendo un herramienta que exporta exámenes con gran contenido gráfico, con Silverligth/.Net las mismas clases y entidades que trabajan con los resultados en el player pueden usarse en el servidor. Con Flash, usted tiene que escribir toda la lógica 2 veces y tenerla sincronizada en cada cambio.

Tools

Se puede crear contenido Silverlight con las mismas herramientas que usted usa a diario. Visual Studio.net es de lejos la más poderosa herramienta de desarrollo y el IDE más popular. Usted puede poner todo el código de los componentes del servidor, los componentes de ejecución del player y las herramientas suyas en el mismo proyecto, no se requiere habilidades extras, no hay que contratar un experto en Flash para hacer las partes gráficas. Cada desarrollador puede contribuir a completar la aplicación. (…)

Para nosotros en Gattaca la experiencia ha sido muy buena, hemos desarrollado una aplicación que llama por teléfono, imprime, se conecta con servicios web usando WCF y tiene una riqueza gráfica inmensa y todo trabajando en equipo el desarrollador en .net y visual studio y el diseñador en blend.

Espero que sea de ayuda.

Juan Carlos Peláez

MCTS

Miembro del Speaker Group de Microsoft Andino

Miembro del Grupo Influencers de Microsoft Colombia

Keywords: Silverlight, WPF, Flash, Visual Studio, .Net, Video, Audio, Encoders, Comparación

Problemas con el Sonido en Aplicaciones desarrolladas usando Expression Blend

Durante el desarrollo de nuestro proyecto Real en Blend, hemos entrado en la fase final de pruebas e instalación en el cliente. A pesar de nuestra recomendación de comprar una maquina con Windows Vista, se han comprado una maquina Dell bien bonita pero con Windows XP, por lo que nos enfrentamos a diversos problemas que serán objeto de otro post, pero este me pareció bastante especial y aburridor como para ser publicado inmediatamente.

El Problema: Al instalar la aplicación desarrollada con Blend Expression (preview de agosto) y Visual Studio 2008, los efectos de sonido asociados al StoryBoard se perdieron.

Aunque los archivos se encontraban en la misma carpeta del ejecutable, con el mismo nombre, y con todo bien creado y configurado no se ejecutaban cuando llegaba el momento. Tocándolos por aparte si estaban sonando.

La solución: Buscando en Internet encontramos que uno de los workarounds detectados de Blend (incluso publicados en la página de readme en internet que no leímos y que anexamos aqui el link: Blend) indican que tiene que tenerse la versión 10 de Windows media player o superior , asi que bajamos la version 11, y funciono perfecto, ahora nuestros storyboard tienen audio. (y lo más increíble, es un control, es animado, tiene audio y es una camiseta!!!, adjunto una foto, Juan Diego después hablará más del tema, pero la camiseta roja, sobre la que caen flores, se mueven los tambores y tiene el sonido es un control, como un botón o una lista tiene propiedades de databind, y es un gráfico vectorial que no se pixela en ningún tamaño, toda una lista de características y tecnologías nuevas. -:)),

BlendReal1

Corolario: Para poder instalar una aplicación desarrollada en Microsoft Expression Blend y Visual Studio 2005 en una maquina XP, esta máquina tiene que tener el framework 3.0 instalado, lo anterior puede que no sea muy claro para todos, pero el componente que permite hacer el render del XAML que es el núcleo gráfico de la aplicación solo está disponible a partir del framework 3.0. De todas formas esta es una buena noticia para nosotros como desarrolladores por qué podemos hacer aplicaciones con Blend que tienen diseños, interactividades y experiencias de usuario muy novedosas pero que corren (en general) en la base instalada de usuarios con XP SP2.

Preguntas: Analizando este problema de hoy con Juan Diego nos entró la duda sobre lo que pasara con silverligth, es decir si meto audio a una aplicación silverlight y no tengo windows media player 10 o superior no sonará?, habrá que probarlo.

Espero que sea de ayuda, nosotros pasamos varias horas tratando de encontrar la causa de este comportamiento.

Juan Carlos Peláez

MCTS

Miembro de Microsoft Speaker Group Andino

Miembro del Grupo Influencer de Microsoft Colombia.

Keywords: Microsoft Expression Blend, Gattaca, Visual Studio, Framework 3.0, .Net, Windows XP, Audio, Sonido, Windows Media Player, Problemas, storyboard.

Conexion a SQL2005 con Java

Me pregunta Ivanov Cepeda de Microsoft Colombia como conectar una aplicación Java a SQL Server 2005, con la ayuda de algunos de los muchachos del grupo COS (Commercial Open Source) de Gattaca hemos revisado el tema y tenemos la siguiente alternativa:

1. Descargar de este URL el JDBC Driver para SQL 2005.

2. Seguir con mucha atención las instrucciones del archivo Install.txt, este driver es tanto para sistemas operativos windows como linux, para los linux trae el tar.gz, para los windows el .exe.

3. Ahora si puede escribir una clase como esta

 
package persistencia;

import java.util.*;
import java.sql.*;


public class Consultas {

    
    
    public static void main(String[] args) {
        
        // Create a variable for the connection string.
        String connectionUrl = "jdbc:sqlserver://192.168.16.19:1433;forwardReadOnlyMethod=direct" +
            "databaseName=MyDataBase;user=UserSQL;password=xxxxxxxx";

        // Declare the JDBC objects.
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        
            try {
                // Establish the connection.
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                    con = DriverManager.getConnection(connectionUrl);
            
                    // Create and execute an SQL statement that returns some data.
                    String SQL = "SELECT TOP 10 * FROM ApplicationUser;";
                    stmt = con.createStatement();
                    rs = stmt.executeQuery(SQL);
            
                    // Iterate through the data in the result set and display it.
                    while (rs.next()) {
                        System.out.println(rs.getString(4) + " " + rs.getString(6));
                    }
            }
        
        // Handle any errors that may have occurred.
        catch (Exception e) {
            e.printStackTrace();
        }

        finally {
            if (rs != null) try { rs.close(); } catch(Exception e) {}
                if (stmt != null) try { stmt.close(); } catch(Exception e) {}
                if (con != null) try { con.close(); } catch(Exception e) {}
        }
    }

}

Espero que sea de Ayuda, y Gracias a Carlos Andres Valencia que le saco un rato a sus 11 proyectos para ayudarnos a resolver esto.

Juan Carlos Peláez

MCTS

Miembro del Microsoft Speaker Group Andino

Miembro de Influencers Group Colombia.

Keywords: SQL Server 2005, JDBC, JDBC Driver for SQL Server 2005, Conectividad, JAVA, SQL2005, SQL Server 2005, Drivers, Interoperabilidad

Silverlight 1.0

Microsoft ha anunciado el lanzamiento de la version final (1.0) de Silverlight un plugin para los diferentes browsers de internet que permite ejecutar código manejado y/o javascript con presentaciones innovadoras basadas en XAML, así como mejoras en aspectos como el video.

Una de las características principales que son necesarias para que esto sea exitoso y pueda competir realmente con Flash Player es que sea interoperable entre plataformas y entre los browsers. para lograr que funcione correctamente sobre Linux el grupo de Mono (en Novell) con Miguel Icaza a la cabeza han establecido una alianza para crear MoonLight, la version Linux, de SilverLight.

Algunas de las caracteristicas importantes de Silverlight incluyen:

  • · Render de XAML en el browser, animaciones, gráficos vectoriales y todos los juguetes que contiene esta tecnología.
  • · soporte para streaming desde cualquier web server, esta característica es muy útil ya que simplifica la infraestructura y la experiencia de usuario al implementar video en un sitio web.
  • · Soporte opcional para servidores de Streaming como Windows Media Server. (Producto gratuito que hace parte de Windows Server)
  • · Muchas mejoras en la experiencia del usuario al trabajar con Video en el Servidor.

También fue anunciado el lanzamiento de la versión final de Expression Encoder, una aplicación realmente buena para generar videos que pueden usarse con Silverlight, esta aplicación permite tomar un video de casi cualquier formato y convertirlo en WMV.

Sobre la propagación de este componente, algunos cálculos independientes demuestran que los sitios propiedad de Microsoft tocan las dos terceras partes de los usuarios de internet en un año, esto sin contar con muchos otros sitios como terra, MBL, etc. que ya están usando Silverlight en sus sitios garantizarán la rápida popularización de este componente y sus aplicaciones.

Convirtiendo Archivos a XAML.

Como una de las características fundamentales de Silvelight es el uso de XAML para el manejo de los aspectos gráficos muchos necesitarán convertir sus activos (assets) de otras herramientas o formatos a XAML, para ello algunos han creado herramientas que siguen avanzado en ese tema, una bien recomendada (aunque no la he usado personalmente) está publicada en WPF-Graphics site

Gattaca y Silverlight.

La primera compañía colombiana en anunciar la capacidad de realizar proyectos con Expression Blend y Visual Studio, así como proyectos que utilicen las funcionalidades de Silverlight es Gattaca S.A. Esto beneficia especialmente a los clientes de Gattaca en España, Colombia y Latinoamérica.

Pd:

Un buen ejemplo de cómo usar Silverlight: MSN’s new Election ’08 site, también creo que es un buen ejemplo de cómo debería ser usada la tecnología en un proceso electoral, como el que se avecina en Colombia, sin embargo se requiere contenido de parte de los diferentes candidatos que es algo que parece que ninguno tiene.

Espero que sea de Ayuda.

Juan Carlos Peláez

MCTS

Miembro del Speaker Group de Microsoft Andino

Miembro del Influencers Group Colombia.

Keywords: Silverlight, Microsoft Expression Encoder, Microsoft Expression Blend, Encoder, Visual Studio 2008, Convertir a XAML, Proyectos con Silverligth, Proyectos con Microsoft Expression.

Al Negro Fontanarrosa

Roberto Fontanarrosa “El Negro”, no requiere ni presentación ni homenaje de alguien como yo, cuando miles de personas en todo el mundo ya han expresado el dolor por su perdida y lo mucho que se le extrañará. A pesar de ello no pude evitar este post luego de leer su “ultimo” libro de cuentos titulado el rey de la milonga, gracias a Noel que tuvo la cortesía inmensa de traerme un ejemplar en su última visita a Buenos Aires. (el tipo de artículos que no es que no se puedan comprar en Colombia o por Internet, pero que adquieren un valor incalculable por la historia asociada, por el detalle y por el cariño. Gracias de nuevo Noelito).

El negro se volvió famoso en todo el mundo por ser un tipo muy amable, nada agrandado, consistente con el mismo, con sus pasiones y comprometido con sus amigos, todo un ser humano. No será fácil saber si fue un buen escritor, que un gran dibujante y humorista lo fue sin duda, pero hizo algo importante en el entorno de la literatura, acerco la letras a las personas de a pie, al lector del día a día, le robo algunos lectores a la televisión, una de las razones que hicieron esto posible fue su gran amor por el futbol, por su ciudad (rosario, argentina) y por sus tradiciones y costumbres argentinas.

Extracto de su cuento titulado: Una interesante observación sobre las Narigonas.

(…)

Y hasta el perrito compañero…-canturreó Ricardo riéndose.

-…que por tu ausencia no comía…-se unió el Chelo, también a carcajadas

-…al verme solo el otro día, también se fue- terminaron los dos al unísono.

-ojo, ojo, ojo-casi se puso de pie el Pitufo-, que ese tango replantea muy seriamente la verosimilitud de lo que se dice que los perros son tan fieles, el mejor amigo del hombre y todo eso.

-Perro hijo de mil putas, apenas lo vio solo a ese muchacho se fue a la mierda…

-Ah sí, viejo – se enojo el Chelo- si vos no le das de comer o lo cuidas como querés que se quede con vos.

-¡Porque es tu amigo, querido – salto Ricardo – y te debe lealtad!

-Lealtad las pelotas- dijo Belmondo -. Seguro que ahí la que le daba de comer era la mina. Cuando se piro la mina el tipo ya se tiró al abandono y no le daba ni cinco de bola al perro ese.

– Porque ese tango es engañoso -agito el dedo índice el pitu -. Narra ese acontecimiento como al pasar, sin darle importancia, pero no es un dato menor que un perro argentino se raje de la casa porque el tipo se quedó solo.

-Era un dogo argentino que no reconoce al dueño.

-¡El perro- Ricardo golpeo con el puño contra la mesa- se tiene que quedar ahí con el dueño aunque el dueño sea un pelotudo al que se lo cagó la mina, porque para eso es un perro de tango! ¡Si quiere comer bombones o canapés que labure en un bolero!

(…)

Este fragmento me gustó especialmente por involucrar los tangos, los perros y las discusiones típicas que se dan entre amigos al tocar apasionadamente cualquier tema.

Y pues si Cervantes ha sido recordado por su aporte al español al crear una novela que recopilaba el idioma y que permitía a los comunes acercarse a la novela, entonces el aporte de Fontanarrosa no puede ser considerado poco a la letras latinoamericanas.

Juan Peláez.

Keywords: Literatura, Roberto Fontanarrosa, El rey de la Milonga y Otros Cuentos, Opinion.

Instalar las Extensiones de Sharepoint para Visual Studio 2005 en Windows Vista o Windows XP

Otra de las áreas de interés de la Plataforma Microsoft son los servicios de SharePoint, que en la versión 3.0 corren en maquinas Windows 2003 y permiten construir rápidamente intranets, aplicaciones Web y Sistemas de Colaboración muy integrados con la plataforma Windows y Office.



Sin embargo para los desarrolladores que usamos Windows Vista (o Windows XP) en la máquina de desarrollo ha sido un poco complicado desarrollar webparts y otros tipos de proyectos para sharepoint ya que no instalan sobre Windows Vista, esto nos ha llevado a usar soluciones de maquinas virtuales y demás.



Sin embargo buscando en internet he encontrado la forma de instalar las extensiones de SharePoint para Visual Studio 2005, lo que simplifica mucho el desarrollo de estos proyectos sobre mi maquina de trabajo.



La solución es crear la siguiente llave en el registro para que el instalador se ejecute normalmente.



[HKEY_LOCAL_MACHINESOFTWAREMicrosoftShared ToolsWeb Server Extensions12.0]
“Sharepoint”=”Installed”



Referencia: http://blogs.msdn.com/jannemattila/default.aspx ,



Yo lo acabo de probar y funcionó perfectamente. Aquí una foto de mi Visual Studio en Windows Vista listo para crear un proyecto de SharePoint.



SharePointVSExtensionsOnWindowsVista


Recursos


Windows SharePoint Services

Windows SharePoint Extensions for Visual Studio 2005.



Espero que sea de ayuda.





Actualizacion Nov 24 de 2008: Me ha escrito Jesus Arantegui desde España. Él ha descubierto que este procedimiento solo funciona cuando el visual studio estan en el mismo idioma que la extensiones de sharepoint, si uno baja las extensiones en ingles, por ejemplo, pero el VS esta en espanol, parecera estar bien instalado pero los proyectos no apareceran en la ventana de creacion de proyectos.



Juan Carlos Peláez


MCTS.


Miembro del Microsoft Speaker Group Andino


Miembro del Microsoft Influencers Group de Colombia.



KeyWords: Sharepoint Services 3.0, Juan Peláez, .Net, Windows Vista, Extensiones para Visual Studio 2005, Instrucciones, Instalacion, Programación, Soluciones SharePoint, WSS 3.0. Web Parts, Templates

FastCGI en IIS7. (Continuación)

Este post es una continuación del anterior sobre FastCGI y el IIS7, en Windows 2008 Beta 3 y Windows Vista, se incluye como soporte nativo FastCGI, lo que permite correr en maquinas Windows aplicaciones PHP y otros lenguajes de Script con altísimo rendimiento y estabilidad, incluso en ambientes en producción. El FastCGI CTP preview 2 también pueden montarse sobre IIS 5.1 y 6.0.


En este post, más allá de las instrucciones de cómo instalar una aplicación PHP en Windows Vista o Windows 2008, hablaré un poco de las razones por las que el rendimiento de las aplicaciones se incrementa al usar FastCGI.


Primero un poco de Antecedentes.


Common Gateway Interface (CGI)


El estándar de facto para aplicaciones en servidores web es CGI, que fue implementado inicialmente por el servidor NCSA. CGI tiene varios beneficios:

· Simplicidad. es fácil de entender

· Independencia del Lenguaje. Las aplicaciones CGI pueden ser escritas en cualquier lenguaje

· Independencia de Procesos. Ya que las aplicaciones corren en procesos separados, las aplicaciones con problemas no pueden dañar el servidor web o acceder al estado interno y privado del servidor.

· Estándar Abierto. Alguna forma de CGI ha sido implementada en todos los servidores web

· Independencia Arquitectónica. CGI no está atado a ninguna arquitectura particular de servidor

CGI también tiene algunas deficiencias importantes. El problema principal es el rendimiento: debido a que se crea un nuevo proceso para cada request y este se elimina cuando el request se completa, la eficiencia es pobre.

CGI también tiene una funcionalidad limitada: solo soporta el Rol “responder”, donde la aplicación genera la respuesta que es enviada al cliente, los programas CGI no pueden asociarse a otras partes del procesamiento del request como autorización o registro de errores.


APIs de Servidor


En respuesta a los problemas de rendimiento de CGI, diferentes compañías han desarrollado APIS para sus servidores. Los dos más relevantes son NSAPI de Netscape e ISAPI de Microsoft. El servidor Apache también tiene un API.

Las aplicaciones asociadas al API del servidor pueden correr mucho más rápido que los programas CGI. El problema del Inicio / iniciación se ha mejorado, ya que la aplicación corre en un proceso dedicado de servidor y se persiste entre las solicitudes. Las API del servidor Web, ofrecen mucha más funcionalidad que CGI, cada persona puede escribir extensiones que realizan control de accesos, acceder a los archivos de registro del servidor, y pueden conectarse en otras etapas del procesamiento del request.


Entonces que es FastCGI?


La interface FastCGI combina los mejores aspectos de CGI y las APIs propietarias. Como CGI, las aplicaciones FastCGI corren en procesos separados e independientes. Las ventajas de FastCGI’s incluyen:

· Rendimiento. Los procesos FastCGI son persistentes –se re usan en manejar múltiples solicitudes. – Esto resuelve los problemas de rendimiento de CGI de crear nuevos procesos para cada request.

· Simplicidad, fácil migración desde CGI. La librería de aplicación FastCGI simplifica la migración de las aplicaciones CGI existentes. Las aplicaciones construidas con FastCGI pueden correr programas CGI para compatibilidad con Web Servers antiguos.

· Independencia de Language. Como CGI, las aplicaciones FastCGI pueden ser escritas en cualquier lenguaje.

· Independencia de Procesos. Una aplicación FastCGI con errores no puede corromper el core del servidor web o alguna otra aplicación. Una aplicación FastCGI no puede robar ningún secreto (como las llaves de sesión para encripción) del servidor Web.

· No-propietario. FastCGI es soportado por todo los productos del Open Source del Mercado, incluyendo apache, NCSA y ahora es soportado por servidores comerciales de Microsoft y Netscape.

· Independencia Arquitectónica. La interface FastCGI no está atada a ninguna arquitectura particular de servidor. Cualquier servidor puede implementar la interface FastCGI. De igual manera, FastCGI no impone ninguna arquitectura a la aplicación: las aplicaciones pueden ser single o multi-threaded, sin importar la arquitectura de hilos del servidor web.

· Soporte para computación distribuida. FastCGI prove soporte para correr aplicaciones remotamente, lo cual es útil para distribuciones de carga y manejo externo de web sites.


La interface FastCGI


La funcionalidad que provee la interface FastCGI es muy similar a la que provee CGI. Para entender mejor el protocolo FastCGI. El procesamiento de peticiones CGI es así:

1. Para cada Request, el servidor crea un nuevo proceso y el proceso se inicializa por sí mismo.

2. El servidor web pasa la información del request( como host remoto, nombre de usuario, encabezados HTTP, etc) a las variables de entorno del programa CGI.

3. El web server envía cualquier input del cliente (como valores entrados por el usuario en un formulario HTML) al estándar input del programa CGI.

4. El programa CGI escribe cualquier output para que sea retornado al cliente como salida estándar. La información de error es escrita por el web server.

5. Cuando el proceso CGI se cierra, la solicitud queda completa.

FastCGI es conceptualmente muy similar a CGI, con dos diferencias principales:

· Los procesos FastCGI son persistentes: después de finalizar una solicitud, los procesos quedan en espera en vez de finalizar.

· En vez de usar variables de ambiente del sistema operativo y pipes, el protocolo FastCGI multiplexa la información del ambiente, el input estándar, el output estándar y error sobre una conexión full-duplex. Esto permite a los programas FastCGI correr en maquinas remotas, usando conexiones TCP entre el servidor web y las aplicaciones FastCGI.

El procesamiento de una solicitud en una aplicación single-threaded FastCGI ocurre así :

1. El Web server crea la aplicación FastCGI para manejar las solicitudes al servidor. El proceso puede ser creado en el inicio o creado por demanda.

2. El programa FastCGI seinicializa por sí mismo, y espera una nueva conexión con el web server.

3. Cuando llega una solicitud de un cliente, el servidor web abre una conexión a los procesos FastCGI. El servidor envía la información de ambiente y el input estándar sobre la conexión.

4. el proceso FastCGI envía la salida estándar y la información de errores de regreso al servidor sobre la misma conexión.

5. Cuando el proceso FastCGI cierra la conexión, la solicitud se completa. El proceso FastCGI queda a la espera de otra conexión desde el servidor web.

Las FastCGI pueden correr localmente (en la misma máquina que el web server) o remotamente. Para aplicaciones locales, el servidor usa un full-duplex pipe para conectarse con el proceso de la aplicación FastCGI . Para aplicaciones remotas, el servidor usa conexiones TCP.

Las aplicaciones FastCGI pueden ser single-threaded or multi-threaded. para aplicaciones single threaded, el servidor web mantiene un pool de procesos (si la aplicación corre localmente) para manejar las solicitudes de los clientes. El tamaño del Pool es configurable por el usuario. Las aplicaciones FastCGI Multi-threaded pueden recibir múltiples conexiones del web server y manejarlas de forma simultánea en un solo proceso. (De esta forma lenguajes, con soporte para multi thead, garballe collection, entre otros, lo hacen lenguajes naturales para implementar aplicaciones multithread usando FastCGI)


Roles de Aplicación.


Un problema importante con CGI es su funcionalidad limitada: los programas CGI solo proveen respuestas simples al request. FastCGI provee funcionalidad ampliada con soporte para tres diferentes roles de aplicación:

· Responder. este es el rol básico en FastCGI y corresponde a la funcionalidad básica ofrecida por CGI hoy.

· Filter. las aplicaciones FastCGI filtran los archivos solicitados al web server antes de que sean enviados al cliente.

· Authorizer. El programa FastCGI realizan una decisión de control de acceso para el request ( por ejemplo realizando una búsqueda a la base de datos del tipo Usuario/password).

Otros roles serán definidos en el futuro. Por ejemplo, un rol “logger” podría ser útil, donde el programa FastCGI podría recibir el registro del log del servidor para procesamiento y análisis en tiempo real.


Que tan rápido es FastCGI?


La respuesta depende de la aplicación, algunas pruebas hechas en internet muestra lo siguiente:

En esta medición se usa un archivo, una solicitud CGI y una fastCGI, usando una aplicación que retorna un número fijo de bytes.

Archivo

21ms + 0.19ms per Kbyte

FastCGI

22ms + 0.28ms per Kbyte

CGI

59ms + 0.37ms per Kbyte

Con este dato podemos trata de calcular la velocidad después de migrar una aplicación típica CGI de base de datos a FastCGI, asumiendo que la aplicación toma 50ms para inicializar las conexiones a las bases de datos y genera 5k de datos. Los resultados finales pueden calcularse así:

CGI

59ms + 50ms + (0.37ms)(5) = 111ms

FastCGI

22ms + (0.28ms)(5) = 23ms

En esta prueba, FastCGI tuvo una ventaja de rendimiento de 5x sobre CGI, más que nada debido a no tener que crear e iniciar un nuevo proceso para cada solicitud.



En resumen


FastCGI es un protocolo estándar que permite a ejecutables que usen Frameworks CGI interactuar con un Web Server.

La mayor diferencia con el Protocolo CGI Estándar es que FastCGI rehúsa los Procesos CGI para múltiples peticiones, lo que incrementa el rendimiento en comparación con CGI.

El soporte de IIS para FastCGI permite a IIS hospedar programas CGI normales como PHP, o Ruby On Rails, usando el protocolo FastCGI, ofreciendo alto rendimiento y estabilidad en ambientes de producción

Para usar el soporte FastCGI en IIS se requieren tres elementos:

· El web server IIS (IIS5.1, IIS6, and IIS7).

· El componente FastCGI para IIS

· EL programa CGI que será hospedado.

Como funciona?

El servidor web despacha las solicitudes http que se han realizado a su aplicación usando el componente FastCGI, este a su vez lanza el programa ejecutable CGI y reenvía el request para que sea procesado. Una vez la solicitud se procesa y la respuesta se finaliza y es retornada al servidor y al cliente, el proceso CGI es usado para llamadas siguientes. Esto permite evita las penalidades de alto rendimiento de iniciar un nuevo proceso para cada solicitud, lo que resulta en mucho mejor rendimiento y escalabilidad en ambientes de producción.


El protocolo FastCGI es estándar si quiere tener más información sobre FastCGI puede ver más aquí. http://www.fastcgi.com/devkit/doc/fcgi-spec.html.


El paquete FastCGI es totalmente compatible con la distribución actual y oficial PHP 5.x disponible para Windows desde www.php.net/downloads. También puede usar el preview de Fast CGI con la instalación existente de PHP 5.x (sin embargo usar la versión ThreadSafe incrementa el rendimiento hasta un 30%)


La versión 5.2.3 también contiene las mejoras desarrolladas por Zend para mejorar el rendimiento del motor de PHP sobre Windows.


Espero que sea de Ayuda


Juan Carlos Peláez

MCTS

Miembro del Microsoft Speaker Group Andino

Miembro del Microsoft Influencers Group de Colombia.


Keywords: PHP, FastCGI, Windows Vista, Windows 2008, IIS7, Arquitectura.

PHP en Windows Vista con FastCGI

Con el lanzamiento de Windows 2008 Beta3 (del que Gattaca es Early Adopter gracias a Invitación de Microsoft Colombia) hemos comenzado la fase final de la migración de nuestras aplicaciones para esta plataforma. Sin embargo hay algunas cosas nuevas en este servidor que merecen verse con atención, una de ellas es el soporte nativo de PHP y otros lenguajes de Script como IronRuby a través de una iniciativa conjunta de Microsoft y Zend para desarrollar algo llamado FastCGI que es una nueva forma mejorada para multiprocesamiento de CGI.


En este post comentaremos sobre la experiencia de instalar y correr aplicaciones de PHP sobre IIS7 usando FastCGI.


El Ambiente.


Esto puede hacerse en Windows 2008 Beta3 que tiene el soporte FastCGI nativo ó

En una maquina corriendo Windows Vista con IIS7, en este caso debe instalarse el soporte FastCGI CTP 2 disponible en este link


También hay que contar con PHP, este puede descargarse de http://www.php.net/ , aunque hay gente corriendo esto con php4, yo lo hice con la versión 5.2, en esta página pueden descargarse diversas versiones pero la recomendación es bajar la que se llama PHP 5.2.3 Non-thread-safe Win32 binaries [9,523Kb] – 01 June 2007, esta versión está optimizada para correr con IIS7 y FastCGI. (Las otras también corren y muy bien, pero esta tiene un rendimiento 30% superior según las pruebas realizadas por Microsoft y Zend)


La Instalación


El PHP


Descomprimir el PHP en una ruta sin espacios en el nombre, por ejemplo c:php o d:php, renombrar el archivo php.ini-recomended por php.ini, abrir el archivo php.ini y cambiar las siguientes variables:


Redirect cgi a falso (cgi.force_redirect = 0), modificar la ruta de las extensiones (extension_dir = “D:PHP ext”) (o la ruta en donde haya puesto el PHP),

También debe crear las variables de Entorno (En Panel de Control, Sistema, Configuración Avanzada del Sistema, Opciones Avanzadas, Variables de Entorno) Agregar la variables de Usuario “PHPRC = d:phpphp”, agregar en la variable del Sistema Path la ruta: “d:phpphp”

Con eso el PHP debería estar listo para correr en el modo anterior de PHP y también en el modo nuevo. Algunas Variables opcionales que hemos configurado que podían ser de utilidad (short_open_tag = On, error_reporting = E_ALL & ~E_NOTICE, upload_max_filesize = 10M, session.save_path = “D:PHPTempSessions”)

Finalmente hay que darle permisos en la carpeta PHP al usuario del IIS Process.


El FastCGI


Descomprimir el archivo que descargo en alguna ruta del Disco, por ejemplo D:FastCGI

En el archivo de readme.txt vienen las instrucciones muy sencillas que son básicamente:

Instalar FastCGI corriendo desde la consola de comandos con permisos de administrador:

fcgisetup.exe /install

Relacionar el Php con el FastCGI:

fcgisetup.exe /add d:phpphp-cgi.exe PHP, (La ruta donde dejo el PHP)

Listo, esto debería crear los módulos y handlers necesarios en el IIS 7.0, para verificar que quedo correctamente instalado debería encontrar algo como esto en su consola de administración del IIS7.

En la lista de Módulos (por vista de Características) un modulo nativo llamado iisfcgi apuntando a C:Windowssystem32inetsrviisfcgi.dll,

En la lista de asignaciones de controladores (Handlers) una asignación de Script llamada PHP-iisfcgi apuntando a su PHP (por ejemplo: D:PHPphp-cgi.exe) con una ruta de acceso de solicitudes apuntando a los archivos PHP (*.PHP).

Si tienen otros manejadores apuntando a *.PHP seguramente ya tenia php corriendo o trato de hacer algo similar a esta instalación. En nuestra instalación eliminamos los modulos y controladores asociados a PHP que no eran FastCGI. (Pero antes de hacer esto usted debe entender correctamente que es lo que hacen los módulos y controladores que está eliminando y por que los elimina).


Si llego hasta aquí, toda parece está bien instalado y configurado, puede crear una aplicación apuntando a un directorio y crear una página PHP sencilla como esta para probar (modinfo.php que contiene unicamente “<?php phpinfo(); ?>”, esta página vista desde el browser debería mostrarle el status del PHP y en la línea Server Api indicar :


Server API : CGI/FastCGI


La Aplicación.


Ahora que ya está corriendo aplicaciones PHP en IIS7 y con el nuevo soporte mejorado de alto rendimiento de PHP FastCGI puede ejecutar sus aplicaciones PHP, nosotros corremos Sugar CRM versión 4.5.1 sobre SQL Server. (Como distribuidores y consultores de Sugar CRM es muy útil poder ofrecer a nuestros clientes el producto sobre IIS7 y estar listos para cuando vayan a los nuevos servidores Windows 2008, pero otra razón importante de escoger esta aplicación es que Sugar ha venido trabajando desde hace más de un año con Microsoft para ofrecer lo mejor del mundo open source sobre la plataforma Microsoft, esto es soporte mejorado para IIS, optimización para integración con el Directorio Activo, y soporte para SQL Server (incluyendo Express, Standard y Enterprise) y Soporte para el Modelo de Licenciamiento Microsoft Community License. (Parte de la iniciativa Microsoft Shared Source Initiative) entre otros aspectos.


En otro post hablaremos de por que esto funciona mejor que antes (las razones) y como correr Ruby o algun otro lenguaje de Scripting usando FastCGI.

Nota: Tengo que agradecer a Ivan Suárez y German Cárdenas del Grupo Commercial Open Source de Gattaca quienes son expertos en PHP, y me han ayudado mucho en la instalación, configuración y comprensión de los conceptos propios de PHP. Gracias Muchachos.

Espero que sea de Ayuda.


Juan Carlos Peláez

MCTS


KeyWords: PHP, Windows Vista, IIS7, Windows Server 2008 Beta 3, FastCGI, Sugar CRM, Juan Peláez

Proyecto Real en Blend

Hola a todos, en las últimas semanas hemos estado desarrollando con el grupo de diseño de Gattaca un Juego para uno de nuestros clientes y hemos decidido usar WCF y WPF, estamos usando el preview de Agosto de Blend y hemos encontrado diversas cosas que pueden parecer interesantes a otras personas que estén llevando a cabo proyectos similares.



Desde la perspectiva del Diseñador Gráfico la cosa siempre se ve diferente así que estaremos publicando es este blog algunas notas sobre lo que podemos y no podemos hacer en blend, lo que es fácil y lo que no. : http://tatuajefalso.wordpress.com/



Espero que sea de Utilidad.



Juan Carlos Peláez

MCTS



Keywords: Blend, Expression, WPF, Diseñadores Gráficos, Juan Peláez, Juan Diego Velazco, WCF.

Ejemplos de Sencillez, Humildad y Dedicación al Trabajo.

Ocasionalmente se tiene la oportunidad de descubrir en una frase, en una obra o en un gesto un ejemplo maravilloso de Sencillez, humildad o dedicación al trabajo, o simplemente de aceptación a la realidad. También se encuentran ejemplos de la forma como se puede con constancia, dedicación cambiar el destino y seguir en pos de un sueño. En este post recopilare algunos de esos comentarios. Si usted tiene conoce alguno que crea que podemos incluir en esta lista no deje de anotarlo en los comentarios, con mucho gusto lo incluiré.

“Además de darle las gracias a Dios y a mi familia, estoy segura que esta victoria llegó gracias al trabajo y la dedicación de varios años. No nací talentosa, pero he luchado y recibí la mejor recompensa por todos mis esfuerzos.”

María José Uribe. Golfista Colombiana y Primera Suramericana EN LA HISTORIA, en ganar el US Women’s Amateur (Abierto de Estados Unidos)

Agosto 13 de 2008.

Otro Ejemplo:

Pregunta Daniel Samper a Roberto Fontanarrosa “El Negro”

-Todos esos premios, esos homenajes populares, esas condecoraciones, esos viajes, esos aplausos -le pregunto un día en Cartagena, mientras tomamos jugo de níspero debajo de un ceibo-, ¿son acaso la gloria?

– Déjeme contarle una anécdota, Samper -me contesta-. A mediados de enero se inauguró en Victoria, pueblo situado a una hora de Rosario, un restaurante de tenedor libre.
Allí va el cliente, paga una suma y come los indescriptibles frutos del asado argentino: churrasco, chorizo, asado de tira, matahambre, colita de cuadril, pollo a la brasa, vacío, bife de chorizo, provolone al orégano… El lugar fue bautizado Parrilla Fontanarrosa, y está adornado con enormes dibujos de Boogie, Inodoro Pereyra, su mujer, Eulogia, el perro Mendieta… Cuando acudo con mis amigos no me cobran nada, y además pido repetición cuantas veces me da la gana. Eso, Samper, es la gloria. Lo demás son efímeras vanidades.