MSDN Blogs
  • WarNov Developer Evangelist

    Windows 8 te hace la vida más fácil

    • 48 Comments

    Veamos en esta cortísima demo de 5 minutos, las características más importantes de Windows 8, que a nosotros como desarrolladores nos han de importar, para poderlas aprovechar a la hora de generar nuestras apps.

    image
  • WarNov Developer Evangelist

    Java vs. .NET

    • 40 Comments

    Estaba revisando mi Facebook y por allá alguien dijo a propósito de la salida de su creador James Gosling de Oracle:

    “Es que Java le lleva mucha ventaja a .NET!”

    OMG!

    Abrió la caja de pandora… y entonces comenté algo similar a lo siguiente, dado que soy NINJA (Not INcluding JAva):

    En lo personal me parece que decir que Java le lleva ventaja a .NET, ni siquiera aplica.
    Java es solo un lenguaje. Más bien tendríamos que comparar JDK con .NET aunque tampoco me parece muy apropiado...
    .NET es toda una tecnología.
    Una tecnología basada en código administrado.
    En eficiencia;
    en productividad
    en hacer todo desde un solo lugar.
    En confiar en un solo esquema de librerías bien conocido, documentado y creado bajo los mismos principios.
    Alguién más apuntó:

    “…he programado en los dos lados y eso de que java le lleva a .net mucha ventaja lo discuto.. JAVA cambia sus paradigmas a toda hora… o será muy fácil pasar de EJB 2 a 3 o integrar plugins y librerías en Eclipse: Algo así EJB 2.0 Hibernate jax-ws y jboos 5… eso es un show con una pila de errores que a veces ni idea y después te das cuenta que solo era por una versión menos de alguna librería x ... en fin Calidad de vida mata Esquizofrenia(enfermedad generada por apagar el modo NINJA)…”

    No tengo que importar paquetes extraños. Todo me lo resuelve el IntelliSense.
    Aún SDKs de Javascript tan robustos como JQuery se resuelven en segundos y me dejan programar a la velocidad del.. hum... sí.. del programador .NET... que sin ser exagerado caballeros, siempre será más alta que la de java. A .NET no le gusta "echar pedal" (y no mencionemos la velocidad de ejecución).”


    Pero Java es multiplataforma!


    Y .NET no? Solo hablemos de Mono y ya. O de Silverlight que ahora me permitirá correr la misma aplicación en Linux,. MAC o Windows en modo full trust out of browser o en otras palabras, en modo escritorio... Y me pregunto... cuándo con Java podremos crear algo aunque sea ligeramente parecido a Silverlight? A WPF?


    Además, pienso que la interoperabilidad no es correr sobre todos los sistemas operativos (cosa factible con .NET) Sino más bien la capacidad de interoperar con otras aplicaciones existentes... y .NET está super preparado para esto con WCF que hoy día da amplias capacidades de interconexión comenzando por REST, JSon, OData, y los otros viejitos como SOAP, WSDL...


    Pero Java es gratis!!!


    Y .NET no? Toda la especificación de .NET es abierta. Y tenemos herramientas altamente sofisticadas y SOPORTADAS que son free... si no, pregúntenle a las versiones Express de Visual Studio.
    Existe también el sitio http://codeplex.com donde miles de desarrolladores comparten su código de manera OPEN SOURCE y se encuentran proyectos geniales de código libre.

    Pero Java es Java!!!


    Sí... los programadores se enorgullecen de saber Java... no digo que sea malo... por el contrario rescato la idea original que se tuvo de la JVM y del código administrado y del lenguaje altamente formal y completamente orientado a objetos que en gran parte le dieron vida a mi amado C#...

    Pero C# pertenece a .NET y .NET es una cosa con vida propia que permite crear nuevos lenguajes orientados a su funcionalidad (F#, IronPython, IronRuby. APL.NEXT) y además permite la inclusión de elementos avanzados como expresiones lambdas, métodos y clases parciales, métodos extendidos, LINQ, lenguajes dinámicos, automatización en la generación de capas de datos, de negocio y hasta de interfaz de usuario; MVC, Entity Framework, Cloud Services desde su proyecto en Visual Studio derechito pa’ la nube…

    En integración transparente con Office, con XNA para hacer videojuegos, con Robotics, con Sharepoint, Biztalk y servidores de DB de toda índole. Con todo eso un simple Enterprise Library (lo que más se compara con la mega colección de paquetes de Java) no es nada… es solo una pequeña porción de todo lo que tiene .NET. Sin olvidar el poderoso C++ que aún está disponible para ejecutar aplicaciones que realmente vuelan porque no son administradas. Además hoy día tenemos librerías específicas para hacer programación en paralelo y hypercomputing sin necesidad de hacer un curso para usarlas! en fin... esta cajita de pandora llamada .NET, me daría para escribir un montón de líneas más....


    Para estos días que estamos de lanzamiento de la nueva ola de nuestra plataforma: Visual Studio 2010 (que además ahora incluye modelamiento UML y un manejo de arquitectura que ni en mis sueños me imaginaba) .NET Framework 4.0, Silverlight 4.0, Sharepoint 2010, Windows Azure para Colombia y muchos otros... podría decir que en mis años de experiencia con .NET jamás había presenciado una oleada tan grande de innovaciones que nos va a permitir verdaderamente desarrollar todo nuestro potencial antes de tener que pelear para únicamente mostrar un botón en la interfaz gráfica…

    Y ahí terminó la discusión… luego Willy remató con un brillante chascarrillo acerca del asunto:

    Michael Schumacher llega a casa después de un duro día de entrenamiento en el circuito.
    Su mujer le recibe con un beso y le pregunta:
    - "¿Cómo ha ido hoy el día, cariño?"
    - "Bueno, cuando he llegado al circuito, he ido a boxes y el F1 no estaba en su sitio. En su lugar había un burro."
    - "¿Cómo?", se sorprende la mujer.
    - "Si, así es. Le he preguntado al jefe de equipo y me ha confirmado que habían cambiado el monoplaza por el burro."
    - "¿Y tu que le has contestado?"
    - "Pues yo le he dicho que quizás no seria tan rápido como el F1. Él ha dicho que ciertamente es así, pero que ahora tenemos una ventaja y es que podremos correr en todo tipo de circuitos: F1, rally, motocross, trail sin... Y bueno, al menos hoy he podido venir montado en él hasta casa, cosa que no podía hacer con el F1."
    - "Ya. Pero si tu sólo corres en F1, ¿para que quieres poder correr en otros circuitos?"
    - "Pues no lo se, la verdad. Además, después de montarme en el burro le he dicho al jefe de equipo que no era ni la mitad de cómodo que el monoplaza."
    - "¿Qué ha respondido el?"
    - "Simplemente ha dicho que eso no importa porque ahora podemos correr en todo tipo de circuito."
    - "¡Ay Señor!, ¿Y no corres más riesgo de hacerte daño si te caes?"
    - "En realidad no, porque le han puesto al burro las mismas protecciones que tiene la cabina del F1. A pesar de que hace que todavía vaya un poco mas lento. Según el jefe eso ya no tiene tanta importancia, porque ahora podemos correr en todo tipo de circuito."
    - "Esta bien, enséñame el burro."
    Tras salir al jardín y quedarse estupefacta con la imagen de un burro pintado de rojo, con el escudo de Ferrari pegado en la frente y una protección de F1 encima de la silla de montar, la mujer le pregunta a Michael:
    - "¿Y como se llama el animal?"
    - Se llama ....
    - Se llama ....
    - Se llama ....
    - Se llama ....
    - Se llama ....
    - Se llama ....
    JAVA !!!!!!!!
    X-DDDDD
    Según apunta Willy además no es cierto que Ferrari use Java. Los leguajes oficiales para desarrollo en el equipo Ferrari son VB.NET y C++, tal y como se indica en una entrevista concedida a CNET NEWS"
    http://tiny.cc/42f73

     image

    Y ahora otro más cortesía de @Caycedo:

    - Knock Knock...
    -Who's there?
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    - Java!
    :P

    A lo cual le agregué el siguiente escenario (un poco más abstracto):

    Knock Knock...
    -Who's there?
    -Dont worry, I'm Just Leaving
    (espero aquí sepan de quien estoy hablando)

     

    .NET Rocks!!! Felices lanzamientos 2010!!!

  • WarNov Developer Evangelist

    Aceleración por Hardware de Firefox 4 vs. Internet Explorer 9

    • 25 Comments

    Una de las características que más anuncia Firefox para su última versión es la inclusión de aceleración por Hardware compatible aún con Windows XP (tengamos en cuenta que IE9 no corre en XP, con el fin de poder dar al usuario lo último en tecnología aprovechando el poder de Windows 7).

    En esta demo clásica ya desde los Platform Preview (aka. betas de IE9) vemos que a pesar de que Firefox anuncia con bombos y platillos esta característica, aún el rendimiento en aplicaciones HTML5 de alta demanda de gráficos es bastante pobre.

    Investigando un poco más, me di cuenta de que la aceleración de Hardware de Firefox solo es posible para algunos sitios especiales en Internet que usen una tecnología llamada WebGL que básicamente es una implementación abierta de OpenGL enfocada a la web a través de HTML5 con su canvas. Así que se debe saber de OpenGL para desarrollar sitios web con esta tecnología. IE9 no soporta esta tecnología:

    clip_image002

    http://webglsamples.googlecode.com/hg/aquarium/aquarium.html

    Curiosamente, al hacer la prueba con Firefox obtengo esto:

    clip_image004

    O sea, nada. Si alguien sabe qué se debe hacer para que funcione, le agradezco.

    Esta prueba la hice en varios equipos y nunca obtuve el resultado que FF4 ofrece en su página:

    clip_image005

    En conclusión, la aceleración por Hardware de FF4 que aplica no solo a W7 y XP sino a Mac, etc. Se ve reducida a una sola aplicación (sitios web basados en WebGL). Y en caso de que en realidad allí sea efectiva, veríamos que es un alcance muy corto.

    Para aplicaciones HTML5 más estándares como la del video, el comportamiento sigue siendo precario.

    IE9 soporta aceleración no solo para estos elementos de HTML5, sino que también es aprovechada para el renderizado de fuentes más finas y para ejecutar procedimientos gráficos trazados con Javascript.

    Una cosa es decirlo, otra es hacerlo.

  • 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

    Buenas Prácticas en Manejo de Excepciones .Net

    • 18 Comments

    Hace poco me preguntaron acerca de cómo se debería de abordar el manejo de excepciones para una aplicación grande.

    Me sentí agradado de que esa persona estuviera concientizada de que no es un tema que se puede dejar al azar y que hay que tener ciertos temas en cuenta.

    Básicamente, su duda era acerca de cómo capturar unificadamente todas las excepciones producidas en su aplicación; luego de alguna investigación, llegó a saber de Application.ThreadException; un evento al que se le puede poner un manejador y allí tomar las acciones necesarias. Sin embargo, personalmente no recomiendo esta solución. Por qué?

    1. La notificación de la excepción ocurre muy tarde: cuando se recibe la notificación, la aplicación ya no podrá responder a la excepción.

    2. La aplicación terminará abruptamente si la excepción ocurre en el hilo principal o en cualquier otro hilo que sea iniciado por código no administrado (el hilo principal de la aplicación obviamente es ejecutado por Windows – no administrado)

    3. No tenemos acceso a ninguna información valiosa acerca del error, excepto la excepción misma. No se podrán cerrar conexiones a bases de datos, hacer rollback de transacciones ni nada útil. 

    Así que mi recomendación es nunca basar el manejo de excepciones en los eventos Application.ThreadException ni AppDomain.UnhandledException. Ellos deben ser usados y existen como las redes de seguridad de los acróbatas; su función es la de hacer un registro de la excepción en algún mecanismo de log, para alguna examinación futura. Así que hay que darse la pela y manejar cada excepción en su sitio y actuar en concordancia.

    Esta última invitación conlleva a tener en cuenta otra serie de factores que generalmente se omiten cuando uno comienza a desarrollar “en forma”:

    1. El código metido entre try, catch se ejecuta muy lento. Consume muchos recursos. Así que sólo manejemos excepciones cuando realmente se necesite. Cuándo es eso?
    Las excepciones están construidas para manejar condiciones que no se pueden controlar con la lógica de la aplicación. Por ejemplo que se cae la conexión con el servidor, o que el disco está lleno, o que el hardware falló…
    Antes de lanzar excepciones por todo, fijémonos si realmente es necesario. Evitemos también poner mucho código en el try; solo afectemos con el try el código que realmente puede fallar. Por ejemplo es preferible:

    if (conn.State != ConnectionState.Closed)
    {      
       conn.Close(); 
    } 

    a:

    try
    {
            conn.Close(); 
    } 
    catch (InvalidOperationException ex)
    {
         Console.WriteLine(ex.GetType().FullName);
         Console.WriteLine(ex.Message);
    } 

    2. No emita Exception(). O es que eso le da mucha información?
    El framework .net tiene un número de excepciones que nos permite controlar argumentos y operaciones inválidas, timeouts, conexiones, overflows, etc. Usemos esas excepciones que realmente nos indican qué fue lo que sucedió.

    3. Use bloques try/finally. Recuerde que las instrucciones en el Finally siempre se ejecutan independientemente de si se produjo o no la excepción. Esto es muy útil para liberar recursos, cerrar conexiones, etc.

    4. Siempre use un catch para cada tipo de excepción que se pueda generar y ordénelos desde el más específico hasta el menos específico. Esto ayuda a identificar plenamente el error que se generó y no terminar con excepciones como: “Object reference not set to a instance of an Object”.

    5. Cuando cree excepciones propias del aplicativo, asegúrese de distribuir el Assembly a una ubicación compartida para todos los posibles dominios que tengan que ver con ellas.

    6. De acuerdo a como el mecanismo de excepciones funciona, es muy importante siempre que creemos excepciones propias, proveerlas al menos con los tres constructores de excepciones básicos.

    7. Siempre es recomendable usar las excepciones de .Net. Las personalizadas solo tendrán que ver con escenarios programáticos.

    8. Siempre se ha pensado que para las excepciones personalizadas se debería heredar de ApplicationException; sin embargo en la práctica se ha demostrado que no se agrega valor significativo y además se pierde cierto performance. Así que es mejor heredar siempre de Exception.

    9. Use mensajes gramáticamente correctos.

    10. Las excepciones pueden incluir propiedades. Estas propiedades pueden ser accedidas programáticamente para tomar acciones. Incluya información extra relevante en estas propiedades cuando sea útil.

    11. En vez de retornar null, lance excepciones en la mayoría de casos. Eso evita inconvenientes que a veces son difíciles de detectar. Evite también retornar códigos de error.

    Estas son solo unas pocas recomendaciones a la hora de manejar excepciones. Hay muchas más que se aprenden con el pasar de las líneas de código.

    Para finalizar, me parece importante mencionar también que igual existe un Application Block en Patterns And Practices para el manejo de Excepciones. Incluyéndolo en nuestras aplicaciones ya de por sí garantizaremos varias buenas prácticas; eso sí, usandolo tal y cual se explica en los lineamientos.

  • WarNov Developer Evangelist

    Las cartas sobre la mesa: HTML5 vs. Silverlight

    • 18 Comments

    Es preocupante ver como ciertos periodistas y no solo ellos sino en general la gente en medios de divulgación siempre aprovecha ciertos acontecimientos para “acomodarlos” de manera tal que parezcan una chiva sin importar las implicaciones sociales que esto pueda llegar a tener.

    Es el caso a mi modo de ver de una señora periodista muy bloguera ella, quien hizo unas conclusiones en su blog a raíz de unas declaraciones de Bob Muglia, presidente de la división de Server and Tools en Microsoft.

    Muglia le afirmó: “Silverlight is our development platform for Windows Phone … Silverlight also has some “sweet spots” in media and line-of-business applications”

    Esta sumada a otras frases desafortunadamente extraídas del contexto hizo parecer el artículo como una clara afirmación del presidente, en la que se indicaba que básicamente Silverlight entraba en decadencia. Sin mencionar que el PDC estuvo muy concentrado en la novedad IE9+HTML5.

    A partir de entonces se inició una revolución en el social media que durante todo este tiempo ha estado precedida por aquellos que de un modo u otro sienten amenazada a la plataforma Silverlight por el advenimiento de HTML5 y el fuerte apoyo demostrado abiertamente por Microsoft a esta tecnología. En esta euforia los desertores de Silverlight comenzaron a publicar por los cuatro vientos que era el fin de la plataforma y demás…

    Ya en varios medios menos formales que este, yo había comentado el total desacuerdo con todas esas opiniones y enumerado ciertos motivos para estas afirmaciones.

    Hoy Bob Muglia anunció oficialmente cual es nuestra postura al respecto y por ende me permito hacer más públicas y formales mis apreciaciones al respecto que como es de esperarse van en favor del futuro de Silverlight, de la mano de los intensos avances que hemos tenido en HTML5 tras la persecución de nuestra meta de ser los mejores implementadores de HTML5 en el mercado; cosa que ya estamos logrando con resultados muy positivos aún en pruebas tan estrictas y objetivas como la de W3C en la cual estamos en el primer lugar con Internet Explorer 9 en el Platform Preview número 6.

    1. Primero comencemos por lo sucedido en el PDC:

    No se mencionó mucho, la verdad… pero son de esas cosas que pasan. Silverlight va por su buen camino al éxito y para este evento desafortunadamente no hubo un nuevo release. Pero señores: En qué tecnología se hizo el streaming del evento? No fue exitosa esta transmisión? Todo el mundo pudo estar siguiéndolo en tiempo real gracias a Silverlight. Con un reproductor inigualable que difícilmente se puede lograr usando mero HTML5 en el cual podíamos ecoger hasta el audio de la traducción simultánea o intercambiar entre la presentación y el speaker para ver a uno u otro más grande. Todo esto apoyado por el Smooth Streaming de IIS7 que nos permite ver videos Silverlight aún en dispositivos que no aceptan ni siquiera Flash como el IPhone (si tienes IPhone chequea: http://iis.net/iphone para comprobarlo). Si quieren crear reproductores tan avanzados como este lo pueden hacer sin ningún problema gracias a que hay todo un framework gratuito y disponible para generarlos muy fácilmente: Silverlight Media Framework 2.0

    image

    2. Cuál es la experiencia de cliente más enriquecida posible?

    Es Silverlight. Microsoft que es quien ha avanzado más en el tema de HTML5, aún no logra toda la versatilidad que tiene Silverlight y de hecho no lo hará, porque HTML5 siempre tendrá la desventaja de tener que reducir sus funcionalidades a un mínimo común denominador, para permanecer estándar. Y esto sucederá con todos los proveedores de HTML5.

    Hoy en día. Silverlight provee experiencias Premium en cuanto al manejo multimedia que difícilmente se podrán encontrar en HTML5 como estándar pasados varios años:

    • Teleconferencia con webcam/micrófono
    • Aplicaciones de Video por demanda con funcionalidad DVR y protección de contenido (Netflix servicio del que soy asiduo y feliz usuario ya que me deja ver todas las películas que quiero como si estuviera alquilando DVDs, pero a través de Internet usando Silverlight)
    • Transmisión completa de eventos masivos como el PDC o los Olímpicos de Invierno en 2010 que soportaron hasta 130.000 usuarios concurrentes viendo en promedio 111 minutos de video High Definition de 720p en vivo y en directo por visita., sumando un total de 4.8 millones de visitas durante las transmisiones y todo esto desarrollado solo en dos semanas… podrá HTML5 llegar a esto poniendo de acuerdo a todos los participantes de la industria? De hecho no se de un caso similar a este logrado con Flash… ustedes sí? Les agradecería me informen…
    • Por si fuera poco, estas transmisiones se pueden emitir a computadores de escritorio como aplicaciones únicas o como embebidas en el browser, a WP7, a IPhone y IPads y hasta a la XBOX, en el caso de Netflix. (HTML5 por definición nunca se acercará a eso)


      • Otros elementos no contemplados en el road map de HTML5 y que Silverlight sí soporta:
        • Video de Alta definición (HD) H.264 and VC-1
        • Protección de contenidos con DRM
        • Video estereoscópico 3D (con el que se transmitió la Nascar Sprint Cup Series de este año en compañía de los desarrollos tecnológicos de NVIDIA 3D Vision) y a través del cual lo usuarios pudieron experimentar video 3D real dentro de su browser, abriendo una posibilidad sin precedentes a nuevos canales y formas de transmisión.
        • Multicast
        • Soporte a broadcasting en vivo
        • Smooth Streaming (transmisión de video que se adapta a las condiciones de red para no producir cortes en los videos)
        • Picture in Picture
        • Soporte a herramientas de análisis que permiten integrar inteligencia de negocio dentro de las aplicaciones Silverlight gracias al Silverlight Analytics Framework

    • Multi hilos para el manejo de la respuesta de interfaz de usuario
    • 3D en perspectiva
    • Los mejores diseñadores y herramientas: Expression Blend, Visual Studio.

    • Para aplicaciones empresariales:
      • Más de 60 controles pre construidos
      • Herramientas y frameworks de productividad (RIA Services)
      • Aprovechamiento del gran performance de .NET y C#
      • Controles de visualización de datos súper avanzados como el Silverlight PivotViewer
      • Soporte flexible a datos: Databinding a objetos de memoria, XML, XML binario, LINQ, Storage Local

    • Impresión Virtualizada
    • Manejo de COM!!!

    Otros escenarios más simples sí son soportados por ambas tecnologías sin problemas… pero que hay del rendimientos y la calidad?

    Rendimiento:

    clip_image001

    Silverlight es el runtime más veloz en la web gracias a estar basado en el CLR.

    Calidad:

    Miren como se ve la misma figura trazada con HTML5 en varios browsers

    clip_image002

    Tiempo:

    clip_image004

    En mucho menos tiempo del que HTML5 ha estado en desarrollo sin ni siquiera la primera versión, Silverlight ha sacado a flote 4 versiones y aún hoy en día sigue sin conocerse cuando se oficializará HTML5 y de acuerdo a todo lo que se necesita para lograrlo, todavía falta más que un poco.. mientras tanto Silverlight seguirá en producción activo en los sistemas operativos y browsers más populares y progresando cada vez más.

    Más allá del Browser:

    Silverlight no es solo un plugin… es todo un concepto y una plataforma para lograr interoperabilidad no solo a nivel de sistemas operativos o browser, sino de dispositivos también. Silverlight se puede hospedar en el browser o fuera de él como una aplicación de escritorio no solo en Windows sino en MAC o Linux. Soporta todos los browsers más populares y por si fuera poco, es la plataforma de desarrollo para el Windows Phone 7 y el futuro es muy prometedor para otras plataformas, como los mismos dispositivos para nuestras salas de estar, por no decir televisores que reproducirán contenido Silverlight gracias a tecnologías ya existentes como Systems-on-a-chip (SoC) que nos han permitido generar demos completamente funcionales con TVs, BluRay y otros dispositivos de consumidor final.

    Así que si como desarrollador tú aprendes Silverlight, de inmediato de conviertes en un desarrollador para móviles y para electrodomésticos de consumo masivo, uniéndote a los más de 600.000 desarrolladores en el mundo que saben programar con esta tecnología que ya está en cerca del 65% (a pesar de su corto tiempo de vida) de las máquinas en el mundo: 600.000.000.

    Si todo esto es tan maravilloso, entonces por qué nos enfocamos en HTML5?

    La cantidad de dispositivos diversos en el mundo está creciendo exponencialmente. Así que tener una implementación “propietaria” en todos es casi imposible. En este caso es mucho más conveniente que todos esos dispositivos estén preparados para ejecutar un estándar global como lo pretende ser HTML5. Como tarde o temprano esto va a suceder, Microsoft se ha propuesto ser el mejor implementador de este estándar para cuando esto suceda; pero recordemos que alcanzar un nivel de estandarización tan alto requiere que la tecnología se baje a un mínimo común denominador… que en el caso de HTML5 no es tan mínimo pues la idea es que soporte muchas funcionalidades de presentación gráfica avanzada, pero que comparadas con las que tiene Silverlight, son muy difíciles de igualar.

    En palabras de Muglia “Silverlight nunca ha querido reemplazar a HTML en ninguna de sus versiones, pero su objetivo sí es hacer las cosas que no puede hacer HTML y otras tecnologías y hacerlo en una manera que es muy fácil e implementar para los desarrolladores. Hoy en día está instalado en 2/3 de los computadores del mundo y 600.000 desarrolladores la usan actualmente. No se equivoquen, nosotros continuaremos invirtiendo en Silverlight y habilitando a los desarrolladores para construir aplicaciones grandiosas con esta tecnología en el futuro… bob”.

    Go Silverlight, go! ( hand in hand with HTML5 Winking smile)

  • WarNov Developer Evangelist

    Windows 8 en las ediciones que deberían ser

    • 14 Comments

    Ya en este punto sabemos mucho del mundo de nuevas cosas que se vienen con Windows 8.

    Comencemos citando entonces que tendremos dos grandes divisiones en las que tendremos Windows 8. La x86/64 y la WOA (Windows on ARM –los procesadores de bajo consumo energético). En ambas se podrán usar touchscreens, así como mouse y teclado cuando se desee.

    Así que para x86/64 el nombre del OS será Windows 8. Y para estos sistemas, tendremos sólo 2 versiones: Windows 8 y Windows 8 Pro. La primera para uso de hogares y pequeñas empresas y la segunda para usos más profesionales con integración a dominios y demás (Ver al final la tabla de características)

    Para el mundo de WOA llega Windows RT como el nuevo miembro de nuestra familia Windows. Y sólo estará disponible pre-instalada en PCs y tablets que tengan procesadores ARM. Vendrá con versiones optimizadas para touch de Microsoft Word, Excel, PowerPoint y OneNote.

    Aquí les muestros las características especiales que podremos encontrar en cada edición.

    Característica

    Windows 8

    Windows 8 Pro

    Windows RT

    Upgrades from Windows 7 Starter, Home Basic, Home Premium

    x

    x

     

    Upgrades from Windows 7 Professional, Ultimate

     

    x

     

    Start screen, Semantic Zoom, Live Tiles

    x

    x

    x

    Windows Store

    x

    x

    x

    Apps (Mail, Calendar, People, Messaging, Photos, SkyDrive, Reader, Music, Video)

    x

    x

    x

    Microsoft Office (Word, Excel, PowerPoint, OneNote)

       

    x

    Internet Explorer 10

    x

    x

    x

    Device encryption

       

    x

    Connected standby

    x

    x

    x

    Microsoft account

    x

    x

    x

    Desktop

    x

    x

    x

    Installation of x86/64 and desktop software

    x

    x

     

    Updated Windows Explorer

    x

    x

    x

    Windows Defender

    x

    x

    x

    SmartScreen

    x

    x

    x

    Windows Update

    x

    x

    x

    Enhanced Task Manager

    x

    x

    x

    Switch languages on the fly (Language Packs)

    x

    x

    x

    Better multiple monitor support

    x

    x

    x

    Storage Spaces

    x

    x

     

    Windows Media Player

    x

    x

     

    Exchange ActiveSync

    x

    x

    x

    File history

    x

    x

    x

    ISO / VHD mount

    x

    x

    x

    Mobile broadband features

    x

    x

    x

    Picture password

    x

    x

    x

    Play To

    x

    x

    x

    Remote Desktop (client)

    x

    x

    x

    Reset and refresh your PC

    x

    x

    x

    Snap

    x

    x

    x

    Touch and Thumb keyboard

    x

    x

    x

    Trusted boot

    x

    x

    x

    VPN client

    x

    x

    x

    BitLocker and BitLocker To Go

     

    x

     

    Boot from VHD

     

    x

     

    Client Hyper-V

     

    x

     

    Domain Join

     

    x

     

    Encrypting File System

     

    x

     

    Group Policy

     

    x

     

    Remote Desktop (host)

     

    x

     

    Si no lo has visto en acción, dascarga una version de prueba de aquí!

    Nota: Para las empresas con SOftware Assurance,  como siempre tendremos la versión Windows 8 Enterprise, con aún más features para el manejo corporativo.

  • WarNov Developer Evangelist

    Windows 8 Surface Tablet/PC

    • 13 Comments

    UPDATE: Ya tenemos disponible el video del Keynote del lanzamiento de la Surface ayer en los Ángeles. Aquí esta:

     

    Ahora, un video de la tablet, porque vale mucho más que miles de palabras!!!

    Ahora imágenes! Muchas imágenes!

    Microsoft Surface

    La Surface, no viene con un docking. Viene con un forro que incluye teclado y pad multitouch (Touch Cover)! Además tiene un soporte en la parte trasera, que permite ajustar el ángulo de visualización.

    Microsoft Surface

     

    Microsoft Surface

    Microsoft Surface

    Microsoft Surface

    Microsoft Surface

    Forros con colores para todas las personalidades

    Un diseño sin precedentes!!!

    También se puede incluir un Type Cover que trae un teclado más físico que el del Touch Cover.

    El mejor tamaño que puede haber para una tablet de este estilo!

    No les  inspira rediseñar su espacio en torno a este aparato?

     

     

    El VaporMg Case es una total innovación que brinda elegancia, comodidad y ligereza gracias al magnesio con el que está construido.

    Todo el poder para una conectividad real!

     

    Que más hay que decir, que toda esta maravilla fue develada hoy a las 6.45pm hora Colombiana en Los Angeles, en un sitio que no fue develado sino hasta el día de hoy, a un grupo de selectos periodistas y bloggers quienes fueron avisados del evento solo hasta el viernes pasado.

    La Microsoft Surface Tablet, vendrá en dos versiones. Aquella para Windows RT,  y aquella para Windows 8 Pro. Se diferencian básicamente en la cantidad de espacio en disco (SSD): 64Gb máx y 128Gb max, la pro vendrá con un Stylus especial, el tipo de pantalla y sobretodo el procesador. la primera vendrá con ARM y la segunda con el Ivy Bridge de GBIntel, l que presumiblemente nos permitirá seguir teniendo el desktop tradicional.

    Otras especificaciones:

    Surface for Windows RT

    • OS: Windows RT

    • Light: 676 g

    • Thin: 9.3 mm

    • Clear: 10.6” ClearType HD Display

    • Energized: 31.5 W-h

    • Connected: microSD, USB 2.0, Micro HD Video, 2x2 MIMO antennae

    • Productive: Office ‘15’ Apps, Touch Cover, Type Cover

    • Practical: VaporMg Case & Stand

    • Configurable: 32 GB, 64 GB

    Surface for Windows 8 Pro

    • OS: Windows 8 Pro

    • Light: 903 g

    • Thin: 13.5 mm

    • Clear: 10.6” ClearType Full HD Display

    • Energized: 42 W-h

    • Connected: microSDXC, USB 3.0, Mini DisplayPort Video, 2x2 MIMO antennae

    • Productive: Touch Cover, Type Cover, Pen with Palm Block

    • Practical: VaporMg Case & Stand

    • Configurable: 64 GB, 128 GB

     

           

    Se espera la llegada de la Surface Windows RT en el RTM de Windows 8 y la Windows 8 Pro, aparecerá tres meses después.

    Mañana mismo podremos ver el video del lanzamiento aquí.

    Para terminar, solo me resta citar unas palabras:

    “I love this company.

    I love that we have brilliant engineers with brilliant ideas. I love that we aren’t afraid to make big bold bets. I love that we are persistent – after all it’s our passion and tenacity that bring our dreams to life. And right now, I love how so much of our hard work, passion and tenacity are coming together in the products we are bringing to market…

    … I’m incredibly proud of the work this company is doing and incredibly optimistic for what’s ahead. “

    Steve Ballmer,  al equipo de Microsoft.

  • WarNov Developer Evangelist

    Conviértete en un Microsoft Community Specialist (Beta Program)

    • 12 Comments

    Abierta la convocatoria únicamente para personas que deseen ser MCS en Infraestructura. En este caso, enviar sus correos a itprocol@microsoft.com!!!

    Microsoft Community Specialist (MCS) es un nuevo programa creado por el Developer Evangelist de Microsoft Colombia (por ahora solo aplica en Colombia) para entusiastas de nuestras tecnologías que aparte de el gran provecho que toman de ellas, están interesados en compartir ese conocimiento con la comunidad y además acceder a un conjunto de beneficios adicionales que desde Microsoft les reconocemos por su invaluable labor. Es un programa basado en puntos. Estos puntos se ganan por actividades ejecutadas y representan ascensos en una distribución de tres niveles y también premios y regalos que incluyen Hardware Microsoft (XBOX, Kinect, Wndows Phone 7, Headsets, Mouse Presenter, etc.), participación VIP en nuestros eventos y cursos, vouchers de certificación y mucha visibilidad en la industria y al interior de Microsoft.

    clip_image002

    Por qué Beta?

    1. Porque existen muchas situaciones que es posible que sean difíciles de detectar antes de poner en marcha el programa.
    2. Porque se requiere rapidez y agilidad para salir con el programa
    3. Porque se espera que el programa evoluciones sobre la marcha y ofrezca más beneficios para todos.

    Beneficios generales del programa

    La primera vez que una persona ingresa a nuestro programa, recibe como mínimo estos beneficios por pertenecer al mismo. Si una persona al ingresar por primera vez a nuestro programa entra a un nivel más avanzado, recibe estos beneficios más los adicionales que se describen en cada nivel de MCS.

    1. Kit de Bienvenida

      1. Carnet virtual de Membrecía
      2. Gorra
      3. Camiseta
      4. Libros Digitales

    Este kit solo se da la primera vez que un usuario está en un nivel.

    2. Plan de capacitación técnica (autoestudio)
    3. Acceso a los cursos de capacitación técnica dirigidos por expertos de Microsoft o sus partners que programe la subsidiaria
    4. Curso de capacitación en temas alternos
    1. Oratoria y presentación en público
    2. Ventas
    3. Expresión Escrita
    5. Reuniones sociales con el grupo de entusiastas

    XBOX, cata de vinos, pizza, etc.

    6. Ubicaciones preferenciales en eventos de Microsoft Colombia

    7. Visibilidad ante partners y clientes de Microsoft
    Este es uno de los beneficios más importantes pues Microsoft mismo recomienda a sus especialistas ante clientes y otros partners que acuden a nosotros en búsqueda de profesionales que les ayuden a resolver sus necesidades en tecnología.

    Compromisos generales del Programa

    El único compromiso requerido, es mantener mínimo un balance de 500 puntos MCS al trimestre. Excepto cuando el especialista es MVP. Los MVPs automáticamente se ubican en el nivel Gold y permanecen en este siempre y cuando mantengan su calidad de MVP. Si la pierden, deberán demostrar un balance de 500pts. Para mantenerse en el nivel. Cuando no se demuestre este balance de puntos, se descenderá un nivel en el programa. Y si un especialista en nivel member no lo demuestra, tendrá que aplicar de nuevo al programa para ser aceptado.

    Cómo se accede al programa?

    1. Por invitación de un Evangelist de Microsoft
    2. Solicitando ser incluido o por invitación de un MCS

    a. Se envía un correo a devcol@microsoft.com indicando el deseo de participar y la o las tecnologías sobre las cuales se posee conocimiento y se desea hacerse especialista

    b. Se entra a un período de prueba despues del cual se envía un reporte de actividades al Evangelist. Este reporte es evaluado para determinar si es aceptada la persona como MCS. Se puede requerir de una reunión adicional entre el Evangelist y el postulado para la aceptación.Además se hace una entrevista con el Evangelist para determinar el nivel al que se ingresaría, pues de acuerdo al nivel de especialización, se podría entrar de inmediato al nivel Silver.

    Capacidades comunicativas de un MCS

    Un MCS puede serlo solo teniendo buenas capacidades de comunicación escrita, a través de blog posts o foros. Es un valor agregado importante claro está, si es una persona a quien le gusta mucho grabar videos en los que oralmente explica un tema y más aún si se siente cómodo y expresa muy bien sus ideas en eventos presenciales.

    Niveles de Conocimiento

    El Nivel de Conocimiento en una tecnología dada, en Microsoft se mide desde 0 donde no se sabe nada a 400 donde se es experto. El nivel 100 indica que una persona tiene un conocimiento básico de la herramienta/tecnología. 200 indica que la persona puede trabajar con esa herramienta/tecnología. 300 indica que la persona domina esa herramienta/tecnología y el 400 como se especificó indica que la persona es experta.

    Niveles de un MCS

    El programa MCS tiene tres niveles de acuerdo al grado de especialidad y colaboración del especialista.

    image

    Cada nivel tiene un conjunto de requisitos para recibir en él a algún integrante. De igual manera ofrece un regalo de bienvenida y beneficios distintos. Así mismo, el programa de niveles maneja un esquema de puntos para permitir la graduación de nuestros especialistas así como el reconocimiento a sus actividades.

    Member

    Este es el nivel de entrada al programa MCS. Son candidatos estándar para pertenecer a él Microsoft Student Partners (MSPs). Desarrolladores Junior y en general entusiastas que estén comenzando con nuestras tecnologías. Requiere Un conocimiento Nivel 100 en una o más de nuestras tecnologías/herramientas. A parte de todas las colaboraciones libres hechas en foros, blogs, webcasts, etc., el especialista puede ganar puntos y visibilidad profesional ya que Microsoft lo recomendaría para eventos académicos, o aquellos en los que el nivel de conocimiento no deba ser muy profundo. Esto garantiza que podemos ir ofreciendo oportunidades de experiencia para que el especialista pueda ir ascendiendo en el programa.

    Kit de Bienvenida

    El mismo que se describe en los beneficios generales.

    Silver

    Aquí tenemos a especialistas que ya llevan un tiempo trabajando con nosotros, o que tienen un conocimiento entre 200 y 300 de sus tecnologías elegidas. A parte de todas las colaboraciones libres hechas en foros, blogs, webcasts, etc., el especialista puede ganar puntos y visibilidad profesional ya que Microsoft lo recomendaría para eventos académicos, visitas a clientes, ejecución de proyectos y demás que requieran un nivel de conocimiento 200-300. Esto garantiza que podemos ir ofreciendo oportunidades de experiencia para que el especialista pueda luego ascender al tope de nuestro programa.

    Kit de Bienvenida

    El mismo que se describe en los beneficios generales y adicionalmente: Un elemento de Hardware de Microsoft (cámara, headset, mouse) + Suscripción a MSDN por un año.

    Gold

    Aquí tenemos al top de nuestros especialistas que ya llevan un tiempo trabajando con nosotros, o que tienen un conocimiento entre 300 y 400 de sus tecnologías elegidas o que tienen el distintivo de MVP. A parte de todas las colaboraciones libres hechas en foros, blogs, webcasts, etc., el especialista puede ganar puntos y visibilidad profesional ya que Microsoft lo recomendaría para eventos académicos, visitas a clientes, ejecución de proyectos y demás que requieran un nivel de conocimiento 300-400. Esto garantiza que podemos ir ofreciendo oportunidades de experiencia para que el especialista si no lo es, se pueda convertir en un MVP o llegar a tal punto que pueda trabajar como consultor independiente.

    Kit de Bienvenida

    El mismo que se describe en los beneficios generales y adicionalmente: Un elemento de Hardware de Microsoft (cámara, headset, mouse) + Suscripción a MSDN por un año + Nominación MVP

    Cómo ganar puntos?

    1. Eventos, webcasts online, MSDN/TECHNET Onsite, Capacitaciones: 200 puntos por hora
    2. Posts / Webcasts on demand: 50 puntos
    3. Bono por cada 200 seguidores en twitter: 25 puntos
    4. Bono por cada 400 seguidores en fb: 25 puntos
    5. Lograr una certificación: 500 puntos
    6. Asistir como invitado a un curso de capacitación: 100 puntos
    7. Completar un Learning Path: 200 puntos

    clip_image002[6]

    Condiciones para ascender

    Si un MCS hace al menos 3000 puntos en un trimestre, se convierte automáticamente en candidato de ascenso. El comité de DPE en Microsoft estudiará su caso y aprobará su ascenso. De esta manera para ascender de Member a Silver se requiere tener mínimo 3000 puntos, de Silver a Gold se requieren mínimo 6000 puntos. Los puntos siempre se acumulan, de manera que a mayo experiencia y colaboración, más puntos.

    MCS Awards

    Cada trimestre se ejecutan los MCS Awards Q Edition; que premian a los contribuyentes más activos durante dicho trimestre. El especialista que haya acumulado más puntos en el trimestre se lleva un voucher de certificación y Microsoft Hardware. El segundo puesto, se lleva Microsoft Hardware.

    Además, al finalizar el año, se lleva a cabo el MCS Award Y Edition que premia al entusiasta con más puntos acumulados durante todo el año.

    Así que desde ahora están bienvenidos a postularse o recomendarle a alguien que piensen estaría agradado de estar en este rol. En poco tiempo comenzaremos los trabajos en el portal de MCS Colombia para tener plenamente identificados a todos nuestros miembros y establecer todo el Web 2.0 que se merecen.

    clip_image002[8]

  • WarNov Developer Evangelist

    Beneficios de Windows Azure para MSDN y Bizspark

    • 12 Comments

    Los suscriptores Premium, Ultimate y Bizspark de MSDN tienen 16 meses de suscripción gratuita a los servicios de Windows Azure. A partir de noviembre los suscriptores MSDN Professional también la tendrán.

    Qué se debe hacer? para activar este beneficio?

    Si usted es suscriptor a MSDN y aún no ha comenzado a disfrutar de este beneficio visite este sitio para conocer todos los detalles.

    image

    A continuación una guía detallada de cómo acceder a estos servicios:

    Podemos llegar hasta aquí desde MSDN a través de la suscripción a la que tengamos Acceso:

    image

    Luego de esto pasamos a esta pantalla. Dele un nombre a su futura cuenta de Windows Azure, lea y acepte los términos de servicios si lo desea y de clic en siguiente:

    image

    Después, introducimos nuestra identificación y datos de tarjeta de crédito (con fines de identificación personal, pues esta tarjeta no es cargada si los consumos se ajustan a lo establecido dentro de la oferta. Si los consumos exceden a los límite0s de la oferta, en ese caso sí serán cargados)

     image

    Finalmente, tras la validación de la tarjeta de crédito y nuestra identificación personal, pasamos a la confirmación de la adquisición de los servicios. Leemos el contrato de licencia y su deseamos hacemos la compra:

    image

    Esto nos lleva a la sección de Check Out donde se hace efectiva definitivamente la transacción. Chequeamos la marca en la que confirmamos que sabemos que si excedemos los límites de la oferta, estos serán cargados a la tarjeta de crédito:

    Nos aparece entonces una confirmación como esta. Aquí confirmamos la orden.

    9. En la siguiente pantalla, activamos el servicio:

    Aquí se nos confirman los datos de nuestra suscripción y damos Finalizar:

    Luego recibiremos un mensaje de confirmación similar a este:

    Luego abrimos el portal del desarrollador de Windows Azure (http://windows.azure.com) usando el Live ID empleado para la suscripción y veremos nuestro nuevo proyecto de Azure listo para ser trabajado!

    Otra forma de llegar hasta la suscripción:

    1. Visite el portal de  servicios online de Microsoft (Microsoft Online Services Customer Portal (MOCP)). Cambie el país a Colombia, el idioma a español y haga clic en la opción continuar, para pasar a la página Primeros Pasos:

    .image

    En esta página haga Sign in con su Windows Live ID, y luego haga clic en el tab de Servicios  y allí haga click en Comprar ahora en la sección de ofertas especiales

     image

    image

  • WarNov Developer Evangelist

    Web Camp Colombia 2010

    • 12 Comments

    Las inscripciones para este evento ya están abiertas aquí

    Siento un gran agrado al poder estar organizando el primer evento en Colombia en el que estaremos tratando durante un día completo temas relacionados con desarrollo Web usando estándares y empleando tecnologías y herramientas de Microsoft que lo mejor de todo: SON GRATUITAS

    Los Web Camp son eventos patrocinados por Microsoft que se realizan por todo el mundo y en esta ocasión el turno le ha tocado a Colombia.

    Flair002Flair005

    Es así como el 30 de Noviembre en las instalaciones de Microsoft Bogotá, estaremos llevando a cabo este evento todo el día en en 6 salas distintas simultáneamente, desarrollando un track diferente en cada una de ellas:

    1. WebPI: WebMatrix y CMS Kentico
    2. Windows Azure
    3. IE9 & HTML5
    4. MVC2
    5. REST+JQuery+OData
    6. ASP.NET4

    La parte teórica de los tracks será transmitida gratuitamente vía LiveMeeting a través de 6 hilos de transmisión distintos.

    La jornada que comienza a las 8.30am con el registro y se prolonga hasta las 4pm, se divide en dos grandes etapas: La primera comprende presentaciones teóricas y demos y la segunda comprende laboratorios guiados en los que los asistentes podrán practicar todo lo aprendido con la guía del speaker especialista. Por este motivo, es recomendable que los asistentes permanezcan en un solo track durante todo el día.

    Tendremos la siguiente agenda tentativa para cada uno de los tracks:

     

    Flair001

    8.30 – 9.00 Registro
    9.00 – 10.40 Primera Charla
    10.40 – 11.00 Break (Incluido)
    11.00 – 12.00 Segunda Charla
    12.00 – 13.00 Almuerzo (Incluido)
    13.00 – 15.45 Laboratorios
    15.45 – 16.00 Evaluación Evento y Cierre

     

     

    Como ven, habrá break y almuerzo incluido y es necesario traer laptop para los laboratorios. Posteriormente cuando abramos las inscripciones para el evento, especificaremos los requerimientos necesarios para cada track. Por si fuera poco, para los emprendedores vamos a tener la posibilidad de entrar en los programas de emprendimiento de Microsoft llamados WebSiteSpark y BizSpark a través de los cual tendremos acceso a licencias de herramientas Microsoft para el desarrollo de aplicaciones web, soporte y visibilidad.

    WebSiteSpark:

    BizSpark:

     

    Nuestro Request for Speakers ya ha cerrado y estos son los confirmados:

    JQuery, REST, JSON

    Frank Silva

    Windows Azure

    Gerardo Ramos

    IE9, HTML5, CSS3

    Juan Carlos Ruiz Pacheco

    MVC 2 (3)

    Hugo Zapata

    ASP.NET 4

    Roberto Alvarado

    WebPi: WebMatrix y Kentico

    Marylin Alarcón

     
    Las inscripciones para este evento ya están abiertas aquí
     


  • WarNov Developer Evangelist

    Breve Historia del Framework .NET

    • 11 Comments

    Otra de las preguntas frecuentes que tengo por ahí generalmente de personas que aún tienen que trabajar con desarrollos .net de legado (versión < 4.0), es: cuáles son las ventajas de hacer el cambio, sobre todo para tratar de convencer a sus líderes, para migrar.

    Lastimosamente ocurre una situación bastante particular, y es que cada versión del Framework ha hecho su trabajo muy bien. Así que una vez se termina una aplicación en determinada versión del Framework, no se ve la necesidad de evolucionar. Pero luego nos damos cuenta de que empezamos a limitar las implementaciones avanzadas que podríamos hacer a las que sí tendríamos acceso con la última versión.

    Es por esto que escribo este post, en el que hago un recorrido por la historia del Framework para que podamos ver rápidamente de qué nos estamos perdiendo, de acuerdo a la versión del Framework que tengamos instalada.

    • .NET Framework 1.0:
      • Liberado el 13 de Febrero de 2002 para Win98, Me, NT 4.0, 2000 y XP. Su soporte terminó en Julio de 2007 y el soporte extendido en 2009.
    • .NET Framework 1.1
      • Publicada en Abril de 2003 junto con el segundo reléase de Visual Studio .NET (2003). Fue la primera versión incluida como parte de un sistema operativo (Windows Server 2003). Su soporte terminó en octubre de 2008 y el extendido termina en octubre de 2013 (así que mejor vayan pensando en migrarse).
      • Mejoras:
        • Los controles ASP.NET que en el 1.0 eran un Addon ahora vienen nativos.
        • Seguridad mejorada con Code Access Security para ASP.NET
        • Soporte nativo para ODBC y Oracle
        • Nacimiento del .NET Compact Framework
        • Soporte a IPV6
        • Cambios numerosos en las APIs.
    • .NET Framework 2.0
      • Liberado con Visual Studio 2005, SQL Server 2005 y BizTalk 2006. El primero en incluirse automáticamente en las instalaciones de SQL Server. Sin ningún Service Pack, fue la última versión en soportar Win98 y Me. Luego vino el SP 2 y con éste, fue la última versión en soportar Windows 2000.
      • Mejoras:
        1. Los fabulosos Generics
        2. Soporte para compilaciones de 64 bits
        3. Numerosos cambios en las APIs
        4. Integración con SQL Server: CLR Integration
        5. Inclusión del Runtime de .NET en aplicaciones nativas.
        6. Nuevos y mejorados controles de ASP.NET
        7. Controles de Datos con Data Binding automático.
        8. Soporte para Temas, Skins y Webparts.
        9. Nacimiento del .NET Micro Framework.
        10. Clases Parciales!
        11. Tipos “Nullable” (por ejemplo enteros a los que se les puede dar el valor de nulo)
        12. Métodos Anónimos!
        13. Iteradores
        14. Tablas de Datos
    • .NET Framework 3.0
      • Conocido en sus comienzos como WinFX fue liberado en noviembre de 2006 e incluyó un nuevo conjunto de APIs hechas en código administrado que son parte integral de Windows Vista y Windows Server 2008. También está disponible para Windows XP SP2 y Windows Server 2003. No hubo mayores cambios arquitectónicos. De hecho, se usa el runtime del Framework 2.0. Aquí tampoco hubo liberación de Compact Framework.
      • Mejoras:
        • Windows Presentation Foundation (conocido antes como Avalon)
        • Windows Communication Foundation (conocido como Indigo)
        • Windows Workflow Foundation
        • Windows CardSpace (Conocido antes como InfoCard).
    • .NET Framework 3.5

       

    .NET Framework

     

    • Vio la luz en noviembre de 2007 pero no es incluida en Windows Server 2008. Modifica el CLR fundamental sobre el que se venía trabajando (2.0) para agregarle los métodos y propiedades requeridas sobre todo para LINQ. Aquí sí se liberó el Compact Framework 3.5. El código fuente de esta versión fue parcialmente liberado para conocimiento público con fines de depuración.
    • Mejoras:
      • Nuevas características de lenguaje en C#3.0 y VB.NET 9.0
      • Soporte para árboles de expresiones y expresiones y métodos lambda
      • Extension Methods!
      • Tipos Anónimos con inferencia estática de tipo
      • LINQ!
      • Soporte a paginación en ADO.NET
      • API de sincronización de ADO.NET
      • API de I/O asincrónico
      • PNRP Resolver (Peer-To-Peer)
      • Wrappers Administrados para instrumentación y Active Directory
      • Motores de WCF y WF mejorados que permiten el manejo de POX y JSON en WCF y también exponer WF como servicio. De esta manera, los servicios WCF se pueden mejorar con persistencia nativa de WF!
      • Soporte para pipeline de HTTP y sindicación de feeds.
      • ASP.NET Ajax ya no viene como un addon sino nativo.
    • Service Pack 1:
      • Liberado en agosto de 2008.
      • Performance mejorado para WPF en un 20-45%
      • Agregado el Entity Framework y los ADO.NET Data Services.
      • Agregados dos nuevos assemblies: System.Web.Abstraction y System.Web.Routing: Esenciales para el funcionamiento del MVC Framework. Incluyó un conjunto de controles de VisualBasic que se habían descontinuado como el Line y el Shape, en un conjunto llamado “Visual Basic Power Pack”. Viene con Windows 7 y Windows Server 2008 R2.
    • .NET Framework 3.5 SP1 Client Profile
      • Nace como una versión reducida del Framework con solo 28MB de tamaño, ideal para clientes inteligentes que no requieren todos los 250 MB del Framework completo.

     

    framework-net

     

    En la mayoría de casos (Excepto cuando se trata de pasar del 1.0 0 del 1.1 a cualquier otra versión del Framework) El paso es transparente y la migración no es muy compleja. Sin embargo es claro que siempre hay temores en las migraciones y puede hacerse complicado comenzar a disfrutar de las características de la última versión. Sin embargo, nada como estar trabajando con ella, de manera que ya vamos a tener disponibles todas las últimas características y sobretodo disfrutar de todas las nuevas tecnologías que siempre se enfocan a la última versión.

    Así que si no tiene el Framework 4.0. Que está esperando?

  • WarNov Developer Evangelist

    Resultados del ICFES: Ahora sobre Windows Azure

    • 11 Comments
     

    Es hasta el momento la aplicación más grande en el país, montada sobre Windows Azure y es para mí muy agradable declararla como mi primer pequeño hijo Azure, luego de linear la arquitectura de su funcionamiento y de haber pasado derecho 24 horas programándola. Esto, dado que empezar de ceros y terminar en tiempo record, pues existían ciertos problemas con la anterior plataforma entre ellos la incapacidad de re direccionar correctamente al sitio original del ICFES para mostrar información distinta a la de los resultados y también el precio que en total es más de 8 veces más alto que el logrado con Windows Azure (de cerca de US$25.000 pasamos a US$3000: exagerando)

    Todo comenzó con la noticia de que uno de nuestros principales socios de negocio certificados: ASESOFTWARE (CMMI 5) estaba interesado en desarrollar la plataforma que serviría para presentar los resultados del Examen de Estado ICFES a la nación colombiana (600.000 resultados). Al oír esto, de inmediato me desplacé a sus instalaciones para apoyarlos en este proceso.

    Fue una misión compleja. Estábamos sobre el tiempo y necesitábamos salir al aire lo más rápido posible. Sin embargo es esto mismo lo que demuestra las bondades de Azure, que nos permiten aprovechar todos los conocimientos que ya tenemos sobre .NET y sumados a algo de teoría de Cloud Computing nos permiten salir muy rápido a producción. Gracias al empeño y gran experiencia en desarrollo de ASESOFTWARE pudimos aprovechar y capitalizar todas estas ventajas.

    Básicamente necesitábamos subir esa gran cantidad de data a la nube, y crear una aplicación web bajo los lineamientos del ICFES para mostrarlos al público.

    image

    Análisis de la solución:

    Necesitábamos una capa de alimentación de datos, otra capa de negocio para implementar la lógica y finalmente una capa de presentación Web para los usuarios finales. Nótese que en este caso no necesitamos una capa de servicios, dado lo puntual de la solución. Si se hubiese necesitado igual no habría habido ningún problema porque Windows Azure está totalmente preparado para estos casos.

    Capa de Alimentación de Datos

    La decisión más simplista, hubiese sido usar SQL Azure y subir todos los datos a la Base de Datos en la nube. Esto se hubiese podido hacer con Integration Services y se hubiese podido obtener un resultado más que aceptable.

    Pero en Windows Azure existe el storage nativo en tablas no relacionales. Un tipo de almacenamiento que se ajusta perfectamente a requerimientos como este en el que solo es necesario tener datos estructurados que no se relacionan con tablas adicionales. Un claro ejemplo de una base de datos NOSQL. SQL Azure está más enfocado a servir como Base de Datos a aplicaciones altamente relacionales y transaccionales cuyo modelo de operación es difícilmente concebible con tablas sin integridad referencial (ERPs, CRMs, etc.) Entonces para qué incurrir en los altos costos de SQL Azure sin necesidad? SQL Azure es 66 veces más costoso que el almacenamiento en tablas de Windows Azure (US$0.15 por Gb por mes). Y esto es apenas lógico, dado que por debajo existe todo un motor relacional que administra la integridad referencial, la ejecución optimizada de consultas y un sinfín de aspectos adicionales.

    Esto, sin mencionar que las tablas tienen un rendimiento mayor a SQL Azure, dado que su acceso se hace directamente sin pasar por un motor de validaciones adicional. Y por otro lado, son altamente escalables, desde que una vez definida una columna de partición en nuestras tablas, Windows Azure encarga de distribuir automáticamente los datos en distintos nodos físicos, de manera que el acceso siempre es lo más optimizado posible. En este caso por ejemplo, hicimos particiones por colegios. Así que los resultados de cada colegio se almacenaron en una partición distinta sin mayor esfuerzo. Por si fuera poco, cada registro grabado en una tabla de Windows Azure, queda respaldado con otras dos copias de seguridad, para brindar redundancia. Esto se ejecuta sin costo alguno (tiempo, dinero, o programación) además sucede lo mismo con los blobs, las colas y el mismo SQL Azure.

    Así pues, procedí a crear un aplicativo Windows que tomaba la información de resultados del ICFES y la llevaba hasta la nube.

    Capa de Negocio y Presentación WEB

    El equipo de desarrollo de Asesoftware tomó una interfaz de acceso a datos Web que ya existía y le hizo la adaptación para consultar los datos de las tablas. Estos datos eran presentados en formato HTML y también sirvieron para construir un PDF que se distribuye a los usuarios de la aplicación que contiene el boletín con los resultados del examen. Estos PDFs luego de ser construidos, se almacenan en el espacio de BLOBs de Windows Azure, que también nos brinda unos costos súper bajos de almacenamiento (US$0.15 por Gb).

    En estas capas hubo que tener en cuenta ciertas consideraciones, como por ejemplo el manejo de las interfaces con los esquemas de almacenamiento de Windows Azure, los modelos de redirección de la aplicación al dominio original, etc. En general estrategias puramente técnicas que ya he publicado en mis artículos de Windows Azure dentro de este blog, o que estaré publicando próximamente.

    Solución Desplegada

    Siendo sinceros, esta solución fue desplegada en Azure con una estrategia de sobre-estimación dado que es la primera vez que se sale al aire con un proyecto de esta magnitud en el país y se quería prevenir cualquier eventualidad que pudiera dar una mala imagen de la plataforma. Fue así como la solución se desplegó en cuatro WebRoles de tamaño grande (CPU: 1.6Ghzx4, RAM: 1.7Gbx4) lo que al final nos da una capacidad de 25.6GHz de procesamiento en conjunto y 27.2GB de RAM. En realidad estimo que para la situación actual, sería suficiente con el 70% de esta capacidad. Pero gracias a los precios de Azure, se pudo establecer este esquema holgado, sin un mayor impacto a la inversión. Además, en las noches cuando hay menos carga, se bajan máquinas para disminuir los costos. Por eso, cuando hablé de un total de US$3000 para tener la aplicación desplegada durante una semana, dije que estaba exagerando. En realidad el costo es menor. Recuerden que el costo antes de Azure también por una semana estaba alrededor de los US$25.000!

    Conclusión

    Windows Azure permitió a ASESOFTWARE sacar en muy corto tiempo (contra reloj) una aplicación de consumo masivo para un gran cliente como lo es el ICFES que ha respondido y superado perfectamente sus expectativas, con unos costos muchísimo menores (8x) y también con la ventaja de que la solución final es totalmente dinámica en su despliegue permitiendo pagar solo lo que se consume, sin necesidad de contratos o tarifas planas que pueden generar desperdicios en la inversión de capital para el cliente.



  • 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

    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

    Codificando N Veces más rápido con Visual Studio

    • 9 Comments

    Video ultra rápido mostrándonos un tip súper cool de Visual Studio 2010. Say no more.

  • WarNov Developer Evangelist

    WebMatrix: Fast & Free Web Development

    • 9 Comments

     

    Update: Hoy 6 de Octubre salió al aire el Beta 2 de WebMatrix.  Se espera la versión final para fin de año. En conmemoración les comparto un libro que se está editando y nos enseña la sintaxis Razor, y además la presentación que uso cuando muestro este producto.

    Visual Studio .NET es la herramienta mas poderosa para desarrollar virtualmente cualquier tipo de aplicaciones para computadores.
    Pero cuando somos novatos en la programación, entrar a un Visual Studio a desarrollar se siente como meterse a la cabina de un Airbus A380 a pilotearlo…

    Para aprender a pilotear, sería mejor en un Cessna que tiene solo los controles básicos y nos permite ir aprendiendo sin abrumarnos con tantos controles.

    Hoy en día Microsoft tiene para nosotros un conjunto de herramientas GRATUITAS que nos permiten entrar al mundo de desarrollo Web de una manera bastante sencilla y rápida.

    WebMatrix

    Contiene todo lo necesario para desarrollar aplicaciones web:

    •Free

    •Liviano

    •IIS Developer Express como Servidor Web

    •ASP.NET como framework tecnológico ahora presentando a RAZOR: una sintaxis para programar de una manera más sencila

    •SQL Server® Compact como motor de base de datos

    •IDE para edición de páginas web.

    A continuación para mostrar la agilidad de la herramienta, les muestro un video en el cual construyo una aplicación que accede a Twitter y nos muestra el feed de una persona en particular. Más adelante vendrán más posts mostrando más características de WebMatrix.

    Update: Hoy 6 de Octubre salió al aire el Beta 2 de WebMatrix.  Se espera la versión final para fin de año. En conmemoración les comparto un libro que se está editando y nos enseña la sintaxis Razor, y además la presentación que uso cuando muestro este producto:

     

    Para aprender más de WebMatrix no se pierda nuestro Web Camp Colombia 2010.

  • WarNov Developer Evangelist

    NaCl: El Silverlight/Flash de Google?

    • 9 Comments

    En mi continuo transitar por las novedades tecnológicas (no sé a que hora visito tanto sitio…) Me encontré con que Google de una manera bastante discreta estaba lanzando una tecnología abreviada como la sal: NaCl. Acrónimo de Native Client.

    NaCl = Sal

    Native Client es una idea supernovedosa

    Con la cual de acuerdo a lo que encontramos en el sitio del proyecto, tenemos un fabuloso SDK que permitirá al browser ejecutar código nativo para construir aplicaciones web de alta respuesta e interactividad… (no les suena esto familiar?)

    Lo cual, me parece bastante curioso, dado todo lo que Google ha dicho acerca de su firme apoyo a HTML 5, que pretende solucionar el mismo tipo de problema.

    Dijo el vice presidente de ingeniería Vic Gundotra en el Google I/O de 2009: “HTML 5, will be the future of the web”.

    Y si es así? Para qué desgastarse tratando de implementar toda una tecnología para correr código nativo desde el browser? Sobretodo cuando se ha criticado al mismo tipo de tecnologías ya implementadas como Silverlight y Flash?

    Será que en el fondo no creen mucho en HTML5? O será que en el fondo creen mucho en tecnologías Silverlifght/Flash?

    NaCl tiene un SDK que funciona en Windows, Linux y Mac… Genial! Y lo mejor de todo, es que las aplicaciones las programaríamos en una suerte de sancocho (léase mescolanza o MIX para los más modernos) de CSS, HTML, Javascript y sí, el amigable C/C++! Todo para lograr que la aplicación no se vea como un frame embebido dentro del HTML, sino como puro HTML.

    Este C/C++ nos permitirá crear de una forma bastante sencilla gráficos en 2D/3D, ejecutar audio y responder a eventos del mouse y teclado!

    Pero…

    Cuál es el AS bajo la manga de Google que aventajará a Silverlight y Flash?

    Pues que no se requerirá plugin! No habrá que instalar nada!!!
    Bueno, excepto el propio browser de Google (Chromium). Entonces ha de ser que para ellos no existen más browsers :

    “all without requiring users to install a plugin. These web apps run in recent versions of Chromium with the --enable-nacl flag.”

    Bueno; pero pongamos esas des-virtudes a un lado y démosle una oportunidad de prueba; observemos cómo sería la programación. Primero, veamos cómo sería la página web que hospedaría la sal; digo, NaCl:

       1:  <!DOCTYPE html>
       2:  <html>
       3:    <!--
       4:    Copyright (c) 2010 The Native Client Authors. All rights reserved.
       5:    Use of this source code is governed by a BSD-style license that can be
       6:    found in the LICENSE file.
       7:    -->
       8:  <head>
       9:    <title>Hello, World!</title>
      10:   
      11:    <script type="text/javascript">
      12:      hello_world = null;  // Global application object.
      13:      status_text = 'NO-STATUS';
      14:   
      15:      function moduleDidLoad() {
      16:        hello_world = document.getElementById('hello_world');
      17:        updateStatus('SUCCESS');
      18:      }
      19:   
      20:      // If the page loads before the Native Client module loads, then set the
      21:      // status message indicating that the module is still loading.  Otherwise,
      22:      // do not change the status message.
      23:      function pageDidLoad() {
      24:        if (hello_world == null) {
      25:          updateStatus('LOADING...');
      26:        } else {
      27:          // It's possible that the Native Client module onload event fired
      28:          // before the page's onload event.  In this case, the status message
      29:          // will reflect 'SUCCESS', but won't be displayed.  This call will
      30:          // display the current message.
      31:          updateStatus();
      32:        }
      33:      }
      34:   
      35:      function fortytwo() {
      36:        try {
      37:          alert(hello_world.fortytwo());
      38:        } catch(e) {
      39:          alert(e.message);
      40:        }
      41:      }
      42:   
      43:      function helloworld() {
      44:        try {
      45:          alert(hello_world.helloworld());
      46:        } catch(e) {
      47:          alert(e.message);
      48:        }
      49:      }
      50:   
      51:      // Set the global status message.  If the element with id 'status_field'
      52:      // exists, then set its HTML to the status message as well.
      53:      // opt_message The message test.  If this is null or undefined, then
      54:      //     attempt to set the element with id 'status_field' to the value of
      55:      //     |status_text|.
      56:      function updateStatus(opt_message) {
      57:        if (opt_message)
      58:          status_text = opt_message;
      59:        var status_field = document.getElementById('status_field');
      60:        if (status_field) {
      61:          status_field.innerHTML = status_text;
      62:        }
      63:      }
      64:    </script>
      65:  </head>
      66:  <body onload="pageDidLoad()">
      67:   
      68:  <h1>Native Client Simple Module</h1>
      69:  <p>
      70:    <button onclick="fortytwo()">Call fortytwo()</button>
      71:    <button onclick="helloworld()">Call helloworld()</button>
      72:   
      73:    <!-- For development, use a #develop location, which loads the develop
      74:    version of the module.
      75:    -->
      76:    <div id="nacl_helloworld_content"></div>
      77:    <script type="text/javascript">
      78:      contentDiv = document.getElementById('nacl_helloworld_content');
      79:      if (window.location.hash == '#develop') {
      80:        // Load the develop version of the module.
      81:        contentDiv.innerHTML = '<embed name="nacl_module" '
      82:                               + 'id="hello_world" '
      83:                               + 'width=0 height=0 '
      84:                               + 'type="pepper-application/hello_world" />';
      85:        moduleDidLoad();
      86:      } else {
      87:        // Load the published .nexe.  This includes the 'nexes' attribute which
      88:        // shows how to load multi-architecture modules.  The relative URLs in
      89:        // the following table should be matched with a similar directory
      90:        // structure on your server.
      91:        var nexes = 'x86-32: hello_world.nacl/x86_32/hello_world.nexe; '
      92:                    + 'x86-64: hello_world.nacl/x86_64/hello_world.nexe; '
      93:                    + 'ARM: hello_world.nacl/arm/hello_world.nexe; ';
      94:        contentDiv.innerHTML = '<embed name="nacl_module" '
      95:                               + 'id="hello_world" '
      96:                               + 'width=0 height=0 '
      97:                               + 'src="hello_world.nexe" '
      98:                               + nexes
      99:                               + 'type="application/x-nacl-srpc" '
     100:                               + 'onload=moduleDidLoad() />';
     101:      }
     102:    </script>
     103:  </p>
     104:   
     105:  <p>If the module is working correctly, a click on the "Call fortytwo" button
     106:    should open a popup dialog containing <b>42</b> as value.</p>
     107:   
     108:  <p> Clicking on the "Call helloworld" button
     109:    should open a popup dialog containing <b>hello, world</b> as value.</p>
     110:   
     111:  <h2>Status</h2>
     112:  <div id="status_field">NO-STATUS</div>
     113:  </body>
     114:  </html>

    Bastante código para un Hello World no?

    Independientemente de eso, observemos la estructura. Básicamente se trata de una página web convencional, cuyo DOM es manejado por un Javascript que accede a un objeto embebido (finalmente si se embeben objetos) que es precísamente el gestor de NaCl, el cual carga archivos binarios de tipo “.nexe” escritos en C++ (Entonces lo que uno hace es indicar la ruta de dicho .nexe; muy parecido a Flash o Silverlight, donde uno indica la ruta del .xap). Hasta aquí noto algunas desventajas con Silverlight… por ejemplo, no se sabe si la página carga antes o después del NaCl; así que hay que escribir lógica adicional para cuando esto sucede. También tenemos que estar mezclando en todo lado Javascript, para traer los datos desde el NaCl al DOM de la página. Finalmente siempre tienen que diferenciarse las versiones de desarrollo de las de producción. En Silverlight, no hay tal diferenciación. Sin embargo, he de decir, que no son diferencias tan graves y que en el fondo el funcionamiento es muy similar, en cuanto a la idea como tal.

    Pero ahora veamos, cómo se programa la parte nativa de la aplicación.

    Como ya les había comentado, usamos el poderoso y amigable C/C++ para dicha programación.

    Luego de muchos tropiezos, por fin logré sacar el código que me daría un mensaje de texto que diría Hello World, el cual se transfiere a la página a través de Javascript y se muestra en un ‘alert´.

    Veamos el código:

       1:  // Copyright 2008 The Native Client Authors. All rights reserved.
       2:  // Use of this source code is governed by a BSD-style license that can
       3:  // be found in the LICENSE file.
       4:   
       5:  #include <stdbool.h>
       6:  #include <stdio.h>
       7:  #include <stdlib.h>
       8:  #include <string.h>
       9:   
      10:  #if defined(__native_client__)
      11:  #include <nacl/nacl_npapi.h>
      12:  #else
      13:  // Building a develop version for debugging.
      14:  #include "third_party/npapi/bindings/npapi.h"
      15:  #include "third_party/npapi/bindings/nphostapi.h"
      16:  #endif
      17:   
      18:  // These are the method names as JavaScript sees them.
      19:  static const char* kHelloWorldMethodId = "helloworld";
      20:   
      21:  // This function creates a string in the browser's memory pool and then returns
      22:  // a variable containing a pointer to that string.  The variable is later
      23:  // returned back to the browser by the Invoke() function that called this.
      24:  static bool HelloWorld(NPVariant *result) {
      25:    if (result) {
      26:      const char *msg = "hello, world.";
      27:      const int msg_length = strlen(msg) + 1;
      28:      // Note: |msg_copy| will be freed later on by the browser, so it needs to
      29:      // be allocated here with NPN_MemAlloc().
      30:      char *msg_copy = reinterpret_cast<char*>(NPN_MemAlloc(msg_length));
      31:      strncpy(msg_copy, msg, msg_length);
      32:      STRINGN_TO_NPVARIANT(msg_copy, msg_length - 1, *result);
      33:    }
      34:    return true;
      35:  }
      36:   
      37:  static NPObject* Allocate(NPP npp, NPClass* npclass) {
      38:    return new NPObject;
      39:  }
      40:   
      41:  static void Deallocate(NPObject* object) {
      42:    delete object;
      43:  }
      44:   
      45:  // Return |true| if |method_name| is a recognized method.
      46:  static bool HasMethod(NPObject* obj, NPIdentifier method_name) {
      47:    char *name = NPN_UTF8FromIdentifier(method_name);
      48:    bool is_method = false;
      49:    if (!strcmp((const char *)name, kHelloWorldMethodId)) {
      50:      is_method = true;
      51:    } else if (!strcmp((const char*)name, kFortyTwoMethodId)) {
      52:      is_method = true;
      53:    }
      54:    NPN_MemFree(name);
      55:    return is_method;
      56:  }
      57:   
      58:  static bool InvokeDefault(NPObject *obj, const NPVariant *args,
      59:                            uint32_t argCount, NPVariant *result) {
      60:    if (result) {
      61:      NULL_TO_NPVARIANT(*result);
      62:    }
      63:    return true;
      64:  }
      65:   
      66:  // Invoke() is called by the browser to invoke a function object whose name
      67:  // is |method_name|.
      68:  static bool Invoke(NPObject* obj,
      69:                     NPIdentifier method_name,
      70:                     const NPVariant *args,
      71:                     uint32_t arg_count,
      72:                     NPVariant *result) {
      73:    NULL_TO_NPVARIANT(*result);
      74:    char *name = NPN_UTF8FromIdentifier(method_name);
      75:    if (name == NULL)
      76:      return false;
      77:    bool rval = false;
      78:   
      79:    // Map the method name to a function call.  |result| is filled in by the
      80:    // called function, then gets returned to the browser when Invoke() returns.
      81:    if (!strcmp((const char *)name, kHelloWorldMethodId)) {
      82:      rval = HelloWorld(result);
      83:    } else if (!strcmp((const char*)name, kFortyTwoMethodId)) {
      84:      rval = FortyTwo(result);
      85:    }
      86:    // Since name was allocated above by NPN_UTF8FromIdentifier,
      87:    // it needs to be freed here.
      88:    NPN_MemFree(name);
      89:    return rval;
      90:  }
      91:   
      92:  // The class structure that gets passed back to the browser.  This structure
      93:  // provides funtion pointers that the browser calls.
      94:  static NPClass kHelloWorldClass = {
      95:    NP_CLASS_STRUCT_VERSION,
      96:    Allocate,
      97:    Deallocate,
      98:    NULL,  // Invalidate is not implemented
      99:    HasMethod,
     100:    Invoke,
     101:    InvokeDefault,
     102:    NULL,  // HasProperty is not implemented
     103:    NULL,  // GetProperty is not implemented
     104:    NULL,  // SetProperty is not implemented
     105:  };
     106:   
     107:  NPClass *GetNPSimpleClass() {
     108:    return &kHelloWorldClass;
     109:  }

    Cristalino no?

    Y solo para un “Hello World!“


    Ahora veamos lo mismo con Silverlight

       1:  using System;
       2:  using System.Windows;
       3:  using System.Windows.Controls;
       4:   
       5:   
       6:  namespace HelloSilverlight
       7:  {
       8:      public partial class MainPage : UserControl
       9:      {
      10:          public MainPage()
      11:          {
      12:              // Required to initialize variables
      13:              InitializeComponent();
      14:          }
      15:   
      16:          private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
      17:          {
      18:              MessageBox.Show("Hello World");
      19:          }
      20:      }
      21:  }

    Bueno; el código habla por sí solo!!!

    Por si fuera poco, observemos el tamaño del ejecutable que finalmente tiene que descargar el usuario:

    NaCl:

    image

    Silverlight:

    image

    Hum… 1143 veces menor

    Bueno; a favor de Google digamos que esta es la primera muestra en público de la plataforma y que todavía no está en producción. Pero que o recuerde, Silverlight en sus primeras apariciones no tenía esos inconvenientes.. yo creo que deberían refinar un poco más el producto a mostrar, antes de sacar su preview!

    Por otro lado, también pienso que así evolucione mucho, (disminuir el tamaño final, simplificar la comunicación con el DOM, etc.) La programación como tal del cliente nativo no tendrá nada que hacer en cuanto a productividad si no se usa un lenguaje administrado.

    Hoy en día los recursos de hardware que existen para la mayoría de las aplicaciones (yo diría un 96%) permiten que las ligeras ventajas en tiempo de ejecución logradas con lenguajes no administrados como C/C++ sean imperceptibles… así que vamos… cuál es el punto?

     

  • WarNov Developer Evangelist

    Stairway to Azure 4: Hello Azure

    • 8 Comments

    Ya vimos en este post los conceptos de Software as a Service (Saas), Software + Services (S+S) y Plataform as a Service (PaaS) y de cómo Windows Azure es la alternativa que Microsoft nos ofrece para desplegar este tipo de conceptos que lideran hoy el desarrollo del software.

    En este otro post vimos toda la teoría acerca del funcionamiento de Windows Azure y los conceptos sobre los cuales se construye.

    Pues bien, ya con esto en nuestro conocimiento, hoy les traigo ya para que comencemos de lleno, un video que nos muestra cómo comenzar a programar para Windows Azure y cómo desplegar nuestras aplicaciones en la nube, sobre este esquema.

    Para poder hacer este despliegue, es necesario tener una cuenta en válida en Windows Azure, que nos permita hacer deployment de aplicaciones.

    Aunque lo más obvio y normal es que estas cuentas tengan un costo, hasta el mes de Julio de 2010 tenemos una promoción que nos permite probar la plataforma bajo ciertas restricciones y de manera gratuita.

    Las Cuentas:

    En el siguiente video les muestro como aprovechar esta promoción, para adquirir una cuenta válida:

    Links mencionados en este video:

    El Desarrollo:

    Luego de que tengamos nuestra cuenta, podemos proceder a crear y publicar nuestras aplicaciones en la nube, tal como se muestra en el siguiente video (si no tenemos una cuenta, el video también es útil para aprender a programar para Azure, pero no tendremos la posibilidad de publicar la aplicación):

    Muy bien, espero que con este par de videos, se animen para comenzar a ser productivos con Windows Azure. Ya vendrán más videos con los que les mostraré aplicaciones más avanzadas.

  • 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

    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

    Será Mono tan bueno como lo pintan?

    • 7 Comments

    Artículo Mono

    Cuando uno anda de pleno en el social media, siempre encuentra comentarios que llaman mucho la atención.

    En esta ocasión, alguien dijo que había hecho unas pruebas en mono y su performance no le había gustado.

    Desde épocas de la universidad no usaba mono. Pero en lo recuerdo, se comportaba perfectamente.

     

    Así que aproveché para darme una actualizada en el asunto, sobretodo aprovechando que ya tenía contacto con Miguel de Icaza, gestor de la plataforma (brillante a mi modo de ver).

    Así que en una charla con Miguel, tuve la oportunidad de preguntarle acerca de los casos que para él eran las joyas de la corona de mono y de esa manera poder citar estos ejemplos para mostrar que si mono  no tuviese buen performance, pues no lo estarían usando. Como mencioné hasta donde usé mono siempre se comportó bien.

    No solo hablamos de productos de usuario final como tal, sino también de aplicaciones de ámbito empresarial.

    F-Spot

    image

    Se podría decir que es como un Picassa que con todas sus características hace de  la administración de fotos personales algo muy sencillo! Puede importar fotos de diversos dispositivos, editarlas, subirlas a un repositorio, etc. Y todo con C# y mono!!! Y el performance experimentado no estuvo para nada deficiente.

    Banshee

    image

    Para los que estuvimos en el mundo Linux hace unos buenos años, encontrar un aplicativo como este para reproducir nuestros archivos multimedia era algo bastante complicado. Pero hoy, gracias a Mono se ha podido desarrollar Banshee. Permite la sincronización con iPod, Android y otros dispositivos. Esto nos permite comprobar el poder del concepto .net en Linux.

    Pinta

    image

    Como su nombre lo indica, es para pintar. Hace algunos meses me hice fanático de paint.net. Un excelente editor de bitmaps (y fotografía) surgido hace algunos años como proyecto universitario creado con C# para Windows, que hoy en día es el mejor reemplazo para el tradicional Paint de Windows, ya que incluye efectos, manejo de capas, herramientas de clonado, lazo mágico, plugins  y demás, que lo hacen parecer un Photoshop light muy fácil de usar (de hecho, les cuento que la primera imagen de este post, la edité usando Paint.Net y la terminé en 3 minutos. Además es freeware!). Pues bien, Pinta está basado en Paint.Net. Tanto así, que mucho del código de Pinta es el mismo de Paint.Net. Solo que compilado sobre mono. Y en el mundo Open Source, tiene rendimientos iguales e incluso mejores que Gimp.

    Deki

    Deki es un Wiki enfocado a servir como entorno de colaboración especialmente de desarrolladores. Y me permito citar la opinión al respecto de Mike Shaver, jefe de los evangelistas de Mozilla:

    “Mozilla tiene un gran volumen de información relevante para los desarrolladores que va desde la documentación de código tradicional y código de ejemplo, hasta suites de pruebas y datos de rastreo de errores, así como de discusiones y streams RSS. Nosotros estábamos buscando un sistema que nos diera las herramientas para combinar y re mezclar todas esas fuentes de datos de manera creativa y Deky Wiki está diseñado con esa meta en mente”

    Deki fue desarrollado por MindTouch. Una compañía muy reconocida por su gran trabajo sobre mono en la producción de Wikies, Web 2.0, Mashups y en general la creación y administración de contenido. En general, usan C# para el componente de negocio y para hacer una interfaz gráfica muy fácil de personalizar, usan PHP, que está adquiriendo también mucho peso en las tecnologías Microsoft, que ya lo soportan (SqlServer, Visual Studio, IIS, Azure, Expression Web…).

    Conclusión

    .net sí funciona en Linux. Y de hecho ha permitido a la comunidad Open source acceder a un entorno de desarrollo ágil y robusto que permite lograr productos como los anteriormente mencionados. Además la interoperabilidad intrínseca de .net, ha permitido trabajar de la mano con otras tecnologías y hoy día es tanto el avance, que el framework se ha extendido hasta a los celulares, incluido el IPhone de Apple. Y esto ha tenido tanto éxito, que hay toda una gran comunidad de desarrolladores sobre mono trabajando y sacando provecho de estas ventajas. Hasta Silverlight tiene su versión para Linux gracias a Moonlight!

    Sin embargo no todo es perfecto y hoy día algunas características no se han podido mapear correctamente, tal como el renderizado de Silverlight usando la aceleración de hardware nativa de la máquina (tal como lo describían en el comentario que dio origen a este post). No obstante, hablando con Miguel de Icaza, precisamente me comentó que en adelante el mayor enfoque de su trabajo iba a ser MVC y Entity Framework para mono y por supuesto alcanzar a Silverlight 4. Así que solo es cuestión de tiempo. Lo importante es que .net sí trabaja bien en Linux. Es más, ya empresas como Novell han creado importantes herramientas e IDEs que le dan aún muchas más facilidades a los desarrolladores. Entre ellas, Mono Tools for Visual Studio; como lo muestro en este post.

    IMG_8005Ya para cerrar, quisiera unirme a la inconformidad sentida por la comunidad mono ante la decisión de Apple de impedir en el futuro que sobre su IPhone puedan correr aplicaciones que no ejecuten código nativo directamente. Cerrándole las puertas no solo a .net sino también a Flash y obviamente a Java. Me pregunto que hará que los fans de Apple ante decisiones como estas o productos como el IPad que no dejan ni tomar una foto, sigan inmutables y encantados…

    Me encantaría saber sus opiniones al respecto y también resolver las dudas que tengan al respecto. Siéntanse libres de comentar!! Interoperamos!



  • WarNov Developer Evangelist

    Pues AngryBirds sí corre en IE9

    • 7 Comments

    Chrome dice que no está soportado en IE9 pero en realidad la aplicación corre perfecto allí y lo mejor de todo sin necesidad de "instalarla" cosa que si es requerida con Chrome.

  • 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

    Windows 8: Lo que deberías saber y nadie te ha contado

    • 7 Comments

    Ya a estas alturas del partido, sabrás que con Windows 8 vienen grandes innovaciones dentro de este sistema operativo. Eso, si es que no lo has probado por tu propia cuenta, bajándolo gratuitamente de aquí. Cualquier máquina que corra Windows 7, te servirá para probarlo.

    La innovación más grande por su puesto es la inclusión del ambiente de Interfaz Moderna

    clip_image002

    En pocas palabras, el ambiente de Interfaz Moderna está orientado a ser amigable en dispositivos con touch screen. Específicamente Tablet PCs y Slates:

    Ojo: que esto no quiere decir que el desktop tradicional haya desaparecido. Este sigue existiendo y también ha evolucionado con muchas mejoras como un Explorer con Ribbon, copia de archivos optimizadas, soporte a USB3 para velocidades de transferencia impensables y otras más que pueden encontrar en el blog oficial de Windows para usuarios finales.

    Desktop8

     

    Desde el punto de vista de un desarrollador, el ambiente desktop no tiene muchos cambios radicales a nivel de presentación de nuestras aplicaciones. Habría que tener sin embargo en cuenta las novedades de la nueva versión del Framework .NET que viene con Windows 8, que es la 4.5 y que entre otras cosas interesantes, tiene la inclusión de Async, que nos permite crear interfaces fluidas de una manera más sencilla. Sin embargo, básicamente podemos pensar en estos cambios como sencillamente un par de librerías más por aprender.

    El cambio radical está en la interfaz Moderna:  aunque es radical solo en estructura; pues como veremos, la programación es la misma. De hecho, si ya sabes .NET y XAML o HTML y Javascript, ya sabes programar para Windows 8 en Interfaz Moderna!

    Pero antes de describir estos cambios estructurales consideremos el por qué de aplicaciones de Interfaz Moderna o Windows Store Apps, como son más conocidas, ya que estas apps solo van a estar disponibles a través de una tienda online llamada el Windows Store. Es evidente que la movilidad se ha vuelto supremamente importante hoy en día y que todos queremos tener un sistema operativo fácil de transportar. Hemos visto que estas características son ofrecidas por los tablets y slates. Que estos en general no poseen teclado, sino que son muy basados en touch. Entonces, necesitábamos una versión de Windows adecuada para estos escenarios. Esto sin mencionar que la durabilidad de la batería es súper importante. Queremos que nuestro dispositivo aguante aunque sea todo un día de trabajo sin necesidad de ser conectado a la electricidad. Pero para lograr esto, requerimos de procesadores y discos duros que no consuman tanta energía y de un diseño de aplicaciones que las permita suspender de manera óptima para ahorrar hasta el último vatio cuando no se estén usando.

    Existe un tipo de procesador que tiene un consumo supremamente bajo de energía y que fácilmente puede garantizar 8 horas de funcionamiento. Es el procesador ARM.

    Cómo pueden garantizar esto? Pues teniendo un conjunto de instrucciones reducido en comparación con los procesadores de arquitectura x86 o x64 a los que estamos acostumbrados en nuestras PCs. Es un precio que hay que pagar para lograr durabilidad. Pero si lo vemos bien, un rediseño del sistema operativo pensando en aplicaciones fácilmente suspendibles y en la eliminación de características que no son muy necesarias en un dispositivo móvil, sumado a la inclusión de hardware especial como los discos duros de estado sólido, nos permite tener un aparato que funciona como lo necesitamos y con la duración requerida. Como si fuera poco, por añadidura cuando logramos esto, tenemos un sistema operativo que arranca y está listo para usarse en tiempo de solo 3 segundos!!! Lo cual es una característica súper importante para la movilidad.

    En síntesis, se requería un ambiente de aplicaciones amigables al tacto, que corrieran de manera óptima en procesadores ARM (y por ende en procesadores de arquitectura tradicional) y que además ofreciera muchas facilidades para tener una experiencia de usuario impactante.

    Y precisamente eso es lo que ofrece la interfaz Moderna.

    Esta gran iniciativa nuestra no para con la creación del sistema operativo y la habilitación de excelentes dispositivos móviles que lo usan. También dispondremos de un marketplace: Windows Store. Diseñado específicamente para enriquecer el ecosistema de Windows Store Apps que se van a empezar a requerir bajo este nuevo esquema. Aplicaciones innovadoras, muy atractivas para el usuario que van a poder ser vendidas y compradas de una manera muy sencilla a través del store. Cualquier desarrollador desde su casa va a poder crear su aplicación, subirla al atore y empezar a recibir ganancias por ella, muy al estilo de Windows Phone. Y en este caso, para Colombia tenemos garantizado el acceso al store. Somos uno de los pocos países de Latinoamérica con este privilegio.

    Visto lo visto, supongo que ahora estarás preguntándote cómo crear estas Windows Store Apps…

    Como te dije antes, si sabes .NET; en especial Silverlight, entonces ya sabes crearlas!!! Además, no necesitas ser un desarrollador experimentado en .NET para lograrlo. Si sabes HTML y Javascript, también el desarrollo de este tipo de aplicaciones está a la mano. Así que si has desarrollado sitios web por algún tiempo con cierta carga de Javascript, también estás listo para arrancar! De hecho si tu experiencia es en C++, también hay cabida para ti.

    Lo único necesario es aprender un par de librerías más; tarea nada difícil, teniendo en cuenta que el intellisense es completo para todos los lenguajes aceptados en la plataforma de desarrollo para Interfaz Moderna.

    Entonces, ya sabiendo que a nivel de desarrollo todo funciona de una manera familiar, entremos un poco más y aprendamos realmente cuál es la plataforma sobre la que están las Windows Store Apps.

    WinRT

    WinRT es la abreviación de Windows Runtime. Y es la plataforma sobre la cual se programan aplicaciones de tipo Interfaz Moderna para Windows 8.

    WinRT NO está basada en .NET. De hecho, WinRT está al nivel del API nativa de Windows por excelencia que es Win32. WinRT accede nativamente al Kernel de Windows, ofreciendo gran velocidad de ejecución por un lado y por otro una abstracción muy útil para poder acceder a todos los recursos del sistema a través de un paradigma orientado totalmente a objetos, de una manera extremadamente sencilla.

    .NET tradicional trataba de solventar esta tarea… pero alguna vez trataron de acceder a la webcam de su máquina para obtener una sencilla foto? Si es así de seguro recordaran lo divertido que es hacer los DLLIMPORT requeridos para traer APIs de WIN32.

    Con WinRT estos llamados ya no son necesarios, pues la conexión ya es directa y se logra completamente a través de objetos ya existentes en la plataforma.

    WinRT está basado en 33 APIs nativas con las que se puede acceder al core de sistema operativo. Como se aprecia, están divididas en 5 grandes grupos: Fundamentales, Dispositivos, Media, Comunicaciones y Datos e Interfaz de Usuario.

    clip_image007

    En general WinRT se presenta como la base sólida y eficiente para construir Windows Store Apps.

    De acuerdo a lo anterior, si equiparamos a WinRT con .NET tradicional, tendríamos una gráfica como la siguiente:

    clip_image009

    Como lo había mencionado vemos que WinRT (la zona verde) accede directamente al Kernel de Windows, de igual forma que lo hace .NET, Win32 e Internet Explorer. Vemos sin embargo que estos últimos van a estar destinados para las aplicaciones de escritorio tradicionales, con los conocimientos que ya tenemos.

    WinRT está basado en un modelo de aplicaciones (Application Model) en el cual cada aplicación es una clase como tal (contenedora de otras clases), que son instanciadas por el proceso WWAHost.exe que es el encargado de administrar funciones como la suspensión. Cada aplicación es instanciada por un WWAHost independiente, a través del ejecutable de la aplicación que aparece como miaplicación.exe, pero tiene el comportamiento particular de luego lanzar el Host:

    image

    Esto me recuerdo mucho el viejo esquema de COM; y efectivamente muchos de los conceptos de WinRT provienen de allí, excepto que ya no usamos un acercamiento basado en interfaces sino basado en objetos. Además tenemos variedad de lenguajes gracias a las proyecciones y también nos podemos olvidar del DLL Hell, gracias a la metadata que aún conservan los componentes de WinRT, que son una gran herencia de .NET, que por su puesto sigue su camino en aplicaciones de escritorio convencionales, así como en las capas de backend y servicios en los sistemas n-layer.

    Vemos que sobre este modelo de aplicaciones tenemos todas las apis que describí anteriormente y que básicamente nos permiten acceder a los recursos del sistema y a librerías que nos facilitan el desarrollo de nuestras aplicaciones.

    Sobre las apis, ya podemos extender nuestras proyecciones de lenguaje que nos permiten acceder a ellas de distintas maneras, de acuerdo a nuestros gustos. Si somos familiares con Silverlight y .NET, usamos VB o C#. También podemos usar C++ o si venimos del mundo Web, podemos usar Javascript que usa el motor Chakra. El mismo de Internet Explorer.

    Finalmente, sobre estas proyecciones de lenguaje ofrecemos los lenguajes de marcado para poder crear interfaces declarativamente. No es más que el típico XAML que conocíamos de WPF, Silverlight y WP7 para cuando usemos C#, VB e interesantemente C++. SI algo recuerdo con pena y dolor de C++, es la creación de interfaces gráficas a punta de C++. Era algo completamente dispendioso, complicado y propenso a errores. Ahora tenemos todo el poder nativo de C++, complementado por el poder declarativo de XAML para la UI.

    En el caso de Javascript, naturalmente el lenguaje de presentación viene a ser HTML acompañado de CSS para la definición de estilos. Esto obviamente hará muy fácil traducir aplicaciones HTML5 para web, a aplicaciones HTML para Windows Store.

    .NET y WinRT

    Ya vimos que básicamente estos son dos stacks distintos dentro de Windows. Sin embargo, dado que WinRT ofrece proyecciones de lenguaje para C# y VB, el resultado es que la mayoría de librerías de .NET tienen su equivalente en WinRT. Algunos métodos tienen diferencias sutiles y encontramos nuevas librerías en WinRT que mejoran el acceso a dispositivos y recursos del sistema. De hecho es posible para nosotros crear componentes en .NET que puedan ser consumidos por WinRT, siempre y cuando usen las librerías del Namespace Windows.

    Componentes en WinRT

    En WinRT podemos crear componentes que pueden ser reutilizados en otras apps WinRT. Todos los componentes y aplicaciones generan una metadata que permite un versionamiento transparente y la garantía de que las aplicaciones correrán correctamente en el futuro.

    Cómo comenzar con WinRT y Windows 8?

    Es muy sencillo y free, solo tienes que bajarte tu versión de desarrollador de Windows 8 que además incluye las herramientas de desarrollo que en este caso es Visual Studio 2011, de este link.

    Además para más recursos y videos instructivos, les recomiendo visitar el sitio oficial de Windows para desarrolladores: http://buildwindows.com y http://dev.windows.com. Para saber más de Windows Store Apps: http://msdn.microsoft.com
    /windows/apps
    . Para comentar y resolver dudas: http://forums.dev.windows.com. Para saber más del marketplace: http://blogs.msdn.com/b/windowsstore; para saber más de características de usuario final de sistema operativo, visiten el blog oficial. Y para obetener la información de primera mano desde las redes sociales:

    Facebook (developer)

    http://fb.windows.com/developers

    Twitter (@b8)

    http://twitter.com/BuildWindows8

    Twitter (@windevs)

    https://twitter.com/windevs

    YouTube (developer)

    http://www.youtube.com/user/WindowsVideos

Page 1 of 14 (326 items) 12345»