MSDN Blogs
  • WarNov Developer Evangelist

    Addin de Proyectos de Web Deployment disponibles para Visual Studio 2010

    • 0 Comments

    Desde el lanzamiento de Visual Studio 2010, ésta era una de las principales características que estaba esperando. Ya venía desde VS2005 también como un Addin y permite básicamente crear en un directorio el conjunto de recursos necesarios para copiar en el Web Server de manera que la instalación de un  sitio Web se automatiza y facilita enormemente. Sin embargo ésta es solo una de las formas que tenemos para publicar sitios Web desde Visual Studio. de hecho, hasta hoy estaba usando el Publish tradicional que tienen los proyectos web, desde el explorador de soluciones.

    Con el fin de proporcionar funcionalidad adicional para crear e implementar sitios Web y aplicaciones Web en Visual Studio 2010, este complemento proporciona una interfaz de usuario completa para administrar configuraciones de generación, de merging y el uso de tareas predefinidas y generación posterior con MSBuild.

    Además hay compatibilidad con proyectos de implementación Web de Visual Studio 2008 y Visual Studio 2005 y opciones de compilación avanzada. Este Addin lo que genera es un script de MSBuild extensible, que permite a los desarrolladores web crear acciones pre-build y post-build.

    Obviamente, este addin no cambia la forma en que hacemos los sitios o proyectos Web en Visual Studio 2010. En su lugar, toma un proyecto Web de Visual Studio existente como entrada y genera una web pre compilada como salida. Así que no se cambian los archivos en el proyecto origen de ninguna manera..

    Pueden descargarlo de MSDN

  • WarNov Developer Evangelist

    Windows Azure Tech-Day Bogotá y Medellín

    • 0 Comments

    Siguiendo con el impulso que le estamos dando a Windows Azure desde nuestra subsidiaria colombiana, me permito invitarlos a nuestro Windows Azure Tech Day. Que se realizará en Bogotá el día 17 de Junio y en Medellín el día 22 de Junio.

    Para registrarse gratuitamente en sus respectivas ciudades hagan click en la imagen correspondiente!

    Bogotá

    image

    Medellín

    image

  • WarNov Developer Evangelist

    Qué tiene y qué no tiene SQL Azure?

    • 1 Comments

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

    Aquí va rápidamente la respuesta:

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

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

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

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

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

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

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

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

     

    Para información detallada, visiten MSDN



  • WarNov Developer Evangelist

    Development Storage en Windows Azure no puede ser accedido

    • 0 Comments

    Sea el siguiente escenario:

    Ud ha hecho desarrollos con Visual Studio 2008 o 2010 para Windows Azure y no ha tenido problemas. Luego, después de un par de semanas sin programar nada en Azure vuelve y se encuentra con un error cuando se intenta crear el Development Storage Service de Windows Azure. Un error que le dice que el usuario no tiene permiso en la DB master para ejecutar cierta operación.

    image

    Entonces Ud. se pregunta: Cómo puede ser esto, si hasta hace poco todo me funcionaba perfectamente?

    Pues lo mismo me ocurrió a mi, con una máquina en la que había dejado de programar Azure por un buen tiempo. Así que emprendí resolución del problema.

    En primera medida, tengamos en cuenta que por defecto Windows Azure Development Fabric,  siempre busca la instancia SQLEXPRESS para simular crear el Development Storage (recordemos que cuando se antepone la palabra Development al fabric o al storage siempre estamos haciendo referencia a los ambientes locales simulados que nos sirven para tener una pequeña réplica de Azure en nuestras máquinas de desarrollo)

    Con ello ya pude minimizar el campo de pruebas, así que traté conectarme a la instancia SQLEXPRESS con el Sql Server Management Studio.

    La conexión se hizo sin problema. Pero noté que no tenía permisos de nada. Ni siquiera para crear una base de datos. Así que pensé  que algo realmente andaba mal. Obviamente pensé en recurrir a la desinstalación – reinstalación de mi versión de SQLEXPRESS. Y de antemano, pensé en actualizarla, pues tenía la versión SQL Express 2008 y hoy en día ya está disponible la SQL Express 2008 R2.

    De hecho, ya había instalado la versión SQL Server 2008 R2 Developer Edition…
    Momento, Eureka!
    Eso fue lo que dejó “inservible” a mi SQL Express anterior. Hallé la respuesta indirectamente!

    Conclusión:

    Si se tiene SQL Express 2008 instalado y luego se instala SQL Server 2008 R2, es probable que la versión Express se arruine. En cuyo caso la solución es desinstalar la versión Express 2008 e instalar la versión Express 2008 R2, si es que se va a requerir  (como cuando hacemos desarrollos para Windows Azure).

    Para desinstalar SQL Express 2008, no encontrarán en Desinstalar Programas del Panel de Control algo que diga SQL Express. En su lugar, encontrarán una entrada llamada SQL Server 2008 y otra que dirá SQL Server 2008 R2. Obviamente escogeremos la primera y de allí seleccionaremos la instancia a remover. O sea, SQLEXPRESS.

    De allí en adelante la desinstalación es bastante sencilla.

    Luego nos bajamos la versión R2, la instalamos, volvemos a ejecutar las aplicaciones de Windows Azure que teníamos en desarrollo y voilà: De nuevo todo funcionando correctamente.

    Es una solución sencilla, a la cual no se puede llegar fácil si no entendemos ciertos detalles de la operación de Windows Azure en ambientes de desarrollo.

  • WarNov Developer Evangelist

    Nuevo Ciclo del Conocimiento ALM con Visual Studio 2010

    • 3 Comments

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

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

    image

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

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

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

    Los esperamos!

  • WarNov Developer Evangelist

    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!!!



Page 12 of 14 (340 items) «1011121314