• WarNov Developer Evangelist

    MIX10 Keynote Día 1: Windows Phone 7 Series

    • 0 Comments
    Welcome to mix

    Este gran poster nos espero en el gigantesco Mandalay Bay en Las Vegas. Ciudad en la que cada año se congregan cientos y cientos de diseñadores y desarrolladores de todo el mundo para apreciar los últimos avances tecnológicos para mejorar la experiencia de usuario (UI) en los desarrollos de software.

    El keynote del primer día, estuvo nada menos que genial! Dirigido por el Vicepresidente Corporativo Scott Guthrie:

    WarNov y Scott Guthrie

    Con sus colaboradores mas cercanos, nos mostró a los asistentes un overview de la cantidad de tecnologías emergentes disponibles y en el día de hoy se hizo un alto enfoque en todo lo relacionado a Windows Phone 7 Series.

     

     

    Un Teléfono Amigable

    IMG_7907

    Y quien mejor para hablarnos de Windows Phone 7 que el señor Joe Belfiore. VP de Windows Phone 7!

    Para comenzar, se mostro como WP7 nace del concepto de usabilidad que se tiene con el Zune. El reproductor de multimedia de Microsoft, que desafortunadamente no es muy conocido en Colombia, y que realmente ofrece al usuario una experiencia bastante agradable.

    Es así, como ya no tenemos el Windows en “miniatura” que solíamos encontrar hasta Windows Mobile 6.5; y donde era muy complicado hasta el mero hecho de abrir el menú inicio. (Tocaba tener puntería)

    Hoy en día con WP7 el acceso a todos los comandos es bastante sencillo gracias a los Tiles que permiten con el dedo desplazarnos entre los aplicativos. (Adiós perdedizo Stylus!!!)

    Es un teléfono realmente amigable y fácil de usar. Enfocado claramente al manejo de redes sociales y reproducción multimedia.

    Un teléfono que se programa con Visual Studio .Net.

    IMG_7908 IMG_7909

    En este apartado, el señor Guthrie nos mostro como en cosa de 5 minutos escribía el “segundo cliente oficial” de Twitter para WP7. Solo escogiendo el tipo de proyecto para WP7 en Visual Studio 2010 ya tuvo un lienzo listo para trabajar y arrastrar un par de botones y luego usar la clase de WebClient para comunicarse con Twitter.

    Cómo obtenemos este tipo de proyecto en nuestro Visual Studio?

    Windows Phone 7 Series es un sorprendente sistema operativo para teléfonos móviles dada su innovadora interfaz de usuario y funcionalidad, así como la grandiosa plataforma de desarrollo sobre la cual nosotros como desarrolladores podemos construir rápidamente juegos y aplicaciones. Se vendrá toda una avalancha de dispositivos corriendo Windows Phone 7 Series (WP7). Y esto junto con la plataforma de desarrollo y el "Marketplace" hará que la demanda de WP7 de los consumidores sea muy alta, así que nosotros como desarrolladores podremos adoptar rápidamente la plataforma de WP7 para capitalizar este crecimiento.

    Para lograrlo, en el MIX10 se anunció la liberación del Windows Phone 7 Training Kit for Developers que incluye todas las librerías para programarlo de una manera similar a como programamos aplicaciones Silverlight, un emulador del teléfono y muchas otras herramientas! Este kit de capacitación les permitirá entrar en el nuevo mundo de WP7 por que le proporciona una explicación paso a paso de las herramientas a utilizar y algunos conceptos clave para la programación en esta plataforma! La información completa la encuentran aquí: http://developer.windowsphone.com/

    Un teléfono que tiene de todo!

    Ya muchas empresas han emprendido el viaje hacia el mundo de la nueva plataforma WP7. Por ejemplo Netflix el gran proveedor de alquiler y streaming de películas. Se creó esta aplicación que corre en WP7 y que nos permite entre otras cosas buscar títulos, ver los títulos recomendados, solicitar las películas a domicilio, y por si fuera poco, verlas en streaming directamente en nuestro teléfono gracias a las poderosas capacidades de reproducción de video de WP7 usando Silverlight 4 y OpenData operado desde Windows Azure

    IMG_7915

    Además se nos mostraron grandiosos juegos creados usando XNA! De manera que el mismo código de programación solo con unas pequeñas modificaciones fue usado para crear las versiones para PC y XBOX! One XNA!!!

    IMG_7904

    IMG_7946 IMG_7945

    Otra aplicación genial que vimos fue un reproductor de Comics:

    IMG_7918 IMG_7920 IMG_7922

    Vemos como nos permite ver toda nuestra colección de Comics, y para cada uno de ellos, leerlo como si fuera una revista normal o hacer acercamientos para ver mejor el arte del dibujo. Como si fuera poco, también se integra con Web 2.0, ya que permite comentar apartes de los Comics y publicar dichos comentarios en las redes sociales!

    Y hablando de redes sociales, me pareció de lujo la aplicación Foursquare que integra nativamente en el WP7 la información de todos nuestros contactos en todas las redes sociales en un solo aplicativo sencillo, fácil de usar y muy llamativo:

    IMG_7924 IMG_7927

    Permite ubicar a nuestros contactos (que tengan GPS) usando Bing Maps. Además permite la creación de eventos y los asistentes entonces tienen una guía basada en mapas para llegar al sitio de encuentro! Todo en WP7 gracias a SL, y programado con VS2010 y Blend 4. Osom!!!

    Otros aplicativos que vi bastante interesantes:

    • Shazam: Para poner al teléfono a oír una canción mientras descifra qué temas es y demás, usando bases de datos musicales online. De hecho, si hay una versión libre dela canción, nos permite descargarla o comprarla.
    • MLS: Un aplicativo que aprovecha tecnología de Message Push, que permite enviar información a aplicaciones WP7 aún cuando estas no estén corriendo actualmente en el teléfono. En este caso, información de los partidos de futbol era enviada al aplicativo y cuando el usuario abría dicha aplicación, encontraba ya toda la información actualizada.
    • Marionette: Trae ciertos “muñecos” personalizables a los que se les puede poner rostros de contactos y manipular como marionetas gracias al brillante manejo del Acelerómetro.
    • Loic Le Meur, gestor de seesmic nos enseñó la última versión de su cliente de twitter creado totalmente en WPF que ahora como novedad, permite a las empresas y personas, crear sus propios News Feed personalizados!! Pero para completar, nos mostró su brillante versión para WP7. Sencillamente genial…

    Para finalizar, nos sorprendieron con un aplicativo en WP7 que controlaba un robot cañón de camisetas real con el cual dispararon varias camisetas hacia la audiencia que luchó por ellas. Todo el manejo se hacía no solo con los botones del teléfono y el TouchScreen sino también con el acelerómetro:

    IMG_7936 IMG_7939 IMG_7976

    Todo esto fue desarrollado usando herramientas que afortunadamente tenemos disponibles desde AHORA!!!

     IMG_7950

    Las versiones Beta de Blend se pueden bajar de:
     http://expression.microsoft.com/en-us/cc507094.aspx

    Fue un gran KeyNote que nos dejó muy motivados para el resto de temas a tratar en el MIX. Hoy segundo día hemos visto que aún cuando fue tan impactante se quedó corto con todo el mundo de temas que se liberan en este año. Sigan conectados para más noticias y reviews!!



  • WarNov Developer Evangelist

    Lanzamiento de WebSiteSpark en Colombia

    • 0 Comments

    Aquí desde el MIX10 en Las Vegas, me complace informarles a todos los emprendedores, que en Microsoft Colombia tenemos muchas herramientas que nos permiten iniciar nuestros negocios y lo mejor de todo, GRATIS!!!

    Así es, GRATIS!

    Por esto me permito invitar a todos los que se consideren emprendedores en la industria del desarrollo de software para la Web, a que asistan a nuestro gran lanzamiento en el Salto del Ángel!!!

    A continuación los detalles de la invitación (hagan click en la imagen para registrarse)

    Click para Registrarse

    Los espero!!! smile_party



  • WarNov Developer Evangelist

    Transparencia en DIVs HTML (Div Opacity)

    • 2 Comments

    Cada mes acostumbro a cambiar el header de mi Blog usando una fotografía tomada por mí.

    Para este mes quise poner una foto del Palacio de Justicia ubicado en la Plaza de Bolívar en Bogotá.

    En esta foto fue difícil ubicar el título de mi blog, dado los colores de fondo. Así que la alternativa fue ponerle un color de fondo sólido al título.

    Sin embargo, un color sólido arruina la fotografía de fondo, pues no la deja ver para nada. Allí fue donde me nació la duda de cómo hacer un div transparente, para así poder modificar el estilo del blog.

    Investigando un poco, encontré que esto se hace distinto para distintas versiones de navegador. En especial, para Firefox se usa:

    opacity:0.6;

    Luego vi que esto no funcionaba en IE, pues me seguían apareciendo los fondos sólidos.  así que investigando un poco, encontré que esto se hace distinto para IE:

    filter:alpha(opacity=60);

    De esta manera, un estilo escrito así:

    #title {
    opacity:0.6;
    filter:alpha(opacity=60);
    }

    Produce este resultado independientemente del navegador:

    image



  • WarNov Developer Evangelist

    Usando Windows Live Writer para bloggear

    • 4 Comments

    El día a día generalmente lo aparta a uno de probar nuevas alternativas. (La primera ventaja vista: Es un editor enriquecido, que me permite por ejemplo escribir justificado; esto no es posible con el editor nativo de mi sitio de blogs) Afortunadamente hoy pude sacar tiempo para por fin poder probar Live Writer y usarlo en mi blog de MSDN. Antes de continuar, les cuento que es un cliente de escritura de “blogs” que viene en la suite de Microsoft Windows Live Essentials. Se puede descargar de aquí: http://download.live.com/ Sin embargo, si queremos sólo descargar el Writer, también se nos da esa opción: http://download.live.com/writer . Y lo mejor de todo, absolutamente gratuito!!!

    Acabo de detectar un par de cosas excelentes de este editor. Tiene un buen manejo de operaciones de deshacer y rehacer. Y el preview es sencillamente impresionante, ya que muestra rápidamente cómo se vería el artículo dentro del blog! Es excelente. Lastimosamente no tiene una forma para ajustar con el cuadro de herramientas el interlineado de los párrafos. Sin embargo, tiene una ventana de código fuente, donde se podría entrar a especificar esto:

    style='line-height:150%'

    Más adelante, explicaré cómo incluí este código.

    Por otro lado, se conectó de inmediato a mi blog, solo pasando la url, el usuario y la contraseña. Y no solo trabaja con este, sino con Blogger, LiveJournal, TypePad, WordPress y un montón más. Sinceramente al principio creí que no sería capaz de trabajar con los blogs de MSDN, pero como ven, sí se pudo. LiveWriter trabaja con APIs como RSD (Really Simple Discoverability), the Metaweblog API, and the Movable Type API. De hecho estoy pensando en crear mi blog personal (no técnico) en Silverlight, que se ajuste a estas APIs para poder luego llenarlo con Writer.

    Tiene corrector de ortografía. Si pasa que bajan el Writer en Inglés u otro idioma distinto a Español; pero igual necesitan corregir en Español, en este link les tengo los diccionarios para que los incluyan en la ruta: C:\Program Files\Windows Live\Writer\.

    Es genial, porque a diferencia de Word, no me llena con una cantidad gigantesca de estilos el html generado. Todo queda perfectamente plano. De hecho, es tan inteligente, que cuando copio algo de otro lado y lo pego, le quita todo el formato, excepto cuando se trata de un link, el cual lo deja funcionando perfectamente.

    Además, tiene un sin número de plugins que permiten desde publicar un twit automáticamente apenas se publica un nuevo post, hasta insertar la información del tema que en este momento estoy oyendo.

    Ahora haré un conjunto de acciones para probar los insert nativos que trae la herramienta y aquellos que me bajé como plug-ins:

    Una Imágen:

    vs2010

    La traje desde mi disco duro. En dónde se hospedará?

    Una imagen tipo polaroid (esto fue un add-on):

    Es excelente ese Add-On! Solo puse mi foto de Nerd y el Add-On me depliega un menú en donde puedo ponerle el título de la misma, la fuente, los bordes, girarla, cambiarle tamaño, etc.!

    Ahora una tabla (viene nativo o como addon mejorado: )

    Hola  
       

    Pude escoger hasta la imagen de fondo! Escoge uno también el número de filas y de columnas

    Código de programación. Es un addon que permite escoger el lenguaje para detectar la sintaxis, y permite poner números de líneas e intercalamiento de colores:

       1:  public static class Program
       2:  {
       3:      public static void main()
       4:      {
       5:          Console.WriteLine("Hello World!");
       6:      }
       7:  }
     
     

    Hay muchos otros inserts disponibles; parece que funcionan correctamente. Ahora, voy a almorzar y no me preocupo, pues Writer graba automáticamente cada intervalo de tiempo específicado. Así que ya no corro el riesgo de que por X o Y motivos se bloquee el explorador y pierda toda mi escritura. (Debería tener más sortcuts de teclado al estilo Word). Antes de irme a almorzar, trazaré una línea horizontal, usando otro plugin. Los plugin se consiguen haciendo click en el botón de add plugin que queda en el panel de plugins a la derecha:

    image

    Esta imagen la pegué del clipboard luego de usar la fabulosa Snipping Tool de Windows 7 que me permite extraer pantallazos en una forma avanzada pero sencilla. Ahora sí la línea y a almorzar:


    Bueno; luego de regresar de almorzar,  me resta mencionar que ví que uno puede manejar varios blogs a la vez y es muy fácil pasar de uno a otro.

    Y para finalizar probemos la utilidad de tags.

    Technorati Tags: ,

    Luego de probarlo, observé que solo hay integración con algunos tipos de tags y no con los tags incluidos de los blogs de MSDN que están basados en Community Server, tal como se aprecia en mi anterior intento.

    Sin embargo, para mi caso particular no lo considero un issue muy importante, dado que escribir los tags directamente en la herramienta estándar no es para nada complicado ni riesgoso. Sin embargo, seguiré averiguando a ver si encuentro la forma de hacerlo todo desde aquí (Windows Live Writer).

    En conclusión, a pesar de tener un par de falencias para mi gusto que no fueron muy difíciles de solucionar y resultan insignificantes comparadas con todas las ventajas que me da Windows Live Writer, lo aconsejo enormemente y no hallo la hora de poder crear mi propio blog compatible con ésta herramienta.

    Ahora me dispongo a dar click en Publish. Espero que todo funcione correctamente. Cualquier resultado, lo anotaré como un comentario propio a este post. smile_regular (Ese emoticon es gracias a otro plugin adicionado smile_tongue )

    UPDATE 02/28/2010

    Hoy tuve una grata sorpresa al publicar un post. Descubrí en el Writer este botoncito:

    Setcategories

    Set Categories!!

    Recuerdan lo que mencioné acerca de tags? Que no había podido ponerlos para los blogs de MSDN o de Blogger?

    Pues sucede que estos dos blogs como algunos otros tienen un mecanismo no de tags, sino de categorías. Así que de una sencilla manera, oprimiendo el botón Set Categories me aparece el listado de las categorías que ya he usado en el blog y también se me permitió agregar nuevas categorías. Luego publiqué y voilá apareció de una vez mi post con las categorías adecuadas.

    Bueno; también acabe de descubrir que sí hay shorcuts. ctrl+i me da itálicas. ctrl+b me da bold y así sucesivamente.

    Para terminar este update, quisiera mencionar el plugin de Video. Tiene un buen manejo para videos de YouTube. Con la cuenta que uno tiene, puede subir un video y luego referenciarlo en el post, de manera que queda embebido. O referenciar uno de los videos ya subidos y todo de una manera bastante automatizada. Sin embargo, si YouTube no es suficiente (como en la mayoría de los casos dado su escaso límite de tiempo –10 minutos –) una buena alternativa gratuita es www.vimeo.com que actualmente uso en este blog. Allí, luego de subir un video, uno puede obtener el código para embeberlo en el blog. Ese código se pega en el plug-in de video y el resto lo hace por nosotros.

    En síntesis, lo descrito en este update, hace que me sienta muy contento usando Live Writer. Un producto gratuito de Microsoft.



  • WarNov Developer Evangelist

    ALM con Team Foundation Suite 2010

    • 3 Comments

    Hace una semana, me reuní con el grupo de Entusiastas de Microsoft que logré unificar, con el fin de hacer actividades para reconocer su interés en nuestras tecnologías y además potencializarlo en beneficio de la comunidad de desarrolladores que es mi audiencia como Developer Evangelist.

    En esta reunión en las oficinas de Microsoft Colombia, hicimos una Clínica de Oradores para incrementar los niveles de cada uno de nosotros en cuanto a charlas al público se refiere. Dirigiendo esta charla se encontraba con nosotros Willy Marroquin. Un excelente orador que por años nos ayudó con la labor de evangelización y quien además posee grandes conocimientos técnicos y hoy se desempeña como consultor en Arquitectura y Estabilización de Aplicaciones Críticas.

    Luego de esta clínica, Sebastián Rincón especialista de Visual Studio Team Suite para preventa técnica en Microsoft Colombia nos estuvo exponiendo la cantidad de nuevas características que nos trae la Suite para la administración de proyectos o ALM.

    Decidí grabar un video de la charla que nos impartió Sebastián, pues consideré muy importante publicar con un punto de vista bastante informal (tal como se llevó a cabo su exposición) toda la discusión que tuvimos sobre el producto. Aquí encuentran apuntes hechos por nuestros entusiastas (claros representantes de la comunidad de desarrolladores) y en general información útil para tener un overview de la suite antes de entrar a trabajar con ella directamente.

    Para finalizar, quisiera agradecer la asistencia de nuestros siguientes entusiastas, de quienes dejo sus contactos, dado que estarán gustosos de entrar en contacto con ustedes para tratar temas de desarrollo de acuerdo a sus especialidades:

    Willy Marroquin Arquitectura de Soluciones/Aplicaciones  
    Sebastián Rincón  Especialista TFS/BizTalk  
    Pablo Cepeda Workflow Foundation (WF), WCF  
    Edinson Carreño Team Foundation Suite  
    Frank Silva Windows Azure – Emprendimiento con Microsoft  
    Benjamin Perdomo Tecnologías de Punta Microsoft  
    Gerardo Ramos SWAT Desarrollo Microsoft  
    Manuel Camarón Especialista Silverlight – Windows Live Services  
    Andrés Ortiz Especialista Sharepoint – Desarrollo Sobre Office  

    Estos no son todos nuestros entusiastas. Posteriormente estaré haciendo un post donde estén todos con mayor información acerca de ellos!



  • WarNov Developer Evangelist

    Recursos para ponerse al día con la ola Microsoft 2010 para desarrolladores

    • 0 Comments

    Durante un fenomenal retraso de mi vuelo (3 horas) de vuelta a casa y tras terminar mi última gira de evangelización en Cali, me puse a recopilar todos los recursos que había expuesto y referenciado durante mis charlas en las diferentes empresas y ante las diferentes audiencias.

    En este tour me dediqué a mostrar todo lo nuevo que ofrece la ola 2010 para nosotros desarrolladores. Fue un overview de actualización para que los equipos se actualizaran y vieran nuestro roadmap de tecnologías y las posibilidades ofrecidas.

    Así fue como toqué temas como Visual Studio 2010, Desarrollo sobre Office 2010 y Sharepoint 2010, gestión de proyectos con Team Foundation System 2010, Framework 4.0 (LINQ, WCF, WF, WPF), Silverlight, MVC, Entity Framework…

    Luego de hacer esta recopilación observé que era una valiosa fuente de información para nosotros desarrolladores y que por tanto valía mucho la pena publicarla.

    Así que amigos, aquí está para ustedes:

    Mi blog:

    http://warnov.com/dblog

    Mi foro de preguntas:

    http://warnov.com/ask

    Azure:

    http://windowsazure.com

    MVC:

    http://asp.net/mvc

    Entity Framework:

    http://tinyurl.com/62ke79

    Descargar Visual Studio 2010 RC, IDE, TFS, y demás:

    http://tinyurl.com/o949y9

    Todos los tutoriales para nuevas características del Framework 4.0 y Visual Studio 2010 como IDE. Incluye: Desarrollo sobre Sharepoint, Silverlight, WPF, Características del Core, F#, Desarrollo Nativo (C++), Computación Paralela, Extensibilidad de Visual Studio, Desarrollo para Office, para Workflow Foundation, WCF y Azure

    http://tinyurl.com/nln82w

    Office 2010 Beta Developer Training Kit

    http://tinyurl.com/ya7zxug

    Windows Azure Platform Training Kit

    http://tinyurl.com/5vrt7q

    Windows 7 Training Kit For Developers

    http://tinyurl.com/r7d7uf

    Sharepoint 2010 Beta Developer Training Kit

    http://tinyurl.com/y9t25hj

    Silverlight 4 Training

    http://tinyurl.com/yebx3z7

    Windows Presentation Foundation

    http://tinyurl.com/yb43ypx

    Windows Workflow Foundation

    http://tinyurl.com/4y4apd

    Windows Communication Foundation

    http://tinyurl.com/6yxo2y

    Visual Studio 2010 and .NET Framework 4 training Kit

    http://tinyurl.com/lr3ep8

    Visual Studio 2010 and .NET Framework 4 Videos

    http://tinyurl.com/ybabbkd

    Microsoft® Visual Studio® 2010 and Team Foundation Server® 2010 Beta 2 virtual image: Es una máquina virtual que ya tiene todo el TFS instalado y configurado para que juguemos con él. El link hace referencia a la versión para Windows Virtual PC, pero al final de la página encontramos links para Virtual PC 2007

    http://tinyurl.com/ydbm8hy

    Laboratorios de ALM (Gestión de Proyectos) usando la anterior máquina virtual

    http://tinyurl.com/yeo8gc2

    Training Kit de Sql Server 2008 R2 para Desarrolladores http://tinyurl.com/ykzez5t

    Como ven, hay para todos los gustos. Escojan del menú y a aprender!

    Espero les sea de mucha utilidad!!



  • WarNov Developer Evangelist

    Curso Básico Gratuito de Visual Studio .Net 2010 con C#

    • 0 Comments

    Hace poco me llegó una agradable oferta de los muchachos de NET CELL; una gran comunidad de desarrolladores de la costa Colombiana. Ofrecen un curso básico para que las personas puedan comenzar desde ceros a aprender de esta tecnología. El curso se dictará a través de Live Meeting todos los jueves desde las 18:00pm (GMT-5) a partir de febrero 25. Mayor información aquí.



  • 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

    EntityFramework Interoperable

    • 0 Comments

    Sabemos que una de las tareas más costosas en el desarrollo de una solución de software, es la creación de la capa de acceso a datos. Como ya sabemos, Microsoft hoy en día nos ofrece una brillante alternativa en cuanto a ORM. El EntityFramework, que soporta originalmente en el fondo a MS Sql Server. Sin embargo, en este artículo veremos cómo nuestras tecnologías están abiertas a ser interoperables con otros motores de bases de datos como MySql y PostgreSQL.

    Para este post, me he permitido invitar a Emerson Perdomo. Ingeniero de Sistemas de la Universidad Distrital de Bogotá. Gran colaborador en nuestra subsidiaria de Microsoft Colombia quien ha estudiado bastante el tema de ORM y creación automática de formularios basados en clases. Las siguientes instrucciones fueron creadas por él, para ayudarnos a comprender el proceso de conectar el EntityFramework a otras fuentes de datos.

    PostgreSQL

    Npgsql - .Net Data Provider for Postgresql es un conjunto de DLLs que se agregan a Visual Studio .Net pero no se integran con el Wizard del Visual Studio .Net porque no hay soporte oficial de Npgsql, sin embargo, se pueden agregar en cada uno de los proyectos sin ningún problema; el inconveniente es que al intentar usarlas hay que generar el modelo desde "Visual Studio 2008 Command Prompt" e incluir los dos archivos ".cs" que genera al proyecto.
    A Continuación doy los pasos para poder usarlo en un ejemplo sencillo.

    PASO 1:

    Descargue de la página oficial de Npgsql
    http://pgfoundry.org/frs/?group_id=1000140

    El archivo:
    Npgsql2.0.8-bin-ms.net3.5sp1.zip

    Npgsql2.0.8-bin-ms.net3.5sp1.zip

    Descargue la Última versión de PostgreSQL
    http://www.enterprisedb.com/products/pgdownload.do#windows

    Obviamente hay que tener
    Visual Studio 2008 Professional Edition Trial con SP1
    http://www.microsoft.com/express/Downloads/

    .Net Framework 3.5
    http://www.microsoft.com/downloads/details.aspx?FamilyID=d0e5dea7-ac26-4ad7-b68c-fe5076bba986&displaylang=es

    PASO 2:

    Instalamos el PostgreSQL , el Visual Studio, .NET Framework 3.5 y descomprimimos el Npgsql2.0.8-bin-ms.net3.5sp1.zip recomiendo que lo descompriman en C:\ para que no estén buscando la ubicación.
    Ahora vamos a registrar nuestras DLL de Npgsql en el GAC de Visual Studio.
    Primero hay que abrir nuestro "Visual Studio 2008 Command Prompt" que se encuentra por lo general en "Inicio -> Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 Command Prompt "
    Ahí ejecutamos las siguientes líneas de código:
    gacutil -i c:\ubicacion de la dll Npgsql\Npgsql.dll
    gacutil -i c:\ubicacion de la dll Mono.Security\ Mono.Security.dll
    en mi caso
    gacutil -i c:\ Npgsql2.0.8-bin-ms.net3.5sp1\bin\Npgsql.dll
    gacutil -i c:\ Npgsql2.0.8-bin-ms.net3.5sp1\bin\Mono.Security.dll

    PASO 3:

    Ahora hay que agregar una línea de código XML al archivo machine.config del Framework que por lo general se encuentra en C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\
    Abrimos el Archivo machine.config con el editor de su preferencia.
    Y agregamos en el área de <DbProviderFactories> </DbProviderFactories>
    la Siguiente línea de código

    <DbProviderFactories>
    <add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.8.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
    </DbProviderFactories>

    PASO 4:

    Ahora abrimos el motor de base de datos PostgrsSQL y creamos una base de datos sencilla
    Base de datos Test
    http://www.megaupload.com/?d=2XS1OYGU
    Recuerda que la base de datos esta sin datos hay que alimentarla.

    PASO 5:

    Ahora ejecutamos la siguiente línea de código en el "Visual Studio 2008 Command Prompt".
    c:\> edmgen.exe /provider:Npgsql /mode:fullgeneration /c:"string de conexion" /project:NombreQueQuiera /language:CSharp
    En mi caso
    c:\> edmgen.exe /provider:Npgsql /mode:fullgeneration /c:"DATABASE=test;HOST=127.0.0.1;PORT=5432;PASSWORD=yta;USER ID=postgres" /project:TestPostgreSQL /language:CSharp
    Los Archivos van a quedar en esta Ubicación
    C:\Program Files\Microsoft Visual Studio 9.0\VC
    De ahí lo pasas al proyecto que estés trabajando y Solo agregas los archivos ".cs":

    Insertando modelo de Postgresql en solución VS

    Puedes encontrar más información sobre los Archivos de extensión.
    CSDL en :
    http://msdn.microsoft.com/es-mx/library/bb399169.aspx

    MSL en :
    http://msdn.microsoft.com/es-mx/library/bb399202.aspx

    SSDL en :
    http://msdn.microsoft.com/es-mx/library/bb399559.aspx
    No te preocupes si salen errores de referencia en el siguiente paso especificamos cuales son.

    PASO 6:

    Ahora hay que agregar unas referencias:
    System.Data.Entity
    System.Runtime.Serialization

    Después de esto Tendrás que crear el App.Config y configurar la cadena de conexión.
    Y listo ahora es posible hacer CRUD a la base de datos, para ver el ejemplo terminado dejo el SourceCode.
    http://www.megaupload.com/?d=CORN5YVQ
    __________________________________________________________________________________________________________________________________________

    MySql

    MySql Entity Framework es fácil de configurar ya que solo tienes que descargar el Mysql Connector de la página oficial http://dev.mysql.com/downloads/connector/net/
    Instalarlo y listo, lo puedes Usar exactamente igual que Entity Framework para Sql Server.

    Claro está que debes tener previamente instalado el Visual Studio 2008 con SP1

  • WarNov Developer Evangelist

    Programando para Office 2010 usando WPF y Visual Studio 2010

    • 2 Comments

    En este video, observaremos la manera de crear un panel para usar dentro de Word, que contendrá fragmentos de texto a los que luego de hacerles doble click podremos insertar dentro del documento a través de Visual Studio Tools for Office (VSTO)

    El panel fue diseñado usando Blend 3 y aprovechando las características de DataBound de WPF. Se aprovecha la DLL WindowsFormsIntegration para obtener un objeto de tipo ElementHost que permite agregar dentro de Windows Forms tradicional, elementos de WPF. Luego este contenedor se agrega a un UserControl y este UserControl se agrega a Office a través de un Custom Panel.

    El video explica todo el proceso y de aquí se puede descargar la solución finalizada:

     

  • WarNov Developer Evangelist

    Entity Framework vs. LINQ como ORM

    • 6 Comments

    LINQ inició siendo una teconología que servía tanto para consultar objetos en memoria, como para mapear tablas de bases de datos SQL a objetos de memoria. Así que luego de hacer el mapeo, con nuestro mismo lenguaje de programación sin necesidad de escribir comandos SQL a través de LINQ tendríamos la posibilidad de hacer consultas y manipulaciones sobre estas entidades en memoria sin mucho problema.

    Visto esto, observamos que con LINQ tenemos dos alcances: Como lenguaje de consultas integrado y como ORM.

    LINQ fue primero que EntityFramework; al principio LINQ "quizo" ser el ORM de Microsoft, pero demostró algunas deficiencias en ciertos aspectos como la conexión a distintos repositorios. Luego vino el EntityFramework a mejorar esas cosas en las que LINQ tenía debilidades. Pero OJO! EntityFramework solo se ocupa de las operaciones de un ORM. Y el hecho de que haya aparecido, no significa la desaparición de LINQ, dado que LINQ aparte de tener esas caractarísticas de ORM, es un potente lenguaje de consultas integrado que permite consultar tanto entidades (como las arrojadas por EntityFramework, el mismo LINQ o cualquier otro ORM), como objetos personalizados, XML, ActiveDirectory y en general cualquier estructura de datos .NET en memoria que implementen IQueryable (http://msdn.microsoft.com/en-us/library/bb546158.aspx)


    En últimas, yo recomendaría usar EntityFramework para hacer ORM y luego usar LINQ para ejecutar consultas muy sencillamente sobre las entidades generadas por el ORM. (Y sobre cualquier otra colección de datos).

  • WarNov Developer Evangelist

    Entornos Laborales Virtuales Microsoft para Emprendedores

    • 0 Comments

    Tengo un gran amigo. Emprendedor y entusiasta de las tecnologías Microsoft. Se ha independizado y gran parte de su operación se ha beneficiado de todos los recursos que hoy en día tiene Microsoft que son gratis o de muy bajo costo. Empezando con BizSpark (todo el software por 3 años y 100 dólares no más), herramientas de virtualización gratuitas como Virtual PC, etc.

    En este post, de su nuevo blog:
    http://rickersilva.wordpress.com/2010/01/25/virtual-office,
    nos enseña como logró establecer su empresa sin oficinas y usando todas estas herramientas.

  • WarNov Developer Evangelist

    Curso Gratuito de XNA en Colombia

    • 0 Comments

    Microsoft Colombia te reta a aplicar tu imaginación, pasión y creatividad en innovaciones de tecnología que puedan hacer una diferencia en el mundo. Participa en Imagine Cup 2010.

    El Diseño de juegos es en dónde el arte y la ciencia se unen. A través de Imagine Cup, puedes aprender y avanzar hacia una carrera cómo desarrollador o empresario de juegos. Únete hasta con 3 amigos y construye una experiencia de juego completa, usando XNA Game Studio 3.0 o posterior, Visual Studio o Silverlight.

    ¿Quieres aprender XNA Game Studio y participar en Imagine Cup 2010?

    1. Aquí encuentras toda la información sobre la competencia. No olvides revisar con detenimiento las reglas.

    2. Regístrate en Imagine Cup 2010 y escoge la categoría de Diseño de Juegos.

    3. Envíanos a más tardar el 30 de enero el usuario con el cual te inscribiste, a acadcol@microsoft.com.

    4. El próximo 5 y 6 de Febrero podrás asistir sin ningún costo, al curso de XNA Game Studio dictado por especialistas en Desarrollo de Juegos con la plataforma XNA, que hacen parte de la más activa comunidad de desarrollo de Bogotá: BogotaDotNet (http://bogotadotnet.org/). Este curso lo estaremos dictando para los estudiantes que se hayan registrado en la competencia. El curso será presencial en Bogotá (cupos limitados) y se transmitirá vía Live Meeting. No importa en cuál ciudad del país estés, puedes participar.

    5. El día del curso te daremos acceso gratuito al software que requieres para desarrollar tu juego.

    6. Busca inspiración para tu proyecto en los Objetivos de Desarrollo del Milenio de las Naciones Unidas y empieza a crear tu producto. La primera ronda del concurso se cierra el 15 de Marzo de 2010.

    La tecnología es la fuerza más poderosa para transformar las ideas brillantes en soluciones reales y sabemos que eres talentoso en programación de software, desarrollo de hardware, diseño, pero sobre todo, que eres visionario.

    Apuéstale a representar al país en la final mundial de la competencia, que será en Polonia.

    ¡Te esperamos!

    Esta iniciativa es válida para Estudiantes mayores de 16 años, que residan en cualquier ciudad de Colombia.

  • WarNov Developer Evangelist

    Open Data Protocol (OData)

    • 2 Comments

    Si como desarrolladores alguna vez hemos tenido la necesidad de exponer los datos de nuestra aplicación a otras aplicaciones; o lo que es peor, usar datos de otras aplicaciones, deberíamos saber que éstas actividades de compartimiento de información son de las más complicadas en el proceso de desarrollo.

    Es cierto que hoy en día existen los gloriosos Web Services: montados sobre los más aceptados protocolos y estándares: TCP/IP, HTTP, SOAP, XML, XSD, WSDL…

    Pero a pesar de ello, la comunicación sigue siendo complicada. Sobre todo para aquellos que tienen que crear proxies manualmente (Afortunadamente el SDK del Framework.NET ayuda a alivianar estas tareas con herramientas como wsdl.exe y xsd.exe que se integran transparentemente con Visual Studio). Casos por ejemplo en que un cliente java requiere acceder a un Web Service creado con .NET. y viceversa, requieren de mucha mano de obra y configuración por parte del cliente. Y ni se hable cuando de WCF se trata! Es bien sabido que WCF da toda la flexibilidad que requerimos para acceder a cualquier fuente de datos, montados sobre cualquier protocolo de transmisión y con cualquier tipo de mensaje; pero configurar un WCF sin mucha experiencia, puede resultar ciertamente más dispendioso que crear las operaciones en sí.

    Dado que la mayoría de aplicaciones necesitan acceder a los datos a través de HTTP, es justo entonces que se defina un protocolo simplificado que aproveche todas las ventajas de HTTP y que permita a múltiples clientes (esto es: clientes creados con distintas tecnologías) acceder a múltiples fuentes de datos, todo usando el mismo mecanismo.

    El camino ya había estado bastante trabajado con arquitecturas como REST, protocolos como ATOM y lenguajes como JSON.

    Teniendo todas estas bases y las necesidades que ya he descrito, Microsoft decidió crear OData; un protocolo para la consulta y actualización de una variedad de fuentes de datos que incluye pero no se limita a bases de datos relacionales, sistemas de archivos, CMS y sitios web tradicionales.

    OData fue liberado bajo la promesa Open Specification Promise (OSP) para permitir a cualquier persona interoperar libremente con cualquier implementación OData. A futuro, se espera que OData empiece a ser parte de AtomPub.

    Como lo mencioné OData ha sido creado específicamente para trabajar sobre web y es un protocolo centrado en HTTP. Usa las URIs para identificar los recursos con los que se desea trabajar. Los resultados, aunque se pueden trabajar con el formato AtomPub basado en XML, también se pueden trabajan con JSON, para simplificar la integración con clientes HTML y JavaScript.

    Para trabajar con OData hoy en día se ofrecen toolkits gratuitos para .NET (WCF Data Services), JAVA, AJAX y PHP y se aplica no solo en sitios web personalizados, sino en productos como SharePoint, Excel (PowerPivot), SQL Server, Windows Azure Storage, WebSphere eXtreme Scale, etc.

    Más información, en la página oficial del protocolo: http://www.odata.org. Allí encontraremos links de la especificación FORMAL del protocolo. Pero como toda especificación FORMAL, para nosotros desarrolladores que necesitamos agilidad, es poco práctica. De hecho la practicidad que tiene este protocolo para nosotros, es en el uso de WCF Data Services y es por eso, que he dedicado mi próximo post a ese tema. Pero para entenderlo mejor, es necesario comprender que existe OData y que está basado en REST.

  • WarNov Developer Evangelist

    REST (Representational State Transfer)

    • 2 Comments
    Creado en el 2000 hace referencia a “Representational State Transfer” o transferencia representacional de estados.

    Si uno se deja guiar por el nombre pareciera como si no tuviese nada que ver con lo que medio se ha oído por ahí acerca del tema: “que sirve para acceder a servicios sencillamente a través de URLs”, por ejemplo.

    Pero estudiándolo bien uno nota que al final si hay cierta congruencia.

    En REST participan básicamente dos roles. Un cliente y un servidor. El cliente es el sujeto de los dichosos cambios de estados. Entonces imagine el cliente como su navegador web en un estado específico (una página web). Un cambio de estado obviamente significa la transferencia a otra página web.
     
    Una transferencia representacional en web, no es más que la transferencia lograda sencillamente a través de URLs. Y es precisamente allí donde se encadena todo.

    La idea es que las acciones o verbos que originan los cambios de estado del cliente en REST están completamente definidos. Es decir, REST propone un vocabulario de acciones fijo; que permite obtener recursos del servidor, que una vez interpretados por el cliente, hacen que este cambie de estado.

    Esto último es lo que más diferencia a REST por ejemplo del tradicional SOAP. Ya que en SOAP, se le dice a cada desarrollador que defina un vocabulario nuevo y arbitrario de verbos, de acuerdo a los requerimientos de la aplicación (obtenerUsuarios(), almacenarOrden(…), etc. Todos sobreusando el verbo POST de HTTP). Paradójicamente, esto que siempre se vio como una gran ventaja, va en contravía con muchos de los aspectos inherentes del HTTP que es base de SOAP. Así que aspectos como la autenticación, caching, negociación de contenidos y demás, no se aprovechan.

    Aunque hasta aquí todo lo ejemplifiqué usando HTTP, REST es un mecanismo que no depende de ese protocolo. Las aplicaciones REST pueden basarse en otros protocolos, siempre y cuando éstas provean un vocabulario uniforme preestablecido para las aplicaciones que se construirán sobre ella. Recordemos que la idea principal de REST es maximizar el uso de las capacidades predefinidas de la plataforma que los soporte. HTTP como tal, proporciona un rico vocabulario completamente establecido y estandarizado que se ajusta perfectamente a este objetivo. Es por esto, que hoy en día al hablar de REST uno automáticamente piensa en su implementación sobre HTTP.

    Principios

    REST se fundamenta en seis principios básicos:
    • Cliente y Servidor plenamente identificados y separados
    • No hay almacenamiento de estado en las transiciones (Stateless)
    • Respuestas “cacheables” (Para mejorar las interacciones y el performance)
    • Capas: Pueden haber varias capas de servidores intermedios
    • Código por demanda: La funcionalidad de un cliente se puede extender con código trasmitido por el servidor (por ejemplo con JavaScript). Este es el único requerimiento opcional.
    • Interfaz uniforme: La misma que se discutió anteriormente.

    Objetivos

    Los principios anteriormente mencionados, están diseñados para lograr los siguientes objetivos:
    • Escalabilidad de componentes
    • Generalidad de Interfaces
    • Distribución Independiente de componentes
    • Existencia de componentes intermediaros que reducen latencia, aumentan la seguridad y encapsulan sistemas de legado.

    Recursos

    Los recursos se definen como fuentes de información específica y son muy importantes en REST. Un cliente accede a los recursos que el servidor dispone. Imagine una aplicación empresarial con información de recursos humanos. En este caso, la lista de empleados es un recurso del servidor y para acceder a ellos, se requiere un identificador único (por ejemplo una URI), que es usado por el cliente para referenciarlo y una interfaz de comunicación estandarizada (por ejemplo HTTP). Obviamente, aparte de tener claro el objeto de una acción, se debe tener clara la acción a ejecutar sobre ese objeto. Así pues, una aplicación interactúa con los recursos sabiendo su identificador único y la acción a ejecutar sobre este. Por ejemplo: Recurso: Empleado con Id:3520. Acción: Borrar. Los recursos generalmente son transmitidos entre el servidor y el cliente usando formatos como HTML, XML o JSON. No obstante, los recursos también pueden ser imágenes, texto plano o cualquier otro formato.

    Servicios Web REST

    No son más que servicios WEB implementados usando HTTP y los principios de REST que comprenden una colección de recursos de acuerdo a los siguientes aspectos:

    • Una URI base para el nombre del servicio: http://example.com/miservicio/
    • El tipo MIME de los datos soportados por el servicio
    • El conjunto de operaciones soportadas.
    • En REST sobre HTTP, lo más normal es tener estas operaciones
      • POST: Crea nuevos recursos. Como retorno, se ofrece el ID automáticamente creado
      • GET: Lista un recurso
      • PUT: Reemplaza un recurso con otro (Útil para el update)
      • DELETE: Elimina un recurso

    Entonces por ejemplo si se quisiera eliminar el empleado con ID 3520 se haría un request con DELETE a la siguiente URL desde el cliente:/span>
    http://example.com/miservicio/empleados/3520

    Conclusión

    REST, que es una arquitectura y no un protocolo como SOAP, se basa en acciones sobre recursos, para permitir la interacción de un cliente con un servidor. La implementación sobre HTTP es la más común y ha permitido la creación de otras tecnologías. Por ejemplo Microsoft, que se ha basado en este tipo de implementación REST para generar el estándar OData (Open Data) sobre el cual se construyó WCF Data Services (antes conocido como ADO.NET Data Services), y que permite simplificar el acceso interoperable a las capas de datos en aplicaciones n-tier.



  • WarNov Developer Evangelist

    Mono Tools for Visual Studio

    • 4 Comments

    Cada vez que encuentro noticias como esta me siento bastante agradado pues nunca me ha gustado cuando dicen por ahí que la tecnología Microsoft es cerrada y para nada extensible a otras plataformas. Y el agrado surge básicamente de que obtengo cada vez más argumentos para demostrar lo contrario.

     

     

    En esta ocasión, la gente de Novell llega con este brillante producto. Aquél que nos permitirá a nosotros desarrolladores de software cuyo cubil de trabajo no es otro más que Visual Studio, tener nuestras creaciones en Linux, Unix y hasta MacOS, sin necesidad de aprender lenguajes ni plataformas nuevas.

    image

    Es un Add-In comercial (versión gratuita de evaluación) que se instala en Visual Studio y que permite entre otras cosas hacer escaneos de nuestras aplicaciones para ver si podrán correr bien sobre el Framework Mono (versión del Framework.Net para plataformas no Windows), hacer pruebas de nuestras aplicaciones usando Mono en Windows o en una imagen virtual de Linux, hacer debug remoto en Linux, empaquetar para Linux estándar o mediante un Appliance para SUSE Linux que proveerá un servicio de deployment muy sencillo para nuestra aplicación.

     

     

    Imaginen entonces qué cantidad de trabajo nos podremos ahorrar a la hora de programar nuevas aplicaciones .NET que queramos que corran en las plataformas no Windows, pero sobretodo la posibilidad de poder reusar todos los componentes que ya existen!

     

     

    Todo esto nos permitirá a nosotros, a los ISVs y proveedores de servicios de desarrollo expandir nuestras oportunidades de mercado de una manera muy sencilla. Sobretodo viendo que en el mercado actual, hay muchas instalaciones no Windows.

    image

    Además, para aquellos acostumbrados a desarrollar en otras plataformas, puede ser una oportunidad para explorar nuevas formas de desarrollo (Con Visual Studio) que de seguro harán que vean todas sus ventajas sobre los modelos de desarrollo que han usado siempre para llegarle a plataformas como Linux o MacOS. El sitio oficial de Mono Tools for Visual Studio se encuentra en este link.

     

     



  • WarNov Developer Evangelist

    Sistemas POS que piensan en la Nube

    • 2 Comments

    Antes que nada, veamos algunos requerimientos urgentes de los sistemas POS, dadas las condiciones económicas de hoy en día:

    ·         Puntos con funcionalidad extendida, pero con máxima velocidad y disponibilidad

    ·         Conexión directa con un ERP central para permitir decisiones óptimas y oportunas

    ·         Apertura para la colaboración con partners y otros servicios para reducir costos

    ·         Desarrollo y despliegue de software rápido y económico

    ·         Nada de inversiones iniciales en infraestructura

    En primera medida uno pensaría en SaaS como una alternativa. Pero usualmente los thin clients (browsers) no son capaces de trabajar offline. De esta manera se hace obvia la necesidad de un Front Store o repositorio en cada cliente. Además los browsers no pueden garantizar el manejo de periféricos ni pueden garantizar las velocidades requeridas en las cajas.

    Por todo esto, la mejor elección es usar Smart Clients con un caché de datos local usando por ejemplo SQL CE en cada cliente. El deployment se puede implementar usando ClickOnce. Sumado a esto pueden estar los protocolos WS-* que permiten una seguridad máxima sin tener que recurrirse a VPN u otras complicadas configuraciones de Firewall, así que las instalaciones serían muy sencillas.

    BEDIN Shop Systems, un ISV italiano creó la solución aKite enfocada a crear POS usando esta metodología. En un principio toda esta solución era auto hosteada y aunque solucionaba los problemas descritos, presentaba problemas a la hora de manejar picos de consumo y sobretodo de generar un esquema centralizado de integración con otros sistemas como el ERP, CRM, BI, Logística y demás...

    Con la llegada de Azure a producción, este ISV decidió migrar su aplicación y lo logro en solo tres meses sin mayores problemas, según su reporte.

    Esquema de POS comunicado con Azure

    Lograron crear un Hub Inteligente que remueve la complejidad técnica y facilita compartir datos entre los POS y otros sistemas. Por ejemplo en el caso de tarjetas de fidelidad y de regalo, se logró una inmediatez total, un mejor servicio y sobretodo menor riesgo de fraude.

    Además gracias al esquema nativo de Azure, los picos de uso dejaron de ser problema y sobretodo, cuando un cliente va a implementar su sistema POS, el up-front (o inversión inicial) es nulo, pues toda la infraestructura ya existe.

    Las ventas en este sistema pueden efectuarse desde todos los continentes, con distintos lenguajes, monedas e impuestos. Luego de esto, a través de los “Retail Web ServicesaKite RWS-” (creados por el ISV y hospedados en Azure usando SQL Azure) los datos se envían a un ERP central para actualizar el inventario y la contabilidad. Las estadísticas de ventas también se hacen inmediatamente disponibles, pero no solo en el ERP, sino también en los sistemas de Back Store.

    aKite RWS es un conjunto de servicios WCF que explotan muchas características de esta tecnología. De esta manera, solo fue necesario crear un conjunto claro de servicios, cuya configuración se adapta a cualquiera de los puntos de conexión requeridos. Por ejemplo, solo bastó con configurarlos para el uso con Smart Clients, y quedaron listos para usarse en los clientes POS.

    Como si fuera poco, la migración de estos servicios a Azure, generó valores agregados como un balanceo de carga automático (nativo de Azure), asegurando gran escalabilidad y una subdivisión más equitativa de los recursos entre las tareas. Antes eso era manejado por una aplicación bastante compleja y difícil de mantener.

    El proyecto fue dividido en un Web Role y cuatro Worker Roles que se comunican entre ellos usando Queues y Blobs. BEDIN declara que en la migración de datos y código de ORM no tuvo ningún problema, dado que Sql Azure demostró ser completamente compatible con el código de Sql Server que ya se tenía, aun cuando este había sido generado con un ORM de un tercero (LLBL GenPro)

    Como ISV, BEDIN también confirmó los siguientes beneficios:

    ·         Ausencia de costos iniciales en Hardware

    ·         Costos proporcionales en relación al número de usuarios

    ·         Ahorros que se pueden destinar a mercadeo, ampliación de funcionalidad y costos que se transfieren al usuario final en forma clara

    ·         Monitoreo automático

    ·         Auto recuperación de desastres

    En conclusión, Windows Azure permitió a BEDIN Shop Systems concentrarse en su aplicación y habilidades arquitecturales y en ofrecer un valor máximo a sus usuarios. Es una empresa con más de 20 años de experiencia en el desarrollo de POS. Fueron los pioneros en implementar .NET con aplicaciones para el Retail. (: www.bedin.it  www.akite.net )

     

  • WarNov Developer Evangelist

    DLLs de VB6 que no trabajan en x64

    • 0 Comments

    Tiene usted una biblioteca que le ha servido por años y que está escrita en el viejo VB6?

    Se ha visto enfrentado a tener que usarla a hora para una aplicación creada con Visual Studio para correrla en 64bits?

    Entonces ha de ser muy probable que cuando la ejecute allí, obtenga un error como:

    Retrieving the COM class factory for component with CLSID {XXXXXXX} failed due to the following error: 80040154.

    Tal vez luego de esto trató por mucho medio de ver que pasaba, pero sin encontrar solución.

    Aquí lo que sucede es que  el código creado en Visual Basic, definitivamente tiene tipos no compatibles con la arquitectura x64.

    Cuando se crean soluciones en Visual Studio, este por defecto las compila con la opción “Active CPU”. Es decir que cuando el JIT compiler pasa el MSIL a lenguaje nativo de máquina, hace la compilación con la arquitectura en la que se está desplegando la solución. 

    Así que cuando una aplicación que tiene referenciada una DLL de VB6 que solo soporta 32bits se ejecuta en x86, ésta se compila y ejecuta correctamente. Pero en bien se pasa a x64, todo pasa a 64 bits. Y como la dll de Visual Basic 6 no soporta esa conversión, por lo tanto se genera el error. (Aún cuando originalmente se haya compilado en una máquina de 32 bits. Recuerden que la opción por defecto es "Active CPU").

    La solución consiste entonces en especificar para cada proyecto que referencie la DLL en cuestión ( y cualquier otra que falle) que la compilación se debe hacer explícitamente a x86. Así aun cuando se corra el código en una máquina de x64, el código final estará en 32 bits y por ende será compatible con la dll.

    Aunque esta es la única solución aparte de tener que migrar todo el código de VB (cosa completamente aconsejable a mediano plazo), ha de tenerse en cuenta que si su aplicación tiene utilidades muy atadas a 64bits (cosa que no creo), entonces estas dejarán de funcionar.

  • WarNov Developer Evangelist

    Antivirus Gratuito: Microsoft Security Essentials

    • 0 Comments

    Cansado de buscar un antivirus gratuito en el que en verdad pueda confiar?

    Ya no es necesario buscar más! Microsoft ofrece uno completamente gratis y no solo es un antivirus, sino toda una suite de seguridad que respeta la libre elección de sus usuarios, su privacidad y no exige registro ni identificación alguna:

    Se trata de Microsoft Security Essentials que brinda seguridad en la que usted puede confiar;  es fácil de obtener y utilizar y brinda una protección silenciosa que no interfiere con el performance de su máquina. Brinda protección en tiempo real para atender las necesidades de seguridad continua de un PC con Windows, lo que ayuda a protegerlo contra virus, spyware y otras amenazas maliciosas. 

    Cualquier usuario del HOGAR con Windows versiones Windows XP, Windows Vista o Windows 7 que tenga una versión ORIGINAL de Windows lo puede descargar GRATUITAMENTE de la RED y usarlo indefinidamente. Es Gratuito y exclusivo para los usuarios con una versión Original de Windows. (Para entornos empresariales está disponible el producto Microsoft Forefront). 

    Los únicos requisitos para correr este software son: Cualquiera de las versiones de 32 o 64 bits de Windows XP SP2 y superior, Windows Vista y Windows 7 incluyendo el modo XP.

    La idea de ofrecer disponibilidad gratuita de este producto únicamente con copias originales de Windows, obedece a que la protección en tiempo real como aquella que se encuentra en Microsoft Security Essentials es una gran herramienta en la lucha contra software malicioso conocido; sin embargo para mejorar el estado general del ecosistema también se requiere tratar el malware en la fuente de distribución. Las fuentes de software falsificado y soluciones temporales de activación maduran con el malware. Una vez infectados, los PC con software no original están más propensos a convertirse en hosts de malware, que propagan software malicioso a otras máquinas en el ecosistema. Conducir más sistemas al software original tiene el potencial de atender mejor las necesidades comerciales y de seguridad del ecosistema en general. Si el PC no aprueba la validación de originalidad, la instalación de Microsoft Security Essentials termina y al usuario se le envía a información sobre cómo resolver los problemas relacionados con software original.

    Uno de los detalles especiales de este producto, es que los usuarios de Microsoft Security Essentials contarán con acceso al soporte de la comunidad y de correo electrónico sin costo alguno.

    Microsoft Security Essentials no estará disponible como una descarga crítica de Windows. El instalador estará disponible como una descarga individual sin costo pero utilizará el servicio Microsoft Update tanto para las descargas de firmas como para las actualizaciones de producto.

    Se puede descargar de http://www.microsoft.com/security_essentials y no se requiere que los consumidores ingresen una ID de Windows Live ni registro para descargar la solución.

    Microsoft ya ha liberado productos para proteger el software de programas malintencionados como Windows Defender que detecta y elimina sólo spyware conocido (tecnología que ayuda a recopilar información acerca de una persona u organización sin su conocimiento o consentimiento). Sin embargo, no está diseñado para brindar protección contra la gama completa de software malicioso, y en específico no evita que virus, gusanos, troyanos, y otro software malicioso infecten su máquina. La nueva solución sin costo será una solución antimalware completa que se encarga de estas amenazas. Esto no significa que Microsoft Security Essentials esté diseñado para reemplazar a Windows Defender. Pero si usted ejecuta Microsoft Security Essentials, no necesita ejecutar Windows Defender. Microsoft Security Essentials deshabilita Windows Defender para administrar la protección en tiempo real del PC, incluyendo antivirus, rootkits, troyanos y spyware.

    Aparte de ser gratuito y ofrecer tantas ventajas, Microsoft cree en la elección del cliente. Al ofrecer Microsoft Security Essentials como una descarga individual e independiente, Microsoft ofrece a los usuarios de Windows la opción de elegir, gratis o de otro tipo, la solución de seguridad de PC que se ajusta mejor a sus necesidades individuales. Además también protege la privacidad de sus usuarios, Microsoft Security Essentials no desencadena un cambio en el estado del PC con Windows sino que lee el valor de originalidad almacenado en la máquina donde está disponible, o de otra manera invoca una API para que valide dónde no exista un estado local. No se ve ni recopila información personal como parte de la validación de originalidad.

    Conózcanlo, instálenlo y recomiéndenlo a sus conocidos para evitarles tediosas búsquedas de antivirus gratuitos!

  • WarNov Developer Evangelist

    Stairway to Azure (3): Componentes de Cómputo y Almacenamiento

    • 4 Comments
    Descarga la presentación PowerPoint de este Post.
     En mi post anterior, vimos por qué en determinado momento, es ventajoso tener alguien que se preocupe por el manejo de la infraestructura de nuestras aplicaciones en vez de nosotros. Y observamos que esto nos dejaría libres para preocuparnos únicamente por desarrollar la lógica de nuestras aplicaciones. Ya no es necesario comprar, instalar y operar sistemas de IT. Además solo pagaríamos por el cómputo y almacenamiento usado (como con los servicios públicos) y no una tasa fija que solo se requiere para ciertos picos. Finalmente, si enfocamos correctamente nuestras aplicaciones, estas pueden escalar muy fácil tomando ventaja de los enormes centros de datos que ofrece Microsoft para hospedar nuestras aplicaciones. Por ejemplo; si decidiéramos crear el siguiente “Facebook” sería muy últi Windows Azure ya que soporta trabajos de presentación (Web Role) y trabajos de proceso (Worker Role). Además si es una iniciativa con poco presupuesto inicial, es ideal ya que a medida de que se tengan más usuarios y se requiera escalar el sistema, se tendrán más recursos para adquirir dentro de Windows Azure.  

    Nuevamente, eso no implica que todo lo desplegaremos en Azure. La idea no es tener únicamente  SaaS sino también S+S. Así que por ejemplo las aplicaciones que hoy en día corren dentro de una organización (on-premises) podrían almacenar datos en la nube o usar otros servicios de la misma. Aplicaciones que corren en el escritorio o teléfonos móviles pueden usar los servicios de la nube para hacer sincronización de datos. 

    Toda esta maravilla requiere de aplicaciones que la exploten! Y para lograr dichas aplicaciones, necesitamos de una plataforma para construirlas. Esta plataforma es provista por Windows Azure y está compuesta por un grupo de tecnologías que nos proveen servicios a nosotros como desarrolladores.  

     

     

    Componentes de Azure

    En Windows Azure básicamente encontramos tres componentes principales:

    Windows Azure

    Ambiente basado en Windows (en esta edición es Server 2008), para ejecutar aplicaciones y almacenar datos en los centros de datos de Microsoft.

    SQL Azure

    Provee servicios de datos basados en SQL Server

    .NET Services

    Infraestructura distribuida para usar con aplicaciones locales y hospedadas en la nube.

    Estos componentes los podemos apreciar en la siguiente ilustración. En este post exploraremos en detalle el componente Windows Azure (Cómputo y Storage) y posteriormente observaremos Sql Azure y .NET Services.

    Windows Azure

    Comencemos entonces con Windows Azure:

    Overview

    Como podemos observar en la gráfica, este componente se subdivide en tres elementos: la estructuta principal o Fabric, el componente de cómputo y el componente de almacenamiento (storage). Empecemos viendo en detalle el componente de cómputo.

    Servicios de Cómputo

    Windows Azure corre sobre una gran cantidad de máquinas, todas ubicadas en los datacenter de Microsoft y accesibles vía internet. Todas estas máquinas conforman un todo que le da el poder y escalabilidad necesarios. Aunque al principio solo se iban a poder ejecutar aplicaciones .NET hoy en día, esta plataforma permite ejecutar aplicaciones nativas de Windows (esto lógicamente comprende todos los lenguajes de programación tradicionales que hoy en día sirvan para correr aplicaciones sobre Windows Server 2008).
    En Windows Azure, una aplicación típicamente tiene múltiples instancias y cada una corre una copia de todo o una parte de la aplicación. Cada instancia corre en su propia máquina virtual. Estas VMs están sobre Windows Server 2008 x64. Las aplicaciones se instancian en uno de dos roles, según escoja el desarrollador. Web Role, o Worker Role:

     

    Azure

     El Web Role corre sobre IIS7 y acepta los llamados HTTP o HTTPS (tecnologías: ASP.NET, WCF, todas las que trabajen con IIS). El balanceo de carga es automático, gracias al Load Balancer incluido en la plataforma.
    El Worker Role no puede aceptar peticiones directas desde el mundo exterior. Típicamente estos roles adquieren sus entradas a través de colas en el Windows Azure storage. Estos mensajes sí pueden provenir de una aplicación exterior o de un Web Role. Son procesados y la respuesta se puede poner en una cola, o enviarse directamente al mundo exterior (esto último sí es permitido).
    Independientemente del tipo de rol en una VM, siempre existe un Agente de Azure que permite la interacción del rol con el resto de la aplicación y la plataforma.
    Aunque es algo que puede cambiar en el futuro, en la actualidad Windows Azure mantiene una relación 1:1 entre VMs y cores físicos de procesador. Esto obviamente garantiza el performance de la aplicación que sea predictible (cada instancia tiene su propio core dedicado; esto también significa que no hay un límite arbitrario en el tiempo de proceso concedido a una instancia en especial). Sin embargo si se desea aumentar el performance, el dueño de la aplicación podría decidir crear más instancias de la misma, solo modificando el archivo de configuración. De esta manera, Windows Azure detecta el requerimiento y ajusta una nueva VM con su respectivo core. Si en algún momento alguna instancia falla, Azure lo detecta e inicia una nueva.

    Esto genera una notoria implicación: Para ser escalable, las instancias de Windows Azure Web role, deben ser stateless (no manejar estado en sesión o aplicación por ejemplo). Todo estado requerido ha de ser escrito en los mecanismos de storage de Windows Azure, o pasados al usuario final por medio de cookies por ejemplo. Además debido al load balancer, no hay forma de garantizar que múltiples peticiones de un mismo usuario sean enviadas a un mismo Web Role.
    Este tipo de implicaciones hace que el pasar aplicaciones a la nube o crearlas destinadas para ellas, no sea completamente transparente comparado con el modelo on-premises. Sin embargo, los cambios son muy sutiles (usar ADO.NET Data Services –compatible con Azure Storage-, tener en cuenta el modelo de colas para los Worker Role, etc.)
    Por esto, para los desarrolladores, trabajar con Windows Azure, es muy similar a crear aplicaciones tradicionales Windows. Microsoft provee templates para Visual 2008 que permiten crear Web Roles, Worker Roles y combinaciones de los dos. Los desarrolladores son libres de usar cualquier lenguaje de programación Windows. Todo esto viene en un SDK de Azure que también contiene una versión de ambiente Windows Azure que corre en la máquina del desarrollador. Este ambiente es conocido como Windows Azure Development Fabric e incluye Windows Azure Storage, un agente Windows Azure y todo el resto de tecnologías que requiere una aplicación para correr en la nube.
    Un desarrollador puede crear y depurar su aplicación usando este simulacro local y luego desplegar la aplicación a Windows Azure, cuando ésta esté lista, aunque en la nube hay cosas que son realmente diferentes. Por ejemplo, no es posible hacer el attach de un debugger a una aplicación en la nube. Así que básicamente para hacer el debugging de una aplicación en la nube, el mecanismo principal sería la escritura a los logs de Windows Azure, vía el agente de Azure.
    Otros servicios provistos incluyen por ejemplo el envío de mensajes desde los agentes a Windows Azure, quien los captura y reenvía por medio de emails, mensajería instantánea o cualquier otro mecanismo especificado. Además también se puede especificar a Windows Azure que detecte fallas automáticamente y envíe alertas. También está disponible información acerca de consumo de recursos tales como tiempo de proceso, ancho de banda entrante y saliente y almacenamiento.

    Cuando el desarrollador ha depurado completamente su aplicación de manera local, ésta ha de ser instalada en un proceso de dos etapas. Primero se sube la aplicación al área de staging en Azure. En este momento, la aplicación queda identificada con un nombre DNS que tiene la forma <GUID>.cloudapp.net, donde <GUID> representa un identificador asignado por Windows Azure. Este nombre es asociado con una dirección IP virtual (VIP) que identifica al balanceador de carga a través del cual la aplicación será accedida. En el momento en que se decide pasar ya la aplicación a producción, se usa el portal de Windows Azure para solicitar el paso a producción. En este caso, Azure automáticamente cambia la entrada en sus servidores DNS para asociar la VIP con el nombre de producción que el desarrollador ha escogido; por ejemplo: myapp.cloudapp.net. (Es posible usar un nombre de dominio personalizado, sencillamente creando un DNS alias usando un CNAME estándar). Otro punto para resaltar aquí: las IPs reales de las aplicaciones jamás son reveladas.

    Esto brinda un fuerte componente de seguridad.

    Servicios de Almacenamiento

    Esta parte de la plataforma también provee un tipo de almacenamiento: Azure Storage. Que es distinto a SQL Azure (otra parte de la plataforma). El almacenamiento Azure no es relacional. Su lenguaje de consulta tampoco es SQL. Es un almacenamiento mucho más sencillo, pero más escalable y más rápido que un almacenamiento relacional. Básicamente hay tres tipos de almacenamiento Azure:

    Storage

     

    1.       BLOBS:  (Binary Large Objects). Prácticamente, archivos. Los requerimientos de File System de nuestras aplicaciones en la nube, se suplen con los blobs. Un blob puede ser de hasta 50Gb de espacio y se encuentra dividido en bloques, de manera que cuando se hacen transferencias y ocurren fallos, la transferencia puede continuar desde el último bloque transferido correctamente.

    2.     Tablas: Los Blobs son la opción justa para algunas situaciones. Pero para otras son muy poco estructurados. Son muy sencillos de entender; pero para permitir a las aplicaciones trabajar con datos de una manera más formal se proveen las tablas. Estas tablas no son tablas relacionales y tienen su complejidad:
           
            Tables

    De hecho, a pesar de que se llaman tablas, los datos que ellas contienen realmente se encuentran almacenados en una jerarquía simple de entidades que contienen propiedades. Cada propiedad tiene un nombre, un tipo y un valor. Varios tipos son permitidos incluidos: Binary, Bool, DateTime, Double, GUID, Int, Int64 y String. Una propiedad puede tomar diferentes tipos dependiendo de los valores almacenados en ella. De hecho, no hay obligación de que todas las propiedades en una entidad tengan el mismo tipo. El tamaño para cada entidad puede ser de hasta 1MB y siempre es accesada como una unidad. Cuando se lee una entidad se retornan todas sus propiedades y al escribir una, esto se hace atómicamente de manera que se reemplazan todas sus propiedades. Y en vez de usar SQL, una aplicación accesa los datos de una tabla usando las convenciones definidas por ADO.NET Data Services (no ADO.NET convencional), o REST. La razón para este tipo de solución, es que nos permite escalar el almacenamiento de una forma tal, que podemos distribuir nuestros datos en distintas máquinas (muchas más de las que se posibilitan con bases de datos relacionales tradicionales); de hecho, una sola tabla en SQL Azure puede ser de terabytes!

    3.    QUEUES: Los blobs y las tablas están enfocados en almacenamiento y acceso de datos. La tercera opción en Windows Azure son las colas, que tienen un propósito muy distinto. Una función principal de las colas es proveer un mecanismo para que las instacias de tipo Web Role se puedan comunicar con las instancias de tipo Worker role. En la siguiente gráfica, se describe el funcionamiento de las colas. En un escenario típico, un rol acepta trabajos de los usuarios (paso 1). Para pasar esos requerimientos a los worker role, se escribe un mensaje en la cola (paso 2). Este mensaje, puede ser de hasta 8kb y es posible usarlo para que contenga URIs apuntanto a blobs o entidades en tablas en caso de que se requiera transmitir más información. El worker lee los mensajes de su cola (paso 3) y ejecuta el trabajo como tal. Una vez leído el mensaje, éste no se borra. En vez de esto, el mensaje se hace invisible a otros lectores por un período de tiempo (por defecto 30 seg). Cuando el worker ha completado su trabajo, en ese momento se borra explícitamente de la cola. (paso 5)
            QUeues


    Separar las instancias web de las worker tiene sentido porque libera al usuario de tener que esperar a que una tarea larga sea procesada y también hace la escalabilidad más simple, dado que solo sería necesario agregar más instancias. Pero por qué hacer que las instancias borren explícitamente los mensajes? Esto se hace para manejar fallos. De esta manera si  un worker que está haciendo el trabajo indicado falla, el mensaje no se borrará de la cola.  Así que cuando vuelva a estar visible, el mensaje reaparece en la cola para ser leído por otro worker. Y de esta manera se proteje el mensaje de fallos.

    Independientemente del tipo de almacenamiento, todo dato almacenado es replicado tres veces, para garantizar redundancia de datos y tolerancia a fallos.

    El storage de Windows Azure puede ser accedido por aplicaciones de Windows Azure o cualquier otra. En ambos casos, todos los tres tipos de storage pueden consultarse a través de REST. Todo es nombrado usando URIs y accesado con operaciones HTTP estándares. No obstante, un cliente .NET podría usar ADO.NET Data Services o LINQ para acceder más cómodamente a esta información. Pero un cliente java  usaría REST estándar. Por ejemplo, un blob puede ser leído con un HTTP GET contra un URI formateado así:

    http://<StorageAccount>.blob.core.windows.net/<Container>/<BlobName>

    De manera similar, una consulta sobre una tabla sería:

    .table.core.windows.net/?$filter=http://<StorageAccount>.table.core.windows.net/<TableName>?$filter=<Query>

    y una cola se accesaría:

    .queue.core.windows.net/http://<StorageAccount>.queue.core.windows.net/<QueueName>

    La Estructura (Fabric)

    Todas las aplicaciones de Windows Azure y todos sus datos en el Storage, residen en alguno de los centros de datos de Microsoft. Dentro de ese centro de datos, el conjunto de máquinas dedicadas a Windows Azure se organizan en una fábrica tal como lo muestra la siguiente gráfica:

     

    Fabric

     

    Tal como se aprecia, la Estructura Azure es un gigantesco grupo de máquinas administrado por un componente de software llamado Fabric Controller. Este controlador es replicado a través de un grupo de 5 a 7 máquinas y es dueño de todos los recursos en la estructura: computadoras, switches, balanceadores de carga y más. Dado que el controlador se comunica con un “Fabric Agent” en cada máquina, también tiene información de cada aplicación en la estructura. Como punto a resaltar, puedo mencionar que el Storage también aparece ante el controlador como una aplicación más. Así que el controlador no conoce los detalles del storage; esto último indica obviamente que el almacenamiento es autocontrolado. Es decir; el Storage, es solo una aplicación más dentro de la estructura, que se administra autónomamente.

    Este amplio conocimiento le da la capacidad al Fabric Controller de cumplir múltiples funciones como monitorear todas las aplicaciones que están corriendo y de esta manera ser capaz de dar información en vivo, de qué es lo que está pasando en la estructura. Administra los sistemas operativos teniendo en cuenta aspectos como las actualizaciones de los Windows Server 2008 que corren en las VMs de Azure. También decide dónde deben correr las aplicaciones, escogiendo los servidores físicos para optimizar la utilización del hardware. Para lograr esto, el controlador depende del archivo de configuración que es subido con cada aplicación a la nube. Este archivo provee una descripción basada en XML de las necesidades de la aplicación: cuántos roles web necesitará, cuantos roles de trabajo y otros detalles. Cuando el controlador recibe una nueva aplicación, éste usa su archivo de configuración para determinar cuántos roles de cada tipo ha de crear. Una vez creadas estas VMs, el controlador las monitorea. Si una aplicación requiere 5 instancias de Web Role y una muere, el controlador automáticamente reiniciará una nueva.

    Esta creación de instancias debe realizarse inteligentemente. Por ejemplo, suponiendo que además de las 5 instancias web el desarrollador pide cuatros instancias worker. Una asignación ingenua podría poner todas estas instancias en máquinas en el mismo rack servidos por el mismo switch. Si el rack o el switch fallara, la aplicación entera quedaría no disponible. Dadas las metas de alta disponibilidad de Windows Azure, hacer que una aplicación dependa de puntos sencillos de falla como este, no es una buena idea.

    Para evitar esto, el controlador agrupa las máquinas en conjuntos llamados “Dominios de Falla”. Cada dominio es parte de un data center que independizaría las fallas únicamente a su contenido. Eso se ilustra en la siguiente gráfica:

    Failure

    En este ejemplo sencillo, la aplicación está corriendo en dos instancias Web y el datacenter está dividido en dos Dominios de Falla. Cuando el controller despliega la aplicación, se establece una instancia de Web Role en cada uno de los dominios. Este arreglo significa que una falla en el hardware no va a provocar que toda la aplicación se caiga.

    Hasta aquí vimos todo lo relacionado al componente de Windows Azure. En mi post Stairway to Azure (4): Sql Azure y .NET Services, veremos la descripción de estos otros dos componentes.

  • WarNov Developer Evangelist

    Métodos Parciales (Partial Methods)

    • 0 Comments

    Una gran adición del Framework 2.0 en cuanto a codificación, fueron las clases parciales. Surgieron como una excelente solución sobretodo para los generadores automáticos de código, pues anteriormente cuando no habían clases parciales y uno trabajaba sobre una clase generada por alguna herramienta, el trabajo ejecutado se perdía cada vez que se regeneraba dicha clase.

    Gracias a las clases parciales entonces, uno podía generar un archivo "paralelo" que hacía referencia a la misma clase, pero que no se veía afectado en las regeneraciones automatizadas. Todo esto con la gran ventaja de que a pesar de que estuvieran en archivos distintos, la clase aparecían al resto del mundo como una sola (intellisense, compilación, etc).

    Otro uso interesante, es la posibilidad de dividir grandes clases en unidades con funcionalidades comunes, para obtener una mayor administrabilidad de las mismas y para permitir que varios desarrolladores estuviesen trabajando sobre una misma clase (en las versiones parciales en archivos distintos)  al mismo tiempo.

    Ya para el Framework 3.5 se incluyeron los métodos parciales que van un paso más allá con este concepto.

    La idea es que en una clase parcial se incluye la firma del método (tiene que ser privado y con tipo de retorno void) y en otra clase se "implementa". Lo pongo entre comillas, porque implementar me lleva a pensar en una interfaz, donde obligatoriamente se tiene que implementar los métodos establecidos por ella. Con los métodos parciales no existe esa OBLIGACION. El desarrollador decide si quiere "implementar" o no los métodos parciales que define la clase parcial.

    Para saber qué metodos parciales incluye una clase, basta con recurrir al intellisense y escribir "partial" y dar espacio; inmediatamente saldrán todos los métodos parciales disponibles.

    Esto resulta muy últil también en el proceso de personalización de código generado automáticamente, tal como pasa con la generación del modelo de datos que ofrece el Entity Framework. Las clases generadas por este framework, agregan métodos parciales para que se puedan controlar los cambios a los atributos en las clases generadas. Entonces si el desarrollador quiere establecer un control granular sobre estos cambios, implementa los métodos parciales en sus clases parciales externas.

    Qué ventajas ofrece esta metodología comparada con una de Interfaces?

    Si se fuera a autogenerar código con una herramienta como el Entity Framework, basado en una interfaz o en una clase base (con métodos virtuales o abstractos), obviamente la implementación de los métodos dictados por la interfaz quedarían en el código autogenerado o se haría muy complicado el proceso de escoger el archivo donde se quiere generar estos métodos y si se quieren generar o no pues tal vez ya han sido modificados.

    Además hay otra ventaja y es que cuando los métodos parciales no son implementados, entonces ni sus firmas ni sus llamados se incluyen en la compilación del código, lo que hace el proceso de compilación y el resultado de la misma, mucho más liviano que cuando se usan interfaces, o cuando se crean métodos virtuales o abstractos.

    En conclusión, vemos como muchas de las innovaciones del Framework .NET tienden a hacer más práctica la programación, sin perder el formalismo que lo ha caracterizado a través de su historia. La aparición de métodos parciales son una buena noticia y entender muy bien su uso nos permitirá desarrollar excelentes piezas de  código con muy poco esfuerzo.

    Pueden encontrar información de referencia aquí.

     

  • WarNov Developer Evangelist

    Stairway to Azure (2) Adquiriendo las cuentas de acceso.

    • 0 Comments

    En la primera entrega de esta serie de posts acerca de Windows Azure, estuve recorriendo todo el camino en la historia de Software más Servicios y relacioné un video que muestra de forma muy rápida esta historia y nos deja listos para comenzar a usar Windows Azure como alternativa de S+S propuesta por Microsoft.

    Vimos como Windows Azure permite hospedar en la nube servicios de negocio y de base de datos y que tiene puntos de conexión para comunicarnos con las aplicaciones "on-premises".

    Cuando trabajamos con Windows Azure, básicamente nos descargamos un SDK y unas herramientas que se instalan sobre nuestro Visual Studio y IIS, con el fin de generar un Windows Azure "Local" sobre el cual podemos hacer pruebas de los desarrollos para Windows Azure. Obviamente, los servicios de Azure tienen su costo (posteriormente estaemos hablando de esto). Pero como también es obvio, necesitamos tener la oportunidad de probar la experiencia, antes de pagar por una suscripción.

    Por este motivo, Windows Azure ofrece un trial, para que podamos poner en el Windows Azure real las aplicaciones que desarrollemos usando el Azure Virtual Local. Para acceder a estas cuentas trial, es necesario solicitar un token, que se toma su tiempo en ser asignado a nosotros (algunos días). Para solicitarlo, primero es necesario registrar nuestra cuenta de Windows Live Id (anteriormente Passport.NET) en el sitio de Microsoft Connect. Y luego de esto, llenar una información de registro específica para acceder al token. Después, esperamos algun tiempo mirando ansiosamente el correo todos los días, hasta que descubrimos que tenemos el tan preciado token. Una vez con ese token en nuestro poder, procedemos a redimirlo en el sitio de Windows Azure de acuerdo a las instrucciones que vienen en el correo y en adelante, podremos subir nuestras soluciones a la nube.

    He querido postear esta información antes de explicar realmente como programar para Azure, pues me gustaría que la audiencia vaya adelantando el proceso de adquisición de tokens, para que cuando ya sepan cómo y tengan desarrollos para Windows Azure, ya hayan redimido su token y puedan probar sus aplicaciones online. Para este fin, también he publicado un video, que muestra más detalladamente los pasos a seguir:

    Los espero en una nueva entrega donde comenzaremos con el típico "Hola (mundo) Nube"

  • WarNov Developer Evangelist

    Ecosistema de Desarrollo Microsoft

    • 0 Comments

    Hace muchos años se creó alrededor del nombre Microsoft como tecnología, un mito que hoy en día en numerosos ambientes sigue vigente basado en hechos que ya no son reales y que provoca que los profesionales en tecnologías de diseño y desarrollo de software pierdan grandes oportunidades o a veces tengan que ejecutar más trabajo del que realmente deberían estar haciendo.


    Este mito dice que las tecnologías Microsoft son tecnologías cerradas, costosas y para nada integrables con el mundo Open Source. Otras versiones a veces agregan opiniones acerca de la calidad de los productos generados con nuestras tecnologías. Pero el éxito de las aplicaciones creadas con nuestra plataforma a nivel mundial habla por sí solo.
    En síntesis, hoy el mito está absolutamente roto. Y en este artículo describiremos por qué. Cómo nuestra plataforma ahora es integrable con el resto del mundo de software y lo mejor de todo, al mejor precio posible: $0.


    Ahora Microsoft ofrece un poderoso conjunto de herramientas, servidores y tecnologías en forma completamente gratuita para poder construir WebSites, Servicios y Aplicaciones. Habilitando a los estudiantes, emprendedores y personas que deseen iniciarse en nuestra plataforma de punta sin costo inicial y con la posibilidad de poder trabajar con muchas de las tecnologías con las que ya se encuentran familiarizados.

    En el siguiente video hacemos un recorrido rápido sobre toda la plataforma gratuita de Microsoft y en el resto del artículo hablamos de ello:

    Este ecosistema ya se encuentra totalmente unificado y reside en un solo sitio web, desde donde se puede descargar gratuitamente y comprende:


    1. HERRAMIENTAS

    a.      Visual Web Developer 2008 Express: Disponible para usar tecnologías como ASP.NET, Entity Framework, LINQ, Dynamic Data, AJAX, Silverlight y muchas más, para permitir por ejemplo crear Aplicaciones Orientadas a Datos automáticamente, sin una línea de código. Y en interoperabilidad, ofreciendo alternativas como soporte completo en el editor de código (coloreado de sintaxis, autocompletado de código, tips de métodos, depuración para Javascript) y librerías de última generación como JSon y JQuery. Como si fuera poco, nos ofrece todo un entorno integrado que no solo nos permite administrar nuestra solución de software como tal, sino también Bases de Datos, sitios FTP y aplicaciones para desplegar nuestra solución en los servidores web.

    b. Internet Explorer 8: Con sus herramientas para desarrolladores y diseñadores incluidas, hace eficiente y fácil el proceso de creación de sitios web, permitiendo la manipulación del DOM y el HTML dentro del browser, así como hacer Tracing de los estilos css usados, y perfilamiento y depuración de Javascript. Además incluye soporte completo para CSS 2.1, características de HTML5 como navegación AJAX, DOM Store y más características de CSS3 como texto vertical. También permite la creación de características únicas como buscadores personalizados, WebSlices, y Aceleradores para mejorar la experiencia de navegación de los usuarios.

    2. SERVIDOR DE BASES DE DATOS:

    Una versión gratuita del exitoso Microsoft SQL Server se encuentra disponible para ser descargada y servir como fuente de datos para sitios de producción; ya sea el próximo MySpace, o una aplicación corporativa. Disponemos de una excelente consola de administración para este motor; también gratuita, que nos permite administrar, crear, consultar y modificar las bases de datos muy fácilmente. En cuanto a interoperabilidad, provee su propio conector con PHP, para poder desplegar todo su poder sobre nuestro SQL Server.

    3. TECNOLOGIA:

    Nuestro nuevo framework, sobre el cual corre toda la plataforma, como siempre sigue siendo gratuito. Y esta vez viene con mejoras inigualables que van a permitirnos ser productivos con realmente muy poco esfuerzo:

    a. MVC: El modelo que realmente permitirá construir aplicaciones completamente estándar, al darnos control total sobre la forma en que se muestran nuestros sitios. Además permite un desarrollo orientado a pruebas, y una alta facilidad de administración en proyectos de gran magnitud gracias a su naturaleza puramente desacoplada.

    b. Dynamic Data: Creación automática de la capa de acceso a datos y aún de las interfaces de usuario para implementar las operaciones CRUD en nuestros sitios Web, todo esto soportado por templates que permiten dinamizar la apariencia del resultado final para que se ajuste a nuestros requerimientos.

    c. AJAX: Un completo framework integrado que nos permite crear aplicaciones web dinámicas de alta respuesta que funcionan como aplicaciones de escritorio.

    d. LINQ: Consulta y manipula CUALQUIER tipo de fuente de datos con un mismo lenguaje, con todos los beneficios de trabajar con lenguajes .NET Nativos como C# o VB.

    e. Entity Framework: La tecnología que nos permite mapear nuestras bases de datos a objetos en memoria en un abrir y cerrar de ojos, para ser totalmente productivos enfocándonos en desarrollar nuestro negocio y no en labores repetitivas.

    4. PLATAFORMA DE SERVICIOS:

    Internet Information Services 7 (IIS 7.0) ya no es solo un servidor web. Es toda una plataforma para hospedar sitios web, servicios y aplicaciones. Nos brinda la oportunidad de personalizarlo sin perder disponibilidad ni seguridad. Le podemos personalizar o agregar características como Intelligent Media Streaming a través de extensiones gratuitas de IIS, maximizar la seguridad web y ejecutar aislamiento automático de aplicaciones. Nos permite un despliegue simplificado de aplicaciones .NET y PHP en el mismo servidor. Incrementa la velocidad de nuestros sitios Web a través de técnicas únicas de caching dinámico y compresión de datos mejorada e implementa una infraestructura escalable con el balanceo de carga basado en HTTP sumado a un manejo de peticiones y ruteo inteligente.

    Y por si no se los he mencionado, todo esto es gratis!

    Para tener todo este ecosistema en nuestras máquinas de desarrollo y producción, lo único que necesitamos es visitar: http://www.microsoft.com/web

    Allí encontraremos más detalles de toda la nueva plataforma, así como un link directo al PI (Platform Installer) que nos permite descargar todo este contenido unificadamente, para tener en nuestras manos todo el poder de la plataforma en un santiamén.

    Además de esto, en este sitio encontraremos completos tutoriales que nos enseñarán a usar la plataforma de principio a fin para lograr rápidamente tener un sitio en producción. Tal es el caso del tutorial del sitio de ejemplo NerdDinner que incluye libro en PDF, video, y por supuesto código fuente.

    Por si fuera poco aquí también se nos enseña el proceso de Hosting de nuestros sitios, si es que no somos muy diestros en este tema. Pero eso no es todo! También podremos obtener hosting GRATIS para las aplicaciones que hagamos con la nueva plataforma; de esta manera cubrimos todo el proceso gratuitamente, desde la creación hasta la implementación de nuestras aplicaciones.


    Muchos otros recursos se encuentran referenciados en este portal, para que tengamos la posibilidad de extender más aún nuestro conocimiento: Links a los sitios de aprendizaje de Silverlight, IIS y ASP.NET, Links a Blogs de los escritores de nuestra tecnología más influyentes y muchos temas más.

    Hay más en este portal? Claro que sí. Nuestra tecnología es completamente abierta. Y es por eso que en este portal encontramos un enorme listado de aplicaciones Open Source creadas con la plataforma y en muchos caos PHP, listas para ser usadas aun comercialmente sin ningún costo: WordPress, DotNetNuke, MojoPortal, SugarCRM, Umbraco y muchas más.

    Con todo lo anterior, es muy fácil iniciarnos en la plataforma y los productos que podemos llegar a crear con ella. Tanto así, que rápidamente podremos convertirnos en empresarios de tecnología a través de todos estos recursos. Dado lo anterior, en el portal también se ofrece la alternativa de entrar a hacer parte de programas para profesionales en tecnologías Microsoft como WebSpark o BizSpark, en los cuales por unas tarifas súper reducidas para apoyar el emprendimiento (US$100 por tres años) se puede tener acceso a la mayoría del licenciamiento de los productos Microsoft requeridos para sacar nuestra empresa adelante. Hasta acceso a soporte tenemos desde el portal de nuestra plataforma!

    Nuevamente: El mito está roto!

    Visite http://www.microsoft.com/web y observe como puede empezar a ser productivo muy rápido, sin un solo peso invertido y con la posibilidad de integrarse sin problema al mundo Open Source. El Ecosistema de Microsoft, ofrece tecnologías para todos!

    Descargar el Video: Descargar la presentación:


  • WarNov Developer Evangelist

    Stairway to Azure

    • 2 Comments

     

    El objetivo de esta serie de posts, es tender una escalera a la nube (Azure), de tal manera que nosotros, desarrolladores hispanoparlantes tengamos una manera rápida de comenzar con todo lo relacionado con esta tecnología.

    Para introducirnos rápidamente en el mundo de Azure, primero que todo es necesario que entendamos los conceptos de SOA, SaaS y S+S. Para este fin, he preparado este video que nos dejará muchas cosas claras:

     

    Luego del video, es mucho más fácil entrar en materia:

    GENESIS

    Al principio todo era código estructurado. Y miles de líneas de código se entrecruzaban como espagueti dentro de aterradores GoTo’s y Labels. Y la interoperabilidad de aplicaciones era así:

    Arquitectura Spagueti

     

    Todos los sistemas estaban altamente acoplados y hacer un arreglo o un cambio era toda una pesadilla. Era la época de oscuridad en el desarrollo de software. Se desarrollaba sin ciencia. Se administraba con sufrimiento.

    Servicios y SOA

    Después nació el servicio. Y los programadores se dieron cuenta de que era bueno. No tenían que pasar días tratando de hacer un cambio, porque las funcionalidades estaban bien distribuidas independientemente. Además tampoco se duplicaban. Entonces, nació SOA o Arquitectura Orientada a Servicios. Con la cual se hizo mucho más fácil la administración del software y los procesos más eficientes.

    El milagro de SOA hizo que las empresas progresaran mucho y que cada vez requirieran más servicios; sus sistemas de software crecían y obviamente así el hardware que los soportaban. Y el crecimiento de hardware trajo consigo un purgatorio para el personal de IT. Administrar decenas de servidores y estar pendientes de los nuevos requerimientos de infraestructura para estos grandes sistemas de software se hizo cada vez más doloroso. Los costos también aumentaban exponencialmente cada vez que crecían los sistemas. Además el negocio en crecimiento obligaba a viajar a los empleados de las empresas, quienes en sus viajes de negocio requerían tener acceso al software. Pero el software estaba internado en el centro de datos empresarial. Los empleados estaban atados a la ubicación física de la empresa. Todo fue un caos!

    SaaS

    Entonces apareció el evangelista promulgando el uso de los servicios de Hosting. Empresas encargadas de mantener los centros de datos para otras empresas sumergidas en el caos del manejo de IT. Y aparecieron grandes centros de datos que a pesar de estar fuera de las instalaciones de los clientes, podían albergar todas sus soluciones  de software. Las empresas se ahorraron costos y dolores de cabeza, porque ya no tenían que estar pendientes de la administración de IT. La comunicación entre el servicio de hosting y las empresas fue posible gracias a la explosión de internet y el ancho de banda; así que los empleados ya no estaban atados a la casa matriz; todo mundo se olvidó de los detalles no funcionales y se dedicó más enfocadamente a su negocio… Los gerentes vieron que todo esto era muy bueno! Así que se dedicaron solo a producir servicios para ser hosteados y ese fue el origen del SaaS (Software as a Service) o software como servicio.

    Entonces todo mundo comenzó a adorar al nuevo modelo de conexión al software (la internet). Y nadie volvió a conectarse al interior de la empresa. Siempre era necesario tener internet para poder trabajar. Así que si había un problema de conectividad, se perdía la productividad. Además las aplicaciones tuvieron que estandarizarse para poder visualizarse desde todos los browsers y se perdieron las características especiales y únicas de las aplicaciones de escritorio. Entonces los negocios que un día crecieron vertiginosamente, comenzaron a decaer por la limitante de funcionalidad. Esto sumado a que los proveedores de servicios de hosting también estaban a tope y tardaban mucho en escalarse, empeoró aún más la situación. El oscurantismo cayó de nuevo por el uso excesivo de una novedad.

    S+S

    El desarrollador reflexionó; y se dio cuenta que el modelo de software tradicional instalado al interior de la empresa que había desechado, tenía grandes ventajas sobre el nuevo ídolo. Y que sin embargo SaaS también conservaba características brillantes. Entonces observó que la solución no era irse por un único camino. Sino tomar el mejor camino de acuerdo a cada tipo de aplicación. Así decidió que parte de su software iba a ser software como tal y otra parte iba a ser servicio. Esto dio origen a S+S: Software más Servicios. Desarrolladores y gerentes se dieron cuenta que esto era bueno y se mantiene hasta nuestros días.

    AZURE (PaaS)

    Microsoft también observó que todo esto era bueno. Y decidió hacerlo aún mejor! Así que está poniendo a disposición de sus clientes los servicios de hosting, almacenamiento y procesamiento de datos; tal cual como lo hacen los actuales proveedores; pero esta vez, ofreciendo estadios completos de servidores que hacen más fácil lograr la escalabilidad y disponibilidad que requieren algunas de las aplicaciones de misión crítica de los clientes. En síntesis, Azure cubre la parte de software como servicio; pero como se observa al mirar en detalle la tecnología, se ofrece todo un framework para poder conectarnos con las aplicaciones al interior de la empresa y otras hospedadas por los proveedores de servicios de hosting convencionales que seguirán trabajando con muchas de las aplicaciones que actualmente manejan sin problemas. Concluyendo, la nueva tecnología Azure basa su desarrollo en la interoperabilidad limpia y eficiente con las fuentes de software que han demostrado ser muy adecuadas hasta ahora: al interior de las empresas (Software – On Premises) y hosteadas por terceros (Servicios).

    Una vez recorrido el camino necesario para entender la historia y el porqué de Azure, esperen en próximos blogs una inmersión especial a la plataforma y todas sus características!

  • WarNov Developer Evangelist

    Problemas con el Connection Pool de ADO.NET

    • 0 Comments
    Cuando se crea una conexión SQL en ASP.NET, por defecto siempre irá al POOL de conexiones administrado por el framework. Es así como ni al cerrarla ni haciéndole dispose, esa conexión realmente se cierra en el SQL Server como tal. El pool de conexiones existe para mejorar en general el rendimiento de las aplicaciones, dado que el hecho de abrir una conexión es bastante costoso. Así que aunque lógicamente la conexión está ConnectionString es requerida, se sirve una de las ya existentes en el pool de una manera más rápida que creandola desde 0 (from the scratch).

    Si no se desea este comportamiento, basta con incluir en la conexión o en el WebConfig POOLING=FALSE

    El pool para un ConnectionString en particular se puede configurar con el número máximo y mínimo de conexiones. Jugar con estos valores puede mejorar o empeorar el rendimiento de la aplicación. El valor por defecto es de 100.

    Existe un error bastante grotesco que puede asustar mucho si no se entiende de connection pools:

    A transport-level error has occurred when sending the request to the server. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)

    Ocurre por ejemplo si en el pool no hay conexiones disponibles, debido a que han sido terminadas por un ente distinto a la aplicación (alquien desconectó el cable de red, apagaron el server, le hicieron kill a las conexiones, etc.)

    No ocurre porque la operación esté tardando demasiado. Y el que ocurran excepciones por éste último motivo no se arregla aumentando el timeout de la conexión. El timeout de la conexión se refiere al tiempo de espera para logran conexión con el server de db, antes de que una excepción sea lanzada.

    El tiempo de timeout por defecto es de 15 segundos. Y en el connectionstring está medido siempre en segundos. Siempre ha tener valores positivos o 0. De lo contrario una excepción surge. Si es 0, significa que nunca se lanzará excepción por incapacidad de alcanzar al server. Esto no es buena idea, porque el sistema se puede volver irresponsivo, y no habría indicios de por qué sucede esto.

    Para que los pool funcionen correctamente, debe existir un manejo responsable de las conexiones. Cómo se manejan responsablemente? Cerrándolas cada vez que no se vayan a requerir más.

    SqlConnection conn = new SqlConnection(myConnectionString);
    try
    {
      conn.Open();
      doSomething(conn);
    }
    finally
    {
      conn.Close();
    }


    Como se vé si hay un fallo, igual se cierra la conexión.

    Teniendo en cuenta: http://www.15seconds.com/issue/040830.htm

    "Close and Dispose methods of Connection object are equivalent. Neither one gives you any specific advantages over the other. "

    Por tanto se puede usar también de una forma más elegante y ostentosa:
     

    using (SqlConnection conn = new SqlConnection(myConnectionString))
    {
      conn.Open();
      doSomething(conn);
    }


    El using en este contexto libera todos recursos declarados, por medio de Dispose.

Page 13 of 14 (334 items) «1011121314