MSDN Blogs
  • WarNov Developer Evangelist

    Mejor BING: Cápsulas de uso modificado

    • 0 Comments

    En el videopost rápido de esta semana, quiero mostrarles algunas acciones sobre Bing e Internet Explorer 8 que nos permiten realmente aprovechar todo su potencial.

    Por ejemplo veremos cómo obtener mejores resultados técnicos cambiando el lenguaje por defecto del buscador, cómo aprovechar las ventajas de búsqueda de video e imágenes y cómo establecer un buscador personalizado para un blog por ejemplo, mediante la integración con Internet Explorer 8.

    Mejor Bing from WarNov on Vimeo.

    Como bonus video, describo como IE8 y Bing se integran genialmente para permitir crrear búsquedas dentro de sitios específicos que quedan disponibles inmediatamente en la barra de búsqueda, así que se puede buscar muy fácilmente dentro de cualquier sitio sin necesidad de abrirlo. Esto es productividad!!

    Disclaimer: Este último video tiene edición de sonido experimental e intencional con un algoritmo en C# que luego estaré posteando.

    Proveedores de Búsqueda Personalizados en Bing from WarNov on Vimeo.

  • WarNov Developer Evangelist

    De las mejores evoluciones de Visual Basic en 2010

    • 3 Comments

    Antes:

     

    VB vs C# 1

    Después:

    106894368

    Gracias a @afontang

  • WarNov Developer Evangelist

    Gobierno 2.0 Camp Colombia 2010

    • 0 Comments

    Es una iniciativa que se ha realizado en ciudades como Washington, Berlín, México DF  y que ahora tendremos en Bogotá. Los primeros en Sur América!

    image

    Se trata de un foro de participación abierta, donde se tratarán temas de Gobierno 2.0 y cómo las redes sociales y la web 2.0 han apoyado 3 pilares de gobernabilidad:

    • Transparencia
    • Colaboración
    • Participación ciudadana

    En este encuentro contaremos con la participación de entidades como:

    • Alcaldía Mayor de Bogotá
    • Ministerio de Comunicaciones
    • Programa Colombia en Línea
    • Corporación Colombia Digital
    • Universidad Externado de Colombia
    • Colombia es Pasión

    image

    Entre otros, veremos temas muy interesantes como:

    • Open Government (Demo de Participación Ciudadana). Esto incluirá TownHall de Azure
    • Gobierno electrónico, ciudades inteligentes y protección del medio ambiente
    • Gob Camps alrededor del mundo

    Es una gran oportunidad para que nosotros desarrolladores nos pongamos al día en los nuevos campos en los que nuestros conocimientos pueden ser aplicados! Sean cordialmente invitados a participar!

  • WarNov Developer Evangelist

    Reproduciendo Sonidos Secuencialmente en Silverlight

    • 1 Comments

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

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

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

    Cómo se reproducen sonidos en Siverlight?

    Rocket Science!!! Observen:

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

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

    Se los presento:

    internal System.Windows.Controls.MediaElement melSounds;

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

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

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

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

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

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

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

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

    Desafortunadamente la cosa no funciona bien así

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

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

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

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

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

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

    Tal cual, es la solución!!!

  • WarNov Developer Evangelist

    Ventajas Rápidas en Expression Web

    • 0 Comments

    En el video rápido de esta semana, muestro ventajas que he encontrado usando Expression Web en la creación de un proyecto Open Source en el que necesitaba algo muy rápido y sencillo, pero con estilo.

    Veamos cómo para lograr esto, Expression Web nos ayuda bastante. Principalmente abordo temas como edición de texto, formateo y aplicación de estilos: Cómo se crean automáticamente dentro de la página a través de cuadros de diálogo visuales. Y cómo se pueden administrar para reunirlos automáticamente en un archivo de estilos.

    También algunos tips HTML como. Centrar un div dentro del body y crear un template con varias columnas en divs.

    Algo rápido, sencillo y útil. Enjoy!

     

    Credits:

    Thnx to @andresruiz for teaching me some really cool http tips. His blog.

    .



  • 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

    Comunidades MSDN Reloaded

    • 0 Comments

    Como parte de las estrategias enfocadas a desarrollar el potencial de nuestros usuarios, y con el objetivo de establecer mejores canales de comunicación e interacción con ellos, Microsoft ha desarrollado el Programa de Comunidades MSDN, como un medio a través del cual los Profesionales de Desarrollo y Arquitectura de Software podrán aprovechar al máximo las diferentes soluciones y tecnologías de desarrollo, obteniendo una ventaja competitiva a nivel profesional, y por tanto, dando valor agregado a las organizaciones. El programa de Comunidades Microsoft es una iniciativa que se ejecuta a nivel mundial, y actualmente las Comunidades Colombianas se encuentran entre las mejores, tanto en número de usuarios como en impacto y calidad de ejecución. El participar en alguna Comunidad MSDN es sin duda una gran oportunidad de aprender de otros colegas de profesión y compartir experiencias propias, de conocer gente y establecer importantes redes de contacto, así como de tener mayor visibilidad dentro de la industria de software, tanto en Colombia como en otros países.

    ComunidadesMSDN

    Una Comunidad se define como un conjunto de personas vinculadas por características o intereses comunes, y que desarrollan una identidad y sentido de pertenencia. Finalmente, el objetivo de pertenecer a una Comunidad es convivir con personas afines, con intereses similares y poder tanto aprender como aportar nuevas cosas. Se busca que las Comunidades tengan un impacto social, ayudando a difundir y democratizar el acceso a la tecnología en sus localidades. Utilizando esta definición como base, la Comunidad MSDN se integra como un grupo de profesionales con intereses comunes, aprovechando, generando y compartiendo conocimiento y recursos a través de una serie de herramientas, actividades, contenidos y procesos soportados por Microsoft. Es necesario mencionar que las Comunidades y miembros pertenecientes a dicho programa, tienen completa facultad para definir sus propios objetivos, actividades y políticas. El rol de Microsoft es el de dar soporte y orientación, proporcionando las herramientas, procesos y contenidos que cada Comunidad utilizará como mejor convenga.

    Esta es la oportunidad para que re establezcamos este importante mecanismo de potenciación profesional en el que Microsoft ofrece muchas ventajas tanto pasa compañías del sector, como para profesionales y comunidades como tal. Más información en esta página.

    Encuentre este documento en formato word aquí

  • WarNov Developer Evangelist

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

    • 6 Comments

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

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

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

    Enjoy!

  • WarNov Developer Evangelist

    Boletas para Aerosmith via Windows Azure!!!

    • 0 Comments

    Quieres ganarte DOS BOLETAS PLATINO para ver a AEROSMITH en Bogotá este 20 de Mayo?

    image 

     

    Sólo debes crear una aplicación y subirla a Windows Azure.

    En este POST de mi blog encontrarás los pasos a seguir para crear una cuenta en Windows Azure válida en Colombia y la guía para subir dicha aplicación.

    Envía un mail a devcol@microsoft.com con el asunto “Windows Azure” e incluye los siguientes datos:  URL de tu aplicación, Nombre, Cédula y teléfono.

    El sorteo se realizará el Martes 18 de Mayo a las 5PM entre los mails que hayamos recibido hasta ese momento y nos comunicaremos directamente con el ganador.

    *Sólo serán válidas las cuentas creadas en Colombia

    ** El sorteo será realizado por un jurado de 5 personas en la hora y fecha indicadas.

    www.microsoftactiva.com

  • 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

    Hablar Ilimitadamente usando el plan de datos del Celular

    • 3 Comments

    Hoy un amigo aquí en la subsidiaria me compartió esta valiosa información al respecto:

    Loudtalk Site

    “Para quienes tienen plan de datos ilimitado o WiFi en su celular (y puedan acceder a Internet) y sus minutos de voz sean limitados, les presento esta aplicación que les permitirá hablar con un compañero de la siguiente forma:

    - De celular a celular

    - De celular a PC

    - De PC a PC

     

    NO IMPORTA DE QUE OPERADOR CELULAR SEAMOS, PUEDEN HABLAR ILIMITADAMENTE!!!

    La aplicación se llama Loudtalks y emplea el concepto denominado Push To Talk (PTT), parecido al servicio que tienen los Avantel, la cual permite emplear el canal de datos para enviar la voz (Voz/IP), a algunos de Ustedes les he hecho la demostración, esta es la última versión que han liberado.

    La aplicación tanto para el Windows Phone como para el PC es gratuita

    Adjunto el instalador para el celular (copiar en el equipo y luego ejecutar el instalador) y el link para quien desee instalarlo en el PC http://loudtalks.com/download/

  • WarNov Developer Evangelist

    Mayo en Colombia y LATAM, es de Windows Phone 7

    • 2 Comments

     

    Windows Phone 7

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

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

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

    Por ejemplo, tenemos totalmente gratis:

    Visual Studio 2010 for Windows Phone

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

    Expression Blend

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

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

    Windows Phone Developer Tools CTP - April Refresh

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

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

    Windows Phone Developer Portal

    Pero un momento!

    Es todo para nosotros desarrolladores colombianos y latinos?

    No!

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

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

    La agenda es la siguiente:

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

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

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

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

    Para finalizar, Javier nos comenta:

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

     

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

  • WarNov Developer Evangelist

    Acceso a DB desde móviles con LINQ to DataSets

    • 0 Comments

    Se está volviendo algo tradicional tener invitados a mi blog a los que agradezco mucho su colaboración a través de posts bastante buenos. Espero sea una costumbre semanal.

    En este caso se trata de Jorge Ramírez quien nos comparte un video genial para quienes están iniciándose en el desarrollo de aplicaciones móviles y desean conectarlas a bases de datos. Además, con el valor agregado del uso de LINQ en este caso! Disfrútenlo!

  • WarNov Developer Evangelist

    El mayor evento para desarrolladores en Colombia 2010

    • 1 Comments

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

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

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

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

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

    Visual Studio

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

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

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

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

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

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

    Prepárense para la charla

    Experiencias de Usuario Enriquecidas

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

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

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

    Material Técnico

    Plataforma de Servicios en la Nube (Azure)

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

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

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

    Material Técnico

    El cierre de Steve Ballmer

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

    Developers, Developers, Developers!!!


  • WarNov Developer Evangelist

    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

    UserControls y TreeView

    • 0 Comments

    (Un ejemplo de cómo ASP.NET tradicional sigue siendo útil.)

    Hace poco en mi foro, Julio Avellaneda me preguntaba acerca del mecanismo para ofrecer una interfaz de usuario muy interactiva. Luego de varias disertaciones, se llegó a la conclusión que lo mejor era hacer una implementación con UserControls.

    A continuación, el mismo Julio invitado por mí, nos explica lo sucedido:

    “Hola a todos, este es un pequeño ejemplo el cual quiere mostrar una forma de como usar usercontrol en asp.net, la vez pasada, se me planteo una situación en la cual, un usuario podría tener desde 1 hasta unas 50 opciones disponibles en una página, pero debería simular o hacer sentir al usuario que todo se encontraba en la misma página, además que debía poder guardar los datos digitados en una opción o sección apenas se cambiará a una nueva.

    Mirando ese pequeño planteamiento, lo primero que se me ocurrió fue usar tabs al estilo de jquery, opción que fue eliminada, ya que debía tener todo el código en la misma página, y luego comenzar a ocultar divs y así sucesivamente, luego se me ocurrió crear diferentes páginas, una para cada sección, tener un iframe el cual me iba a alojar la página, opción que funcionaba, sin embargo no podía hacer el guardado al cambiar de sección.

    Luego de mirar algunas opciones más, opte por usar controles de usuario, y en mi página principal tener un multiview, el cual va a tener un view por cada sección, y así desde codebehind solo me es necesario cambiar el view activo, además, por ser controles de usuarios, en cada control puedo declarar métodos públicos los cuales puedo llamar desde otra página….

    Lo importante a tener en cuenta, es que cuando se carga la página principal se carga, mis controles de usuario también lo hacen, por este motivo, lo mejor es no hacer ningún tipo de carga en el load del control de usuario, sino tener un procedimiento público el cual se llame cuando necesito ese control de usuario.

    Para hacer el llamado de cada sección, creo un treeview, donde cada nodo mostrará una sección diferente... “

    clip_image002

    Pueden descargar un ejemplo acá !



  • WarNov Developer Evangelist

    TaskCleaner: Velocidad en su sesión (Improving Windows Performance)

    • 0 Comments

    Supongo que como yo, en ocasiones han sentido la necesidad de que su computador corriera como si estuviese recién formateado.

    Hay muchos trucos y tips por ahí para incrementar el performance. Unos sencillos y otros tan complejos como comprar e instalar un arreglo de discos.

    Mi solución se basa en aquella que nos recomienda entrar al archivo de configuración de carga de servicios al inicio de Windows. Pero siendo este un mecanismo muy intrusivo que provoca incluso luego mensajes molestos, también tiene la desventaja de que SIEMPRE estará desactivando esos procesos y puede que eso no sea lo que queramos.

    Mi acercamiento se basa en tener unos archivos que tengan los procesos que uno no quiera ejecutándose y un programa que revisa el archivo deseado y elimina todos los procesos que estén en ejecución. Así pues, sólo se desactivaran los procesos que uno quiera cuando quiera y sin tener que ir a eliminarlos uno por uno en el task manager. Su nombre, TaskCleaner:

    Clean (2)

    La clave del algoritmo está en dos sencillas líneas que usan unos simples mecanismos que nos provee el Framework.net:

    Process[] processes = Process.GetProcessesByName(processName.Trim());
    y
    process.Kill();

    accedemos a este código a través de la inclusión:

    using System.Diagnostics;

    La idea general de mi aplicación entonces es cargar el archivo deseado, convertir su contenido en un arreglo de string donde cada entrada es el nombre (sin extensión) de uno de los procesos a eliminar (por ejemplo msnmsgr). Luego iterando sobre ese arreglo, se “matan” todas las instancias de ese proceso dado y así vamos liberando recursos de la máquina.

    Al final el aplicativo nos suministra un reporte en el que nos indica qué procesos fueron eliminados correctamente, cuáles no se dejaron eliminar (procesos de sistema por ejemplo) y cuáles no se encontraron (pues puede que la lista que hayamos hecho tenga procesos que actualmente no están en ejecución).

    He de decir que el desarrollo fue muy sencillo sobretodo gracias a LINQ que me permitió obviamente y sin problemas hacer consulta sobre el estado de los procesos. Además un claro manejo de excepciones, me permitió determinar cuando se pudieron eliminar los procesos y cuando no.

    Para que la aplicación pueda eliminar todos los procesos que tengamos en nuestro archivo, es necesario ejecutarla con privilegios de administrador; de lo contrario puede que un par de procesos no se deje desactivar. Sin embargo esto no rompe el aplicativo, sino que sencillamente se reporta en el log.

    Cómo crear el archivo de procesos no deseados?

    Es muy sencillo. Solo basta inspeccionar el TaskManager y de allí tomamos el nombre de los procesos que no queremos:

    image

    Eso sí, teniendo en cuenta NO incluir las extensiones, pues el framework busca sin extensión. Entonces en este ejemplo, sencillamente prepararíamos un archivo con el siguiente contenido:

    • babylon
    • flashutil10e
    • orbitnet
    • tweetdeck

    Y ese sería el que cargaríamos con nuestro aplicativo:

    image

    Acto seguido, damos click en “Kill Processes” y voilà!

    Este aplicativo es OpenSource y lo pueden encontrar en http://taskcleaner.codeplex.com



  • 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

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

    • 0 Comments

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

    clip_image002

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

    Disfrútenlo!



  • WarNov Developer Evangelist

    La nueva Eficiencia está en tus manos!

    • 0 Comments

    clip_image003

    Se trata de nuestro evento virtual de lanzamiento para Latinoamérica de 11 Productos!!!

    clip_image001

    clip_image002

    Tendremos webcasts y charlas en vivo con expertos de todo el continente.

    Personalmente estaré resolviendo sus dudas de Windows Azure desde la perspectiva de desarrollo a las 10am hora Colombia (GMT-5).

    También estaremos tratando temas relativos a Office 2010, SharePoint 2010, Visual Studio 2010, .Net Framework 4, SQL Server 2008 R2, Silverlight 4, etc.

    Regístrense haciendo click en la imagen!!!



  • WarNov Developer Evangelist

    Imágenes Link sin Borde Alrededor

    • 0 Comments

    Añadiendo un widget de twitter a mi blog, observé lo siguiente:

    image

    Como observan, se le pinta el borde azul típico de los hyperlinks. Cosa bastante molesta, más aún cuando la gente ya sabe que eso es un link.

    Lo que yo quería era algo así:

    image

    Después de investigar solo un poco, encontré una sencilla solución:

    Solo hay que agregar

    BORDER=0

    al tag

    <IMG ..>

    Así pues un ejemplo completo sería:

    <A HREF="http://warnov.com/dblog/"><IMG SRC="blog.gif"
    BORDER=0 HEIGHT=33 WIDTH=82 ALT="Visita mi Blog"></A>


  • WarNov Developer Evangelist

    Modificando el ancho de los ScrollBars en WindowsForms

    • 0 Comments

    Hace poco en mi foro me preguntaron acerca del mecanismo para modificar estos ScrollBars por ejemplo en un grid de WindowsFors…

    Primero, una mala noticia:
    El tamaño del scrollbar en aplicaciones Windows, independientemente de qué tecnología de programación se use para presentarlo, tiene un tamaño cuyo valor es una variable global del sistema. Es por esto, que no es posible modificarlo programáticamente. Si así lo hicieras, entonces TODOS los scrollbar de windows se modificarían y por tal motivo, esa opción no está disponible en el framework.

    Ahora las posibles soluciones:

    1. Cambiar en la personalización de Windows el tamaño de los scrollbar. Esto sería una buena idea, dado que todo el sistema está destinado para ser TOUCH. Al menú accedes dando click derecho sobre el escritorio, etc…
    2. Cambiar la aplicación a WPF: Para mí la mejor elección. Sobretodo dado que una interfaz touch tiene una interacción especial con el usuario. WPF está enfocado a permitir generar experiencias de usuario sofisticadas.
    3. Hacer el control en WPF y embeberlo dentro de un Panel de la aplicación WinForms: Esto si no quieren pasar todo a WPF. Aquí información de cómo hacerlo:
      http://msdn.microsoft.com/en-us/library/ms742215.aspx


  • WarNov Developer Evangelist

    Un mes de Windows Azure gratis para su aprendizaje

    • 0 Comments

    Si quieren aprender Windows Azure a su propio ritmo y con cuenta de Windows Azure, les tengo un pase especial por hasta un MES gratuito de Sql Azure y Windows Azure.

    NO SE REQUIERE TARJETA DE CREDITO!!

    Pueden iniciar el campamento en cualquier momento y podrán disfrutar de los servicios gratuitos hasta finalizar cada mes.

    Pasos a seguir:

    1. Para acceder a este beneficio, obtengan su pase aquí. Y luego entren al Portal de Desarrollo de Windows Azure con el pase obtenido.
    2. Descarguen las herramientas de Windows Azure para Visual Studio.
    3. Aprendan
      1. Aquí cómo crear su primera aplicación Windows Azure y súbanla con el pase obtenido.
      2. Entren rápidamente al mundo Windows Azure observando estos seminarios rápidos
      3. Aprendan Windows Azure a profundidad: Windows Azure Platform Training Kit

    Ánimo antes de que se acaben los cupos!



  • WarNov Developer Evangelist

    MIX10 Keynote Dia 2: Internet Explorer 9 y Visual Studio

    • 0 Comments

    El MIX10 es claramente uno de los eventos más importantes para desarrolladores y diseñadores alrededor del mundo. Cada año este evento es organizado por Microsoft en Las Vegas donde aparte de congregarnos a aprender los último en tecnología nos hemos maravillado con la magia de esta ciudad que nunca duerme.

    Son tres días de evento. Y durante los dos primeros tenemos Keynotes en las mañanas y el resto del día charlas. El tercer día está compuesto únicamente por sesiones de charlas.

    En mi anterior post vimos todo lo relativo al keynote del primer día que estuvo enfocado a Windows Phone 7.

    En el segundo día estuvimos apreciando un lanzamiento del que ya hemos sabido mucho gracias a las betas publicadas: Visual Studio 2010. Pero sobretodo tuvimos la fortuna de ser participes de un gran lanzamiento:

    Me siento complacido de anunciar la liberación del preview de la plataforma Internet Explorer 9 (IE9): La siguiente versión del navegador web más popular del mundo. IE9 esta siendo diseñado para ayudarnos en el desarrollo web creando aplicaciones enriquecidas, interoperables y que cumplen con los estándares, al proveernos la plataforma, las herramientas y las características que requiere la web moderna.

    Este primer vistazo a la plataforma está diseñado para permitirnos a todos en la comunidad del desarrollo y diseño web, una oportunidad de proveer feedback en nuestro progreso en la construcción de IE9. No está diseñado para ser un explorador web FULL, sino solo un primer vistazo… un pre-alpha. Esperamos liberar updates de la plataforma cada cinco a siete semanas.

    Internet Explorer 9

    Qué hay de nuevo?

    Sobretodo características que aprovechan la GPU (tarjeta de video) de las computadoras clientes para mejorar la experiencia con HTML5 y CSS3, usando SVG:

    • Podremos usar el poder de la aceleración de hardware para renderizar el HTML5 más rápido, con mejor resolución y usando menos recursos!
    • HTML5
      • Mejoras en el parsing, incluyendo el manejo de elementos genéricos y el overlapping de tags.
      • Soporte para parseo de XHTML
      • APIs de selección de texto para habilitar la selección programática de texto
      • SVG
        • Estructura de documentos con metadata y funcionalidad de extensibilidad.
        • Formas básicas como  rectángulos, círculos, elipses, líneas, polilíneas, y polígonos.
        • Sistema de coordenadas, transformaciones y unidades
        • Elementos de tipo Path!
    • CSS3
      • Esquinas Redondeadas a través de border-radius

        IMG_8086
      • Soporte para la propiedad CSS Opacity y el modelo de color RBGA
    • JAVASCRIPT
      • El nuevo motor interpreta aun más rápido:

        SunSpiderResults[1]
        Milisegundos empleados en terminar el test SunSpider con una Dell Optiplex con un procesador de 3.0 GHz Core 2 Duo Intel, 4GB RAM, video Intel Integrado y corriendo Windows 7.
    • DOM
      • DOM Level 2: Namespaces, Rangos y Vistas
      • DOM Level 3: Eventos
      • Soporte mejorado para los estilos y características HTML del DOM Level 2
    • DEVELOPER BAR
      • Network Analizer (Este es de los que más me gusta)
        • Permite a los desarrolladores capturar, mostrar y almacenar las peticiones web, sus estadísticas y análisis!!! Definitivamente era algo que le faltaba a las herramientas para desarrolladores.
    • AUN MAS ESTANDAR
      • De un ACID de 12, pasamos a uno de 55!!!

        Acid3ScreenCapture[1]

    Cuándo lo puedo tener?

    Aún más complaciente para mí, es anunciarles amigos, que el preview YA está disponible para su evaluación en http://www.IETestDrive.com. Allí también encontramos un conjunto de páginas web y aplicaciones diseñadas para demostrar características y mejoras incluidas en la última versión.

    Los desarrolladores y diseñadores pueden proveernos feedback a través del programa Microsoft Connect en www.connect.microsoft.com solicitando una invitación allí. Si realmente están interesados en usar la plataforma lo más pronto posible, comuníquense conmigo y les estaré dando un código de acceso inmediato.

    Visual Studio 2010

    IMG_8117Esta versión es definitivamente la que más cambios drásticos ha incluido en mis siete años de experiencia con la plataforma. Además, finalmente son los cambios más esperador personalmente hablando, pero también por muchos de mis amigos y conocidos desarrolladores.

    Los cambios han sido integrales y se han hecho inclusiones sin precedentes en la herramienta. Nunca me había sentido tan “en casa” como programando con Visual Studio 2010.

    Comencemos entonces:

    Soporte multi-monitor mejorado!!

    IMG_8120

    Esta característica es genial más ahora que tenemos una gran cantidad de herramientas nuevas para trabajar en vivo dentro de nuestro Visual Studio 2010 con la arquitectura de nuestros proyectos y necesitamos mucho espacio para ver diagramas mientras codificamos!! En anteriores versiones de la herramienta teníamos cierto soporte para estas características, pero ahora han sido mejoradas.

    IntelliSense más Inteligente

     

    IMG_8121

    El IntelliSense ya viene preparado para manejar las nuevas características del Framework 4.0 como parámetros por defecto. Además nos ahorra aún mucha más escritura con sus son consejos de código predictivo ya que con escribir cualquier parte de la palabra deseada (no solo el principio) nos muestra un listado de todas las posibilidades para que podamos escoger.

    También cada vez que estamos ubicados en un identificador, resalta dentro de todo el editor en donde se encuentra referenciado ese identificador al ponerlo en negrita.

    El editor de Visual Studio 2010 está basado en WPF. De manera que ahora las operaciones que podemos hacer sobre este son mucho mas flexibles. Una que personalmente me encanta es la posibilidad de hacer zoom sobre el editor usando el scroll del mouse acompañado de la tecla control. Esto es muy útil a la hora de ver nuestro código desde distancias considerables. Como esto es trabajado con WPF y texto vectorial, no se pierde nada de la calidad del código:

    image

    Estas son solo una de las pocas cosas que se han mejorado e incluido como nuevas en Visual Studio 2010 que darían para un post difícilmente terminable: Ventana de navegación de identificadores, generador de jerarquía de llamados, generador de dependencias... Pero aquí les dejo la referencia para que puedan ver con detalle de que se trata.

    Deployment

    Podemos manejar diversos ambientes de deployment de acuerdo a las condiciones, todo organizado dentro de nuestra solución. Por ejemplo, tenemos la habilidad de tener tres copias distintas de Web.Config: Una para desarrollo, otra para pruebas y otra para producción:

    IMG_8130

    ASP.NET 4.0

    Otro de los temas vistos en este Keynote fue ASP.NET 4.0 y todas sus novedades. Por ejemplo, la claridad y simpleza con que es traducido el código ASP.NET:

    IMG_8123

    Como pueden ver, el acercamiento al HTML plano y fácil de manejar luego con JQuery es total.

    Recuerdan cuando su página comenzaba a pesar 400kb y 500kb y cada vez crecía y crecía más, pues sobre el responsable en parte de este “sobrepeso” ahora se ha trabajado bastante así que el ViewState generado es mucho más pequeño:

    IMG_8124

    Otras características mejoradas:

    • URLs semánticas. Para hacer los sitios más accesibles a las personas y a los motores de búsqueda. Es de esta manera que ahora es mucho más fácil lograr urls como http://www.example.com/autos/acme/rojo/2009.
    • Muchas más gráficas (charts) nativas para mostrar datos

    Programación del Lado del Cliente

    Visual Studio también viene fuertemente enriquecido para mejorar el desarrollo de código para el lado del cliente, sobretodo ahora que es tan popular y benéfico.

    IMG_8128

    El Intellisense de Javascript es aún más rápido en esta versión. de hecho, observemos las mediciones en la velocidad de generar IntelliSense para librerías Javascript:

    IMG_8129

    De recalcar: JQuery se actualiza dos veces más rápido en VS2010 y librería como ExtJS se cargan SEIS veces más rápido!

    Este tipo de acciones de mejora para el lado del cliente, son solo una muestra más de todo el poder que Microsoft le está dando a estas herramientas que vienen a ser el futuro de la programación Web. Entre los esfuerzos, también podemos contar con que Microsoft está apoyando económicamente a la gente de JQuery para que sigan con su excelente trabajo!!

    IMG_8161

    Conclusión

    Si somos desarrolladores acostumbrados al tradicional ASP.NET y ADO.NET, tenemos que salirnos de esa “Zona de Confort” si en realidad queremos que nuestras aplicaciones puedan competir contra la avalancha de aplicaciones web ágiles que centran gran parte de la lógica en programación orientada a cliente también conocida como programación en el browser o sencillamente Javascript en todos sus sabores.

    Muchas veces hemos rechazado la programación de Javascript porque ASP.NET nos ofrecía un modelo bastante rico que nos permitía prescindir de ello. Sin embargo, esta encapsulación escondía la verdadera naturaleza de la operación Web (Request-Response) y terminó haciendo que nuestros productos fuesen muy pesados y no corrieran rápido bajo algunas condiciones.

    Hoy en día, Microsoft ofrece en su Visual Studio soporte a todas estas tecnologías. Un claro énfasis en permitir desarrollar fácil el Javascript, AJAX, JQuery, y en general todas las APIs para los servicios que se usan más en la actualidad. Sumemos esto a MVC y obtendremos sitios que llegan a ser hasta 10 veces más rápidos que sus antecesores ASP.NET clásicos.

    Es tanto el soporte que se quiere dar a esta tecnología, que hasta el browser: Internet Explorer 9, ahora tiene herramientas de depuración de código del lado del cliente y de monitoreo de comunicaciones HTTP que vienen enriquecidas para ofrecer más ventajas a este tipo de enfoque programático.

    No es fácil; pero solo es cuestión de animarse y dar el salto. De allí en adelante, todo será aprendizaje y mejora!



  • WarNov Developer Evangelist

    Diseñando Experiencias con Expression Blend

    • 2 Comments

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

    BlendBanner

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

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

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

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

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

    Designing Windows Experiences with Expression Blend (WPF)

    Entrenamiento

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

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

    Introducción

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

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

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

    Colaboración

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

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

    Extras

    image

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

    El otro curso es:

    .toolbox (Silverlight)

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

    image

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

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

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

    image

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

     

    Get Started!, Today!

    Otros Recursos:

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


Page 12 of 14 (335 items) «1011121314