• WarNov Developer Evangelist

    Nuevo Ciclo del Conocimiento ALM con Visual Studio 2010

    • 3 Comments

    Como ya es toda una tradición, en Microsoft Colombia cada martes a partir de las 6.30pm, venimos realizando ciclos de conocimiento de manera presencial en nuestras instalaciones y también via LiveMeeting, para que personas de otras locaciones o los que no puedan asistir no se queden sin disfrutar de este contenido técnico.

    El mes pasado tuvimos nuestro ciclo de Windows Phone 7 Series. En este, nos estaremos enfocando en estudiar la herramienta Visual Studio 2010 en lo concerniente a la Administración del Ciclo de Vida del Software o ALM.

    image

    Es por esto, que para ustedes tenemos preparadas las siguientes 5 sesiones:

    1-Jun-10 Planeación de Proyectos con Visual Studio 2010: Introducción a VS2010 como herramienta de AALM, Planeación de Proyectos, Branching y Merging
    8-Jun-10 Arquitectura de Software con Visual Studio 2010 Primera Parte: Introducción y Descubrimiento de código usando las herramientas de arquitectura
    15-Jun-10 Arquitectura de Software con Visual Studio 2010 Segunda Parte: Class Coupling y Architecture Explorer
    22-Jun-10 Calidad de Software I: Introducción y creación y ejecución de pruebas Manuales. Administración de casos de prueba con Microsoft Test Manager
    29-Jun-10 Calidad de Software II: Introducción a las pruebas automatizadas de interfaz de usuario. Depuración con Intellitrace usando VS2010

    En este link pueden registrarse para asistir presencialmente o via Live Meeting.

    Los esperamos!

  • WarNov Developer Evangelist

    Windows Azure Storage Tools: Programa en Azure más fácil con herramientas de terceros

    • 0 Comments

    A continuación un compilado de las herramientas que uso a diario para manejar el Storage de Windows Azure, así como un diagnóstico de lo que me han parecido has ahora:

    Gladinet Cloud Desktop (Free Edition):

    Esta herramienta permite mapear a una unidad de red nuestro Blob Storage en Azure. Es bastante útil para hacer backups, o subir archivos para nuestras aplicaciones directamente desde nuestro Windows Explorer. Permite conectarse a otros servicios de storage además como FTPs, Skydrive (súper útil), Amazon y Google. Sencillamente nos pide el endpoint y el Primary Key y listo. Se crea un directorio virtual dentro de un drive llamado Gladinet. En este drive quedan todos los servicios de storage configurados.
    Una de las cosas más interesantes que hace, es abstraer el hecho de que en los blobs de Azure no tenemos un manejo de carpetas como en el sistema de archivos al cual estamos acostumbrados. (Detalles aquí). Así que automáticamente renombra los blobs de manera que imitan una estructura de carpetas y de igual manera, cuando se extraen del blob storage hacia las carpetas locales, crea una jerarquía a partir del nombre extendido.
    Por ejemplo estos blobs en una cuenta de storage de Windows Azure llamada warstorage en nuestro explorador de archivos con Gladinet se muestran así:

    clip_image002
    Las rutas rest de estos blobs serían:
    http://warstorage.blob.core.windows.net/thecloudware/Level1/Level2/Koala.jpg
    http://warstorage.blob.core.windows.net/thecloudware/Level1/Level2/Desert.jpg
    http://warstorage.blob.core.windows.net/thecloudware/Level1/Level2/Tulips.jpg

    Para finalizar, Gladinet permite copiar carpetas completas aún desde dentro del storage en la nube; cosa supremamente útil. No soporta el Developer Storage.

    Mi calificación: StarStarStarStar

    Windows Azure Blob Storage Client

    Es una de las primeras herramientas surgidas para esta tarea. Creada con WPF, se encuentra en Codeplex, así que es Open Source. Es muy básica. Útil para pequeñas tareas rutinarias o para aprender a manejar el API examinando el código. Tal como Gladinet solo permite manejar Blobs; pero a diferencia de este, solo permite manejar una cuenta a la vez. Permite subir varios archivos a la vez, pero no carpetas (no puede hacer la abstracción). Además he detectado problemas para subir archivos Silverlight (.xap). Soporta el Developer Storage. Es muy inestable. Para fines educativos está bien.

    Y viendo ya los blobs sin la abstracción de jerarquía de carpetas con una herramienta como Windows Azure Blob Storage Client, veríamos:

    clip_image004
    Como se aprecia, los blobs sencillamente han sido renombrados representando la jerarquía de carpetas.

    Mi Calificación: StarStar

    myazurestorage.com

    Es una herramienta web basada en MVC creada por Microsoft y de uso gratuito que permite explorar todos los elementos del storage de Windows Azure para una cuenta determinada. Es así como podemos interactuar con los blobs, tablas y colas. Es una gran aplicación disponible en todo lado, gracias a que es Web. Las credenciales no se guardan en el servidor y sólo se almacenan en una cookie cifrada en el equipo. Observemos como se ve nuestro ejemplo en esta herramienta:

    clip_image006


    Como se aprecia, si establecemos un delimitador de carpetas simulado (en este caso “/”) la página nos muestra correctamente la jerarquía. Si lo omitimos, lo veríamos de esta manera:

    clip_image007

    Esta herramienta solo permite subir de a un archivo; pero también permite crear tablas, nuevas entidades dentro de esas tablas, ejecutar consultas sobre las tablas y el mismo manejo con las colas. Maneja correctamente el Root Container. Obviamente al ser web, no soporta el Developer Storage.

    Mi calificación: StarStarStar

    Azure Storage Explorer

    Esta es una grandiosa herramienta también OpenSource (en Codeplex) que ha sido una donación de la compañía NEUDESIC un partner gold de Microsoft que la desea dejar abierta para la comunidad. Al día de hoy va en su versión 4 liberada el mes pasado. Así que se mantiene constantemente con innovaciones y correcciones. En esta versión por ejemplo permite manejar varias cuentas separadas por los tabs de una bella aplicación creada en WP usando el patrón MVVM. Permite CRUD con blobs, tablas y colas. Además permite reproducir los blobs de media (imagen, video, audio). Como cosa curiosa, no hace la abstracción de jerarquías en Azure (ahora mismo les estoy enviando el feedback, pues sería cool) Aquí les muestro cómo se ve nuestro ejemplo:

    clip_image009
    No permite subir carpetas completas, pero sí múltiples archivos.

    Mi calificación: StarStarStarStar

    Cerebrata Cloud Storage Studio

    Esta es la herramienta PRO para manejar el Storage de Azure. No es free (la única versión free es la Developer que solo se conecta al Development Storage). Tiene un trial e 30 días. No solo administra el storage, sino que también sirve para administrar los servicios de hosting (eliminar deployments, etc. Aunque no logré conectarme con el servicio de hosting desde este tool). Está construido nuevamente sobre WPF y abstrae correctamente la jerarquía de directorios, chequeando los nombres de los blobs. De una manera poco intuitiva, permite subir correctamente toda una carpeta con subdirectorios. En este sentido Gladinet hace un trabajo más transparente y lo mejor de todo, gratis. Tiene un muy buen manejo para CRUD de tablas y colas. Y sobretodo un muy buen query builder para las tablas. Los menús contextuales son bastantes ricos, por lo que operaciones frecuentes son muy fáciles de ejecutar. Por ejemplo creación de snapshots, modificación de propiedades, obtención de urls, etc. Para un ambiente profesional, vale pagar los cerca de US$70 que vale, aunque no es indispensable. Para finalizar un vistazo de nuestro ejemplo:

    clip_image011

    Mi calificación: StarStarStarStar

     

    Windows Azure Cmdlets:

    Son un conjunto de scripts diseñados específicamente para PowerShell. Fueron creados y publicados por Microsoft y en muchas ocasiones son base para construir otras aplicaciones más gráficas que no requieren el uso de la consola para funcionar. Aunque no manejan directamente operaciones CRUD sobre el storage, si nos permiten ejecutar operaciones administrativas como manejo de las llaves de acceso, del estado de publicación de los servicios de storage, del api de diagnósticos, etc. Es free.

    Mi calificación: StarStar

    Windows Azure MMC Snap In

    Este snap in fue creado por Microsoft usando los cmdlets mencionados anteriormente y es genial porque se integra a la consola MMC así que el uso es bastante intuitivo. Permite ejecutar tareas administrativas ( a través de los cmdlets ) y tareas operativas con el storage. Todo esto está implementado usando MEF, de manera que si lo deseamos, podemos modificar cualquier parte de este snapin, poniendo la funcionalidad que queramos. También es Free, y el ejemplo de nuestro storage se vería así:


    clip_image013

    No hay abstracción de jerarquía, pero lo interesante es que podemos subir un container completo. Entonces escogemos una carpeta en nuestro sistema de archivos y ésta se sube con todos sus contenidos como un nuevo container a Windows Azure. Si ese folder tiene subcarpetas, entonces renombra los archivos con la estructura. Desafortunadamente tiene un pequeño bug, y es que antes de comenzar con la jerarquía pone un “/” adicional:

    clip_image014

    Que obviamente no está de acuerdo con el formato convencional. Sin embargo el código fuente está disponible y se puede corregir. Tampoco nos permite subir múltiples archivos, y el refresh como siempre en MMC solo ocurre tras oprimir F5 (no es automático). Sin embargo, para administradores de IT lo veo perfecto pues está más enfocado a diagnóstico y servicios y con un soporte moderado a storage.

    Veredicto:

    En conclusión, Windows Azure tiene un gran set de tools para manejar su storage. Además como lo pueden ver, es una gran oportunidad de negocio también volverse productor de herramientas para aplicaciones de Azure. Azure nos da la bienvenida a todo un mundo de nuevos negocios.

  • WarNov Developer Evangelist

    XBOX ONE: Verdades de la revolución digital del gaming

    Esta es la mejor época para los geeks.

    La velocidad con la que encontramos novedades en el mercado no tiene igual en la historia.

    Tristemente, muchos usuarios y lo peor, bloggers y personas con acceso a la amplificación que provee el social media, no saben acoger estos avances. Y por el contrario aprovechan la información que se produce con las novedades tecnológicas para conseguir un pequeño beneficio inmediato propio, como lo puede ser tener un poco más de hits en sus stats.

    Por ejemplo, he visto a fans de XBOX decir que la PS4 es una caja de zapatos.

    Como si la Xbox One no fuese súper cuadrada al punto de que los fans de PS4 dicen que parece un Betamax.

    xboxplay

    Sin embargo lo que noto y me alegra para mi gusto, es que estos nuevos diseños dejaron atrás ese infantilismo que representa una consola de videojuegos con apariencia de nave espacial.

    Algunos queremos tener un living room, sala de tv, estudio o como ud lo llame que se vea sobrio y donde los aparatos que acompañen al 52" no sean intrusivos... en dos palabras: no traquetos...

    Creo que son dos diseños muy elegantes y ambos me gustan.

    Y en el caso de Xbox, el diseño es absolutamente intencional. Xbox One es una plataforma para usuarios vanguardistas que desean tener una experiencia totalmente integrada con todo su centro de entretenimiento. A tal punto que actúa como receiver, para poder controlar la televisión por cable o la música desde la grandiosa interfaz ofrecida por Kinect, que se opera por voz. Es por esto que una apariencia de este estilo es mucho más conveniente, pues combina mucho mejor en el ambiente y no se ve como un aparato raro que por accidente dejó el niño por ahí botado.

    Obvio que poder acceder a todas estas ventajas implica que la plataforma haga cosas que para muchos usuarios no son propias de una consola; de hechos para algunos es hasta pecado! Por ejemplo, estar frecuentemente conectada a internet.

    Si la consola no está conectada frecuentemente, entonces no podríamos correr juegos de carreras contra los avatares de nuestros amigos. Tampoco podríamos lograr que las últimas estadísticas de Messi se vieran reflejadas en nuestro juego de FIFA para reflejar el estado real del jugador... de hecho cosas tan sencillas como ver una película en Netflix, requiere que la consola tenga acceso a Internet. Desde que tengo mi XBOX 360, siempre la he mantenido conectada a internet y no se me ha caído ningún brazo y tampoco me siento pecador.

    Ud usuario que me lee en este momento: en serio no tiene internet permanente en el lugar donde reside? No está ahora conectado desde un equipo que tiene internet permanente?

    Obviamente, existen por ejemplo los tripulantes de submarinos atómicos que cuando están en su trabajo no tienen Internet frecuentemente, ni nunca, de hecho. En estos casos y otros no tan extremos, la experiencia de XBOX One no se va a poder tener. Para eso está la Xbox 360 a la que le hemos hecho hasta un rediseño para que los que quieran o tengan que quedarse en el estilo de juegos de hoy en día, lo puedan hacer sin problemas. Pero esto no nos puede detener en el avance. No nos puede detener el ánimo de ofrecer mayor funcionalidad y servicio.

    Es como si cuando se ideó el CD como medio de distribución de música, este proyecto se hubiese detenido porque la gente tenía equipos de sonido solo con casetera.

    casette

     

    De hecho, el mismo surgimiento de los CDs desplazó la vieja tecnología de cintas y comenzaron a aparecer aparatos que se hicieron cada vez mejores y baratos.

    Si nos hubiéramos atenido a los casettes, los lapiceros allegro seguirían siendo populares por su capacidad de "rebobinar" manualmente dichos casettes, para ahorrar la batería del reproductor portable.

    Por el contrario, si llegamos al punto en el que los juegos se distribuyan de manera digital masivamente; al igual que ha pasado con servicios como Netflix, Hulu, iTunes, etc, tendremos aún más motivo para que la sociedad implemente en mayor medida el acceso permanente a internet, hasta el punto de poderlo encontrar tan fácil como un tomacorriente. Sin mencionar que al integrar nuestros juego con el mundo online, tendremos una experiencia memorable no obtenida hasta ahora.

    Cómo hemos comenzado el proceso de digitalización total de los juegos?

    Funciona de la siguiente manera:

    1. Compras un disco (veremos como poco a poco compras menos discos y en vez de esto, haces una compra online y te bajas el contenido)

    2. Llegas a tu consola y activas ese disco a través de tu Microsoft Account.

    Esta activación de da un token de propiedad digital.

    3. Juegas

    Preguntas?

    Si:

    1. Pueden jugar otros usuarios en la misma consola ese mismo juego aún con una Microsoft Account distinta?

    R. Sí. Todos los usuarios que jueguen el juego en la consola en que se activó podrán jugar el juego.

    2. Puedo prestar mi juego a un amigo para que él juegue?

    R. SI!!! Y esto es lo que los blogs sensacionalistas no cuentan y lo que los fans mal informados no conocen!

    Los juegos se pueden prestar hasta a 10 amigos que están en una lista editable.

    Si una persona en esa lista ha estado por más de 30 días, en ese caso califica como un amigo al que se le puede prestar el juego.

    Entonces ese amigo recibe el disco, lo pone en su consola la consola valida que el juego es tuyo, mira tu lista de amigos y lo valida y le permite jugar.

    Como ven, es una medida que nos permite compartir nuestra propiedad, sin incurrir en la piratería que amenaza a la industria.

    Pero más allá de esto, lo que nos permitirá este sistema a futuro, será prestar nuestros juegos sin necesidad ni siquiera de un disco, porque no hará falta verificar la propiedad con el disco, pues tu cuenta Microsoft tendrá asociados los juegos que has comprado y descargado. Entonces un amigo podrá ver tu lista y solicitar el préstamo del juego. Tú lo autorizas y entonces el amigo se baja el juego en su casa y juega. Así de sencillo.

    La elaboración un poco avanzada de este mecanismo de préstamo para los bloggers que no se informan bien antes de escribir o que sencillamente tergiversan toda la información para su propio beneficios se convierte en un simple titular amarillista como este: "Xbox One no te permite jugar juegos prestados".

    3. Puedo vender mi juego usado y comprarme otro usado?

    R. SI!!! Hemos declarado oficialmente que existirán mecanismos en los que el token de propiedad digital que obtenemos cuando se activa por primera vez el juego, se va a poder comerciar. Si bien no hemos publicado cuáles serán esos mecanismos, lo que sí está claro es que Microsoft en ningún momento cobrará fees cuando se hagan esas transacciones.

    Y también quedó claro que los publishers tienen la potestad de decidir si permiten este tipo de transacciones o no. OJO, que esto mismo pasa con el PS4 que a pesar de promulgar en la rueda de prensa del E3 que no iban a impedir la reventa de títulos, luego en un espacio más reducido declararon que igual el Publisher era quien al final tenía la decisión.

    Nuevamente, el sistema de token, es el que permitirá transferir propiedad digital. Como el camino es hacia eliminar los caros, poco ecológicos e inseguros discos, cómo vas a hacer para vender uno si no tienes algo que represente tu propiedad? Pues bien, para eso van a estar los tokens.

    Este sistema parece que nubló también la mente de todos esos amarillistas que sencillamente escribieron: "Xbox One no permitirá la reventa de títulos

    Kinect 2 y Precio

    He recibido quejas de otros personajes disgustados porque la Kinect 2 siempre debe estar encendida y escuchando. Esto es falso. El usuario la puede configurar para que siempre esté totalmente apagada. De nuevo el asunto es que para poder disfrutar de todo su poder, lo mejor es tener el sistema de escucha siempre encendido. Francamente no veo como más lograr que podamos encender todo el sistema con la voz, si la Kinect que es la que escucha, está totalmente apagada.

    Pero esto no quiere decir que no se pueda jugar sin Kinect. Si el juego no está basado en Kinect en su core, por ejemplo un Forza, no es obligatorio usarla, no problem!

    Hoy en día tengo la Kinect con la Xbox 360 y siempre que llego al living siento que disruptivo el que tenga que encender la Xbox con las manos o con un control, para después todo operarlo con la voz. I mean, si llevo una bandeja con palomitas y una bebida, el tema de encender la consola ya me obliga a incomodarme, viendo que luego de esto ya podría hacer todo sin usar las manos. Entonces, obviamente, necesitamos que el sistema de escucha esté encendido permanentemente.

    Dice la queja: Pero es que Microsoft va a escuchar todas las barbaridades que digo e invadirá mi privacidad enviándome spam en los correos de acuerdo a las palabras que nos oiga... y entonces yo digo... Reeeeeeeeally? Are you serious?

    Si hay una compañía que se preocupa por proteger la privacidad de los usuarios, esa es Microsoft y lo digo por experiencia propia:

    O sea, de quererlo hacer, pondríamos una política de uso para que pudiéramos husmear los correos de los cientos de millones de usuarios de Outlook que tenemos hoy en día de manera que pudiéramos hacer ese asunto del spam. No way!

    Además en los términos de uso, se hace claro que Microsoft no grabará ni subirá a Internet las conversaciones que capte la Kinect.

    La gente se deja enceguecer tanto, que prefiere pensar: Microsoft me va a hacer espionaje de todo lo que diga... son malos, sigamos con lo de siempre.

    En vez de quitarse la venda y visualizar un escenario como este:

    Llegas, te sientas en el sofá y comenzar a hablar:

    Xbox On

    Netflix

    Fringe

    y ver la serie...

    Luego:

    Xbox

    MTV

    Y luego al ver que son puros realities,

    XBOX

    Forza

    Y observar el resultado de las carreras que tu Avatar de Inteligencia Artificial que aprendió a jugar como tú, corrió contra tus amigos mientras tú estabas trabajando o en la U.

    Luego dices:

    Xbox

    Poker Stars

    Y juegas una partida de póker contra tus amigos y los engañas con tu póker face a través del reconocimiento de los gestos que puede hacer la Kinect, sin mencionar que además puede hasta medir tu ritmo cardíaco...

    Con todo esto, no entiendo cómo se quejan porque vale 100 dólares más que una PS4, viendo que la Kinect 2 viene incluida out of the box.

    USD$500 es un precio menor al de algunos smart phone libres... así que: c'mon... estás obteniendo mucho más por el precio que estás pagando!!!

    Para mí definitivamente este es el futuro de los video juegos y estoy orgulloso de que Microsoft haya sido el primero en tomar este bold step, aún arriesgándose a generar todo el buzz negativo que se ha generado por la misma naturaleza de la web y el social media de hoy en día, que permite que cualquiera que diga algo ligeramente sensacionalista sea amplificado, aun cuando sus mensajes no hayan sido documentados debidamente.

    Es por esto que fui de los primeros en hacer la pre orden de esta revolucionaria consola, que de seguro me traerá muchas más comodidad y una experiencia de usuario totalmente integrada en lo que quiero sea mi sistema de entretenimiento casero:

    preorder 

  • 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

    Windows 8. Primeras revelaciones.

    • 10 Comments

    Viene nuestra tablet!

    Windows 8 Start Screen

    Esta interfaz recibe el nombre de “Immersive” y hace parte de una de las dos variantes con las que vendrá Windows 8. Una de ellas, será la familia de OS ya conocida por todos: Ultimate, Professional, Home, etc. enfocadas a PCs y Laptops convencionales, y esta otra dedicada a tablets, con un diseño totalmente adaptado para este tipo de aparatos.

    Como se aprecia, en esta interfaz el menú inicio es reemplazado por una pantalla de inicio basada en tiles tipo Windows Phone 7. Pero tranquilos; no es un Windows Phone 7 "agrandado" esta Tablet sí traerá mucho más. La pantalla es completamente personalizable y escalable a tal punto que los tiles pueden verse full screen.

    Cada tile tiene vida propia y nos muestra notificaciones e información siempre actualizada de las mismas y además permite un cambio fluido muy natural entre las aplicaciones en ejecución. Por si fuera poco, podemos pegar aplicaciones a los costados  y cambiar su tamaño de manera que se aprovechan realmente las capacidades de Multitask de Windows.

    Las aplicaciones en general estarán siempre conectadas al Web y serán escritas en HTML5 + Javascript que tiene acceso completo a todo el poder del PC.

    Vendrá de plano con IE10 optimizado para touch. De manera que la navegación será optimizada completamente para esta forma de entrada.

    Los tablet para Windows 8 han de obedecer a estrictas exigencias por parte de Microsoft que permitirán que los usuarios en realidad tengan la experiencia buscada. Es así como se exige siempre procesadores SOC (System on a Chip) ARM con mayor performance, más pequeños y de menos consumo energético y de memoria).

    Más novedades se presentarán en el evento Build: Windows. A llevarse en reemplazo del PDC en Anaheim CA, en Septiembre 13 de este año! Un evento que no hay que perderse!!!!

    Para finalizar les dejo un preview de lo que será nuestro Windows 8:

     

  • WarNov Developer Evangelist

    Solución a problemas en el registro al App Hub de Windows Phone 7 en Colombia

    • 5 Comments

    Hace pocos días se oficializó la disponibilidad del App Hub de Windows Phone 7 para Colombia, de manera que los desarrolladores de aplicaciones móviles para esta plataforma que estén operando en Colombia pueden desbloquear sus teléfonos para desarrollo y así mismo publicar sus aplicaciones globalmente.

    Sin embargo, varias personas me comentaron de un extraño error según el cual cuando se trataban de registrar al App Hub de Windows Phone 7 les aparecía esto y no podían continuar con el proceso, produciéndose una gran frustración, pues el ansia de ver la aplicación en nuestros teléfonos es muy alta:

    clip_image001

    Invalid Value for Field Country

    Cómo es esto posible si Colombia oficialmente ya está establecido en el App Hub?

    En general en Colombia no usamos el código postal. Es por eso que siempre que nos piden escribirlo generalmente en portales internacionales, escribimos cualquier cifra y si a veces eso falla, entonces escribimos un código postal de Estados Unidos como 90211 y con eso basta.

    Después de una amplia investigación junto con el equipo de soporte encontré que el error obedece a que hay una validación sobre el campo de código postal y se chequea que éste sea válido para Colombia. Aunque ud. no lo crea Colombia tiene códigos postales y éstos son de 6 cifras. Pero lo más problemático es que el error emitido no es correcto, pues aparece: “País no válido” y eso es lo que nos deja perdidos.

    SoluciónSi coloca por ejemplo 110110 en ese campo, Voilá… podrá seguir con el proceso sin problemas!!!

    Eso sí, asegúrese de que tanto el país asociado con su el Live Id usado para registrarse en el App Hub; como el país escogido dentro del App Hub durante el registro, sean Colombia. De lo contrario, tendrá problemas en el registro. Para chequear a qué país está asociado su Live ID, ingrese a http://account.live.com. Allí lo podrá cambiar a Colombia sin problemas.

    He solicitado al equipo de Ingeniería del APP HUB, que el campo de código postal no sea obligatorio en Colombia. Así que mientras actualizan el portal, por favor regístrese usando el código postal 110110.

    Bienvenido a experimentar sus aplicaciones en sus dispositivos!!!

  • WarNov Developer Evangelist

    MIX 11: Prólogo. Por qué se habló tanto de HTML5 y tan poco de Silverlight 5?

    • 11 Comments

     



    El mundo es de los consumidores y la tecnología es fiel representante de ello. Lejos están los días en que los negocios sólo eran influenciados por los desarrollos empresariales. Es totalmente tangible como los últimos éxitos mundiales son aplicaciones de consumo para usuario final... Llámese Facebook, Twitter o Flickr, vemos como el concepto ha dado un giro de 180 grados. Anteriormente los éxitos empresariales eran llevados al consumidor final. Pero hoy en día, vemos como ejércitos de empresas movilizan sus tropas al social media para combatir en el campo del mercadeo viral usando el económico Word of Mouth Marketing (voz a voz). Y esto no es mera coincidencia. Obedece a que las aplicaciones de usuario finan realmente están enfocadas en agradar al usuario. En atraerles y mantenerles cautivos. El target ahora se llama todo el mundo. Y para llegarle a todo el mundo se requiere de una plataforma que permita este alcance.

    image

    Este no es un esfuerzo único de Microsoft. Muchos líderes tecnológicos detectaron la necesidad de un estándar que permitiese a las aplicaciones llegar a todo el mundo, sin que ello significase la tortura para los desarrolladores que prácticamente tenían que hacer un desarrollo para cada plataforma.

    Esta necesidad hoy es reconocida como HTML5. Y a pesar de que ya lleva años tratando de despegar, el sueño cada vez va perdiendo su carácter utópico y va siendo realidad aun cuando se trate de poner de acuerdo a todo el mundo.

    Microsoft no es ajeno a estos esfuerzos globales y está a la cabeza del desarrollo del estándar. Se reconoce la importancia de esta tecnología y por ello y por ello ha sido protagonista en este MIX11.

    Protagonistas tecnológicos como Apple niegan la entrada de tecnologías ajenas en sus reinos donde aparte de sus plataformas propietarias solo aceptarían un estándar como HTML5. Microsoft pretende que sus desarrolladores puedan desplegar su aplicación en todo el mundo y ve en HTML5 un medio natural para lograrlo.

    Es por este motivo que Microsoft está trabajando muy fuertemente en el campo de HTML5 aventajando a sus competidores en muchos campos. Y el trabajo no solo consiste en investigación y desarrollo sino en lograr la adopción de esta tecnología por parte de los desarrolladores web del mundo. Es por esto, que desde el lanzamiento de los primeros previews de IE9 se ha dado un alto protagonismo a HTML5 sobretodo en los eventos grandes de Microsoft como el MIX10, PDC10, MIX11 y de seguro va a seguir dando mucho de qué hablar en eventos como el TechEd, PDC11 y MIX12.

    Este alto protagonismo a generado un efecto coyuntural que afecta sobre todo a los desarrolladores y fanáticos de Silverlight (me cuento entre ellos).

    Y es apenas obvio. HTML5 viene para enriquecer la web y facilitar la creación de experiencias de usuario enriquecidas que se puedan experimentar de manera nativa en todos los navegadores web estándares. Y hasta hoy hemos visto que en realidad se pueden crear aplicaciones realmente impactantes con alto contenido multimedia sobre esta tecnología. El tema de experiencia de usuario enriquecida, precisamente es la fortaleza de Silverlight y su poco protagonismo últimamente ha llevado a pensar que Silverlight sencillamente sería reemplazado por HTML5 y que Microsoft no le invertirá más a esta tecnología.

    Hay un hecho innegable y es que cada gigante informático tratará de proteger sus valores usando estrategias que entre otros puede incluir el negar la entrada de plugins de terceros tales como Flash o Silverlight (el caso de Apple). Entonces Microsoft no se puede quedar únicamente con Silverlight. Necesita ofrecerle a sus desarrolladores la posibilidad de estar en todo el mundo y para eso es HTML5.

    ImportanceHTML5

    No obstante: HTML5 aún puede cambiar mucho. Aún le hace falta completar muchas de las características propuestas. Sumémosle que el conjunto de herramientas aún es precario y que hay incertidumbre acerca de qué y cómo desarrollarlo a pesar de los grandiosos ejemplos prototipos aislados que uno puede encontrar en la web. Sin embargo, es el futuro de la web y en Microsoft se trabaja fuertemente para que cuando llegue, estemos totalmente preparados; y eso es algo que usted como desarrollador o empresa desarrolladora debería tener en cuenta y seguir en cierto grado de acuerdo a su nicho de trabajo.

    Microsoft ha logrado importantísimos avances en HTML5 y su browser: IE9 y ahora IE10 como se anunció en el MIX11. Pero aunque esto nos pone en cabeza de lanza para cuando realmente se llegue a ese “estándar”, hoy la situación es muy distinta. Internet Explorer con la tajada más grande del mercado de navegadores soporta Canvas2D de HTML5 con una velocidad que ridiculiza a los otros navegadores. Estos por su parte han hecho trabajos con WebGL para manejar 3D que Internet Explorer no soporta. Ejemplos como estos se pueden encontrar varios y vemos que en ese orden de ideas, al menos en el corto y mediano plazo, sería muy difícil que HTML5 hiciera todo lo que hace Silverlight. Sin mencionar que aún no tiene mecanismos de protección de derechos de autor (DRM - Silverlight ya los tiene y Microsoft es uno de los primeros investigadores de esta aplicación en HTML5) y que elementos muy necesarios para aplicaciones LOB como el manejo de sockets es aún muy incipiente entre muchas otras características diferenciales.

    Pero entonces si en el corto y mediano plazo no lo reemplazaría que pasaría a futuro? Hay situaciones en las que la tecnología del lado del cliente es fácilmente predecible y acondicionable. Por ejemplo cuando hacemos aplicaciones de Línea de Negocio (LOB) en las que la empresa puede implantar en todos los equipos de sus empleados el plugin de Silverlight. En este caso existe una enorme ventaja de Silverlight sobre HTML5 sobretodo en el tiempo de desarrollo y capacidades reales a la fecha. Esto se evidencia con hechos reales en los cuales muchas empresas han alcanzado el éxito a través del desarrollo de aplicaciones LOB en Silverlight. En general los desarrolladores de aplicaciones de negocio se sentirán mucho más cómodos trabajando con Silverlight y .NET que con un lenguaje de marcado mezclado con Javascript, CSS, JQuery, AJAX y cuanto framework más inventen para “facilitar” la tarea; y esto no precisamente por la falta de herramientas que es evidente hoy en día y que poco a poco va a ser menor, sino por la misma concepción de las tecnologías. Dado que con HTML5 hay que integrar muchos esfuerzos tecnológicos que son difíciles de unificar pues siempre se está tratando de poner de acuerdo a todo el mundo.

    Otro escenario importante en el que se puede determinar completamente la plataforma tecnológica, es el de dispositivos móviles. Y allí Microsoft decidió enteramente dejar a Silverlight como la plataforma de desarrollo nativa para el teléfono Windows Phone 7. De manera que entre otras mejoras, para la versión 5 se le ha dado un potencial enorme en el único campo que aún no había completado que era el 3D, al permitir una entera integración con XNA.

    Todo lo anterior nos permite concluir que también a futuro, Silverlight aún sigue teniendo mucha relevancia.

    En el MIX11 se anunció Silverlight 5 y se respondió afirmativamente ante la pregunta de si habría un Silverlight 6. Nosotros fans de Silverlight seguimos teniendo mucho que hacer y mucho por ganar con esta tecnología. Pero debemos comprender que vivimos en un mundo que evoluciona más rápido que el de cualquier otra profesión. Un mundo en el que nuevas tecnologías emergen para satisfacer distintas necesidades y que en la medida en la que estas tecnologías son lanzadas, necesitan tener un empuje mercadotécnico especial aún sobre las otras tecnologías excelentes que ya existen pero que ya han sido lanzadas.

    Precisamente así pasa con HTML5 que ahora es protagonista sobre Silverlight 5 sin demeritarle para nada (piensen también en un ejemplo similar: MVC sobre ASP.NET). Es más, el hecho de que Silverlight sea una plataforma tan madura y que funcione tan bien y que genere tantos casos de éxito hace que haya pocas novedades súper WOW adicionales para anunciar (Gráficas 3D reales, impresión con vectores, decodificación de video acelerada por GPU, etc.) y que pase más bien con algo de bajo perfil… pero esto mismo demuestra la radical diferencia entre ambas tecnologías; es como comparar peras con manzanas. Si lo requerido es una aplicación altamente funcional con acceso a los recursos y dispositivos del dispositivo del cliente y que funcione ahora mismo de la misma manera en todos los browsers donde instalar el plugin no sea un inconveniente, entonces Silverlight es la mejor opción. Pero si lo que desea es tener una aplicación masiva con una gran experiencia de usuario donde no se puede exigir la instalación de un plugin (aún a costa de un proceso de desarrollo un poco más costoso) y no se requiere una funcionalidad tan alta como la ofrecida por Silverlight, en ese caso usaremos HTML5 para lo cual Microsoft también está trabajando fuertemente en la actualidad.

    Conclusión:

    HTML5 es el futuro de la web a nivel mundial y Microsoft está a la cabeza en investigación, desarrollo y creación de herramientas para soportarlo, crearlo y usarlo; es por esto que se le da un alto énfasis a esta tecnología en todos nuestros eventos. Este protagonismo sin embargo no demerita a Silverlight 5 que también fue anunciado no con tanto ahínco dado que ya conocemos su gran potencial y que ya es una tecnología muy madura que sigue teniendo un gran campo de acción en las aplicaciones de negocio que ahora se ve ampliado al ser la plataforma de desarrollo nativa para Windows Phone 7, lo que le ofrece un futuro muy prometedor.

    No. HTML5 no reemplaza a Silverlight.

    Una comparación más detallada entre las dos tecnologías aquí.

  • WarNov Developer Evangelist

    Fin de Año con Camps: Los mejores eventos técnicos de Microsoft Colombia!

    • 0 Comments
        
    UPDATE: Si quieres convertirte en un desarrollador WaW, te tengo esta herramienta que te ayudará a descargar todos los SDKs necesarios de una manera muy sencilla!

    A llevarse a cabo en Medellín y Bogotá, estaremos ejecutando los Camps de Microsoft para 2011. Para todos hay! Es así como para los ITPROs, tenemos el ITCAMP y para desarrolladores, el Code Camp.

    IT CAMP (Para IT Cloud Champs):

    Sql Server 2012 (Denali)
    Private Cloud

    Fechas:

    Medellín: 29 de Noviembre. De 8am a 12.30pm
    Bogotá: 6 de Diciembre de 2pm a 6pm.

    CODE CAMP (Para desarrolladores WAW)

    WebMatrix
    A
    zure
    Windows Phone 7

    Fechas:

    Medellín: 29 de Noviembre. De 8am a 12.30pm
    Bogotá: 1 de Diciembre de 2pm a 6pm.

    Como observan, en Medellín, el evento se ejecutará el mismo día para ITPROS y Developers. Mientras en Bogotá, tendremos dos días separados.

    Estando en una nueva era de alta integración con las comunidades, Microsoft Colombia ha recibido una invaluable ayuda de parte de las comunidades para poder realizar un evento de esta magnitud. Es así como se ha tenido el apoyo completo de las más grandes comunidades de desarrolladores y ITPROS del país, como lo son Avanet de Medellín y BNet junto con ITPROS DC de Bogotá, quienes han proporcionado gran parte de los speakers que estarán enriqueciendo los eventos.

    De esta forma, tendremos una inigualable nómina de speakers; sin precedentes! todos ellos parte de nuestro programa de Microsoft Community Specialist (MCS) y varios de ellos ya reconocidos MVPs de nuestro país:

    Sorey Gracía (WP7), Alberto Rivera (Denali), Andrés Fontán (Azure), Christian Moreno (Denali), Daniel Vargas (Private Cloud), Freddy Angarita (Denali), Gerardo Ramos (Azure), German Ruiz (Private Cloud), Guillermo Taylor (Denali), Hernán Guzmán (WP7), John Bocachica (Denali), John Bulla (Denali), Juan Carlos Ruiz (WebMatrix) , Juan David Gómez (WebMatrix), Juan Manuel Lombana (Azure), Julio Avellaneda (WebMatrix), Miguel Mendoza (Azure), Miguel Quintero (WebMatrix), Pavel Espitia (WP7), Ricardo González (Azure), Roberto Alvarado (WP7), Sergio Calderón (Private Cloud).

    A parte de tener los eventos presenciales, tendremos webcasts de Warm Up (o preparación para el evento presencial) que nos irán mostrando lo que veremos en el evento físico. Así que tanto para inscribirse a los eventos virtuales como a los eventos presenciales, solo tienen que hacer click en la imagen correspondiente al evento de su interés: Developers, o ITPROS:

    clip_image001

    clip_image002

    No se lo pierdan, aparte de estar actualizados con lo último de nuestras tecnologías, tendrán la oportunidad de ganar fabulosos premios de Microsoft Hardware!

     

    image

  • WarNov Developer Evangelist

    Y llegó el WebCamp Colombia 2010 #WebCamp10

    • 20 Comments

    image

    El nivel técnico y de “coolness”  de este evento,  hizo que durante la primera noche se agotaron todas las boletas!
    (Si no clasificaste, tenemos sesiones en vivo con LiveMeeting)

    Si fuiste uno de los afortunados en lograr un cupo, te cuento algunas condiciones especiales para el día del evento:

    1. A pesar de ser un Campamento, no tienes que traer botas pantaneras ni ropa de cambio… es en el cool piso 15 de Microsoft Bogotá.
      • Tampoco necesitarás fiambre ni malvaviscos, pues te daremos dos breaks y un almuerzo en la mitad
      • Ni linternas ni leños son requeridos
      • Un internet portable nos ayudaría a que la red corporativa no se sobrecargue… entonces es recomendado.
    2. Instalaré un Kinect con su XBOX en los pasillos para que cuando se estresen o sientan que se están durmiendo en la charla, puedan ir a estirar el esqueleto.
    3. Habrán inscripciones para muchos de nuestros programas:
      • Podrán inscribirse en planes de emprendimiento para hacer empresa con la ayuda de Microsoft.
      • Habrán registros para el concurso de Windows Azure en MVA con el cual solo haciendo una aplicación en Azure, puedes participar en el concurso para ganar uno de 30 combos XBOX+Kinect.
      • También podrán inscribirse en planes gratuitos para probar Windows Azure. Estos planes, a pesar de ser gratuitos, requieren Tarjeta de Crédito para verificar identidad y en caso de ser necesario, ofrecer servicios adicionales a la oferta gratuita. Así que vengan preparados. Nosotros les ayudamos!

    Pero qué gracia tiene inscribirse a esos programas en el WebCamp, si es posible hacerlo también cuando y desde donde lo queramos? Para todos los inscritos en programas Microsoft, estaremos rifando Hardware Microsoft + Libros. Además, el 30 de Noviembre, día del WebCamp, es el último día para adquirir la promoción de Azure. Así que si hay suficientes inscritos, hasta de pronto me anime y rife de inmediato el Kinect con la XBOX!!!

    Qué debes traer?

    No olvides que si quieres estar en las sesiones prácticas que vienen después del almuerzo, debes traer tus máquinas portátiles con las siguientes especificaciones mínimas:

    1. Microsoft Web Platform Installer 2.0 (Web PI) es una herramienta gratuita que facilita la descarga, instalación y la actualización de los últimos componentes de Microsoft Web Platform, incluidas las herramientas que son requeridas para los laboratorios: Internet Information Server (IIS) Express, SQL Server Express, .NET Framework  y Visual Web Developer. Además tiene aplicaciones web ASP.NET y PHP muy populares que son Open Source.

    2. Si desean asistir al track de Windows Azure, además de lo anterior se requiere:

    a. Portátil con alguna de las siguientes versiones de Windows: Vista, 7, Windows Server 2008. Y con IIS 7 (no Express. Azure requiere la versión Full. XP no soporta IIS7). (Si no tienen la licencia, se puede descargar un trial de aquí.)

    b. Sql Server 2008 R2 Express Edition  y SQL Server Management Studio 2008 R2 Express Edition (Obligatorio tener una instancia llamada SQLEXPRESS y que sea R2)  Se descarga con el Web Platform Installer.

    c. Visual Studio 2010 Web Developer o superior. Si no tienen la licencia, se puede descargar un trial de aquí.

    d.  Windows Azure Tools for Microsoft Visual Studio 1.2 (June 2010) descargables aquí

    e.  Windows Azure Training Kit descargable de aquí.

    f.  Opcional: Prelectura de estos artículos

     

    Recuerden que los tracks que tenemos se estarán transmitiendo por LiveMeeting por si tienen amigos que se quedaron sin verlo:

    ASP.NET 4.0 (Novedades). LiveMeeting
    IE9+HTML5 LiveMeeting
    MVC 2.0 LiveMeeting
    Windows Azure LiveMeeting

    Cualquier duda, pregúnteme aquí o en Formspring

    Para finalizar y que puedan desplegar todo su potencial Web 2.0, el tag Oficial para este evento, será #WebCamp10. Úsenlo para identificar sus twitts. Al final la persona con más twitts con el tag, ganará un premio sorpresa!!!

     

    Open mind 4 a Different Coding Fellas! Y nos vemos en el terreno!

    image



  • WarNov Developer Evangelist

    Por qué los bloques Try-Catch sí afectan el performance

    • 7 Comments

    He escrito un post en el cual hablo de las Buenas Prácticas en Manejo de Excepciones .Net. Tuve un comentario muy interesante en el cual la persona me mencionaba que contrario a lo que yo afirmé en ese post, los bloques try..catch no generaban mayor impacto en el performance de la aplicación. Y me citó algunos artículos al respecto.

    Aunque los artículos obedecen a pruebas que en ocasiones producen casi los mismos resultados usando o no excepciones, puedo decirles muy respetuosamente que son bastante ingenuos porque no tienen en cuenta la estructura y funcionamiento del framework.net y sobre todo del optimizador de compilación.

    Así pues, les comento que para hacer la afirmación que hice, no ejecuté ninguna prueba. Solo hablé de una conclusión bastante lógica que se tiene al estudiar el comportamiento del optimizador de compilación del framework:

    Tomemos como ejemplo el siguiente código escuelero:
        
       

       1:      int cuenta = 1;
       2:      AlgunMetodo();
       3:      cuenta++;
       4:      OtroMetodo();
       5:      cuenta++;
       6:      Console.WriteLine(cuenta); 

    Cuando esto es compilado, el JIT de .NET efectivamente optimiza todo a:

       1:  AlgunMetodo();
       2:  OtroMetodo();
       3:  Console.WriteLine(3);

    Que obviamente corre enormemente más rápido.

    Sin embargo, para poder mantener las reglas de ordenamiento de memoria distribuida a través de hilos durante el tiempo de ejecución y compilación el CLR deshabilita TODA OPTIMIZACION que afecte el orden de lecturas y escrituras del CIL en los bloques protegidos. Los bloques protegidos conocidos también como regiones protegidas, bloques resguardados o bloques “try”.

    Esto en castellano sencillo nos indica que el JIT no puede optimizar código metido en bloques try..catch. Es por esto que recomiendo reducir el uso de excepciones al mínimo necesario. Y usarlas solo para solucionar problemas no relativos a negocio, que se pueden solventar simplemente con un algoritmo más inteligente.

    También por esto menciono que esos artículos son ingenuos, porque para hacer una prueba fehaciente deberíamos incluir un algoritmo de uso común en el cuál la optimización sí marca la diferencia.

    Así que si usamos el try-catch tendríamos:

       1:      int cuenta= 1;
       2:      try
       3:      {
       4:          AlgunMetodo();
       5:          cuenta++;
       6:          OtroMetodo();
       7:          cuenta++;
       8:      }
       9:      finally
      10:      {
      11:          Console.WriteLine(cuenta);
      12:      } 

    En este caso, al carecer de optimizaciones, la variable inicia con el valor de 1, luego se ejecuta AlgunMetodo(), luego la variable cuenta se vuelve a ajustar, luego OtroMetodo(), luego una tercera actualización y finalmente se escribe el calor de una variable, que cuesta más en ciclos de procesador, que escribir una constante. En síntesis, estamos desperdiciando ciclos.

    Estas optimizaciones que mostré aquí son de las mas sencillas que hace el JIT; pero no son las únicas; existen muchas otras optimizaciones que se pierden dentro de los bloques try..catch. Súmenle a esto le hecho de que efectivamente estas instrucciones consumen más memoria (poca o mucha pero la consumen) y as’;i podrán concluir por qué es mejor usarlas muy prudentemente.



  • WarNov Developer Evangelist

    Creando un Switch en C# para enumeraciones grandes en segundos!

    • 6 Comments

    Alguna vez han tenido que evaluar una sentencia Switch-Case de C# sobre una enumeración que tiene, que se yo; unos 30 elementos?

    Si les ha tocado pasar por eso, sabrán que es bastante tedioso escribir todas las líneas pertinentes para cada uno de los elementos de la enumeración.

    En este video, les muestro cómo con Visual Studio lo podemos lograr en solo segundos. Es un video de solo un poco mas de un minuto, que hace parte de una serie de videos cortos que encontrarán en mi blog bajo la categoría de WarFastVideos, y que pretenden mostrar cosas interesantes en muy pocos minutos.

    Enjoy!

  • 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

    Por qué prefiero HTML5 para WinRT Apps?

    Un ensayo orientado a #Developers y #Designers, acerca de la situación actual de la industria de las #apps y su relación con WinRT

    Antes que nada, déjenme decirles que soy un profundo fan de C#.

    clip_image002

    Llevo 11 años trabajando con ese lenguaje de programación y luego de haber pasado por APL, JAVA, C, C++, PHP, JavaScript, Modula 3, Ruby, Basic, Visual Basic y TypeScript, puedo decir que es el mejor lenguaje a mi modo de ver, en su relación costo beneficio.

    Pero así como también me gustan los Fórmula 1, no por eso los llevaría al campo para hacer 4x4.

    Como la mayoría de sus contemporáneos, C# nació en un mundo donde el backend y las aplicaciones nativas estaban en el top of mind de la mayoría de los developers, y cuando los motores de interpretación de código dinámico eran supremamente lentos y estaban relegados a ser usados en escenarios básicos que no requerían mucha capacidad de cómputo.

    Pero la computación obviamente ha evolucionado y así ha de pasar con las herramientas usadas para desarrollar el nuevo software.

    No quiero decir que C# no haya evolucionado. Todo lo contrario. Ha evolucionado tanto que ya tiene sus propias características dinámicas ampliamente usadas en escenarios como MVC en los ViewBag. Ha evolucionado tanto que la asincronía se maneja con un nivel de abstracción que uno casi ni se da cuenta que existe con elementos como async y await. Ha evolucionado tanto que se puede valer de un compilador expuesto como servicio para hacer todas las locuras y genialidades que se nos ocurran con Roslyn.

    Sin embargo un elemento bastante disruptivo ingresó a la industria de nosotros los developers que nos hicimos desarrollando WinForms y asp.net WebSites.

    Y ese elemento, no es otro más que las apps.

    Su relevancia comenzó con el Web 2.0, ajax, mashups y estás cosas de principio de siglo que nos trajeron excelentes aplicaciones web que con mero JavaScript nos daban una gran experiencia de usuario en escenarios de entretenimiento, información y herramientas para consumidores finales en un ambiente relativamente multiplataforma, hasta donde los browsers lo permitían.

    Estas tendencias se hicieron evidentes también en las plataformas propietarias. Más específicamente hablando, en los smartphones. Pero al ser estos propiedad de las corporaciones, cada una quiso liderar el mercado con su propio acercamiento nativo. Llámese Objective C, Java o C#, dependiendo del fabricante.

    Así que en un mundo ya centrado en el consumidor, estas producciones han comenzado a mover millones de dólares y a influenciar cada actividad relacionada con el desarrollo de software. Desde sistemas operativos, pasando por herramientas de desarrollo, mercados de aplicaciones y hasta el cloud computing que ya tiene ramas completamente orientadas a las apps.

    Y por apps, me refiero a conjuntos de código relativamente pequeños que corren en un dispositivo sin requerir grandes capacidades de cómputo y que se pueden conectar a servicios a través de internet.

    Por qué relativamente pequeños?

    Porque para que el negocio funcione, tenemos dos limitantes:

    1. Que corra en todos los browsers, sin plugins o

    2. Que corra en un dispositivo móvil sin agotar la batería

    En ambos casos llegamos a la conclusión que el alcance de la plataforma debe estar muy bien limitado, tanto para que podamos tener un mínimo común denominador en los browsers o para que no requiramos procesadores muy complejos que consuman muchos recursos.

    Tenemos dos vertientes entonces:

    La de los que saben hacer apps nativas y la de los que saben hacer apps con JavaScript.

    clip_image004

    En el mundo de las apps nativas estamos nosotros los desarrolladores de la última década. En mi caso particular, los desarrolladores de C#. Y C# está muy bien plantado con los SDKs y APIs que ofrece para el mundo de las apps tanto de Windows Phone como de Windows 8. Es muy completo y tiene el poderoso respaldo de Visual Studio para lograr hacerlas.

    Sin embargo el tema que tenemos: reducir el alcance de esos SDKs y APIs para que se ajusten al mundo de las apps, ha provocado que el modelo de desarrollo ya no sea aquel al que están acostumbrados los desarrolladores tradicionales que se espantan porque ya no encuentran las apis a las que estaban acostumbrados en temas tan evidentes como el manejo de archivos entre otros.

    Por si fuera poco el mundo de las apps tiene una exigencia de diseño sin precedentes y una app que no guste desde el primer momento de usada, está condenada a su desinstalación inmediata. Ya no nos podemos dar el lujo de hacer apps como queramos, porque nuestros usuarios ya no son los típicos empleados que están obligados a usarlas. Las apps de verdad deben GANARSE el amor de sus usuarios y esto no solo se logra con buena programación, sino con buenos diseños y UX.

    La evolución de los paradigmas de desarrollo de aplicaciones entonces ha sido dirigida a facilitar la tarea de crear interfaces de usuario de la más alta calidad gracias al trabajo de los diseñadores.

    Esto básicamente requiere de un principio que he denomidado la paradoja DevDes:

    1. Que los elementos de presentación estén completamente separados de la lógica

    2. Que los elementos de presentación estén completamente integrados a la lógica

    Por qué es esta paradoja?

    Es sencillo, necesitamos que los diseñadores puedan trabajar sus diseños con sus propias herramientas sin necesidad de saber nada de desarrollo. O sea, que puedan trabajar separados de la lógica de la aplicación.

    Pero cuando ya hayan acabado, necesitamos que lo que hayan hecho esté completamente integrado a la lógica de la aplicación para que no haya sufrimientos tratando de importar piezas hechas en Illustrator a un Visual Studio. De lo contrario, puede que lo que se desarrolle en realidad, quede muy distinto a lo que se había diseñado.

    Además en el proceso de mejora continua, debe ser muy transparente y eficiente la comunicación y el trabajo interdisciplinario.

    Entonces ahí fue cuando en Microsoft apareció WPF y el famoso XAML. Un lenguaje basado en XML que permite declarar interfaces gráficas a través de lenguaje de marcado, de tal manera que una herramienta amigable con diseñadores puede generar este texto, que luego es leído sin problema por una herramienta para desarrolladores, cumpliéndose entonces los dos puntos que declaré anteriormente.

    Estas herramientas no son otras que Blend y Visual Studio.

    Pero trabajar este tipo de interfaces eficientemente no es sencillo con las costumbres tradicionales de mezclar la lógica con la presentación en los event handlers del click de un botón al mejor estilo amateur cuando se aprenden a hacer aplicaciones ASP.NET o WinForms.

    El afán por ordenar el caos, nos llevó a los más osados a trabajar con el modelo MVP.

    Pero el nuevo esquema de XAML, requería algo mucho más sofisticado y es lo que efectivamente conocemos como MVVM.

    clip_image006

    MVVM: El monstruo que aterra a los developers tradicionales cuando ven una app que lo implementa. El que los aleja de la productividad mientras lo aprenden. Un modelo que exige un reset en la manera de pensar y programar las interfaces de usuario. Un monstruo que muchas veces frustra a los no iniciados.

    He visto a decenas de desarrolladores perderse en ese mundo de modelos, vistas, vista modelos, comandos, binding, IObservable collections, INotifyPropertyChanged y dependency properties entre otros.

    Y esto es, no porque sea una cosa supremamente compleja, sino porque es algo muy distinto a lo que se trató de tener anteriormente en .net: Obtener un modelo uniforme de programación. La verdad sea dicha, es utópico esto dada la inmensa variedad de escenarios de desarrollo de software que tenemos hoy en día.

    Entonces, estamos perdidos los desarrolladores .net tradicionales en el mundo de las apps?

    No, si nuestro deseo u obligación es hacer apps, como lo mencioné, el código y las herramientas provistas por C# y Visual Stuio/Blend son excelentes para lograrlo, pero debemos estar dispuestos a hacer el reset y tener mente abierta sobre todo para comenzar aprendiendo MVVM, antes de aventurarse al mundo de las apps.

    Esto no es que aclare precisamente por qué prefiero HTML5 para las apps.

    Antes de aclararlo, quiero contarles cómo veo la situación de la otra vertiente. La de los que saben hacer apps con JavaScript.

    Como mencioné anteriormente, Web 2.0 evidenció lo que nosotros desarrolladores de software deberíamos ofrecer a los usuarios para poder masificar y triunfar con nuestros productos.

    Esto alentó a los fabricantes de software a mejorar la velocidad de interpretación de JavaScript de sus motores, tal como sucedió con el Chakra de Microsoft o el V8 de Google. De tal manera que hoy en día con puro JavaScript interpretado se pueden lograr experiencias de usuario que poco se pueden diferenciar de una app nativa. Y con la ventaja de que si a cada plataforma nativa le ponemos su propio intérprete de un JavaScript estándar, pues tendremos aplicaciones cross platform de un desempeño óptimo.

    A través de todos estos años, estas mejoras y enfoques en JavaScript han propiciado que muchos desarrolladores hayan aprendido esta tecnología que muy cierto es, por lo general es una cosa extraña para los desarrolladores .net.

    Y entonces podemos hacer una comparación: Cuántos programadores web hay, vs. cuántos programadores de apps nativas hay. Obviamente la balanza se inclina hacia los desarrolladores web, dado que han existido desde hace mucho tiempo. Ergo, existen muchos más que saben JavaScript, que aquellos que saben lenguajes nativos.

    Tanto así que la industria se ha preocupado por crear "traductores" en los cuales el desarrollador escribe código JavaScript y el traductor (por ejemplo PhoneGap) lo que hace es arrojar al otro lado código nativo bien sea para Windows Phone, iOS o Android. Esto por un lado le abre la puerta a un gran número de desarrolladores que no conocen las plataformas nativas y por otro minimiza la cantidad de código escrito cuando se deben hacer versiones de la app para las diversas plataformas.

    clip_image008

    Sin embargo, esto abre otra puerta a problemas que tienen que ver con que esas apps no pueden acceder a todo el poder nativo de cada uno de esos dispositivos, porque el conjunto de instrucciones soportadas por el traductor también debe obedecer a un mínimo común denominador para lograr ser multiplataforma, sin mencionar que la velocidad de ejecución se puede ver afectada de acuerdo a la calidad de la optimización del código que ejecuta el traductor.

    Como ejemplo, puedo mencionar que una app para Windows Phone y iPhone creada con Phone Gap a pesar de requerir solo un esfuerzo, no explotará ciertas características únicas de cada plataforma y puede que no corra tan rápido como si esas apps fueran creadas con dos esfuerzos (uno para cada plataforma). Pero para esto Microsoft descubrió una solución llamada WinJS de la cual les hablaré un poco más adelante.

    Independientemente de esto, entonces comenzamos a observar un efecto bola de nieve, en el cual entre más desarrolladores JavaScript hay, más tecnologías se ponen a su disposición. Ejemplos:

    1. NodeJS, para poder escribir backend en JavaScript haciendo especial énfasis en una altísima escalabilidad lograda en un esquema de no bloqueos en el server.

    2. TypeScript: un superlenguaje de JavaScript creado para poder formalizar y administrar proyectos JavaScript de mediano a gran tamaño, como si fuese todo un lenguaje orientado a objetos que al compilar se convierte en JavaScript estándar listo para ser usado en la aplicación que queramos. Es tan conveniente que dentro de Microsoft se usa por ejemplo en CodePlex y en Bing y ya muchos proyectos open source grandes lo están usando. De hecho Adobe anunció que lo usará como lenguaje principal para su Adobe Digital Publishing Suite, usada por cerca de 70% de los publishers del mundo y la cual se pondrá disponible para apps de Windows según lo anunciaron en el #bldwin de 2013.


    clip_image010


    3. LightSwitch, el RAD de Microsoft para crear aplicaciones de línea de negocio basadas en formularios de captura y consulta de datos, ahora en su última versión ofrece la posibilidad de programarse también con JavaScript para poder ejecutar sus pantallas en browsers sin necesidad de plugins (originalmente LightSwitch requería de Silverlight, lo que lo ponía fuera de alcance por ejemplo de los móviles).

    4. Napa: Un entorno de desarrollo de apps para Office 365 y SharePoint en el que a través del mismísimo browser podemos escribir el código de las apps que estaremos usando. Y cuál es este código? Correcto: JavaScript.

    Todo esto para mencionarles la Joya de la Corona de las implementaciones de JavaScript:

    5. WinJS: La proyección de lenguaje para JavaScript que nos permite desarrollar apps para WinRT.

    clip_image012

    Y el título de Joya de la Corona es muy bien ganado, porque esta es la primera implementación en el mundo que permite acceder de manera nativa e ilimitada a los recursos de la máquina en la que se ejecuta. Así que todo el hardware y funciones especiales del sistema operativo están abiertos para ser llamados desde código JavaScript. (La historia se remonta a IE9, en donde se permitió al objeto Canvas del browser poder dibujar animaciones usando la aceleración de hardware nativa de la máquina en la que estaba corriendo, gracias al esquema integrado que tiene el browser con Windows, produciendo animaciones de hasta 60fps)

    Esto es una gran ventaja frente al acercamiento tradicional de JavaScript en otros browsers, pues estos corren en un sandbox limitado que no da acceso a funciones críticas del sistema como dispositivos de almacenamiento, tarjeta de video o en Windows 8 por ejemplo, el acceso a los charms que traen los contratos de búsqueda o de share entre otros.

    De hecho, esta gran práctica está comenzando a ser imitada por ejemplo por Firefox que ha centrado todo su nuevo OS en HTML5, de manera que el JavaScript usado también estará accediendo nativamente los recursos de los dispositivos sobre los cuales se estén ejecutando.

    Pero volviendo al tema específico de Windows 8, si sumamos lo dicho hasta ahora al hecho de que el motor de interpretación Chakra es tan veloz, tenemos que programar una app WinRT en JavaScript no tendrá mayores diferencias en velocidad de ejecución que hacerla en C#, VB o incluso C++.

    Está claro que igual el JavaScript tiene que ser interpretado y eso tarda más que el marshaling y las operaciones de boxing y unboxing de C#. Y que esto a su vez tarda más que si la app estuviera hecha en C++ crudo. Pero esas diferencias no son notorias para un usuario en el 95% de las veces; y esto en términos prácticos permite decir que el performance es el mismo, excepto en apps supremamente especiales que requieren muchos cálculos para funcionar correctamente.

    Un ejemplo claro de la eficiencia de apps JavaScript en WinRT es el juego Cut the Rope (más de 100M de descargas a hoy), que primero fue nativo en iOS (15K líneas de código) y luego fue portado a JavaScript para poder ser ejecutado en IE9 y de allí pasó sin muchas modificaciones a WinRT.

    clip_image014

    La experiencia del juego es excelente sin importar el dispositivo: iPhone, IE, WinRT y hoy en día otros browsers como Chrome y Firefox también la ejecutan bien.

    De hecho el código de esta app en JavaScript ocupó de nuevo solo 15K líneas de código, dado que el Canvas que manejamos con JavaScript tiene muchos comportamientos predefinidos como el pixel shader que en OpenGL (la tecnología de rendering detrás de la versión nativa) no existe y toca programar con montones de código.

       Microsoft ejecutó una excelente estrategia cuando salió al mercado con su paradigma de apps para WinRT, dado que permitió a desarrolladores tradicionales seguir con su lenguaje y en cierto modo el estilo de programación acostumbrado con C# y XAML. La excelencia en la ejecución se nota porque estos desarrolladores nunca se vieron afectados ni puestos a un lado.

    Pero esto no elimina el hecho de que Microsoft también notó el inmenso auge y practicidad que trae HTML5.

    Lo dije: HTML5

    Antes de seguir hablando déjenme mencionarle las dos connotaciones de HTML5:    

    1. La purista: El sucesor de HTML4, que incluye nuevos tags como video, canvas, audio, section article, header y nav.

    2. La popular y más usada: La 1 + JavaScript moderno y CSS3.

    clip_image016

    Entonces por eso el título del post: HTML5 para APPS. El HTML5 para apps implica que la interfaz de usuario la manejamos con tags HTML más estilos, y la lógica con JavaScript. De hecho también es recomendable en las apps HTML5 usar paradigmas como MVVM (totalmente disponible para JavaScript) que permitan una clara separación entre la lógica y presentación.

    Ahora sí continuando, les contaba que Microsoft notando la relevancia y el futuro de HTML5 (connotación 2 de ahora en adelante), lo convirtió en un ciudadano de primera clase en el mundo WinRT.

    Tan de primera clase es, que muchas de las características especiales de las apps WinRT se desarrollan más fácil con JavaScript. De hecho, hay un par de cosas que no es posible hacer out of the box con VB o C# mientras que con JavaScript sí, tal como manejar el StorageDataSource: Un objeto usado en un mecanismo para mostrar imágenes en el flipview (un control contenedor cuyos elementos se pueden desplazar mediante gestos touch) sin que existan problemas de memoria cuando usamos una gran cantidad de elementos. Por ende para evitar degradación de la experiencia de usuario en C# hay que acudir a mucho código extra que en JavaScript ya viene manejado con el objeto en mención.

    Adicionalmente, Blend ha sido repotenciado para no solo manejar XAML, sino también HTML. Y las bondades y facilidad de uso ofrecida agilizan enormemente el proceso de diseño de las interfaces de usuario. De hecho, la primera versión de la nueva saga de Blend solo incluía HTML para diseño.

    Y así sucede con otros elementos únicos de HTML5 como el canvas, que para manejar gráficas ofrece muchas ventajas predefinidas, ahorrando cantidades de código.

    Esto sin mencionar que el código que escriba sobre HTML5 va a servirme si después quiero hacer la versión web de la app o si quiero hacer la versión sobre otros dispositivos. En este caso será más fácil usar un traductor para lograrlo por ejemplo, con los inconvenientes que ya les había mencionado. Pero así como Microsoft con WinRT y Firefox acuñaron HTML5 como plataforma nativa, podría suceder que otros fabricantes como Android, iOS y por qué no, el mismo Windows Phone 8 lo hagan. En este caso, podríamos tener una gran base de código reutilizable que además va a funcionar con una velocidad y alcance muy cercano al de las apps nativas.

    Si estamos conscientes de que la compatibilidad 100% no está tan cercana, entonces al menos el hecho de poder compartir una gran cantidad del código no se ve tan utópico. De hecho Microsoft (por ejemplo con la adición -ms-grid hecha al atributo display de CSS3) y Firefox (con especificaciones para manejar un calendario HTML5) han hecho propuestas al W3C para que elementos propietarios usados para aprovechar características específicas de la plataforma o para mejorar las interfaces de usuario pasen al estándar y de esta manera luego la portabilidad entre plataformas sea más posible.

    Así que ya se podrán ir dando cuenta del porqué del título.

    Otro ejemplo que puedo referenciar aquí, es uno que se gestó apenas hace unos días también gracias al gran evento #bldwin 2013 (Build Windows):

    shining

    Efectivamente, se trata de Netflix. Uno de los principales implementadores de Silverlight en el mundo.

    Sucede que el estándar de HTML5 aún no dicta cuál es el mecanismo para ofrecer medios audiovisuales con DRM: un tema supremamente importante si eres una empresa legal que hace streaming de películas. Silverlight siempre ha sido líder en la implementación de DRM y para Netflix, esta era la única opción sencilla de estar fácilmente en Windows y MACs a través de cualquier browser que soportara el plugin: IE, Chrome, Firefox y en cierta medida Opera. En Linux algo se logró con Moonlight del equipo mono.

    Pero llegaron los dispositivos y con ellos cada fabricante fue muy celoso de dar soporte a plugins. Por ejemplo iPhone jamás ha soportado Flash. Y así sucedería con Silverlight. Entonces el tema del plugin no ayuda mucho a la presencia a través de todos los dispositivos. Silverlight es muy útil para desarrollar aplicaciones altamente amigables con el usuario en ambientes controlados donde la instalación de un plugin no tiene problema (Aplicaciones LOB en una intranet por ejemplo) Pero para el consumer masivo, definitivamente la historia de la industria nos llevó a otro lado.

    Viendo esto, Microsoft ha estado trabajando en una propuesta de manejo de DRM dentro de HTML5 a través de IE11. Y esto se puede ver hoy en vivo, si tiene el preview de Windows 8.1 que incluye la versión 11 del browser. Así que Netflix, ha encontrado por fin una luz que alentaría la posibilidad de tener un solo desarrollo HTML5 que corra al menos en todos los browsers y sea “ fácil” volverlo nativo para los dispositivos móviles, si es que hace falta en aparatos que digan soportar el estándar.

    Por ahora, la implementación que Netflix hace sobre IE11 no es estándar, pero funciona bastante bien. Aún requiere algo de trabajo para ofrecer opciones avanzadas como por ejemplo escoger idioma y subtítulos, así como opciones para compartir con el social media desde la reproducción como tal (cosas que sí tiene el cliente Silverlight).

    Microsoft trabaja muy de cerca con el W3C y obviamente propondrá su implementación de DRM para convertirla en un estándar que todos los browser implementen. En otros browser como Chrome y Firefox, por ahora la experiencia Netflix sigue siendo a través de Silverlight.

    Lo más interesante de todo esto, es que este IE11 que soporta DRM a través de HTML5, tiene el MISMO CORE de interpretación de HTML5 y de ejecución de JavaScript que viene con Windows 8.1. Así que al menos en lo que tiene que ver con Windows, para Netflix se hace realidad el sueño de programar una app que corra igual en el browser o en la plataforma nativa!

    Y mejor aún, las innovaciones que trae IE11, ergo las apps HTML5 de Win8.1 no paran allí. Otra ejemplar inclusión es el soporte a WebGL! La famosa api de JavaScript que permite acceder directamente a la tarjeta de video para renderizar gráficos en 2D y 3D sin necesidad de plugins. Propuesta originalmente por la fundación Mozilla, hoy es ampliamente soportada por ese Firefox, Chrome e IE11. Otros como Safari y Opera dicen soportarla, pero la tienen deshabilitada por defecto. Si quieres ver si tu browser la soporta, has click en la imagen.

    image

    Entonces, todos esos excelentes desarrollos gráficos existentes en la Web hoy en día basados en WebGL están disponibles para ser renderizados nativamente en las apps HTML5 de Win8.1 directamente y con mínimos esfuerzos!!!

    Pero… Wait a Minute… entonces, todo esto no va a estar disponibles para las apps XAML en WinRT?

    Nada más alejado de la realidad. A partir de Windows 8.1, el WebView control de XAML ha sido optimizado enormemente y va a permitir por ejemplo que su contenido sea asignado localmente: tú le pasas el HTML/HTML5 que quieras al control y este lo renderiza usando los motores de IE y de las apps HTML5 de Windows 8. O sea, que todas las funciones van a estar completamente disponibles.

    Vean; en síntesis, son estos puntos:

    1. C# es mi lenguaje de backend predilecto y difícilmente habrá uno mejor.

    2. El modelo de apps supone un nuevo paradigma que se ajusta mucho a implementaciones del tipo MVVM que no son usuales por ejemplo cuando trabajamos en backend.

    3. JavaScript y en general HTML5 está adquiriendo un alcance global y es recomendable aprenderlo si como developer consideras que alguna vez estarás desarrollando algo de front end en tus aplicaciones.

    4. El enfoque favorable que se le ha dado a HTML5 en WinRT, hace que algunas tareas se desarrollen más fácil y rápido con esta tecnología. Se hace más natural el desarrollo de apps que con XAML.

    5. Hacer un desarrollo en HTML5 aumenta la probabilidad de que tenga un paso muy sencillo hacia otras plataformas.

    Dado lo anterior, no cambio a mi C# para backend por nada. Pero si tuviera que cambiar de paradigma de desarrollo y aprender uno nuevo para hacer apps, por qué no mejor aprovechar y aprender también un nuevo lenguaje de programación más apropiado para estas implementaciones que además me abrirá las puertas a otros mundos como Front End en Web, NodeJS, LightSwitch, Napa y muchos más?

    Además me resulta gratificante no tener que ver mermado todo el poder de .net al que estoy acostumbrado, porque las implementaciones de apps así lo exigen.

    Así mi mente se sentirá más cómoda sabiendo que si estoy en backend se puede configurar en modo C#, pero si estoy haciendo una app o una interfaz web, entonces se pasa al modo JavaScript con MVVM y todo incluido.

    Es por eso que prefiero HTML5 para WINRT apps.

  • WarNov Developer Evangelist

    Windows 8 Dev Machine

    • 1 Comments

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

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

    Primero aclaremos algunos hechos básicos:

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

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

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

    clip_image002

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

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

    WINDOWS 8 + WINDOWS PHONE

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

    clip_image003

    Procedimiento:

    1. Instalar Win8CP

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

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

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

    5. Instalar el patch 7.1.1

    6. Instalar Zune

    7. Desarrollar en WP7!!!


    WINDOWS 8 + WINDOWS AZURE

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

    SDK 1.6 en VS2010 sobre Windows 8:

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

    1. Activación de Características:

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

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

    clip_image004

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

    a. Instalar el Service Pack de VS2010

    b. Descargar e Instalar MVC3

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

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

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

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

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

    Obtendremos:
    clip_image006

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

    clip_image008


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


    clip_image010

    Conclusión:

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

  • WarNov Developer Evangelist

    6 Capítulos de programación para Windows Phone 7 Gratis!!!

    • 0 Comments

    Para hoy les traigo este excelente draft - preview del libro “Programming Windows Phone 7 Series” escrito por el señor Charles Petzold (han de haber visto su nombre en la portada de muchos libros de MSPRESS)

    clip_image002

    Son seis capítulos que nos dejarán listos para programar cualquier tipo de aplicaciones en Windows Phone 7 Series!

    Disfrútenlo!



  • WarNov Developer Evangelist

    Cómo empezar con Windows Azure

    • 2 Comments

    Ya he escrito muchos artículos sobre Azure en este blog. Desde básicos hasta avanzados. Sin embargo, con el tiempo más y más personas quieren saber de la plataforma y es útil que tengan un punto de partida sencillo para comenzar. Aunque en mis posts anteriores existe este punto de partida, la plataforma tanto operativa como administrativa de Windows Azure ha sufrido cambios y por ende me permito escribir este post que muestra de manera actualizada cómo escribir una aplicación para Windows Azure y cómo desplegarla en la nube.

    Audiencia: ITPROS y Developers con poco o ningún conocimiento de Windows Azure.

    Si ud. es ITPRO, puede que solo desee ver el Video 2, que es orientado a su rol (Cómo desplegar una aplicación en Windows Azure)

    Si ud. Es Developer, le recomiendo especialmente el Video 1 y también que vea el Video 2 que aunque está enfocado a ITPROS, también tiene contenido que le puede ser útil.

    Esta es más que una simple aplicación Hello World para Windows Azure, pero lo suficientemente sencilla para comenzar con esta tecnología. Simplemente se trata de un sitio web usando la plantilla por defecto de Visual Studio al que se le añadió la funcionalidad de identificar el servidor en Windows Azure desde el cual se responden las peticiones. Esto permite ver que Windows Azure ofrece una naturaleza que permite muy fácilmente trabajar con varios servidores.

    Para exponer esto, les presento un video (Video 1), luego del cual, veremos en otro video cómo se puede desplegar dicha aplicación en la nube de Azure, pasarla de un ambiente de pruebas a producción y hacerla más escalable cambiando un sencillo valor de configuración.

    Video 1: Creación de una aplicación básica para Windows Azure.

    Video 2: Despliegue, paso a producción y escalamiento de una aplicación Windows Azure.

    En este video vemos cómo es de fácil desplegar una aplicación en Windows Azure. Está enfocado a ITPROS y Desarrolladores que desean saber cómo opera la nube de Azure en cuanto a despliegue de aplicaciones. Vemos cómo es de fácil pasar de entornos de pruebas a entornos de producción y también cómo hacer que la aplicación escale mediante la añadidura de nuevos servidores.

  • WarNov Developer Evangelist

    Cómo aprender Silverlight?

    • 0 Comments

    A continuación un corto pero sustancioso compilado de excelentes recursos que nos dejarán listos para aprender Silverlight:

    Comienzo con una referencia a los videos en español elaborados por mi buen amigo mexicano el MVP en Silverlight Rodrigo Díaz Concha (recuerdo que algunos los hizo estando aquí en Bogotá) que ahora están en Channel9.

    Luego, para ampliar lo visto aquí, pueden acceder al Curso de Entrenamiento en Silverlight también en Channel9, pero esta vez en Inglés con contenido complementario.

    También existe un Training Kit disponible en MSDN  para los que les gusta seguir laboratorios paso a paso.

    Si somos diseñadores con otras herramientas como las de Adobe, o desarrolladores con pocos conocimientos en diseño y queremos entrar de lleno al mundo de Blend y Silverlight, les recomiendo este post, donde les ofrezco más recursos enfocados específicamente a aprendizaje de diseño con énfasis en Silverlight.

    Y si nos gusta más leer, nada mejor que Silverlight Step by Step (cualquier versión os sirve para introducirnos en la tecnología, ya que hay versión 2, 3, y 4). Este libro es escrito por Laurence Moroney, un empleado de Microsoft.



  • WarNov Developer Evangelist

    Facebook Game Hack

    • 7 Comments

    En este video apreciaremos cómo hackear un juego de Facebook usando un algoritmo de permutación hecho recursivamente en C#, más el acceso a la WinAPI para enviar mensajes entre aplicaciones distintas. Solo se necesita un archivo de palabras y cualquier versión que compile código C# sobre Windows.

  • 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

    Diseñando Experiencias con Expression Blend

    • 2 Comments

    En estos últimos días, me he encontrado dictando varias conferencias en las que Expression Suite de Microsoft ha sido el protagonista. La recepción en general ha sido buena luego de mostrar las características de la herramienta. Sobretodo la integración entre los mundos del diseño y del desarrollo que ofrece Blend.

    BlendBanner

    Sin embargo en nuestro entorno, los diseñadores que la mayoría del tiempo han trabajado con herramientas Adobe no encuentran un punto clave para comenzar a aprender a manejar la Suite y adquirir los conocimientos necesarios para aprender a manejar la herramienta.

    Así que de las principales consultas que recibo es: Y cómo les enseño a mis diseñadores a manejar la herramienta?

    Una de las opciones más directas que siempre doy, es que accedan a los servicios (consultorías) de los entusiastas de Microsoft o cursos oficiales por ejemplo de CPLS.

    Pero hoy el mensaje va más allá gracias a dos excelentes recursos que tenemos mediante los cuales, los diseñadores con experiencia previa en herramientas Adobe, pueden acceder a unos cursos muy completos en los cuales aprenden fácilmente a dominar nuestra suite de Expression. El primer curso se enfoca en Windows y WPF y el segundo en Web y Silverlight.

    El primero de ellos es orientado a programación Windows con WPF:

    Designing Windows Experiences with Expression Blend (WPF)

    Entrenamiento

    Se trata del curso Designing Windows Experiences with Expression Blend. Un curso que provee el conocimiento experimental requerido para diseñar experiencias de usuario usando Expression Blend; herramienta con la cual podemos acceder a todo el poder de Windows Presentation Foundation.

    Es un curso enfocado a diseñadores gráficos especializados en Interfaces de Usuario que tengan una experiencia previa con Flash o Director. Además no se requieren conocimientos previos por ejemplo de desarrollo o del manejo de Visual Studio.

    Introducción

    El curso comienza enseñando la herramienta Expression Design con la que podemos general gráficos vectoriales de calidad profesional. Todo con procedimientos enteramente experimentales con los que llegan a construir una interfaz de un Video Player.

    Luego se enseñan otras herramientas de diseño que trabajan en conjunto con la Suite de Expression y que sirven para generar resultados más impactantes. En general son “Tips and Tricks” para preparar contenido 3D, gráficas, Video y contenido de audio para WPF, usando herramientas populares de diseño.

    Posteriormente nos enseñan cómo crear la interfaz del Video Player de una manera más avanzada usando Blend, para familiarizarnos con la herramienta.

    Colaboración

    Acto seguido nos ofrecen un proyecto pre-hecho que tiene toda la programación hecha, pero un diseño muy básico. Un capítulo de ejemplo que nos muestra la colaboración con el desarrollador. Los diseñadores toman este proyecto pobremente diseñado y lo convierten en un producto mucho  más atractivo.

    También hay otro escenario de colaboración en el que otro diseñador crea algunos recursos y assets previamente al diseño que se ejecuta. De esta manera el diseñador aprende a emplear assets generados en otra herramienta (por ejemplo Fireworks) y crea un ejemplo de una tienda de retail.

    Extras

    image

    Como si fuera poco también se ofrece un micro curso de UX para hacer énfasis a los diseñadores en los principios teóricos del manejo de la experiencia de usuario. Y muchos otros laboratorios para poder dominar la suite!

    El otro curso es:

    .toolbox (Silverlight)

    Es un curso online y más interactivo para aprender, crear y compartir experiencias con Silverlight y Expression Studio. Está creado completamente en Silverlight y ofrece una excelente experiencia de usuario genial para diseñadores y desarrolladores que quieran aprender más de la parte de diseño de aplicaciones Silverlight. Allí los participantes crean avatares para enriquecer su experiencia 2.0.

    image

    Tiene integración con Facebook y Twitter  y salones de clases. Básicamente se ofrecen dos tracks:

    • Escenarios de Diseño
    • Principios de Diseño

    Cada track ofrece How To Videos, Working Labs y características especiales que se desbloquean al mejor estilo de un videojuego en el que se van teniendo progresos a medida que nuestra reputación crece desde Rookie, hasta ser todo un All Star.

    image

    También tenemos ejemplos de aplicaciones de la vida real creadas por agencias expertas para Microsoft. Son aplicaciones avanzadas, cuyo código está completamente disponible para nuestro aprendizaje.

     

    Get Started!, Today!

    Otros Recursos:

    Silverlight 4 Training http://tinyurl.com/yebx3z7
    Curso en Videos de Silverlight http://tinyurl.com/yf32xl2


  • WarNov Developer Evangelist

    Cuentas de prueba de Windows Azure gratuitas por una Semana

    • 8 Comments

    Para que puedan probar todo lo que deseen en Windows Azure por una semana de manera totalmente gratuita y sin tarjeta de crédito, he creado este sencillo concurso en el cual los ganadores serán las primeras 15 personas en comentar este post, poniendo su usario en twitter que debe estar siguiendo a @msdevcol y gustarle la página de Microsoft Developers Colombia en Facebook.

    Los 15 ganadores tendrán una cuenta activa en Windows Azure desde hoy hasta el día 16 de Julio.

    Por mensaje directo les enviaré su usuario y password para que entren directamente por el Windows Azure Developer Portal.

    Recuerden que aquí encuentran todos mis artículos de Azure y que si tienen dudas, pueden formularlas como comentarios en este Post.

    A comentar!

  • WarNov Developer Evangelist

    Tips para el desarrollo de aplicaciones en Windows Azure

    • 0 Comments

    En este post estaré acumulando una serie de tips apropiados para un mejor desarrollo de aplicaciones Web para Azure.

    5. Ignorar los Errores del contexto de datos de Windows Azure producidos por el 404:

    En Windows Azure podemos acceder al almacenamiento a través de REST. REST funciona a través de HTTP. Así que cuando consultamos un registro de una tabla y éste no se encuentra, el servicio nos retorna 404 (Not Found) Y entonces el contexto de datos que usamos para representar en memoria los datos de las tablas entonces genera una excepción a raíz de ese 404. Entonces para solventar esto tenemos dos opciones. La primera, manejar la excepción y la segunda sería ignorar este tipo de error, pues sabremos que se trata de un registro en una tabla no encontrado. Así que en la consulta lo que se haría sencillamente es observar la cantidad de registros retornados (count):

    context.IgnoreResourceNotFoundException=true;

    Donde context es el objeto heredado de TableServiceContext a través del cual estamos accediendo a las tablas de Azure.

    4. Escoja puntos cruciales para hacer programación alternativa

    En algunos casos ud., querrá que su aplicación corra con los mínimos cambios independientemente de si está en un hosting tradicional o si está en el Cloud. Cosas que pueden cambiar, son por ejemplo los orígenes de las variables de configuración. Como lo vimos en el punto 3, una aplicación en cloud, generalmente tiene sus variables de configuración en caliente, puestas en el archivo de configuración del servicio, mientras en un hosting tradicional, esto se hace en el Web.config. Podemos usar la propiedad

    RoleEnvironment.IsAvailable

    Para chequear si estamos corriendo en Azure (true) o no (false) de esta manera, determinar por ejemplo cuál de los archivos de configuración chequear para traer una variable.

    Por ejemplo:

       1:  string enterprise =
       2:    RoleEnvironment.IsAvailable ?
       3:    RoleEnvironment.GetConfigurationSettingValue("EnterpriseName") :
       4:    ConfigurationManager.AppSettings.Get("EnterpriseName");

    3. Web.Config o ServiceConfiguration.cscfg

    Tanto las aplicaciones Web como los servicios de Cloud (CS) tienen archivos de configuración que permiten en teoría hacer modificaciones en caliente sobre los servicios sin tener que recompilarlos.

    Pero por qué en teoría?

    En teoría, porque cuando el sitio Web está en Azure, no tenemos la posibilidad de acceder al Web.Config como es tradicional en los hosters clásicos. En general, los archivos de las instancias de cómputo (Web.Role, Worker Role) no son accesibles por ejemplo con un FTP. Así que lo que tendríamos que hacer, es una aplicación que modifique los Web.Config internamente y lo peor de todo, hacer que se ejecute en todas las instancias Web que estemos corriendo. Como ven, no es muy práctico.

    Entonces la opción sería editar el Web.Config y re empaquetar de nuevo el sitio y volverlo a subir… tedioso no?

    Afortunadamente, tenemos el archivo ServiceConfiguration.cscfg. Éste sí es accesible desde el portal del desarrollador de Windows Azure y lo podemos bien sea editar allí en vivo o subir independientemente con la nueva versión que queramos.

    Entonces lo que recomiendo es que si en su aplicación ud. tiene variables de configuración que cambian mucho durante la ejecución de la misma, éstas sean puestas en el archivo de configuración del servicio. Por otro lado si son variables que solo cambian de compilación en compilación, entonces está bien dejarlas en el Web.Config.

    Recordemos que tanto el Web.Config como el ServiceConfiguration.cscfg son fácilmente accesibles en un proyecto de Cloud. Además es posible generar rutinas de programación que decidan ir a buscar las variables de configuración a uno u otro archivo dependiendo de cómo lo haya desplegado: hosted o en cloud.

    2. Subir datos a las tablas de Azure

    Esta operación puede tener tres connotaciones:

    • Subir dos o tres registros
    • Subir batch de cientos o algunos miles de registros
    • Subir miles y miles de registros:
      • Considere escribir una rutina usando el API del Storage de Windows Azure

    Si usa Cloud Storage Studio, y está subiendo datos en español, es posible que el archivo plano que esté subiendo o el CSV que use para esto no se presente adecuadamente luego de cargarlo en la herramienta. Así que las tildes y eñes por ejemplo se le mostrarán como símbolos extraños y así subirán a la nube. Esto se soluciona fácilmente, usando archivos de texto o CSV grabados con la codificación UNICODE.

    1. Desarrolle la parte visual del sitio web sin Azure

    Suena curioso que para programar mejor para Azure, les de este consejo. Pero es muy apropiado en la medida de las posibilidades. A qué me refiero?

    Todo lo que tiene que ver con el debugging y por supuesto el deployment de una aplicación Web en Windows Azure, trae de por sí, una estrecha relación con IIS, que es el servidor que se activa con los Web Roles.

    Por eso, cada vez que ejecutamos la aplicación Web para Azure, se hace todo un deployment del sitio al IIS de manera automática.

    Si nuestra máquina es lo suficientemente rápida, esto puede que no sea ninguna molestia. De lo contrario si puede llegar a tomar más tiempo que hacer un simple debug usando el servidor Cassini incluido en Visual Studio.

    Sin embargo lo más importante durante el proceso de debug, es que las actualizaciones que hagamos a las páginas aspx o en general a cualquier recurso que haga parte del sitio mientras éste se está ejecutando en desarrollo, no se ve reflejado de inmediato en éste despliegue, debido a que como las fuentes ya están en un directorio virtual dentro del IIS, los cambios que hacemos por fuera no se ven reflejados sino hasta que se hace un nuevo despliegue, por lo que es necesario detener la aplicación y volver a ejecutar el despliegue; cosa que aunque es automática consume más tiempo que cuando usando el Cassini actualizamos las páginas en caliente para ver los cambios de inmediato. Esto es muy útil a la hora de refinar la apariencia gráfica de las páginas.

    Por esto es que recomiendo trabajar las interfaces gráficas del sitio web de manera separada a Azure. Esto nos va a dar mucha más agilidad en este proceso. Cuando ya tengamos lo suficientemente estables estas páginas, podremos ya asociarlas a un Web Role y entonces refinar la integración con Cloud, lo que puede implicar cambiar ciertos métodos o valores quemados en la forma mientras ésta se diseñó.

  • WarNov Developer Evangelist

    High Performance Computing (HPC) y Windows Azure

    • 0 Comments

    Como bien lo dice el título de este artículo, hablo básicamente de dos cosas: HPC y su relación con Windows Azure. Si ud quiere saber de Windows Azure antes de leer este artículo, le recomiendo mis posts introductorios. Si ud quiere saber de HPC y la alternativa que ofrece Windows en este sentido le recomiendo que lea la primera parte de este artículo. Y si quiere saber la relación entre HPC y Windows Azure, le recomiendo la segunda parte del post.

    image

    Primera Parte: HPC

    En la vida real existen aplicaciones de software que definitivamente no pueden ejecutarse en un ambiente de cómputo tradicional y tampoco en un ambiente de cómputo avanzado tradicional (esto es un servidor de grandes características)

    Cálculos científicos como por ejemplo análisis para la creación de una nueva medicina, el estudio del genoma humano, aplicaciones financieras para ejecutar estudios de riesgo sobre cantidades de datos descomunales, predicción del comportamiento de acciones en las bolsas de valores… todo esto requiere de capacidades de cómputo que sobrepasan cualquier procesador que se pueda comprar en Unilago (léase centro comercial temático de computadores) o encargar a Dell por ejemplo a través del sitio web.

    Los cálculos que hacen las CPUs se miden en FLOPS (FLoating point Operations Per Second). Una calculadora decente trabaja con 10FLOPS.

    En general los procesadores de nuestros computadores hoy en día generan de 0.5 a 120 GFLOPS de poder de cómputo. 1 GFLOPS = 10e9 FLOPS

    Pero procesos como la simulación de la dinámica molecular no se pueden terminar en corto tiempo ni siquiera con el poder de 6 PFLOPS = 6 millones de GFLOPS o lo que es equivalente a 6 millones de PCs trabajando juntos para lograr el mismo objetivo.

    Para el caso de la resolución de estos procesos complejos, se han abordado dos soluciones. La primera son los supercomputadores y la segunda son los clústeres de cómputo. Ambas soluciones hacen parte de lo que conocemos hoy como High Performance Computing o HPC.

    La primera tiene grandes limitaciones físicas, pues no podemos construir un solo procesador con una capacidad tan grande como la requerida. Resultaría súper costoso y poco eficiente. Así que los supercomputadores son escasos y limitados.

    La segunda opción, es tratar de emular a un solo procesador gigantesco, mediante la unión de recursos de cómputo que se encuentran distribuidos en unidades independientes de cómputo, que se comunican a través de redes. Esta opción es más viable que la primera y básicamente viene en dos sabores.

    El primer sabor es el restringido a una red homogénea. En general es una LAN o VLAN con máquinas del mismo tipo bajo un mismo sistema operativo. Los desarrollos y administración de este tipo de ambientes son sencillos, pero tienen la limitante que no se podrían conectar con el resto de capacidades de cómputo que tiene el mundo. En general estos sistemas se conocen como Clúster Computing.

    El segundo sabor comprende aquel en el que los nodos que componen la súper máquina se encuentran en distintas redes o dominios administrativos con diferentes características de hardware, sistemas operativos y demás, conectados generalmente a través de internet. La administración es más complicada, pero tenemos la ventaja de poder obtener cómputo de todo el mundo para lograr el resultado buscado. Este tipo de solución se conoce como Grid Computing.

    Hoy en día la mayor capacidad de cómputo alcanzada por un sistema de Grid Computing es de 6PFLOPS precisamente alcanzada por el proyecto Folding@Home que hace simulaciones moleculares. Las máquinas empleadas en este tipo de cómputo son PCs de usuarios como ud o como yo que descargan un cliente que aprovecha los recursos no usados de la CPU para procesar unidades de trabajo en background que luego de ser procesadas se reenvían al servidor central.

    Este tipo de aplicaciones siempre han estado en el ámbito científico súper especializado y acaso en aplicaciones financieras de altísimo nivel.

    Ahora sin embargo no es necesario estar haciendo un doctorado en mecánica cuántica para entrar en este mundo. El mero hecho de crear una aplicación de análisis de redes sociales, podría requerir HPC.

     

    Pero cómo desplegar una solución HPC?

    Gracias a Windows Server 2008R2, es muy sencillo. Si ud tiene una licencia de este OS, ya puede activar los servicios de HPC que vienen con la licencia, para poder conectarse con otras máquinas y distribuir su súper aplicación en el clúster de su compañía. Y si requiere de más cómputo en ambientes heterogéneos y en otras ubicaciones geográficas, entonces gracias a las características High Performance Computing Basic Profile (HPCBP), un estándar del Open Grid Forum para poder conectar clústeres heterogéneos en ambientes HPC podrá expandir sus límites mundialmente.

    Siendo relativamente nuevo en el mercado de HPC, Windows HPC Server 2008 se posicionó en el ranking mundial Anude sistemas de cómputo HPC en la casilla 19 con una capacidad de 180.6 TFLOPS que es aproximadamente igual a 18000 PCs de escritorio de las más potentes hoy en día.

    image

    Segunda Parte: HPC y Windows Azure

    Windows Azure se distingue sobre todo por sus capacidades de escalamiento instantáneo cuando las aplicaciones así lo requieran. Sin embargo desde su concepción, estuvo dirigido a aplicaciones de negocio y no a HPC. No obstante, cuando uno quiere desarrollar una aplicación HPC por ejemplo para el departamento financiero de un Banco y ve la arquitectura de Windows Azure no puede evitar pensar que sería el mejor modelo para hacer HPC “por demanda” sin necesidad de invertir miles de dólares en unidades de cómputo que solo serán necesarias por un tiempo determinado.

    El modelo de Azure nos permitiría por ejemplo tener nuestro Servidor de HPC local en nuestras instalaciones por ejemplo, pero las unidades de cómputo estarían en la nube y aprovisionaríamos tantas como necesitemos solo por el tiempo necesario!

    Qué se necesita entonces para correr HPC en Windows Azure?

    Las instancias de cómputo en Windows Azure corren sobre versiones virtualizadas de Windows Server 2008R2x64. Así que lo único necesario es activar el servicio de HPC en esas instancias y ya estarán listas para unirse al objetivo común, al servicio del servidor principal que estaría on-premises.

    La buena noticia, es que los servicios HPC ya están activos en las instancias de Azure, listos para que las instancias identificar cuando se les están enviando peticiones para trabajos de HPC. De esta manera, aplicaciones financieras, de industria farmacéutica, científicas y demás, podrán generar un sistema HPC con un servidor local y levantar cuántas máquinas sea necesario en la nube y solo serán cargados los costos consumidos. Nada de comprar máquinas ni pagar tarifas planas. Todo será cobrado dinámicamente de acuerdo al consumo de cómputo con los estándares de cobro de Windows Azure. (Hoy en día una hora de proceso en Windows Azure con una CP de 1.7GHz de velocidad nos cuesta 12 centavos de dólar).

    Así que si usted tiene este súper sistema en mente con necesidades de HPC para poderlo desplegar y no lo ha podido sacar a la luz porque la inversión inicial es extremadamente alta, piense que Windows Azure ya admite HPC y que además le convierte toda la inversión de capital inicial (CAPEX) en costos dinámicos operativos (OPEX), brindándole todo lo necesario para que pueda sacar su negocio a producción!



  • WarNov Developer Evangelist

    El mayor evento para desarrolladores en Colombia 2010

    • 1 Comments

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

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

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

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

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

    Visual Studio

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

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

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

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

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

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

    Prepárense para la charla

    Experiencias de Usuario Enriquecidas

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

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

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

    Material Técnico

    Plataforma de Servicios en la Nube (Azure)

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

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

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

    Material Técnico

    El cierre de Steve Ballmer

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

    Developers, Developers, Developers!!!


  • WarNov Developer Evangelist

    Precisión con tipos de Datos .NET

    • 0 Comments

    Por qué en el Framework .NET puede pasar que:
    0.2 + 0.1 = 0.3000000000000000000004 ?

    Algunas veces, escoger el tipo de datos apropiado para nuestra aplicación puede no ser trivial. Aquí muestro un caso en el que se marca la diferencia entre una aplicación errónea y una correcta, solo mediante un cambio de tipo desde double a decimal.
    También hablo de errores de precisión y cómo evitarlos con el uso de deltas de error. Finalmente muestro un tip de Visual Studio 2010 para escribir código más claro.

     

    En el video menciono las Visual Studio 2010 Pro Power Tools. Un conjunto de extensiones para Visual Studio Professional (y superiores) que mejoran la productividad del desarrollador. Estas tools, las pueden descargar de MSDN de manera gratuita.

    Este post fue originado por una pregunta de Juan David

Page 3 of 14 (334 items) 12345»