MSDN Blogs
  • WarNov Developer Evangelist

    Introducción a Generic Handlers en ASP.NET

    • 2 Comments

    Un Generic Handler (GH) es una clase de objeto .NET que puede procesar http requests, sin necesidad de estar dentro del scope de una página aspx (que está dirigida a presentar salidas de tipo HTML clásico). Un ejemplo de GH es el HTTP Handler. Como es bien sabido un http Handler se puede asociar a cualquier extensión de archivo (de acuerdo a lo permitido por el IIS). Los GH sin embargo, solo se pueden asociar a la extensión ASHX que está directamente soportada por los proyectos web en visual Studio 2005 y posteriores. Así que los GH en .NET se asocian a archivos con extensión ASHX.

    Todos los Handlers implementan System.Web.IHttpHandler. Además, en IIS 7 se puede alojar cualquier Handler directamente.


    El hecho que el GH pueda correr fuera del entorno de una página y aparte procesar HTTPRequests, lo hace una herramienta perfecta para ofrecer servicios similares a los que ofrecería un Web Service. De esta manera, es un muy buen candidato para reemplazarlos, cuando no se pueden implementar ya sea por requerimientos del negocio o requerimientos no funcionales.

    Por qué puede no ser deseado un WebService?

    Según la arquitectura y requerimientos de algunos clientes, es mejor recibir resultados a través de HTTPRequest "simple", debido a que por ejemplo el llamado se hace desde una plataforma distinta a .NET desde la cual se hace bastante complejo crear un llamado a un WebService, tal vez porque la herramienta no puede manejar todos los tipos estándar en los WebServices (como sucede por ejemplo con PHP antiguo).

    Entonces por qué no hacer una página Web Normal que responda a los llamados?

    Si se crea una página aspx que responde a las peticiones se incurre en adicionales encabezados y todo el overhead adicional que genera la creación de una página completa (ciclo de vida, viewstate, etc), cuando en realidad sólo se desea obtener una simple respuesta (una imágen un xml, etc).

    Entonces para ganar performance y facilidad de administración en este tipo de funciones, es posible crear un Generic Handler sin dejar de atender al requerimiento de que la comunicación permanezca sencilla.

    Entre los métodos obligatorios al estarse implementando IHttpHandler está ProcessRequest que es el que ejecuta el proceso requerido y por ende al fnal de su alcance habrá de tener un llamado a context.Response.Write o similar, que devuelva una respuesta http. Esta respuesta puede ser html, txt plano, imágenes, xml, etc.

    Uso Avanzado 

    Suponga le siguiente escenario: Existe un objeto en memoria que se desea presentar al usuario como una página html.

    Opciones:

    1. Serializar el objeto a XML, leer el XML y pasarlo a un XSLT que crea el HTML, y grabarlo en un archivo que luego es presentado en un IFrame. Como es obvio, el overhead de crear y borrar estos archivos físicos generados es absolutamente inaceptable.
    2. Otro enfoque es incluir en la página un control XML que muestre el objeto serializado y en el cual luego de hacer la transformación se vea el HTML como tal. Es una alternativa muy aceptable que a primera vista no tiene ninguna desventaja, excepto el mismo overhead y tamaño que implica una página ASP.NET.
    3. Generic Handler: Se obtiene un control más directo sin el overhead que implica agregar un control XML a una página que además tendrá otros elementos que sumaran innecesariamente peso al resultado.

    Cómo se Logra?

    Al crear un GH, éste puede ser llamado como cualquier otra página aspx. (Por ejemplo desde un browser) Además también pueden aceptar parámetros: http://warnov.com/miGH.ashx?param=valor;otroparam=otrovalor a través de su URL. Para incluir un GH en su aplicación Web, solo agreguelo como un nuevo item en el proyecto en Visual Studio.

    En el caso especial de querer mostrar un objeto serializado en XML y transformado a través de XSLT es bastante sencillo: Solo se tiene que incluir en el XML la directiva de transformación XSLT y el archivo XSLT se ha de encontrar en la ruta que allí se especifica.

    Conclusión:
    Como se observa, son muchas la aplicaciones que tienen estos objetos y es considerable la ganancia que se obtiene con su uso, aunque en general pasan muy desapercibidos.

  • WarNov Developer Evangelist

    Convención Internacional de Interoperabilidad

    • 2 Comments

     

    image001[8]

     

    Los invito a participar este miércoles 9 de junio, en la 1ª Convención Virtual Internacional de Interoperabilidad “Tecnologías Integradas”. Es un evento que tiene como objetivo mostrar escenarios de la vida real que les permitirán ver la manera más efectiva de integrar diversas tecnologías del mundo de hoy. Durante el mismo, tendrán la oportunidad de compartir las experiencias de cada uno de los expositores internacionales desarrolladores de soluciones en diferentes plataformas, dentro del marco de integración tecnológica. Contaremos con la participación de tecnólogos, desarrolladores y profesionales de interoperabilidad de Venezuela, Ecuador, México, Perú, Brasil y otros países de Latinoamérica.

    image002[13]

    Integrando Tecnologías 

    Eduardo Nuñez

    Cloud Computing - La Nueva Era 

    Luis Daniel Soto

    Interoperando con Productividad en ambientes de colaboración

    Luis Du Solier Grinda

    Virtualizar es la clave de la interoperabilidad 

    Argenis Avendaño

    Caso de éxito de interoperabilidad: Port.25 

    Peter Galli

    Desarrollando aplicaciones PHP con Eclipse para Windows Azure 

    Eduardo Sojo

    Cómo sacarle provecho a las aplicaciones PHP sobre Windows

    Antonio Ognio

    Servicios de Federación de Active Directory

    Felix Gonzalez

    Framework Interoperable?

    Carlos Figueroa

    Integrando aplicaciones de manera extensible

    Interoperabilidad con COM en aplicaciones de Silverlight 4

    Rodrigo Diaz Concha

    Colaboración entre Samba y Sharepoint 

    Yonathan Arrivillaga

    Conectividad de portales con Web Services for remote portlets   

    Virtualizar aplicaciones para ambientes heterogéneos

    Julio Martus

    Interoperando con SUSE Linux: Proyecto Moonlight 

    Alessandro Binhara

    Open Source y Software Propietario 

    Cesar Brod

    Integración y colaboración entre Sistemas Operativos

    Everaldo Canuto

    image003[8]

     

    image004[7]

  • WarNov Developer Evangelist

    Mayo en Colombia y LATAM, es de Windows Phone 7

    • 2 Comments

     

    Windows Phone 7

    Como ya lo describí en el review de mi anterior post, Windows Phone 7 es todo un nuevo mundo para las aplicaciones móviles, que aparte de ser tan novedoso, nos da la gran ventaja de aprovechar lo que ya sabemos para construir aplicaciones orientadas a esta plataforma. Es así como si ya sabemos Silverlight o XNA, ya sabremos el 70~80% de lo requerido para programar en Windows Phone 7 (WP7).

    En todo caso, la web está llena de recursos para aprender de esta tecnología. Me permito aquí citar algunos recursos que nos ayudarán < salir adelante con aplicaciones para WP7:

    Para desarrollar todo esto, tenemos numerosas herramientas y lo mejor de todo es que hoy en día, la mayoría de ellas están gratuitas.

    Por ejemplo, tenemos totalmente gratis:

    Visual Studio 2010 for Windows Phone

    También en forma gratuita, tenemos el RC de Blend 4.0, que nos permite crear interfaces de usuario realmente impactantes:

    Expression Blend

    Para poder trabajar con Blend 4.0 RC para Windows Phone 7, es necesario instalar:

    También es necesario instalar las herramientas de desarrollador que si además tenemos instalado Visual Studio 2010 RTM, nos lo dejan listico para programar WP7. Hasta hace dos días, no podíamos programar WP7 en el RTM, pero con esta descarga, ya es posible:

    Windows Phone Developer Tools CTP - April Refresh

    Esta última descarga incluye Visual Studio 2010 Express for Windows Phone. Así que no sería necesario descargarlo.

    Con todo eso, no queda más que poner manos a la obra y comenzar a aprender. Para más recursos, vamos al portal oficial de WP7:

    Windows Phone Developer Portal

    Pero un momento!

    Es todo para nosotros desarrolladores colombianos y latinos?

    No!

    By: Javier Cáceres He organizado junto con nuestro nuevo MVP en desarrollo para móviles: Javier Cáceres un conjunto de workshops y capacitaciones para aquellos que prefieren aprender con un tutor.

    Así es como en todo Mayo, en las instalaciones de Microsoft tendremos cada martes una sesión de Workshop en la que Javier nos estará enseñando acerca de WP7. A estas sesiones también podrán asistir de manera online a través de Live Meeting.

    La agenda es la siguiente:

    • 04/Mayo Introducción a la Plataforma Windows Phone
    • 11/Mayo Arquitectura de Windows Phone
    • 18/Mayo Desarrollo de aplicaciones para iPhone en .Net
    • 25/Mayo Distribución de apps y juegos para Windows Phone

    Para ver los detalles de cada workshop y registrarse para asistir presencial u online pueden visitar: http://www.microsoft.com/colombia/activa/activa_conocimiento_desarrollo.aspx

    Habrán otras 4 sesiones que son webcast en el horario de 08:00PM a 09:00PM (GMT-5) a los cuales pueden asistir solo a través de Live Meeting. Los temas y enlaces a LiveMeeting de los webcasts son:

    • 05/Mayo: Navegación en el Windows Phone: En esta sesión se mostrará la navegación y los controles de la plataforma Windows Phone. Click aqui.
    • 12/Mayo: Silverligth para Windows Phone: En esta sesión se mostrará como reutilzar el conocimiento de Silverligth para desarrollar en Windows Phone y la integración con otras herramientas. Click aquì.
    • 19/Mayo: Servicios de la Plataforma Windows Phone: En esta sesión se mostrarán las implicaciones en cuanto a botones, barra de aplicaciones y demás consideraciones de la platafoma. Click aquí.
    • 26/Mayo: Windows Phone 7 Data Binding: En esta sesión se mostrará cómo hacer enlace a datos e integraciòn con LINQ. Click aquí.

    Para finalizar, Javier nos comenta:

    Javier Cáceres (MVP Windows Mobile) Para que se vayan preparando les dejo: este artìculo http://tinyurl.com/39wfgto, este foro en el cual pueden preguntarme cualquier duda sobre Windows Phone 7 en inglés http://tinyurl.com/ASKjacace, este foro en español http://tinyurl.com/WP7esp y mi cuenta en twitter @jacace

     

    Agradezco mucho a Javier por su colaboración, y los espero en nuestros eventos. WP7 en nuestras manos!

  • WarNov Developer Evangelist

    Azure como backend de storage para Windows Apps y el poder de los Mobile Services

    • 2 Comments

    Con Windows Apps, me refiero a apps para el Windows Store y para el Windows Phone Store.

    El conocimiento promedio que tenemos hoy en día de Azure y de Cloud Computing, nos indica que una gran alternativa para las necesidades de storage que tienen las apps, efectivamente es el storage de Azure. Y uno va y mira y sí… efectivamente así es. Pero hay que tener en cuenta ciertos detallitos en los que podemos pecar por ir muy a la ligera.

    Si queremos ofrecer almacenamiento en nuestra app a través de una cuenta de Azure, lo primero que se nos vendría a la mente es: fácil, uso el API de Storage y la accedo desde mi app. Pero esto tiene dos implicaciones:

    http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-28-02-metablogapi/2816.image_5F00_32AEF2F2.png

    1. El soporte que se le da a la API desde las plataformas de desarrollo de WP y de WinRT: En este caso, lamento informar que el Microsoft.WindowsAzure.StorageClient.dll aún no está disponible para estas plataformas, pese a que en Web, WinForms, WPF, WCF y demás sí es completamente accesible. Esto nos deja con una sola alternativa y es la de usar REST puro y duro para acceder al storage de Azure. Es decir, crear clientes HTTP dentro de del código de la app y configurarlos para hacer un request REST sobre la API del storage (recordemos que esta API es nativa REST y por ende se puede acceder de esta manera). Tanto en WP como en WinRT es completamente viable esto, ya que tenemos las clases adecuadas. Sin embargo, configurar estos clientes no es fácil ni amigable. Algunos acercamientos como la librería Windows Azure Storage Client para Windows Phone disponible a través de NuGet, pueden ayudar a alivianar la tarea, encapsulando todos estos llamados. Desafortunadamente hoy no tenemos una equivalencia para WinRT. Tal vez mediante agunos hacks, uno pudiera usar esta de phone con Windows 8. Pero entonces viene el 2do. Punto a tener en cuenta:

    2. Independientemente de que hagamos los llamados a través de REST puro o usando una librería como la citada en phone, siempre debemos incluir la información de la cuenta para poder tener acceso a Azure. Tradicionalmente esto no es un gran problema, y digo tradicionalmente refiriéndome al hecho de que si estamos acostumbrados a crear aplicaciones de servidor que acceden a Azure, sabemos que los datos de la cuenta (nombre y clave) están “seguros” en nuestros servidores que están detrás de unos balanceadores de carga y unos proxies que lo protegen. Pero en el caso de las apps…. Te sentirías seguro sabiendo que el nombre y clave de tu cuenta de Azure está “quemado” en una app que probablemente hayan bajado cientos o miles de usuarios? Cualquier usuario malicioso, podría hacer ingeniería inversa de la app para extraer los datos de la cuenta (y aunque es complicado, no es imposible).

    Entonces, no hay una API oficial y tampoco es seguro embeber los datos de la cuenta en los clientes. Así que entonces la solución que se viene a la cabeza es: Hagamos servicios web!

    De esa manera, dado que WinRT y WP, tienen completo soporte a servicios web se podrán subir los archivos al servidor web y éste, que sí tiene el poder de usar la API de Storage de Azure, tendrá muy cómodo pasar estos archivos a la nube. Además, los datos de cuenta estarán seguros dentro del server, pues los clientes solo necesitan saber la dirección del servicio web.

    Pero realmente es esto lo que queremos? Tener un servidor Web, tiene costos asociados. Además tendríamos una sobrecarga sobre esos servidores recibiendo imágenes de Raimundo y todo el mundo. Por lo tanto requeriríamos varios servidores y los costos se elevarían enormemente. Sumémosle además el hecho de que el storage de Azure se puede acceder directamente y nos ahorraríamos todos esos costos.

    Entonces… cuál sería la solución apropiada?

    Se imaginan un mecanismo en el cual cada app pudiera tener un permisito que dure solo el tiempo requerido para ejecutar la acción necesaria sobre el storage y que luego ya no sea válida? En ese caso, por más que el hacker obtenga la clave, cuando lo haga, ya no le servirá de mucho.

    Pues para sus cuentas, les informo que Azure soporta el acceso al storage a través de este mecanismo, que particularmente se llama “Shared Access Signature” o SAS.

    Obviamente, para poder generar una SAS, se requiere tener los datos de la cuenta. Y volvemos al mismo sitio: no queremos exponer esos datos. Pero hay algo bueno! Si creamos un servicio web que nos retorne esa SAS (menos de 1K de tamaño), tendremos mucha menos sobrecarga que cuando usamos web services para transferir imágenes. En este caso, solo requeriremos una pequeña respuesta del server con la SAS y ésta la usaremos para que a través de un llamado HTTP (ésta vez mucho más sencillo que cuando se desea usar los datos de la cuenta nativa, ya que este requiere ser asegurado) en el que referenciamos dicha SAS podamos ejecutar la acción requerida sobre el storage (por ejemplo subir o bajar un archivo de los blobs, o consultar un registro de las tablas) sin necesidad de suministrar al cliente los datos de la cuenta.

    Entonces se podría decir que hallamos la solución! Ponemos un servicio Web a repartir SAS a las apps. Tal vez el servicio web haga alguna validación para decidir si responde positivamente al llamado. Y listo. La logramos!

    Esta situación la podríamos optimizar aún más. Dado que ahora la carga no será tan fuerte, podríamos entrar a analizar la posibilidad de usar web servers compartidos, disminuyendo enormemente los costos. Pero aquí tendremos que entrar a balancear costo contra disponibilidad.

    No sería mejor entonces tener un servicio pre-construido en la nube que ya nos proveyera la capacidad de emitir las SAS a las apps? Que nos quitara la necesidad de crear todo un web server para este fin?

    Sí, existe! Son los Windows Azure Mobile Services. Sevidores configurados para que clientes con una clave definida puedan entrar a escribir en unas tablas que quedan disponibles para este fin. Adicionalmente, también ofrecen servicios de Push Notifications y sobre ambos se pueden establecer estrategias para que solo usuarios autenticados puedan acceder a estos servicios.

    Subyacentemente, los Mobile Services tienen servidores web compartidos o dedicados que cuestan menos que los Web Sites de Azure. De hecho, hoy en día, se pueden tener hasta 10 Mobile Services gratuitamente. Estos servidores subyacentes, se pueden escalar a discreción. Aunque entonces parece que es lo mismo que tener los Web Servers tradicionales, la ventaja es que no tenemos que desplegar ningún código para que funcionen. La funcionalidad ya está en producción.

    No obstante, en las funcionalidades que mencioné, en ninguna está la del suministro de la SAS. Pero aquí es donde la imaginación u el ingenio juegan parte importante. Lo que sí mencioné es que se puede acceder a unas tablas a leerlas o modificarlas. Para ello se han dispuesto unas APIs especialmente diseñadas para WP y WinRT; hasta para iOS hay versión. Y en las tres plataformas pueden ser incluidas y usadas sin ningún problema de funcionamiento ni certificación cuando la app se sube al store. Pues bien, las operaciones CRUD que hacemos sobre estas tablas (que se pueden diseñar desde el portal de administración de Azure sin código alguno), están sujetas a que se ejecuten triggers que se disparán cuando nosotros lo especifiquemos. Por ejemplo, cuando haya una inserción. En últimas esto se puede tomar como un servicio web asíncrono, en el cual insertamos un request en la tabla y luego la volvemos a consultar para ver la respuesta obtenida, que obviamente se encontrará en otra columna.

    De esta manera, imaginen entonces que queremos subir una imagen al blob storage de Azure. Así que a modo de request, insertamos el nombre de esa imagen en una tabla de un Mobile Service previamente configurado, a través de las apis mencionadas.

    El servicio tiene un trigger sobre las inserciones. Y ese trigger detecta que hubo una inserción. Entonces ejecuta un código de servidor basado en Node.js (Javascript en el Server). Este código es suministrado por nosotros. Lo escribimos en el portal de administración de Azure; en la sección de configuración del servicio. Es así como podemos escribir un código que nos inserte en el mismo registro de la tabla la SAS que requerimos para acceder al container en el que queremos poner el archivo. Entonces cuando ordenamos la inserción asíncrona, pasamos el ítem a insertar y cuando termina esa inserción, podemos obervar que el ítem ya traerá la SAS que hemos generado.

    Luego usando esa SAS subimos el blob con tres líneas de código y ya está!

    En síntesis:

    Para poder acceder al storage de Azure desde apps sobre las cuales no tenemos control una vez han sido descargadas de las distintas tiendas de aplicaciones, la mejor alternativas es usar las SAS de Azure. La alternativa más cómoda y económica para obtener esas SAS, viene siendo los Mobile Services de Azure a través de las tablas de datos, ya que se proveen APIs de acceso a esas tablas que funcionan muy bien en WP7, Win8 y iOS. Con la SAS accedemos de manera segura para todos al storage.

    Una vez comprendido esto, continuemos con un paso a paso de cómo desplegar una solución de este tipo, en este post:

    Cómo adicionar archivos al Blob Storage de Windows Azure desde Windows Apps, a través de Mobile Services.

  • WarNov Developer Evangelist

    Windows Apps: Para qué países debería publicarlas?

    • 2 Comments

    El Windows Store y el Windows Phone Store, nos permiten escoger los países en los que nuestras apps estarán disponibles. Podemos escoger uno o varios. Esta segmentación de países existe porque a veces queremos que nuestras apps estén en un solo país o en determinados países y además porque las leyes y costumbres de diversos países pueden provocar que el contenido de ciertas apps sea inaceptable.

    Esto nos lleva a que en general, cuando publicamos nuestra app, escojamos solo publicarla para el país objetivo, que la mayoría de las veces es el país del Desarrollo. Por decir algo, un desarrollador Colombiano, escoge publicar su app en Colombia únicamente.

    Esto no está mal, pero podría estar mejor… por qué?

    La mayoría de las apps están creadas en EEUU. Y los desarrolladores de allí, las han puesto solo disponibles para ese país. De manera que usuarios del resto del mundo que tengan configurado su store para sus países de origen (con un procedimiento como el descrito aquí), no las podrán ver. Es así como varios usuarios optarán por cambiar la región de su store a EEUU y de esa manera poder acceder a esas apps. Esto implica obviamente, que dejarán de ver las apps que solo estén creadas para el país de origen y no estén validadas para estar en EEUU.

    Entonces es aquí donde debemos tener en cuenta que si queremos que esos usuarios también encuentren nuestras apps, deberemos publicar nuestra app en EEUU también, aparte de haber seleccionado también nuestro país de origen. De esta manera aseguramos que tanto usuarios que tengan sus máquinas configuradas con nuestro país de origen, como aquellos que la hayan cambiado a EEUU, puedan encontrar la app.

    mapapp

    Desventajas? Ninguna. Podría pensarse que al poner la app en EEUU tendríamos crear una versión en Inglés para la misma. Pero este no es el caso. Podemos poner apps en cualquier idioma sobre cualquier país.

    En conclusión, si quieres que tus apps sean más visibles, aparte de ponerlas disponibles para los países target, piensa la posibilidad de ponerla disponible también para EEUU.

  • WarNov Developer Evangelist

    No encuentro apps de Windows 8 que mi amigo si tiene!

    • 2 Comments

    Cuando un desarrollador crea una app para Windows 8 y la va a publicar en el Windows Store, éste tiene la oportunidad de escoger el país o países para los cuales la quiere publicar. La mayor cantidad de apps (entre ellas las más populares), están publicadas solo para EEUU, por ejemplo. Entonces para poder accede a ellas, debemos modificar la ubicación de nuestra máquina, al menos mientras estas son descargadas. Luego podemos cambiar nuevamente la ubicación sin que las apps ya instaladas se vean afectadas. Ellas seguirán funcionando correctamente.

    Entonces por ejemplo si tu amigo tiene la app de eBay y tú no la encuentras, probablemente es porque a la hora de instalarla tu amigo tenía su Windows 8 localizado en Estados Unidos, y puede que tú por ejemplo lo tengas localizado en Colombia. Lo que tienes que hacer entonces es abrir el cuadro de diálogo de Location, buscando “region” en Settings y escogiendo “Region”

    image

    Esto te llevará a este cuadro de diálogo:

    Capture

    Y de aquí escogemos la región deseada:

    image

    Damos Apply, OK y luego volvemos a buscar la app que queremos.

     

    Ten en cuenta eso sí, que también te puede pasar el efecto contrario. Es decir: Dejaste tu Windows 8 en Estados Unido como Home Location por ejemplo y luego quieres instalar una app local que el desarrollador solo dispuso para Colombia. En ese caso, no la verás. Lo bueno eso sí, es que ya sabes cómo cambiar la ubicación a tu discreción!

  • WarNov Developer Evangelist

    Obteniendo lo mejor de Bing Maps en la Web

    • 1 Comments

    Los servicios de Mapas de Bing para desarrolladores nos ofrecen un conjunto enriquecido de herramientas para crear grandes experiencias basadas en mapas. Estos servicios están disponibles a través del veloz control de AJAX, una API de servicios basada en REST, un SDK para crear mash-ups y además SDKs móviles para Windows Phone, Android, iOS y  Windows 8.

    Enfocándonos ya en la alternativa para la web, a través del control de AJAX, existe un gran conjunto de operaciones disponibles que pueden apreciarse en vivo aquí. Podemos ver cómo se pueden crear mapas con sus opciones, añadir pushpins, figuras, capas, infoboxes, hacer consultas, ejecutar geolocalización, visualizar tráfico y direcciones para llegar, administrar datos espaciales y muchos más.

    Para usar estos servicios gratuitamente, se puede crear una cuenta de developer for free que permite el acceso a todas estas características siempre y cuando sea para sitios web públicos no protegidos con password con 125,000 sesiones o 500,000 transacciones por año. Esta es una excelente alternativa para probar los servicios, o usarlos en sitios públicos de un uso no tan alto.

    Sin embargo, ya en ambientes empresariales o de servicios a consumidores masivos, estos límites son sobrepasados y se requiere una alternativa más amplia. Esta se obtiene a través de una cuenta de tipo Enterprise, que es paga.

    Además de los límites de uso, otras ventajas que tienen las cuentas Enterprise las podemos encontrar aquí.

  • WarNov Developer Evangelist

    El mayor evento para desarrolladores en Colombia 2010

    • 1 Comments

    Es un evento que se llevó a cabo el día del 26 de abril en el hotel Sheraton de Bogotá.

    Dividido en tres tracks: Developers, Architects y ITs. En cada track tuvimos tres sesiones y un keynote al iniciar. El cierre estuvo a cargo de:

    El señor Steve Ballmer. Presidente Mundial de Microsoft, de quien fui telonero junto con Ruben Sánchez (Education Lead de Microsoft Colombia) con nuestra charla de Windows Azure, que se lanza oficialmente en Colombia.

    Antes de esta charla, en nuestro track de desarrollo, estuvimos viendo lo último de Silverlight 4 con Rodrigo Díaz Concha, y antes de esto, el lanzamiento de Visual Studio 2010 a cargo del mexicano también Guillermo Serrato.

    Estos fueron los detalles de las charlas en el track de desarrollo:

    Visual Studio

    Fue una charla plenamente orientada al lanzamiento, con cinco demos que se harán en el transcurso de la misma:

    a. Stay in the zone: Mejoras del producto para que el desarrollador no tenga que salir fuera de VS para conseguir lo que necesita para trabajar. Esto incluye mejoras de la interfaz, Extension Manager y Code Snippets.

    b. Windows7 Dev: VS2010 permite crear aplicaciones para aprovechar todas las mejoras que Windows7 tiene de manera rápida. Esto incluye soporte multitouch, ribbon, animaciones…

    c. Sharepoint Dev: Las nuevas herramientas de Visual Studio para ayudar a desarrollar sobre esta plataforma tan popular

    d. Phone+Azure: Herramientas para crear aplicaciones de Windows Phone Series 7 con Silverlight y utilizar servicios en Windows Azure para que tu aplicación se conecte con otros usuarios.

    e. Team Collaboration: Mejoras para la colaboración del equipo, esto incluye, Team Foundation Client como parte de VS profesional además de Team Explorer en la web, diagramas de arquitectura para entender el código que otros desarrolladores escribieron, utilizar información recolectada automáticamente por los testers para corregir defectos en el código y nuevas gráficas creadas automáticamente para visualizar el progreso del equipo

    Prepárense para la charla

    Experiencias de Usuario Enriquecidas

    a. Vimos como con nuestras tecnologías podemos usar otras tecnologías existentes como Facebook y Twitter para generar mejores experiencias de usuario.

    b. Photobooth: Aquí observamos una aplicación enriquecida que permite manejar los periféricos de nuestros equipos para tomar fotografías, editarlas y guardarlas.

    c.  La experiencia de usuario no solo va para PCs. También funciona en teléfonos: Windows Phone 7 Series!

    Material Técnico

    Plataforma de Servicios en la Nube (Azure)

    a. Qué es y por qué Cloud Computing? Cuál es la razón por la cual deberíamos interesarnos en esta tecnología.

    b. Ventajas de la Oferta Microsoft para el Cloud Computing!

    c. Demostraciones de todo lo que podemos lograr con Windows Azure y Visual Studio!

    Material Técnico

    El cierre de Steve Ballmer

    Aquí los dejo con unos extractos del cierre de Steve Ballmer en video!

    Developers, Developers, Developers!!!


  • WarNov Developer Evangelist

    Qué tiene y qué no tiene SQL Azure?

    • 1 Comments

    Esta es una de las dudas que se presenta frecuentemente con respecto a las tecnologías de Windows Azure.

    Aquí va rápidamente la respuesta:

    Transact-SQL es un lenguaje que contiene comandos que se utilizan para administrar instancias de SQL Server, incluyendo la creación y administración de todos los objetos de una instancia de SQL Server e insertar, recuperar, modificar y eliminar todos los datos en tablas. Las aplicaciones pueden comunicarse con una instancia de SQL Server mediante el envío de instrucciones Transact-SQL al servidor.

    Microsoft SQL Azure admite un subconjunto de Transact-SQL para SQL Server.

    El soporte para Transact-SQL en SQL Azure puede ser descrito en tres categorías principales:

    • Elementos de lenguaje Transact-SQL que se admiten tal cual.
    • Elementos de lenguaje Transact-SQL que no son compatibles.
    • Elementos de lenguaje Transact-SQL que proporcionan un subconjunto de los argumentos y las opciones en sus correspondientes elementos de Transact-SQL en SQL Server 2008.

    Las siguientes características de Transact-SQL son compatibles o parcialmente soportadas por Sql Azure:

    • Constantes
    • Constraints
    • Cursores
    • Administración y reconstrucción de Índices
    • Tablas Temporales Locales
    • Palabras Reservadas
    • Procedimientos almacenados
    • Administración de Estadísticas
    • Transacciones
    • Triggers
    • Tablas, join y variables de tablas
    • Funciones definidas por Usuarios
    • Vistas

    Las siguientes características de Transact-SQL no son soportadas por SQL Azure:

    • Common Language Runtime (CLR)
    • Ubicación de archivos de base de datos
    • Creación de Mirrors
    • Consultas distribuidas
    • Transacciones distribuidas
    • Administración de grupos
    • Tablas temporales globales
    • Índices y datos espaciales  Ya lo tiene! Open-mouthed smile
    • Opciones de configuración de SQL Server
    • SQL Server Service Broker
    • Tablas del sistema Ya las tiene!
    • Indicadores de traza

     

    Para información detallada, visiten MSDN



  • WarNov Developer Evangelist

    Reproduciendo Sonidos Secuencialmente en Silverlight

    • 1 Comments

    Ya hace poco les mencioné un proyecto OpenSource en el que trabajo; pronto postearé al respecto.

    Bien; en ese proyecto Silverlight es protagonista. De hecho el proyecto se llama SilverTeacher.

    Dado que es un proyecto altamente cargado de multimedia, obviamente se necesita reproducir sonido.

    Cómo se reproducen sonidos en Siverlight?

    Rocket Science!!! Observen:

     
       1:  private void ReproduceSound(string name)
       2:  {
       3:      melSounds.Source = new Uri(
       4:          String.Concat("/sounds/", name, ".wma", UriKind.Relative));
       5:      melSounds.Stop();
       6:      melSounds.Play();
       7:  }

    Bueno… aquí el único sujeto desconocido es el tal melSounds

    Se los presento:

    internal System.Windows.Controls.MediaElement melSounds;

    Es un sujeto de tipo MediaElement. MediaElement es un control que uno arrastra del toolbox. No tiene representación visual en el editor. Queda a un ladito invisible, casi como los DialogBox de la programación Windows tradicional.

    Observen entonces que lo único que hay que hacerle, es proporcionarle la Uri del elemento a reproducir y luego darle “Play”.

    Observen también que primero doy la instrucción “Stop”. Por qué?

    Esto lo hago, porque cuando por primera vez se reproduce un sonido, el “cursor” de la reproducción queda al final del mismo. Así que si luego de reproducirse le damos “Play” no se ejecutará nada, porque el cursor está al final.

    La forma de reposicionar el cursor, es mediante la instrucción “Stop”. Súper fácil no?

    Hasta ahí todo bien. Pero que tal si quisiéramos reproducir dos o más sonidos consecutivamente?

    Usando el método anterior, uno pensaría: “Muy fácil, ejecuto este código:”

       1:  ReproduceSound(nombrePrimerArchivo);
       2:  ReproduceSound(nombreSegundoArchivo);

    Desafortunadamente la cosa no funciona bien así

    Dado el carácter asincrónico de la reproducción de los sonidos, lo que pasaría es que sólo el último sonido se reproduciría.

    La solución no es muy directa. Es más bien “tricky”.

    Luego de probar y probar, descubrí que el MediaElement tiene un evento llamado MediaEnded. Entonces lo único que habría que hacer, es controlar ese evento, para que se comience a reproducir el siguiente archivo.

    De hecho, ya una aplicación real de esta teoría, se aprecia en el siguiente método:

       1:  private void melSounds_MediaEnded(object sender, System.Windows.RoutedEventArgs e)
       2:  {
       3:      switch (melSounds.Source.OriginalString)
       4:      {
       5:          case "/sounds/success.wma":
       6:              if (goals == GOALS_TO_WIN)
       7:              {
       8:                  //ShowStars();
       9:                  ReproduceSound("cheer");
      10:              }
      11:              break;
      12:          case "/sounds/error.wma":
      13:              SayColor();
      14:              break;
      15:          default:
      16:              break;
      17:      }
      18:  }

    Observen allí cómo de acuerdo al sonido que haya acabado de reproducirse (lo sé a través de su “source” o fuente) escojo cuál debería ser el siguiente archivo y lo reproduzco.

    Tal cual, es la solución!!!

  • WarNov Developer Evangelist

    Sketchflow en Palabras Simples

    • 1 Comments

    Hoy en día existen numerosas aplicaciones para diagramar y tratar de plasmar en papel los bocetos de futuras soluciones de software para lograr establecer un lenguaje de comunicación con nuestros clientes que permita generar la solución que ellos buscan. Sin embargo, una amplia deficiencia detectada en estas aplicaciones, es que carecen de un mecanismo para mostrar transparentemente el flujo de las mismas cuando son operadas por los usuarios.

    Sketchflow viene a cubrir esa falencia, con sus excelentes características para animar comportamientos y mostrar flujo de aplicación, sin emplear ni una sola línea de código. Además es tan efectivo, que permite crear una solución de código real que trabaja sobre el boceto que se creó al principio. En este video preparado con mi invitado @caycedo quien también habla de esto en este post, obsevaremos de qué se trata todo esto con más detalle.

  • WarNov Developer Evangelist

    Windows Azure Appliance

    • 1 Comments

    Si ha oído de Windows Azure y se ha preguntado si pudiera tener su propia réplica de Windows Azure en sus instalaciones, ésta es la respuesta a esa pregunta.
    Esa misma pregunta se la hizo ebay cuando pensaba desplegar una aplicación para vender Apple IPads. Así que se convirtió en el pionero en usar esta tecnología al incorporar el appliance en dos de sus datacenters para oprtimizar aún más su plataforma y obtener una agilidad y eficiencia mayor.


    Windows Azure Appliance le permitirá desplegar cientos o miles de servidores en su propio datacenter ofreciendo los servicios tradicionales de Windows Azure y SQL Azure.
    Esta plataforma está diseñada para proveedores de servicios, empresas grandes y el gobierno al proveer una plataforma de Cloud Computing que ofrece una eficiencia de datacenter sin precedentes a través de innovadoras técnicas de suministro de poder, refrigeración y automatización.


    De esta manera podrá desplegar aplicaciones de escalamiento horizontal, PaaS (ploataforma como servicio) o SaaS (software as a Service) en su propio datacenter aprovechando todos los beneficios de Windows Azure mientras mantiene el control físico  del hardwarfe y la soberanía de los datos necesaria bajo ciertas restricciones legales.

    image
     
    Beneficios:

    1. Eficiencia de centro de datos: Para ejecutar a bajo costo de operaciones a través de cientos de miles de servidores con una proporción pequeña de operadores de IT
    Escala masiva: Capacidad de escalar de cientos a decenas de miles de servidores.

    2. Elasticidad: Capacidad de escalar hacia arriba y abajo de uno a miles de instancias de la aplicación en función de la demanda.
    Integración: Con las herramientas existentes de centro de datos y operaciones

    3. Optimizado para tenencia múltiple (Multi-Tenant): diseñado para tenencia múltiple a través de unidades de negocios u organizaciones.

    4. Optimizado para la disponibilidad de servicio: diseñado para ofrecer alta disponibilidad de los servicios a través de las capacidades de la tolerancia y la recuperación automática de fallas.

    Disponibilidad
    La plataforma está actualmente en versión de producción limitada a un pequeño conjunto de clientes y socios (Dell, eBay, Fujitsu y HP). Vamos a desarrollar nuestro plan de trabajo en función de lo que aprendamos de ellos. No tenemos ningún detalle adicional para compartir en este momento.

  • WarNov Developer Evangelist

    La WEB más segura con Internet Explorer 9

    • 1 Comments

    Estamos trabajando constantemente para ayudar a proteger a los clientes contra las amenazas en línea, proporcionando una experiencia de navegación más segura y confiable a través de Internet Explorer. NSS Labs, empresa independiente de investigación de seguridad, publicó hoy, un informe según el cual encuentra a Internet Explorer como el browser que ofrece la mejor protección contra malware de ingeniería social.

    Cuando un amigo te envía un vínculo para descargar un archivo que contiene "algunas imágenes impresionantes", tu primer pensamiento no es cuestionar si este vínculo puede contener algo malo como un virus que puede apagar el equipo o robar tu identidad. ¿Por qué alguien de que confianza enviaría algo perjudicial? Por desgracia, este instinto bondadoso es exactamente el comportamiento que los creadores de malware buscan explotar. Los atacantes están buscando sacar provecho de contactos y relaciones personales - depender de las acciones del usuario, en lugar de las vulnerabilidades del software para dañar a las personas. Estos ataques se conocen como ataques de malware de ingeniería social y han ido aumentando en número.

    La investigación de los laboratorios de NSS muestra que Internet Explorer 9 es capaz de bloquear o advertir el 99% de malware de ingeniería social. De acuerdo a los laboratorios de NSS, "Con una puntuación de 99% de bloqueo de URL única, Internet Explorer 9 fue por lejos el mejor en proteger a los usuarios contra el malware de ingeniería social". El siguiente gráfico compara la protección ofrecida por distintos navegadores contra ataques de malware de ingeniería social. Puedes ver en el informe que Internet Explorer 9 lleva todos los exploradores con la tasa más alta de bloqueo - y la mejor protección contra malware.

    clip_image002

    El galardonado Internet Explorer lidera la industria en la protección frente a ataques de ingeniería social a través de su filtro SmartScreen. Esta tecnología ayuda a proteger a los clientes de Internet Explorer 8 y 9 beta de Internet Explorer mediante la detección y bloqueo de sitios Web que distribuyen ataques de malware y phishing a través de ingeniería social. La diferencia de rendimiento entre IE8 y IE9 anterior proviene de la adición de funciones innovadoras como la reputación de SmartScreen. Esta nueva característica para Internet Explorer 9 añade una capa adicional de protección para los usuarios a través de una advertencia cuando intentan descargar una aplicación que se conoce como riesgosa.

    El beta de Explorer 9 se puede descargar de aquí.

  • WarNov Developer Evangelist

    Silverlight Tour–Bogotá, Colombia (20Oct–22Oct 2010)

    • 1 Comments

    SLT_Trans

    El Curso de Silverlight que Ha dado la Vuelta al Mundo: el Silverlight Tour regresa a la capital Colombiana del 20 al 22 de Octubre 2010!

    El Silverlight Tour es un curso de tres días acerca de Silverlight 4: a detalle, con mucho código y una gran cantidad de conceptos técnicos y de arquitectura que todo desarrollador profesional de Silverlight (y claro, de Windows Phone 7) debe conocer a profundidad.

    Tip: esta fecha para Bogotá cuenta con una magnífica promoción que no querrán dejar pasar Smile así que les recomiendo aseguren su lugar registrándose en el sitio del curso.

    image

    Sí: Colombia es Pasión y Silverlight también! Winking smile

    Los esperamos!



  • WarNov Developer Evangelist

    Detalles de Instancias de Cómputo y Cobro en Windows Azure

    • 1 Comments

    Para comprender el detalle de cómo se cobra Windows Azure, primero observemos los detalles de las instancias que lo conforman.

    Las instancias son las unidades operativas de Azure. Cada una de ellas es completamente dedicada (no compartida) para nosotros. La mínima instancia en Azure es la instancia pequeña, que se muestra en el slide. Sin embargo, uno puede armar instancias más grandes: hasta de 8 procesadores de 1.6GHz cada uno. Obviamente esta instancia aparece como una sola con el cuádruple de poder de una pequeña:

    clip_image002

    Cada instancia corre Windows Server 2008 R2 de 64 bits en modo core (sin interfaz gráfica) por lo cual la única manera de acceder a esas instancias es a través del API de Windows Azure. Sobre esta API está por ejemplo construido el Portal del Desarrollador de Windows Azure que es el que nos permite crear cuentas, instancias, configuraciones y despliegues vía web. Esta API está disponible gratuitamente y a través de ella podemos programar fácilmente clientes que se ajusten a nuestras necesidades.

    Cualquier aplicación que corra bien sobre Windows Server 2008 R2 x64 puede correr en Windows Azure siempre y cuando no requiera permisos de administrador para correr correctamente. Además teniendo en cuenta que tenemos los servicios de IIS7, también podremos ejecutar aplicaciones PHP, Fast CGI, etc.

    Además, teniendo en cuenta el modelo de deployment sobre Azure, será necesario que cualquier aplicación que queramos correr en sus instancias pueda empaquetarse dentro del bin de una aplicación .net, para luego ser desplegada. Así pues, podría subirse cualquier .exe y .dll construidos aún en forma nativa (no .net ni C++ de Visual Studio)

    Ya con el concepto de instancia de cómputo claro, observemos las generalidades de los costos en dólares:

    clip_image004

    Aquí se nos indica que cada instancia (pequeña) funcionando por una hora nos cuesta 12 centavos de dólar.

    El cobro de las instancias tiene ciertas particularidades. Se cobran las instancias qque hayan sido desplegadas (deploy). Así estén en Staging o Production, se cobran. Si tenemos una en production y otra en staging, las dos serán cobradas. Si tenemos alguna instancia en modo suspendido, ésta también se cobrará, porque sus recursos están separados para que nadie más la pueda usar. Así que lo más recomendable cuando se sepa que una instancia no se usará, es eliminarla.

    Las fracciones de hora son cobradas como horas completas. Por ejemplo, si encendemos una instancia desde las 10:50 hasta las 11:10, se nos cobrarán dos horas: la primera de 10:50 a 11:00 y la segunda de 11:00 a 11:10. Sin embargo cualquier instancia desplegada por menos de 5 minutos, no será cobrada.

    En cuanto a SQL Azure no hay detalles especiales acerca del cobro. Sólo es necesario saber que se nos cobra US$9.99 por cada gigabyte de base de datos usado al mes. Podemos comprar bases de datos de 1 a 5GB en la versión web y de 10 a 50GB en la versión Business:

    image

  • WarNov Developer Evangelist

    IE9 PP3: Osom, babe!

    • 1 Comments

    Han mantenido su promesa.

    Hablo del equipo de desarrollo de Internet Explorer 9 (IE9).
    En qué consistía?
    1.    Mantener progresos constantes en la estandarización del markup (html/css3), performance y aceleración por hardware.
    2.    Escuchar y responder a las sugerencias de los desarrolladores.
    3.    Liberar nuevos previews cada 8 semanas.

    Lo mejor es que según he experimentado, esta promesa cumplida se refleja en beneficios para todos los desarrolladores y usuarios que tenemos que ver con el desarrollo para browsers.

    Me siento orgulloso de anunciar nuestro tercer platform preview de IE9 (PP3). Un preview enfocado específicamente en permitirnos usar TODA nuestra PC en la Web.

    image[23]

    Al decir TODA, me refiero a que aunque muy bien sabido es que la mayoría del tiempo que estamos pegados al computador nos la pasamos navegando, sucede que los browsers hasta ahora solo usan un pequeño porcentaje del poder de cómputo de la PC, aun cuando en los últimos meses el poder de cómputo ha llegado a cuadruplicarse con el mismo precio! Por ejemplo, como experiencia personal, les comento que comprarme una tarjeta de video en el 2010 con el doble de rendimiento que la que había comprado en el 2007, me costó 4 veces menos!

    Así que hoy en día, la Web solo está tomando ventaja del hardware que existía años atrás. Esto no solo aplica para PC sino para cualquier plataforma de cómputo.

    Hablemos sin embargo del mundo PC: En los últimos dos años, el ecosistema de Windows ha alcanzado grandes avances, pero los browsers hoy no están tomando ventaja de todos esos avances. Pero esto ha cambiado con IE9. Un browser donde un markup aún más estándar conoce la aceleración por hardware para hacer pedazos el techo de cristal en el performance gráfico de la web.
    Esto obviamente crea un sinfín de posibilidades para nuevas aplicaciones Web que ahora se pueden arriesgar a ser más gráficas y funcionalmente ricas, dado que el hardware está ya disponible para soportarlo.
    IE9 a través de Windows y hardware moderno especialmente concebido para trabajar con Windows libera toda una nueva clase de experiencias para la Web. Una muestra de ello, son los siguientes tags disponibles ya en IE9:

    •    canvas potenciado por la GPU… sí! CANVAS! No qué no? HTML5 Canvas!
    •    <audio> y <video> también potenciados por la GPU!

    Así que las operaciones más exigentes para IE9 dejarán de ejecutarse en la ocupada CPU, para ir a ser devoradas por la veloz hambrienta GPU. Esto se ha logrado trabajando estrechamente con partners como NVIDIA y AMD/ATI para asegurar la más fuerte de las compatibilidades.
    Veamos este video para darnos cuenta de la abrumante ventaja en rendimiento gráfico contra Chrome:

    Tan abrumante es la ventaja, que por allí he oído algunos comentarios graciosos acerca de que: Eso no puede ser! Es un fake contra! Es un demo amañado! Es solo un video!
    Si usted también cree que es un complot, puede comprobarlo por sí mismo descargando la plataforma aquí.
    No tema bajar e instalar la PP3. No afectará su actual IE ni mucho menos cualquiera de sus otros preciados browsers. Son solo 16Mb. Al ser un preview, funciona perfectamente standalone. Instálelo y visite este demo (el mismo del video). Haga la prueba del demo y luego si no es muy susceptible, haga la prueba en cualquier otro browser que “soporte” HTML 5. Winking smile

    A medida que los desarrolladores construyen Webs más asombrosas, un performance adecuado se hace obligatorio. Estamos a punto de llegar a un punto en el tiempo en que si no accedemos a un buen performance, la nueva Web dejará de ser una experiencia y comenzará a ser un fastidio.

    Para nosotros como desarrolladores, el hecho de que nuestros sitios carguen rápidamente y corran correctamente significa una mejora en la experiencia de nuestros clientes y esto es lo que mueve nuestro trabajo. Por eso es que IE9 ha trabajado mucho en las mejoras en performance.

    Es así como para esta liberación, hemos aumentado la velocidad de ejecución de JavaScript en un 25% respecto al PP2 para estar por debajo de los 400ms en la prueba del SunSpider. (Todas estas pruebas se pueden acceder desde el portal de la plataforma y replicar en sus browsers preferidos. Son pruebas independientes de terceros.)


     image
    Agreguemos a esto el hecho de que hoy podemos ejecutar estos JavaScript aprovechando a las CPU multi-core en su totalidad. De esta manera, una aplicación por ejemplo de mapas que se podía desplazar a 5 frames por segundo, ahora alcanzan hasta 60 frames por segundo (una tasa que cualquier juego envidiaría). Al final tendríamos una Web que se siente como si fuera parte nativa del PC en el que se ejecuta… Imaginen entonces la diferencia para aplicaciones JavaScript más complejas como Excel Web App!!!

    y esto me lleva a pensar… “Uy, se sentirá como Silverlight” Entonces para donde me voy? Para Silverlight? O para HTML5…. Desaparecerá alguno de los dos?

    Personalmente creo que ninguno desaparecerá… se trata más bien del poder de elección que da Microsoft. Si queremos un aplicativo totalmente estándar por defecto, lo haremos usando HTML5; y estaremos confiados de que con IE9 estas aplicaciones brillarán por su performance y respuesta a estándares… obviamente renunciando a todo el poder de desarrollo rápido que se puede lograr con Silverlight, donde podemos emplear todos los conocimientos y estructura definidas por el Framework .NET. Pero si el que el usuario final instale un plugin de Silverlight no es problema, entonces qué mejor que usar todo lo que ya sabemos y herramientas tan poderosas como Visual Studio y la suite de Expression!

    Los desarrolladores hemos pedido mejor interoperabilidad de manera que el mismo markup (tags, script, language, css) funcione en todos los browsers. PP3 incluye soporte a ES5 el estándar por excelencia de JavaScript.
    Por si fuera poco, el marcador en ACID 3 subió enormemente desde el PP1, cuando posteé al respecto:


     image


    Y eso que venimos de un muy humilde 12 en IE8. Pues ahora en PP3 tenemos:


     image


    83!!! Me preocupa en que se basarán las futuras críticas de IE que siempre usaban el ACID como derrotero. Esto, sin tener en cuenta que el test ACID 3 no es tan imparcial como pareciese. De hecho fue creado por un empleado de Google.
    Por si fuera poco, miren lo que obtuve al probar los Selectores de CSS3!


    “From the 43 selectors 43 have passed, 0 are buggy and 0 are unsupported (Passed 578 out of 578 tests)”
    That’s Right! Full Support!

     

    image
    IE9 + Windows + aceleración por hardware es como el vino...  se pone mejor con el tiempo… Es hora de aprovechar todo el poder de nuestra PC y reinventar la Web! Ingrese a http://ietestdrive.com Descargue la plataforma, vea las demos, ejecute las pruebas de estandarización y rendimiento y prepárese para lo que viene!
     

  • WarNov Developer Evangelist

    Cómo escalar aplicaciones. SCALE UP vs. SCALE OUT y las posibilidades con Windows y SQL Azure

    • 1 Comments

    Yendo directamente al grano, SCALE UP hace referencia a lograr escalabilidad a nivel de servidor, incrementándole sus recursos de hardware, antes de mejorar la escalabilidad usando otro servidor. Por ejemplo, aumentando su cantidad de memoria, o la capacidad/velocidad de los discos o la cantidad de núcleos de cómputo del servidor.

    En un enfoque SCALE OUT, la escalabilidad se logra “sacando” la carga a otros servidores.

    Al principio el enfoque SCALE UP puede parecer el menos costoso y más sencillo para muchos casos. Pero cuando las exigencias siguen aumentando con el tiempo, lo que sí es seguro, es que se llegará a un límite práctico en el que no será posible “agrandar” más el servidor para ponerle por ejemplo 500 núcleos de procesamiento de manera que pueda satisfacer una fuerte demanda. En estos casos, es fácil observar cómo puede resultar mucho más barato, eficiente y productivo un enfoque de SCALE OUT. Además, un SCALE UP generalmente genera tiempo de baja, mientras se cambian o mejoran las partes de hardware. Mientras que con un SCALE OUT, solo es cuestión de levantar más máquinas independientes.

    Windows Azure es tan flexible, que nos permite ambos tipos de escalamiento. El SCALE UP se logra a través del ajuste que podemos hacer a las instancias que creamos para correr nuestros servicios (recordemos que una instancia es cada uno de los servidores virtuales que ordenamos crear para desplegar nuestras aplicaciones de Windows Azure). Estas instancias vienen en cuatro tamaños. Así que al mejor estilo SCALE UP podemos hacer que el tamaño de cada instancia crezca. Estas son las posibilidades de tamaño que tendríamos:

    image

    Así que podríamos escalar desde 1.6 hasta 10.4 GHz en CPU, desde 1.75GB hasta 14GB de RAM y desde 225MB hasta 2TB de disco duro.

    En cuanto a la alternativa SCALE OUT, tenemos servidores que se aprovisionan muy rápido y pueden comenzar a trabajar en equipo manipulando solo unos elementos de configuración. Así pues, tenemos la ventaja de poder adicionar más y más instancias a nuestro despliegue, las cuales se ajustarán automáticamente con solo un despliegue inicial.

    ESCALABILIDAD CON SQL AZURE

    El SCALE OUT no aplica solo a los servidores de presentación o cómputo (web o worker roles), sino también de SQL Azure como tal. No obstante, en SQL Azure no tenemos la posibilidad de hacer SCALE UP.

    SQL Azure ofrece una gran cantidad de ventajas sobre todo al tener que escalar bases de datos de una manera elástica y rápida, dado que tenemos casi que ilimitada capacidad para levantar nuevas bases de datos para satisfacer cualquier demanda. En SQL Azure, no tenemos una relación física uno a uno entre servidores y bases de datos como en SQL Server tradicional. Pero la abstracción que se nos brinda es perfecta para que la mayoría de las veces el manejo que se le da a estos conceptos sea el mismo que on-premises. Sin embargo, cuando tenemos una cuenta de SQL Azure, tenemos la posibilidad de generar todas las bases de datos que queramos, las cuales residirán en servidores distintos (a veces coincidencialmente residirán en el mismo servidor). Pero esta distribución es ejecutada por los balanceadores de carga automáticos de Azure que se encargan de determinar cómo distribuir las cargas de peticiones a la plataforma.

    Entonces en SQL Azure no vamos a tener la posibilidad por ejemplo de aumentar la memoria de un server dado, sino que sencillamente levantamos otra base de datos. Con esto, podemos tomar una base de datos que requiera ser escalada y segmentarla o particionarla en otras bases de datos más pequeñas y con mejor rendimiento.

    Comprendido ya el concepto de SCALE OUT, veamos ahora que por ejemplo cuando hablamos de bases de datos, existen dos formas para hacer este tipo de escalamiento: Vertical y Horizontal. Estos tipos de escalamiento se ejecutan particionando las tablas que conforman la base de datos horizontal como verticalmente. Luego de estar particionadas, obviamente se generan más tablas y éstas a su vez se pueden ubicar en distintas bases de datos, lo que nos daría el escalamiento buscado.

    Escalamiento Vertical:

    Consiste en dividir las tablas verticalmente a través de columnas. Así pues, uno por ejemplo podría escoger dejar las columnas más importantes en una tabla y las menos usadas en otras. Por ejemplo dejar en una tabla T1 de la base de datos D1 los datos del cliente y su dirección principal, y en otra T2 en la base de datos D2, otra tabla con las direcciones secundarias. Entonces para lograr un correlacionamiento correcto entre T1 y T2, en T2 deberíamos tener un mecanismo de llaves foráneas hacia T1.

    Otro ejemplo de particionamiento vertical se observa por ejemplo cuando dejamos una tabla completa (o conjunto de ellas) en una sola base de datos. Y otras tablas en otras bases de datos. Por ejemplo, tiene mucho sentido en una aplicación de negocios, tener la tabla de clientes en una sola base de datos, para obtener el mayor rendimiento posible para ésta.

    Lo que es más, se puede combinar ese particionamiento para lograr aún más escalabilidad y eficiencia, de manera que podremos poner la tabla de clientes en su propia base de datos, y luego particionar sus columnas en distintas tablas, pero dentro de la misma base de datos.

    image

    Escalamiento Horizontal:

    Este escalamiento comprende la distribución de los datos de una tabla a través de varias tablas con la misma estructura, cada una de las cuales generalmente se encuentra en una base de datos distinta y en ocasiones aún en instancias y/o servidores distintos. Es un excelente acercamiento para circunstancias en las cuales la variabilidad de la carga de trabajo en el servidor de base de datos es muy alta, pues en SQL Azure por ejemplo, es muy fácil aprovisionar y desaprovisionar servidores; además siempre resulta mucho más barato que tener un servidor de muy altas prestaciones siempre encendido esperando por picos de carga de trabajo.

    En cada versión de la tabla se almacena un conjunto de datos que tienen como dato común el valor de una columna que generalmente se conoce como PartitionKey. Entonces cada versión de la tabla se llama Partition. Este es el tipo de particionamiento que se hizo popular con SQL Server 2005.

    Para poder tener “conciencia” de dónde están ubicados los datos con una PartitionKey determinada, existe una tabla maestra donde reside esta información.

    Por ejemplo; en una aplicación comercial, se puede decidir dejar en una base de datos diferente cada las ventas de cada ciudad. En este caso la ciudad sería la PartitionKey para identificar cada tabla. Sin embargo, una clave de partición, podría estar conformada por más campos dependiendo de la naturaleza de la aplicación y el tipo de carga de trabajo.

    Consideraciones para el escalamiento horizontal:

    1. Escoger una llave de partición adecuada, tras un profundo conocimiento del negocio. En general es más recomendable usar una llave natural que una numérica en estos casos. En el caso anterior, haber escogido la ciudad como llave de partición es mucho más eficiente por ejemplo que haber escogido por ejemplo el Id de la venta.

    2. Administración de particiones: Es una de las tareas más complejas luego de haber definido las particiones; generalmente implica consideraciones en el desarrollo de la aplicación que debe saber dónde insertar o modificar nuevos datos así como dónde buscar los existentes. La idea es escoger un tipo de partition key que no vaya a requerir una posterior reubicación de datos cuando el negocio eche a andar, lo que probablemente significaría un tiempo de baja del servicio.

    3. Evitar cross-database joins: Aparte de ser bastante ineficiente, algunas plataformas como SQL Azure no soportan consultas distribuidas. Por eso es mejor que todos los datos que requiere una tabla dada, estén en la misma DB. De lo contrario habrá que escribir el código necesario para poder ejecutar consultas asíncronas a través de varias particiones que retornen datos separadamente que luego tendrán que ser unidos en la capa de aplicación.

    4. Alta disponibilidad: Cuando se escoge un acercamiento de este tipo de escalabilidad, es requerido que todos los servidores a través de los cuales está particionada la base de datos tengan unos índices de disponibilidad bastante altos. Estos índices son provistos por SQL Azure. Es así como cada vez que creamos una base de datos, SQL Azure crea automáticamente tres copias de la misma, para asegurar esta alta disponibilidad. Cada copia es creada en servidores físicos distintos dentro de la misma ubicación geográfica. La sincronización entre estas bases de datos es automática también. En caso de falla, SQL Azure automáticamente redirige las peticiones a una de las copias de seguridad y vuelve a levantar una tercera copia para futuras eventualidades. Todo esto ocurre sin intervención humana y sin caídas del servicio.

    5. Administración: El escalamiento horizontal puede llegar a generar alta complejidad en la administración dado que hay que aplicar updates, ejecutar patching, ajustar un plan de recuperación de desastres, etc. y todo esto para cada servidor usado en el escalamiento. Afortunadamente SQL Azure se encarga de todas estas tareas automáticamente por nosotros. De las únicas tareas de administración que un DBA debería tener en cuenta son: creación de esquemas, afinamiento de índices, optimización de consultas, logins, usuarios y administración de la seguridad.

    image

    Conclusión:

    A pesar de que el particionamiento puede ayudar a mejorar el performance, la escalabilidad y los costos, puede llegar a ser bastante complejo implementar un esquema de particionado exitoso. Algunas aplicaciones tienen un esquema de particionamiento natural del cual se puede tomar ventaja mientras hay otras aplicaciones que requieren ser re - arquitecturadas para volverlas escalables; cosa que vale la pena la mayoría de las veces. Windows Azure y SQL Azure proveen una plataforma sobre la cual las aplicaciones pueden hacer SCALE-UP/SCALE-OUT en el caso de Windows Azure al permitir “agrandar” las instancias y al permitir usar varias instancias con el mismo despliegue. Y en el caso de SQL Azure con SCALE-OUT al permitir pasar de una o dos bases de datos a decenas o cientos de bases de datos de una manera muy sencilla sin incurrir en fuertes costos de infraestructura. Además, los clientes no pierden inversión si necesitas reducir nuevamente la infraestructura, ya que todo estaba en arriendo en el esquema de plataforma como servicio.



  • WarNov Developer Evangelist

    SQL Azure BACPAC - DB BACKUP en la nube

    • 1 Comments
    UPDATE: Estas instrucciones son para el antiguo portal de administración de Windows Azure en Silverlight. Para las últimas instrucciones sobre el Nuevo portal de Administración Windows Azure, visite este post
     

    El formato de archivo BACPAC, se refiere a un nuevo tipo de archivo que contiene tanto el esquema, como los datos de una base de datos.

    En el portal de Windows Azure, en la sección de Import and Export, existe una opción para generar un archivo BACPAC o para consumirlo, a través de Export e Import respectivamente:


    image


    Para crear un copia instantánea de la DB, escogemos dicha DB y le decimos exportar. Esta operación requiere una cuenta de almacenamiento de Windows Azure para guardar esa copia BACPAC en el blob storage. En este caso, la ruta del blob ha de ser suministrada por ejemplo http://micuenta.blob.core.windows.net/bacpacs/backupjunio En este caso, la cuenta de almacenamiento se llama micuenta, el container se llama bacpacs y el archivo o blob como tal se llama backupkjunio.

    Luego de especificar la cuenta, comienza a generarse la copia. Este es un proceso asíncrono, cuyo estado se puede consultar entrando a la opción de Status:

    image

    Si la DB no es tan grande, esta operación se siente casi que inmediata.image

    Una vez creada la copia, podemos importar. En este caso, ubicándonos sobre el servidor al que queremos agregarle la DB a importar; damos el nuevo nombre para la DB, el tamaño (mayor o igual al anterior), citamos la url en la que quedó el BACPAC, lo seleccionamos y comenzamos la recreación de la DB. Este proceso también es asícrono y su estado se puede confirmar de la manera ya descrita.

    image

    Lo mejor: Estas operaciones son susceptibles a ser automatizadas gracias al API de REST para acceder a los servicios de BACPAC; de esta forma, podemos programar los backups de nuestras DBs, y estos quedarán almacenados en el blob storage de Azure, que vale un centavo de dólar la giga al mes.

  • WarNov Developer Evangelist

    Caller Information: Quién me llamó?

    • 1 Comments

    Una de las inclusiones que más me ha gustado en el Framework 4.5, es la adición de mecanismos que nos permiten identificar información acerca de quién llamó un método de nuestro código, en tiempo de ejecución.

    Así pues, la información que se puede obtener comprende el path del archivo que contiene el código que hizo el llamado, la línea dentro de ese archivo y el nombre del miembro que hizo el llamado. Obviamente toda esta información nos hace mucho sentido cuando hablamos de hacer tracing, depuración y diagnóstico de nuestras aplicaciones.

    La forma de obtener esta información es muy sencilla, a través de nuevos atributos que son aplicados como parámetros opcionales con un valor por defecto, dentro del método que queremos inspeccionar. Estos atributos todos se encuentran dentro del namespace System.Runtime.CompilerServices

    En la siguiente aplicación de consola de ejemplo, observamos cómo podemos usar estos nuevos atributos para obtener información acerca de quién llamó un método:

    using System;
    using System.Runtime.CompilerServices;
    
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                WriteMessage("Mensaje de Trazado");
            }
    
            private static void WriteMessage(string message,
                [CallerMemberName] string caller="",
                [CallerLineNumber] int lineNumber=0,
                [CallerFilePath] string path = "")
            {
                Console.WriteLine
                    ("Mensaje:{0}\nLlamado:{1}\nArchivo:{2}\nLínea {3}",
                    message,
                    caller,
                    path,
                    lineNumber);
                Console.ReadLine();
            }
        }
    }

    El resultado de la ejecución es como sigue:

    image

    Como se observa, este mecanismo nos ha permitido tener información muy específica de quién llamó determinado método, sin necesidad de alterar la forma en que se llamó el método, pues los parámetros que tienen la información de caller son opcionales, de manera que es transparente para la línea de código que llama al método.

    Aunque la información del caller demuestra ser muy útil para la depuración, existe un uso colateral muy interesante sobretodo para el mundo de las apps, donde el binding es muy usado. Esto lo veremos en mi siguiente post.

  • WarNov Developer Evangelist

    Windows 8 Dev Machine

    • 1 Comments

    Hasta hace unos días, lo único que me impedía desarrollar completamente basado en Windows 8, era el tema de Windows Azure y sobretodo el de Windows Phone, dado que al usar emuladores, aún no estaban plenamente soportados.

    Afortunadamente, al interior de Microsoft estamos siendo muy veloces y a hoy, ya tenemos un gran conjunto de tools que nos permiten desarrollar para todas las tecnologías que teníamos disponibles en VS2010 sobre Windows 7 por ejemplo.

    Primero aclaremos algunos hechos básicos:

    1. Visual Studio 2010 (VS10) y Visual Studio 11 (VS11) coexisten sin problemas en el mismo sistema operativo ya sea Windows 7 o Windows 8.

    2. VS11 en Windows 7 aunque permite desarrollar varios tipos de proyectos convencionales, no permite desarrollar apps Metro Style, obviamente porque el OS no tiene todo el soporte requerido

    3. A pesar de que “parece” que VS11 soportara proyectos Windows Azure, esto aún no es posible, así que es requerido VS10 y unas configuraciones especiales que describiré en este post para que funcionen en Windows 8.

    clip_image002

    4. VS11 aún no soporta WP7. Así que también es necesario trabajarlo con VS10 y en Windows 8 se requieren ciertas configuraciones especiales que describiré en este post.

    Entonces, antes de entrar en materia, quiero que quedemos claros en que vamos a requerir Visual Studio 2010 instalado en Windows 8. Esto como les mencioné no tiene ninguna contraindicación ni aún con VS11 instalado, y puede ser cualquier versión. Yo estoy usando la Ultimate. Pero se puede Visual Studio Express for Windows Phone y Visual Studio Web Developer para Azure y gratuitamente tendremos operatividad total.

    WINDOWS 8 + WINDOWS PHONE

    Esto se hace posible gracias a la publicación del patch 7.1.1 del SDK de Windows Phone, cuyo principal objetivo es el permitir el desarrollo de apps de WP7 enfocadas a dispositivos económicos de solo 256MB de ram, al incluir una nueva imagen de emulador que tiene esta memoria. Sin embargo, aunque este fue el fin principal, se aprovechó la publicación para entre otras cosas, solucionar unos inconvenientes que impedían al emulador de Windows Phone 7 funcionar correctamente en Windows 8, por lo que ahora esto ya es posible, aunque no oficialmente soportado, sino hasta que salga el RTM de Windows 8.

    clip_image003

    Procedimiento:

    1. Instalar Win8CP

    2. Instalar la última versión de Games for Windows – LIVE. Esto es requerido para poder desarrollar juegos con XNA para WP7, dado que Windows 8 requiere archivos más nuevos que los que vienen con el SDK 7.1

    3. Instalar VS2010 Pro o superior si es posible; si no, proceder a 3

    4. Instalar Windows Phone SDK 7.1 (Incluye gratuitamente Visual Studio Express for Windows Phone 7)

    5. Instalar el patch 7.1.1

    6. Instalar Zune

    7. Desarrollar en WP7!!!


    WINDOWS 8 + WINDOWS AZURE

    UPDATE:  Las instrucciones siguientes SOLO aplican para la instalación del SDK y Tool de Windows Azure v. 1.6 sobre Visual Studio 2010 en Windows 8 CP y RP. Con la liberación del SDK de Windows Azure versión Junio 2012 (1.7) y las tools de la misma versión, el proceso nuevamente es automatizado y ahora además tiene completo soporte para Visual Studio 2012 RC!!! Chequea este post, para instrucciones de cómo instalarlo.

    SDK 1.6 en VS2010 sobre Windows 8:

    Aquí solo es necesario activar algunas características adicionales del sistema operativo y luego descargar los bits requeridos.  

    1. Activación de Características:

    a. Presione TeclaWindows+F para abrir el cuadro de búsqueda y escriba Windows Features. Luego haga click en settings y escoja en los resultados Turn Windows Features on or Off.

    b. Una vez allí, asegúrese de tener todas estas características activadas:

    clip_image004

    2. IDE: Instalar VS2010 Pro o superior o Visual Web Developer 2010 Express como alternativa free

    a. Instalar el Service Pack de VS2010

    b. Descargar e Instalar MVC3

    3. DB: Windows Azure usa una base de datos SQL para emular el storage. La DB que debe instalarse es SQL Express 2008 R2 with SP1

    4. Descargar e instalar los componentes individuales de Windows Azure bien sea para x86 o para x64.
    Hasta aquí ya estamos listos para desarrollar aplicaciones de Windows Azure convencionales. Pero a hoy, tenemos unas nuevas herramientas especialmente creadas para desarrollar aplicaciones para Windows 8 basadas en Windows Azure sobretodo para los servicios de notificaciones y almacenamiento. Aquí les muestro cómo habilitarlas:

    5. Apps de Windows 8 sobre Azure:
    Descargar e instalar el Toolkit de Windows Azure para Windows 8

    a. Instalar la última versión del Nuget Package Manager (si existe ya instalada una versión distinta a la antigua, abrir Visual Studio en modo administrador y desinstalarlo desde el extensión manager el menú de tools)

    b. Ejecutar el script Setup.cmd que queda en el root de la instalación del anterior Toolkit

    Obtendremos:
    clip_image006

    c. Después al abrir nuestro VS2010, nos encontraremos con que ya podemos crear Windows 8 Cloud Applications

    clip_image008


    y en VS11 podremos crear aplicaciones basadas en Notificaciones más control de Acceso:


    clip_image010

    Conclusión:

    Windows 8 Consumer Preview por ser aún una versión de evaluación requiere ciertas configuraciones especiales para poder servir como máquina de desarrollo de aplicaciones basadas en Windows Azure y para Windows Phone. En este post, vimos las acciones a tomar para poder lograrlo.

  • WarNov Developer Evangelist

    SQL Azure: Index was outside the bounds of the array

    • 1 Comments

    Dice el corresponsal, que trabajando con SQL Server Management Studio conectándose a SQL Azure, luego de estar conectado y ejecutar algunas consultas sin problemas, empieza a experimentar comportamientos erráticos, que no le permiten borrar objetos de SQL Azure ni tampoco obtener el script de creación de los mismos, obteniendo siempre el mensaje de error: Index was outside the bounds of the array

    He de decirles, que esto sucede dado que desde el último cambio grande en la estructura de SQL Azure en Julio del año pasado, es necesario acceder a SQL Azure usando la versión SQL Server 2008 R2 SP1 . Que ya está preparada para los cambios que hubo en SQL Azure.

    El número de versión de SSMS con el que deben quedar, es 10.50.2500 a hoy, febrero 11 de 2012, para poder acceder correctamente a SQL Azure. Esto debería ser suficiente para evitar esos comportamientos “erráticos”.

  • WarNov Developer Evangelist

    Ideas panorámicas para aplicaciones de Windows Phone 7

    • 1 Comments

    Una de las formas gráficas (no la única) para crear aplicaciones de Windows Phone 7, es a través del control panorama. Este control básicamente nos muestra una aplicación extendida horizontalmente, de manera que no hay necesidad de menús adicionales ni muchos botones. La navegación se lleva a cabo de un desplazamiento al “arrastrar” la ventana a través de la pantalla capacitiva de los dispositivos Windows Phone 7.

    Dejando volar la imaginación un poco y con miras a dar ideas de lo que serían aplicaciones para Windows Phone 7 en este caso enfocadas al mercado Colombiano, creé algunos borradores de lo que podrían ser estas aplicaciones. Luego se los pasé a @andresruiz quien los puso en limpio gracias a sus aptitudes de diseño. Aquí se las dejo: (Pueden ver las imágenes en alta resolución haciendo click sobre ellas)

    Aplicación Móvil de Un Gimnasio

    BodyMovil

    Aplicación Móvil de una Aerolínea

    AviaMovil

    Aplicación Móvil de Una Cadena de Supermercados:

    ExiPocket

    No les inspira esto a crear su propia aplicación de consumo masivo para Windows Phone 7? Qué tal una que compren 300k usuarios a razón de USD$2 en el marketpacle?

  • WarNov Developer Evangelist

    TechEd 2011 Brasil

    • 1 Comments

    Este año se desarrollará en la ciudad de Sao Pablo, Brasil, durante los días 29 y 30 de Septiembre, el evento técnico más grande del año en Latinoamérica: TechEd 2011.

    Más de 190 expositores internacionales se darán encuentro para brindarle toda la información sobre los últimos lanzamientos de Microsoft y las mejores prácticas en la utilización de herramientas. Conozca en profundidad el panorama tecnológico actual y profundice sus conocimientos sobre las soluciones existentes. Entre los principales temas técnicos de este año se encuentran Computación en la Nube, Virtualización, Seguridad, ALM, Windows Phone y System Center 2012.

    Consulte la agenda detallada en el sitio oficial de TechEd y reserve su lugar para participar de este megaevento único.

    clip_image001

  • WarNov Developer Evangelist

    A un día del //build/

    • 1 Comments

     

    WP_000550

    Estamos solo a unas cuantas horas de que uno de los eventos más importantes para Microsoft en los últimos años comience.

    Se trata del //build/. Donde Windows 8 será gran protagonista.

    Muchas dudas serán resueltas así como el futuro de varias tecnologías. Así que nombres como HTML5, XAML, Silverlight, C++, C# y muchos otros, serán muy mencionados.

    Mientras tanto, aquí les dejo unas imágenes del ambiente que se respira un día antes de esta gran conferencia que se llevará en el centro de convenciones de Anaheim. Muy cerca a Disneyland en California.

    El pequeño auditorio para el Build:

    WP_000552

    La pequeña estación de Registro del Build:

    buildstitch

    Por si fuera poco, también hay estaciones de auto-registro:

    WP_000559

    Y este es el kit que entregan a los asistentes…

    es pequeño no? Será que tienen más regalos?

    WP_000561

    Los espero pronto con las primicias!

  • WarNov Developer Evangelist

    Bing ahora con HTML5

    • 1 Comments

    El buscador BING de Microsoft, ahora incluye video HTML5 en su ya bello y característico home.
    Esta característica al igual que muchas otras características avanzadas está solo disponible cuando se hacen búsquedas localizadas en Estados Unidos. En este video muestro cómo localizar las búsquedas, para aprovechar todas estas características avanzadas. Esto sin mencionar que los resultados de las búsquedas son mucho más precisos en Bing, cuando hacemos la búsqueda localizada en Estados Unidos

Page 5 of 14 (334 items) «34567»