MSDN Blogs
  • WarNov Developer Evangelist

    Entornos Laborales Virtuales Microsoft para Emprendedores

    • 0 Comments

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

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

  • WarNov Developer Evangelist

    Visual Studio 2012: What’s New.

    • 0 Comments

    Ya habrán leído en mi editorial para este mes del flash de MSDN por qué Visual Studio es todo un templo para desarrolladores.

    Tal como lo mencioné en ese post, aquí quiero profundizar acerca de solo algunas de las novedades que nos esperan con la versión Visual Studio 2012.

    Nuevo explorador de soluciones:

    Veamos un video que nos muestra sus nuevas características:

    Mejoras Generales:

    clip_image002

    La más obvia de todas, es la inclusión de los tipos de proyectos para Windows Store (apps WinRT). Para
    soportar estas apps, Blend ahora es incluido en la instalación de Visual Studio.

    Mejoras para el desarrollo Web:

    Nuevos templates, mejoras a los editores de HTML y CSS, inspector de páginas en vivo que muestra que parte de la página corresponde al código que se está viendo y nuevas herramientas de publicación. Grandes mejoras en el soporte a Javascript (IntelliSense, DOM Explorer y consola JavaScript).

    clip_image004

    Windows Phone 8:

    En bien sea liberado el SDK de WP8, el IDE lo soportará plenamente. Recordemos que se podrá elegir a que versión de Phone se quiere compilar: Windows Phone 7.X y 8.

    Windows Azure:

    Las mejoras incluyen soporte a caching distribuido, nuevas opciones de publicación, nuevos template4s y una instalación más liviana. Además integrándose con Team Foundation Server, se pueden generar escenarios de integración y despliegue continuo.

    Aplicaciones de Negocio

    Aquí hay grandes innovaciones. Por ejemplo en Sharepoint tenemos nuevos diseñadores para listas y tipos de contenido, nuevos templates para columnas y páginas Silverlight, así como nuevas opciones de despliegue. Adicionalmente ahora tiene características de ALM disponibles como profiling de performance, pruebas unitarias e IntelliTrace. Por si fuera poco, estrenamos un nuevo modelo de apps para Office y Sharepoint 2013 en el cual apps hechas por developers pueden ser hospedadas en el cloud (Office 365) usando tecnologías web para desarrollarlas. Visual Studio 2012 da soporte al desarrollo de estas apps a través de las Microsoft Office Developer Tools for Visual Studio 2012 – Preview. Y finalmente LightSwitch está disponible como parte de Visual Studio Professional, Premium y Ultimate. Ahora con un nuevo tema y la habilidad de acceder a fuentes de datos OData, integración con Active Directory y nuevos tipos de negocio. Más de LightSwitch aquí.

    Performance

    Entre muchos otros aspectos, por ejemplo el tiempo de carga de soluciones ha disminuido enormemente en VS2012:

    clip_image005

    ALM:

    Muchas son las mejoras en este sentido, sobretodo la integración con TFS, la inclusión de Pruebas xploratorias (Agile testing) y el soporte a distintos frameworks de pruebas tanto propios como de terceros: xUnit.net y NUnit entre otros, todos con soporte en el nuevo Test Explorer.

    clip_image007

    Lo visto hasta ahora, es apenas un ápice de todas las novedades incluidas en Visual Studio 2012. Para una referencia completa, visiten msdn.

  • WarNov Developer Evangelist

    Heridas de guerra en la publicación de apps al Windows Store

    • 2 Comments

    No son tan graves como el título; pero tener conocimiento de ellas, nos ayudará a evitar tener que perder tiempo en envíos/rechazos de nuestras apps al store.

    Este artículo contiene información extraida de este post de uno de nuestros MVPs. Se trata de Roberto Alvarado, quien ha estado trabajando mucho con el desarrollo móvil, aún desde Windows Mobile. Así que me he permitido invitarle a mi blog con su post acerca de esta experiencia y él muy amablemente quiso acompañarnos. También tiene información extraida de este post de Juan Carlos Ruiz, colega mío dentro de Microsoft Colombia, y finalmente de mis propias experiencias desde que ha estado al aire el store de Windows. Es así como primero listaré las observaciones de Roberto y luego las de Juan, adicionando algunos comentarios donde sea requerido: 

    De Roberto Alvarado:

    1. Seleccionar el idioma de la App y de la tienda.

    image

    Independiente que el idioma de Visual Studio sea ingles, el idioma de la aplicación y sobre el cual se certificará en la tienda debe ser claro y especifico.

    En mi caso, el idioma es español y en Colombia.

    Nota de WarNov: Este cambio de idioma tan importante se ejecuta dentro de Visual Studio. No en el store. Se hace en el archivo  Package.AppManifest que tiene un editor visual para hacer el cambio. Los detalles de este procedimiento los pueden encontrar en este post que he creado.

    2. La descripción de la aplicación que se va a colocar en la tienda debe ser una frase que tenga mínimo 7 palabras, no debe ser una palabra. Debe describir de manera rápida y sencilla lo que hace la aplicación.

    image

    3. Se deben enviar mínimo 2 imágenes de 1366 x 768, a pesar de que solo se exige 1, si se envía 1 imagen nos rechazan la App.

    image

    4. Es muy importante tener una pagina web o Url en donde se publique una Política de privacidad para nuestra App.

    image

    Si no tiene una, puede utilizar esta, que fue provista por WarNov para su difusión: tiene el texto tanto en ingles como en español. http://bdotnet.wix.com/privacypolicy

    Además tu App debe tener un charm en donde indique la política de privacidad que utilizas, en este link te indico como puedes crear este charm: Crear página de Política de Privacidad de un App Windos 8

    Nota de WarNov: Solo es requerido que tu app incluya una política de privacidad, si en las capacidades de la app dentro del manifiesto de la misma, se especifica que la app se conecta a internet:

    image

    En el ejemplo ven el manifiesto de mi app PhotoRanker y como ven, dado que mi app no usa internet, no requiere una política de privacidad.

     

    5. Llenar o dar las instrucciones necesarias al equipo de testing en el store, sobre el manejo de la aplicación para que no sea rechazada porque no la saben manejar.

    image

    En la imagen un ejemplo sobre este punto.

    6. Es muy importante el rango de edad en el cual coloca su App, si su rango de edad es de 3 años o superior, o de siete años o superior, su App no debe tener conexión a Internet ni hacer utilización de la cámara del dispositivo.

    image

    Tengamos muy en cuenta las opciones y recomendaciones que nos da la misma tienda de Windows para ubicar nuestra App en uno de los rangos de fechas disponibles.

    En este momento no hay posibilidad si no de estas 4 opciones para nuestro App.

    Nota de WarNov: Para la mayoría de Apps, es recomendable escoger el límite de edad 12+.

    7. La imágenes del App, si verificamos la carpeta Assets del explorador de soluciones de Visual Studio, debemos dejar los mismos nombres de las imágenes, el mismo formato y principalmente las mismas dimensiones de lo contrario nuestra App será rechazada el momento de ejecutar el kit de Certificación de App para Windows 8.

    Un ejemplo de esto:

    image

    Si cambia el nombre de la imagen del logo por ejemplo debe indicarlo en el manifiesto también del App de manera correcta.

    8. Si utiliza una base de datos local, como SQLite, debe asegurarse que en las propiedades del proyecto en la pestaña de Compilación (Build) esté seleccionado el procesador correcto de su PC, y asegurarse que en las referencias del proyecto, la referencia de SQLIte no tenga una advertencia, si la tiene, elimine la referencia y vuelva a crear la referencia a SQLite.

    9. Al publicar su App debe asegurarse que tener en “Release” su App al momento de las compilaciones y verificaciones que se realizan con el KIT de Certificación.

    image

     

    De Juan Carlos Ruiz:

     

    1. Website

      • La aplicación debe estar publicada en un sitio web del publicador o uno específico para la App con vínculos claros que permitan descubrir la aplicación a los usuarios a través de la pagina web
      • No tienes sitio web? no sabes como crearlo? hay muchas formas de crear sitios web sencillos rápidamente sin una línea de código, solo búscalos en internet Guiño

    Nota de WarNov: No es necesario crear un sitio web para la app como tal. Por ejemplo poner tu url de twitter como desarrollador, será suficiente. Aunque sin lugar a dudas, es mucho mejor tener un website dedicado a la app donde tengas info de la misma como instrucciones y changelog, tal como lo hice para mi app PhotoRanker, usando los WebSites de Windows Azure, que son totalmente gratuitos.

    2. Estabilidad

    • Cero fallos después de abrir y cerrar varias veces
    • Desconexión de red, la app no debe hacer crash si no hay dispositivos de red o la red esta caída
    • Desconexión internet la app no debe hacer crash si no hay conexión a internet
    • La aplicación no debe presentar ningún fallo o app crash durante su uso

     

    3. Contenidos

    • Aptos para todos: no sexo explícito , no agredir religiones, no terrorismo, no discriminación de ninguna índole
    • Si la aplicación se clasifica en el rating para niños menores de 7 años NO SE PUEDE HACER USOS DE DISPOSITIVOS NI DE INTERNET, en este caso la aplicación debe considerarse para mayores de 7años de forma obligatoria.
    • Si la aplicación puede mostrar contenidos sensibles como desnudos artísticos parciales o violencia real moderada etc. se recomienda establecerla para mayores de 16 años

     

    4. Funcionalidad

    • La aplicación DEBE soportar Snapped View, con esto no digo que tengan que desarrollar esta vista adicional, pero por lo menos sino lo hacen deben evitar que en ese espacio se muestre la información de manera desordenada o desagradable , en dado caso sino se va a soportar la funcionalidad entonces colocar una banner que cubra todo el espacio, tal como lo hace la propia App del Windows Store
    • Si implementan funcionalidades de búsqueda, esta debe estar creada usando el Charm de búsqueda (Search), cualquier implementación diferente causa el rechazo de la App.

    Nota de WarNov: De la anterior regla de búsqueda, quedan excluidas las apps que tengan funcionalidades de búsqueda avanzada que requieran de más de un campo de búsqueda. Por ejemplo una app para buscar vehículos para comprar puede requerir buscar por modelo, color o placa. En este caso, sí se justifica una búsqueda adicional a la incluida en el charm.

    • No deben haber botones para cerrar la App
    • Si en el manifest se marca que la App soporta determinadas posiciones de la tableta, así debe ser, si falta alguna de las seleccionadas la aplicación es devuelta.
    • La app no debe ser solo para mostrar publicidad, la publicidad debe ser utilizada en justa medida, pero no puede ser el objeto principal de la App.
    • La aplicación debe ser 100% funcional utilizando solo dispositivos Mouse y Teclado
    • La aplicación debe ser 100% funcional utilizando solo dispositivos Touch
    • La aplicación debe tener descripción adecuada, todos los logos necesarios y screenshots en Windows Store y en el Package.appmanifest
    • La aplicación no debe incluir en su nombre palabras como “trial”, “test”, “beta”, “demo” , si es requerido informar que la aplicación esta en etapa preliminar, utilizar la palabra "preview"
    • La aplicación no debe tener en la pantalla principal ninguna característica, marco, tableta, botón o label que indique que es una funcionalidad futura, es decir evitar palabras como "coming soon”, “more to come”, “not available yet” . "próximamente", "en construcción" etc.
    • Las funcionalidades principales de la aplicación no deben re direccionar el usuario al browser. Solo características no principales en el 2do o 3er nivel de navegación son permitidas para direccionar al browser. Las funcionalidades principales deben estar dentro de la App.
    • Se recomienda incluir información para soporte técnico en el Charm de configuración (settings ) y en la página web de la aplicación, con alguno de los siguientes mecanismos de contacto:
        • email de contacto
        • url
        • teléfonos etc.

    5. Información para Windows Store

    • Si la aplicación requiere de usuario y contraseña u otros mecanismos para garantizar el acceso a todas sus características se debe enviar junto con la aplicación la información de acceso necesaria para realizar las pruebas. Hay una sección llamada ‘Notas para testers’ donde se debe depositar dicha información.
    • Si la aplicación requiere información o trámites de pago para activar funcionalidades, en las notas para los testers se debe incluir información de pago que puedan utilizar para acceder a estas características de la aplicación y realizar pruebas.
    • Validar que toda la información del Windows Store este correctamente diligenciada, poniendo especial atención a los ratings y publico objetivo, así como a la descripción de la aplicación, el vínculo a la política de privacidad etc.

    6. Localización y Lenguaje

    • La localización y lenguaje de la aplicación debe ser establecido en el package.appmanifest. Ejemplo: si la app esta en español pero en el manifest dice EN-US será rechazada, puesto que esta cadena de localización indica que la App esta en inglés  y esto no es cierto.
    • Localización: La aplicación debe estar completamente localizada para los lenguajes que se hayan establecido en el package.appmanifest, esto incluye: textos y logos, screenshots etc. Si la aplicación va a nivel mundial se recomienda soportar 100% ingles.
    • Todo lenguaje soportado debe tener personalizados el 100% de los textos, imágenes etc. Localizaciones parciales son rechazadas automáticamente

    7. Política de Privacidad

    • Si la aplicación recopila información del usuario de alguna índole esta DEBE TENER una política de privacidad asociada

    Nota de WarNov: En realidad la condición no es recopilar info del usuario o no, sino el mero hecho de que en las capacidades de la app dentro del manifiesto de la misma, se especifica que la app se conecta a internet, como lo muestro en mi segunda anotación arriba.

    • Aunque la app no haga uso de ninguna información del usuario, se recomienda indicar eso en una política de privacidad sencilla.
    • La política de privacidad que se declara dentro del sitio web creado para la App, debe estar conforme a la estructura del sitio y no ser un archivo de texto nada más. La política debe ser descubrible por vínculos dentro del sitio.
    • Se recomienda que la política de privacidad sea accesible desde el Charm de configuración
    • Si se comparte información con terceros,  en el Charm de configuración junto con la política de privacidad se debe agregar una opción visible para autorizar o denegar ese uso de los datos.
    • Si el usuario no autoriza dicho uso la aplicación no debe perder toda funcionalidad, esto no es aceptado, la restricción de funcionalidad debe ser limitada.

     

    Muy bien, espero que puedan valerse de toda esta experiencia adquirida para minimizar la probabilidad de que sus apps sean devueltas tras un proceso de certificación fallido.

    Muchos éxitos!

  • WarNov Developer Evangelist

    Drupal sobre plataforma Microsoft

    • 0 Comments

    ¿Por qué habría de ser importante contar con otra alternativa de gestión de contenidos de código abierto sobre la plataforma web de Microsoft? En el caso de Drupal, porque responde con creces a las necesidades que impone la era social de los sitos web, al tiempo que reafirma la ausencia de límites cuando se despliega la creatividad de los programadores.

    Más de 4000 módulos disponibles gracias a la combinación del núcleo central de Drupal con la Acquia Network hacen de esta herramienta una de las preferidas por individuos y organizaciones para publicar, organizar y administrar contenidos en sus sitios web. El programa WebsiteSpark provee mucho respaldo para quienes deseen implementarlo; desde la perspectiva técnica, el soporte a PHP de Windows e IIS y la extensión WinCache para PHP 5.2 ó 5.3, permiten incrementar significativamente el rendimiento de los sitios credos con esta tecnología. El código fuente para lograrlo está disponible

    ¿Aún no probaste Drupal sobre Windows? ¡Descárgalo ahora!

    Recuerda que nuestro WebCamp Colombia 2010 está basado en la plataforma web de Microsoft donde todo es FREE y tienes muchas aplicaciones Open Source  para tu uso. Aquí algunas otras recomendaciones:

    Plataforma Web Microsoft



  • WarNov Developer Evangelist

    SQL Azure Internals

    • 0 Comments
    SQL Azure, la propuesta de base de datos relacional como servicio que ofrece Microsoft desde Windows Azure tiene varias diferencias con las implementaciones convencionales de SQL Server, a pesar de que para los usuarios finales el uso es prácticamente el mismo.

    Veremos en este video post, realmente cómo está compuesto SQL Azure. En dónde realmente se almacenan nuestras bases de datos. Cuál es el respaldo que ofrece SQL Azure a nuestra información. Cómo se logra un 99.9% de disponibilidad en bases de datos en la nube. Por qué Microsoft no nos cobra los logs, por qué el máximo tamaño de una DB por el momento es de 150GB, cuáles son las configuraciones de hardware de un servidor SQL Azure y muchas otras dudas que seguro hemos tenido alrededor de este tema.

  • WarNov Developer Evangelist

    Microsoft recibe tu feedback para mejorar

    • 0 Comments

    image

    Hoy en día, Microsoft Colombia ha tenido la oportunidad de mejorar muchos aspectos a favor de su relacionamiento con los profesionales en tecnologías de Información y de Desarrollo. Por ejemplo, en {Activa} encuentras todos los recursos para tu actualización permanente, solución de problemas técnicos y evaluación de nuevas tecnologías.

    Esto ha sido posible gracias a que a través de diversos mecanismos se ha podido recibir retroalimentación de nuestros usuarios, para poder ir mejorando cada vez más.

    En este caso, Microsoft quiere escuchar de ti para averiguar cómo estos aspectos se pueden seguir mejorando, para brindarte más apoyo en tu trabajo y crecimiento profesional.

    Así que es muy probable que hayas recibido una encuesta por correo electrónico, proveniente de feedback@e-mail.microsoft.com, cuyo asunto es: "Ayude a Microsoft a centrar su atención en Clientes y socios". Para Microsoft es muy valioso que nos colabores contestando esta encuesta, que nos ayudará a ofrecerte recursos superiores. Colabóranos para ser cada vez mejores!

  • WarNov Developer Evangelist

    .NET Avanzado: Closures

    • 0 Comments

    Voy a ponerlo lo más simple que pueda:

    Un Closure  es una entidad de código que encapsula un comportamiento dado teniendo acceso al contexto en que fue definido; en cristiano, es como una clase, pero no con tanta flexibilidad (solo admite una acción dada) y su estado no puede ser cambiado luego de ser inicializado. En síntesis, una seudoclase más especializada, que consume menos recursos. Y que es más felxible que una estructura, dado que se constuye con delegados, que pueden apuntar a distintos métodos.

    Cómo se construye?

    Tomar el framework 2.0 en adelante, usar sus delegados y métodos anónimos, generar un productor de delegados con un parámetro de configuración y se obtendrá un closure.

    Ha tenido por ejemplo que calcular un impuesto como el IVA que puede variar según el artículo?
    Por ejemplo para una crema dental es de 16% pero para un auto es 25%.

    Entonces el programador bien juicioso se hace el siguiente método:

    double IvaCalc(double tax, double amount);

    Así pues siempre que se vaya a llamar al método se han de pasar ambos parámetros:

    double imp1 = IvaCalc(25, 25800);
    double imp2 = IvaCalc(16, 4);
    dpuble imp3 = IvaCalc(16, 5800);

    etcétera

    Entonces se puede optar por hacer dos métodos; uno por cada tipo de IVA.
    Pero si son 10 tipos de IVA habrán 10 métodos?

    Así que se opta por hacer una clase calculadora de IVA:

    Código clase calculadora de impuestos en C#

    De esta manera basta con instanciar un objeto por cada tipo de IVA y ponerlo a trabajar; esto minimiza la cantidad de código escrita, y es bastante claro:

    IvaCalculator autoCalc=new IvaCalculator(25);
    IvaCalculator prodCalc=new IvaCalculator(16);
    double imp1 = autoCalc(25800d);
    double imp2 = prodCalc(4d);
    double imp3 = prodCalc(5800d);


    Pero de nuevo... si son diez tipos distintos de IVA, creará diez instancias de objeto? Es justo tanto empleo de memoria al tener un objeto completo solo para hacer una operación?
    No lo creo... precísamente para solventar esta situación son útiles los closures.(Entre otras)

    Un closure permite reflejar la simple funcionalidad de la pequeña clase que diseñamos anteriormente, sin incurrir en el overhead del objeto como tal. Para lograrlo, se requiere una forma de mantener un estado (en este caso, la tasa del impuesto) para no tener que estar pasando el parámetro de configuración en cada llamado. Además se requiere una operación sobre ese estado. Cómo lograrlo sin tener que hacer un objeto?

    La operación como tal, se logra con un simple método. Pero este método debe ser configurable en su creación de manera que tenga un estado.

    Para que se pueda configurar es necesario que exista una variable en un ambiente léxico (scope) superior al del método, de manera que esta variable pueda ser inicializada sin necesidad de llamar al método. Esta, será pues la variable que indica el "estado" del método. Pero igual, eso está dentro de una clase. De hecho en C# todo lo que ejecute, ha de estar dentro de una clase. La ventaja ahora, es que vamos a trabajar dentro de la misma clase de ejecución de nuestro flujo. No tendremos que crear más instancias.

    Tanto el parámetro como la operación deben quedar encapsulados dentro de un mismo ambiente léxico dentro de la clase, para que tengamos la unidad requerida para poder generar instancias (pero no de una clase que es lo que queremos instanciar, sino de algo más liviano que llamaremos "enclosure"). Para esto es necesario poder hacer referencia al método dado.

    En .NET qué nos permite hacer referencia a métodos? Si... correcto: los delegados. Entonces generamos un ambiente léxico que tenga al delegado referenciando al método y al parámetro de configuración. Obviamente si estamos dentro de una clase y no queremos generar otra, ese ambiente léxico es un nuevo método. Este método deberá retornar el delegado apuntando a la operación ya configurada como es debido, pero además el método al que apunte el delegado deberá estar declarado inmediatamente, de manera que el parámetro de configuración del mismo sea accesible a éste, desde el método que lo contiene.

    En teoría suena bien. Pero cómo lograr que un delegado apunte a un método que se declara "en línea" junto con éste?

    Ahí es donde entran los métodos anónimos. Son precisamente eso: Métodos declarados en línea donde son requeridos por los delegados. Generalmente, los delegados se han inicializado con el nombre de un método que cumpla el contrato de su firma. Ahora (Framework 2.0 en adelante), no es necesario declarar el método aparte para poderlo referenciar luego por un delegado (lo que impediría acceder al dichoso parámetro de configuración) sino en línea junto con la declaración del delegado:

    delegate int MyDelegate(int a, int b);
    MyDelegate myDel = delegate (int a, int b)
    {
       .....
       return ....
    };

    No olvide el ";".

    Ya con este conocimiento, podemos generar el método que queremos:

    //Este delegado que permitira
    delegate double IvaCalculator_(double tax);

    IvaCalculator_ ivaCalcProducer(double tax)
    {
       return delegate(double amount)

       {
          return amount*tax;
       };
    }


    Exótico no?

    Pero a pesar de ello, logramos lo deseado: El método toma una variable de configuración. Así tenemos estado y manipulación de estado. Lo que haría una clase. Entonces ahora cómo se operaría es muy parecido al uso de clases anterior; solo que ahora no hay overhead por creación de nuevos objetos. Lo que se crean son nuevos delegados. Uno por cada tipo de tasa en este caso. Ellos "cuestan" mucho menos que un objeto.

    IvaCalc_ ivaCalc16=ivaCalcProducer(16);
    IvaCalc_ ivaCalc25=ivaCalcProducer(20);
    double imp1 = ivaCalc25(25800); 
    double imp2 = ivaCalc16(4); 
    double imp3 = ivaCalc16(5800);

    Descargar Ejemplo Completo (Aplicación de consola en C# mostrando el uso de Closures)

    Y listo. Así se construyen y usan los closures. Ahora ya puede ir y alardear un poco con su equipo de desarrollo acerca del misterioso "Closure"!!

     Open mind 4 a different Coding!!!

  • WarNov Developer Evangelist

    Tú nos puedes ayudar a ser mejores!

    • 0 Comments
    clip_image001
  • 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

    Windows Azure también es para ITPROS!

    • 0 Comments

    Nuestra plataforma de Cloud Computing no sólo ofrece mejores servicios de software en la nube, más baratos y más escalables y robustos para los usuarios, sino que también nos ofrece a desarrolladores muchas ventajas frente a otros modelos de programación. Por si fuera poco, para los ITPROS también hay!

    Cuándo en los modelos de despliegue tradicionales habían tenido la oportunidad de ampliar la cantidad de servidores en una solución solo cambiando un numerillo en un archivo de configuración?

    En el video que les presento a continuación, observamos cómo un ITPRO puede hacer una instalación de una aplicación en minutos y luego hacerla crecer de una manera muy sencilla.

    Con este fin creé una sencilla aplicación Web que nos informa el ID del servidor que está respondiendo. Cuando solo hay un servidor, siempre se muestra el ID 0, pero cuando hay varios, se muestra alternativamente que responde el 0, el 2, o el 1.

    Recuerdo de mis épocas de desarrollador puro, pasar hasta 5 horas tratando de actualizar un portal web asp.net en un hosting de MIA, consistente en un clúster de 6 nodos, junto con un equipo de 4 personas. Hoy eso no me tomaría más de media hora y lo podría hacer automatizadamente con un script.

    Enjoy!

     

    (Disclaimer: El video lo grabé de una teleconferencia que hice y por ende pueden encontrar ciertas deficiencias en el sonido; sin embargo lo encontré de mucho valor y quise compartirlo con ustedes; quedo atento ante cualquier duda)

  • WarNov Developer Evangelist

    Silverlight Tour – Bogotá, Colombia (27Abr – 29Abr 2010)

    • 0 Comments

    Con permiso de mi buen amigo Rodrigo Díaz  me permito referenciar un post acerca de su visita a Colombia no solo para ser speaker de nuestro gran evento presencial para desarrolladores del 26 de Abril, sino para dictar también el curso de Silverlight 4 que hace parte del internacional Silverlight Tour:

    El Curso de Silverlight: Silverlight Tour Workshop en Español regresa a la capital colombiana el próximo día 27 de Abril.  Se llevará a cabo del 27 al 29 de Abril 2010 con un horario de 08:00 a 19:00 horas los tres días.  Les recuerdo que el material y todo el curso está completamente en Español :) .

    Asimismo, tengo el gusto de informarles que como una promoción especial en conjunto con Microsoft Colombia, esta fecha en Bogotá cuenta con 50% de descuento directo sobre el precio normal en Colombia.  Además, será el primero en utilizar el material actualizado a Silverlight 4 RC anunciado y liberado oficialmente la semana pasada en el marco del evento MIX 2010 en Las Vegas.

    Si desean comprender a profundidad la platataforma de desarrollo de Silverlight, conocer el uso de Expression Blend 4 (Beta), y prepararse para la construcción de aplicativos para Windows Phone 7 esta es su mejor opción.



  • WarNov Developer Evangelist

    Alternativas para evitar abuso de los portales

    • 0 Comments
    Uno de los principales riesgos en la operación de nuestros portales es su posible abuso por parte de terceros que con el fin de hacerse a la base de datos que los alimentan, están en capacidad de ejecutar todas las consultas que a bien tengan, tanto manual como automáticamente. En este artículo me estaré enfocando en ambientes sin manejo de sesión y autorización que son los más vulnerables a este tipo de anomalías.

    Los portales son muy vulnerables a estos abusos (que no se pueden catalogar realmente como “ataques”) dado que la naturaleza del negocio implica que todas las consultas estén abiertas a todos los públicos y no con menos importancia, a los motores de búsqueda; de manera que no existen mecanismos de autenticación que impidan por ejemplo el acceso al sitio por medio de robots o programas que extraen automáticamente el contenido de nuestros sitios; además existen efectos colaterales como disminución del ancho de banda y de velocidad de proceso en los sitios.
    Existen básicamente dos tipos de acciones que podrían ayudar a mitigar este riesgo. El primer tipo comprende las acciones ejecutadas a nivel de la infraestructura de la aplicación. El segundo tipo consiste en las acciones ejecutadas a nivel de desarrollos adicionales en la aplicación como tal.

    Infraestructura
    Existen servidores de seguridad que reciben todas las peticiones de los clientes antes de que estas lleguen a la aplicación como tal. Esta herramientas se instalan al frente de los servidores web. Y ayudan a través de los siguientes mecanismos:

    Cookies
    Las cookies estarían almacenando la cantidad de requests que está haciendo cada cliente en una unidad de tiempo dada. Esto requiere sin embargo que se exija a todos los clientes el uso de cookies; hay que tener en cuenta sin embargo, que existen muchos usuarios que desactivan estas cookies en sus browsers.

    Javascript
    El uso de javascript permite generar rutinas que los robots no podrían seguir, de manera que el acceso quedaría restringido a estos entes automatizados. La gran contra que tiene este enfoque, es que puede requerir procesos de considerable costo en el servidor. Además que se le estaría restringiendo el uso también a motores de búsqueda como google que usan robots para obtener información de los sitios.


    Aplicación
    A nivel de aplicación el conjunto de acciones posibles es más diverso. Se trata de rutinas destinadas a detectar accesos irregulares a la aplicación. Estas pueden ser provistas como productos terminados ya hechas por terceros, o como desarrollos nuevos dentro de la aplicación.

    Delay
    Existen herramientas como ISTools de Peter Blum, que basadas en un patrón de IP (esto puede ser contraproducente en el caso de que las ips reales estén siendo reemplazadas por las ips de los ISP) detectan los accesos irregulares y generan retardos en las respuestas, advertencias y finalmente denegación del servicio a los supuestos atacantes. Un caso favorable es que en algunas ocasiones los ISP mantienen la ip de sus clientes y la reenvían como una variable HTTP que puede ser consultada. Pero esto no ocurre siempre.

    Javascript y Cookies
    Ambos mecanismos funcionan con desarrollos de productos de igual forma a la que fue descrita en el apartado de infraestructura.

    Listado de Robots
    Herramientas de terceros permiten consultar un IP dada y verificar si ha sido tildada como un robot para en ese caso tomar acciones al respecto.

    Cómo obtener la solución al problema
    Para generar una solución se han de tener en cuenta los siguientes puntos:
    1. Hoy en día no hay una solución ad-hoc que abarque todo el problema sobretodo sin efectos colaterales.
    2. Para generar una solución es muy necesario comenzar por definir unas políticas de detección de abuso que permitan establecer los parámetros para las herramientas que se usaran/construirán
    3. Los mayores problemas se presentan cuando no es posible obligar la autenticación en los portales luego no hay manejo de sesión
    4. Existen ISPs que direccionan los requerimientos con una IP única
    5. Existen usuarios que no permiten el uso de cookies en sus máquinas
    Teniendo en cuenta lo anterior, se puede sugerir implementar una solución compuesta tal como se describe a continuación:

    1. Definir la política de uso abusivo (Esto implica declarar cuándo se considera que se está extrayendo información del sitio de manera inescrupulosa; por ejemplo, que un mismo usuario visite más de 50 páginas de resultados de una misma búsqueda, o que realice más de 20 búsquedas distintas en un determinado lapso de tiempo)
    2. Definir las acciones a tomar luego de la violación de la política. (Redireccionar a un captcha, denegar el servicio, retardar el servicio, etc.)
    3. Proveer un mecanismo que permita avisar acerca de la violación de la política de acceso. Dependiendo de lo elaborado de la política, esto puede ser ejecutado desde la infraestructura o de la aplicación. Una política sencilla como solo contar el número de requests de una ip dada se puede implementar en la infraestructura. Una política algo más completa como la descrita como ejemplo en el numeral 1, requiere de un a implementación en el lado de la aplicación.
    4. Implementar e integrar los puntos anteriores de manera que cuando el mecanismo de advertencia avise acerca de un posible abuso de acuerdo a las políticas definidas, se tomen las acciones pertinentes.

    Recomendaciones acerca de la política de abuso


    Un acceso abusivo siempre puede ser detectado cuando desde una misma IP son hechos muchos requests. Pero esto mismo puede suceder con el caso de los ISP que tienen una sola ip de salida. Para evitar tachar incorrectamente a los ISP es necesario verificar el tipo de requests que se están haciendo desde una ip sospechosa. En general las consultas sobre los sitios no abarcan más de 10 páginas de resultados de un mismo tema. También de acuerdo a las estadísticas se puede establecer un límite para distintas búsquedas en un tiempo dado por una ip dada; por ejemplo más de 100 búsquedas distintas en 10 minutos indicarían un comportamiento malicioso.

    Entonces ante una violación a la política establecida anteriormente se garantizaría que no se cae en el falso positivo del ISP así que ante este comportamiento sospechoso se podría iniciar con buscar la IP en una base de datos provista por un tercero en la que están registrados los robots en la actualidad. Si este filtro pasa, se continúa con la verificación de si se trata de un robot autorizado como el de google o yahoo; esto se logra a través de un DNS lookup reverso. Aquí entonces si no pasa la validación, se procederá con la acción correctiva.

    Como inconveniente a esta solución, se cita la complejidad de su desarrollo, ya que requiere hacerse del lado de la aplicación que al no tener manejo de sesión, requeriría una implementación con almacenamiento en base de datos por ejemplo.
  • WarNov Developer Evangelist

    ExtraSmall Instances de Windows Azure disponibles en Beta para todo el público

    • 0 Comments

    En el PDC10 de octubre pasado, se anunció un programa de beta privada para la instancia ExtraSmall de Windows Azure. Esta instancia más pequeña proporciona a los desarrolladores un entorno de formación y desarrollo rentable.

    image

    También, los desarrolladores pueden utilizar la instancia ExtraSmall para prototipos de soluciones de nube a un menor costo. Para ver una comparación de precios y recursos de tamaños de instancia, haga clic aquí.

    Esto significa por ejemplo que podemos hacer un piloto con un web y un worker role ambos (ExtraSmall: $0.05 x 2 = USD$0.1 la hora) en la nube a un costo aún menor que tener una instancia pequeña (small) con solo alguno de estos dos roles (USD$0.12).

    Desde entonces, hemos visto mucho interés en esta instancia por lo que me complace anunciar que todos los clientes ahora pueden utilizar la versión beta ExtraSmall de Windows Azure. Para obtener información sobre cómo configurar la aplicación para comenzar a utilizar instancias ExtraSmall en Windows Azure, consulte este artículo de MSDN Library.

    Para finalizar es muy importante tener en cuenta que las horas de las instancias Extra Small no se cuentan dentro de las ofertas Introductory Special, MSDN Premium o Development Accelerator en cuyo caso, el consumo se facturará aparte de dichas ofertas.

  • WarNov Developer Evangelist

    WP7: Agentes en Background

    • 0 Comments

    Como su nombre lo indica, nos van a permitir ejecutar trabajos en Segundo plano, aún cuando la aplicación no esté activa.

    OJO: No están disponibles para los aparatos que solo tienen 256Mb de memoria.

    Tipos de Tareas:

    Periódicas

    Corren en un pequeño intervalo y recurrentemente. Por ejemplo para informar la locación del dispositivo y ejecutar sincronizaciones de poco tamaño.

    Intensivas

    (En Recursos) Largos períodos de ejecución cuando el teléfono cumple ciertas características de uso (actividad de cpu, fuente de poder, tipo de red. Útil para sincronizar grandes cantidades de datos al teléfono cuando no está siendo usado.

    Una app solo puede tener un agente de estos, que puede ejecutar ambos tipos de tareas.

    Restricciones:

    Existen unas apis que no se pueden usar dentro de las tareas que ejecutan los agentes: Cámara, vibración, radio, sensores, notificaciones, XNA, y otras que encuentran aquí.

    La geolocalización está disponible de manera restringida, ya que no reporta la ubicación real, sino que hace un cache cada 15 minutos, sin embargo, acciones como las que usan los HttpWebRequests desde los agentes sí se pueden hacer sin problema.

    Los agentes no pueden usar más de 6MB, excepto cuando manejan audio, en cuyo caso tienen hasta 15Mb. Cuando se exceden estos límites, la tarea se apaga de inmediato. Cuando cualquier tarea es apagada dos veces debido a un alto empleo de la memoria, dicha tarea es removida del agendamiento de tareas del teléfono. Es útil recordar que estos límites no aplican en modo debug, por lo que es necesario emplear el API ApplicationMemoryUsageLimit para verificar cuánto está empleando la tarea en tiempo de depuración.

    Los agendamientos de las tareas no se pueden hacer por un tiempo mayor a dos semanas. Para poder reagendar, la app tienen que ejecutarse en primer plano.

    Cuando se tienen agentes periódicos, lo normal es que corran mínimo cada 30 minutos. Este tiempo puede desfasarse hasta en 10 minutos, debido a otras tareas que están en segundo plano. La ejecución no debe ser mayor a 25 segundos.

    WP7 tiene un modo de operación llamado Battery Saver: Este modo que solo se puede habilitar por el usuario, podría impedir que los agentes periódicos se ejecuten.

    WP7 tiene una restricción acerca de la cantidad de agentes que pueden estar corriendo en un dispositivo dado y esta puede ser tan pequeña como 6. Antes de este límite, WP7 puede lanzar mensajes al usuario que indiquen que la cantidad de agentes está subiendo mucho y puede que la batería se agote más rápido. Si el límite ya se ha cumplido, cuando la app trata de agregar una nueva tarea, habrá una excepción de tipo InvalidOperationException que debería ser manejada para que la app no se estrelle por este motivo.

    Hay documentación de buenas prácticas que pueden encontrar aquí. En el caso de los agentes intensivos, estos pueden durar ejecutándose hasta 10 minutos. No pueden correr a menos que el dispositivo tenga más de 90% de batería, la pantalla esté bloqueada, no exista una llamada activa, esté conectado a una fuente de poder externa y a datos en una red distinta a la red celular. Si una tarea intensiva comienza a ejecutarse y por algún motivo alguna de las condiciones anteriores deja de cumplirse, de inmediato la tarea es terminada.

    Es bueno tener en cuenta que estas tareas intensivas pueden llegar a no ejecutarse nunca, debido a la gran cantidad de condiciones impuestas. Por ejemplo si el usuario no tiene WiFi en ningún lado, la tarea nunca se ejecutará.

    En mi sitio de preguntas y respuestas he respondido algunas preguntas acerca de los agentes en background:

    1. Hay alguna forma de manejar con código en wp7 que un agente sea suspendido porque hay bajos recursos de memoria o de batería?

    2. En wp7, se pueden concatenar varios agentes periódicos para lograr tener reportes cada 2 minutos en vez de cada 30?

    3. Es posible evitar a través de código que un usuario de WP7 apague los agentes de ejecución en background?


    Bien; ya que vimos las generalidades, si quieres incluir Background Agents en tu app, sigue este link, donde nos enseñan cómo implementarlos.

  • WarNov Developer Evangelist

    Modificando los Settings de una aplicación Windows desde el código

    • 0 Comments

    En ocasiones es necesario ajustar la configuración de una app. por ejemplo, configurar cuál va a ser el directorio de trabajo, o qué colores quiere el usuario para la interfaz, etc.

    Las aplicaciones .net tienen un archivo llamado app.config (o web.config en el caso de las aplicaciones web), que puede contener estas configuraciones.

    Por lo general esas configuraciones se hacen a mano en el caso de las aplicaciones web. Pero en ocasiones es necesario que estas configuraciones se modifiquen desde el mismo código.

    System.Configuration contiene todas las herramientas para lograrlo, pero es una API que tiene muchísimas funcionalidades para manejar la configuración de las aplicaciones. Por eso puede resultar fácil perderse tratando solo de hacer unas sencillas manipulaciones en el archivo de settings.

    Aquí muestro de una forma sencilla cómo buscar un valor de llave de configuración de una aplicación Windows. Si no existe, cómo agregarlo y luego cómo modificarlo.

        //Objeto de configuración
        var config=ConfigurationManager
    .OpenExeConfiguration(ConfigurationUserLevel.None); //Búsqueda de un setting en particular var pathSettings = config.AppSettings.Settings["MusicPath"]; //Si está en nulo, es porque no se encuentra.
    //Entonces lo agregamos
    if (pathSettings == null) config.AppSettings.Settings
    .Add("MusicPath",ci.MusicPath); //Si no, ya está agregado, entonces lo modificamos else pathSettings.Value = newValue; //Grabamos la configuración en disco de nuevo. config.Save();

     

    Es necesario operar de esta manera, dado que intentar por ejemplo config.AppSettings.Settings["MusicPath"]=newValue; no es legal de acuerdo a la accesibilidad que se le ha dado a este indexador.

  • WarNov Developer Evangelist

    Del KeyNote de Windows Phone 7 en MIX 10 al MIX 11

    • 0 Comments
    Hace poco más de un año se mostraba al mundo el Windows Phone 7 a través del MIX. Principal evento de Microsoft para desarrolladores y diseñadores. Llevado a cabo en Las Vegas. La siguiente edición será la segunda semana de abril. Detalles aquí.
    Debido al auge que estamos teniendo con nuestro teléfono y a la cercanía de la siguiente edición del evento donde esta vez será protagonista Windows Phone 7, me he permitido volverles a traer este post del año pasado, donde se explica muchas de las ventajas de Windows Phone 7 y se ven como los planes trazados se han llevado a cabo según lo trazado.
    Welcome to mix

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

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

    WarNov y Scott Guthrie

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

     

    Un Teléfono Amigable

    IMG_7907

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

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

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

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

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

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

    IMG_7908 IMG_7909

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

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

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

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

    Un teléfono que tiene de todo!

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

    IMG_7915

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

    IMG_7904

    IMG_7946 IMG_7945

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

    IMG_7918 IMG_7920 IMG_7922

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

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

    IMG_7924 IMG_7927

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

    Otros aplicativos que vi bastante interesantes:

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

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

    IMG_7936 IMG_7939 IMG_7976

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

     IMG_7950

    Las versiones Beta de Blend se pueden bajar de:
     http://expression.microsoft.com/en-us/cc507094.aspx  --> Ya estamos en 2011 y todas las herramientas de producción las encuentran al final de este post

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

     

    Estaré cubriendo para ustedes el MIX11 con información adaptada para nuestro entorno y en español. Síganme en twitter

  • WarNov Developer Evangelist

    Métodos Parciales (Partial Methods)

    • 0 Comments

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

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

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

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

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

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

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

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

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

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

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

    Pueden encontrar información de referencia aquí.

     

  • WarNov Developer Evangelist

    Añadir IP a Azure SQL DB con PowerShell

    Azure brinda enormes ventajas; entre ellas, la posibilidad de poder configurarlo y administrarlo desde cualquier parte del mundo. Sin embargo en ambientes como el de SQLDB (antes conocido como SQL Azure) para poder entrar a administrar la DB la ip de nuestra máquina de trabajo ha de estar autorizada; así que cada vez que nos conectamos desde una IP nueva, debemos entrar al portal a autorizarla… y esto me parece una pérdida de tiempo que puede ahorrarse a través de las herramientas de automatización que Azure provee tanto para línea de comandos multiplataforma (Windows, Linux, MacOS) como para PowerShell (únicamente en Windows)

    image

    Las interfaces de comandos cross platform están basadas en JavaScript y requieren de NodeJS; las puedes descargar de aquí:

    Pero; aunque hasta aquí vamos bien, podemos ir mejor! Y es que en Windows, como lo mencioné existe PowerShell que ofrece muchas más utilidades que la simple consola de comandos. Así que también se publicaron los cmdlets (así se llaman los comandos en PowerShell) para esta plataforma y los pueden descargar de aquí. El poder de PowerShell lo lleva hasta a integrarse a Visual Studio 2013, tal como lo ilustro en este post.

    Los nombres técnicos que adquirieron cada uno de estos conjuntos de interfaces fueron azure-sdk-tools para PowerShell y  azure-sdk-tools-xplat  para las consolas cross platform. Y, siguiendo los links citados, podrán observar que además de todo, tanto el código C# para PowerShell como el código JavaScript para xplat ha sido abierto y publicado en GitHub.

    Y bien, ya que los empapé con el contexto que gira alrededor de mi solución para el problemilla aquel de agregar la IP a mi servidor de SQLDB, les comento que decidí usar PowerShell con el fin de aprovechar que ahora puedo editar código PowerShell desde el mismísimo Visual Studio 2013, aprovechando características como IntelliSense y demás que hacen la codificación más agradable. Para lograr esto, instalé PowerShell Tools for Visual Studio 2013, que es una extensión para nuestro editor preferido. (Si quieres saber cómo construir tu propia extensión, haz clic aquí).

    Luego de esto, de una manera bastante cómoda escribí las siguientes líneas de código, que con fines ilustrativos comentaré de manera extensiva:

    #
    # SQLDBAuthCurrentIP.ps1
    #===========================
    #By: @WarNov 7/12/2014 - 18:12
    #This script adds to the Specified SQL DB Server Database the IP
    #of this machine as a new firewallrule
    
    
    
    Param(
    
        #Nombre del servidor SQLDB ej. p5x8y4oi1z    
        [string]$serverName,  
        #Nombre de la regla de firewall que se insertará. A pesar de ser
    #obligatorio en el comando de Azure, en este script es opcional #si se omite, el script produce un GUID como nombre
    #y lo pasa a Azure
    [string]$ruleName, #La ruta donde el archivo *.publishsettings está localizado con
    #la información de la suscripción de Azure a la que accederemos
    [string]$publish ) #Hacemos referencia a la suscripción de Azure, sencillamente
    #importando el archivo



    Import-AzurePublishSettingsFile -PublishSettingsFile $publish #Procesamos el nombre de la regla. Si viene vacío,
    #creamos un GUID. Observen el manejo que se da a los comparadores
    if($ruleName.Length -eq 0){
    #A través de .NET instanciamos la clase guid y asignamos
    $ruleName=[guid]::NewGuid(); } #Ahora obtendremos la ip que queremos agregar. #Dado que no hay forma de obtener la ip externa usada por nuestro
    #cliente es necesario usar una herramienta online que nos informe
    #cual es nuestra ip; en este caso, usaré una que construí yo mismo
    #y que corre en Azure basada en un Generic Handler sencillo de
    #ASP.NET; con esta sencilla línea de código:
    #Request.UserHostAddress #Luego a través de .NET creamos un WebClient #y ejecutamos un downloadstring especificando la url
    $ipAddress=(New-Object Net.WebClient).
    DownloadString('http://warnov.com/@ip')
    #Finalmente ejecutamos el comando principal,
    #que agregará la IP al servidor bajo la suscripción de Azure
    New-AzureSqlDatabaseServerFirewallRule -ServerName $serverName ` -RuleName $ruleName -StartIpAddress $ipAddress `
    -EndIpAddress $ipAddress

    Ya con este script listo, lo podemos ejecutar desde el mismo VS2013 para chequear si hay posibles errores.
    Una vez depurado, lo podemos llamar desde la consola de comandos, pasando como parámetro el nombre del servidor, el nombre de la regla (opcional) y la ruta del archivo de .publishsettings de Azure que se requiere para que tengamos acceso a la suscripción desde nuestra máquina. Este archivo se descarga una sola vez con este comando: azure account download

    Un ejemplo de ejecución:

    image

    Y, como en la mayoría de casos tanto el nombre del servidor como el archivo de settings es el mismo, lo que podemos es hacer otro script que ponga estos parámetros automáticamente por nosotros, así cuando necesitemos agregar la IP solo llamamos a este segundo script sin necesidad de poner parámetros.

    Así pues, hemos visto cómo mediante PowerShell podemos automatizar tediosas tareas como la de agregar la IP a Azure como una regla de firewall cada vez que queremos administrar nuestras bases de datos SQL DB desde una máquina distinta.

    He abierto el código de este pequeño proyecto en Github, donde también podrán encontrar por ejemplo, una rutina que permite borrar todas las reglas de firewall que tengamos para un servidor SQL DB dado, a través de PowerShell:

  • WarNov Developer Evangelist

    SQL Azure BACPAC - DB BACKUP en la nube (Nuevo Portal)

    • 0 Comments

    El formato de archivo BACPAC, se refiere a un nuevo tipo de archivo que contiene tanto el esquema, como los datos de una base de datos.

    En el Nuevo portal de Administración Windows Azure, en la sección de Bases de Datos, existe una opción para exportar una db existente, lo que nos produce un archive BACPAC que es almacenado en una de nuestras cuentas de almacenamiento de Azure. Además cuando se va a crear una nueva DB, se da la opción de importarla desde un BACPAC existente.

     

    Por ejemplo para exporter, nos ubicamos sobre la db a exporter y le damos click o tap a Export, lo que nos muestra el siguiente cuadro de diálogo:


    newbacpac


    Esta operación requiere una cuenta de almacenamiento de Windows Azure para guardar esa copia BACPAC en el blob storage. En este caso, debemos especificar los datos de la cuenta y el container dentro de esa cuenta donde va a quedar la copia BACPAC.

    Luego de especificar la cuenta, comienza a generarse la copia. Este es un proceso asíncrono, cuyo estado se puede consultar entrando a la sección de mensajes del portal:

    image

        

    Una vez creada la copia, podemos importer a través del botón que tiene ese nombre en la sección de Databases del portal, o a través de las opciones de crear una nueva DB:

    newimport1

    Luego de esto específicamos la ruta dentro del almacenamiento de Azure  donde dejamos el bacpac.

    newimport2


    newimport3

    Luego de esto, comienza la importación de la DB

    Lo mejor: Estas operaciones son susceptibles a ser automatizadas gracias al API de REST para acceder a los servicios de BACPAC; de esta forma, podemos programar los backups de nuestras DBs, y estos quedarán almacenados en el blob storage de Azure, que vale un centavo de dólar la giga al mes.

  • WarNov Developer Evangelist

    WinRT: Live Tiles con Background Tasks

    Los live tiles como todos sabemos, nos permiten ver contenido de una app de WinRT sin necesidad de abrir dicha app.

    Hay varias formas de obtener contenido para los live tiles de tu app.

    Una de ellas es a través de Background Tasks.

    En este video, te mostraré cómo lograr lo anterior en menos de 20 minutos.

    image

     

    Veremos cómo tenemos que crear un proyecto aparte de tipo WinRT Component para exponer la funcionalidad de nuestra tarea en background, que en este caso no es más que usar la clase SyndicationClient para descargar el RSS en este caso de mi blog: http://warnov.com/@BlogRSS

    Este RSS traerá los últimos títulos de los posts de mi blog y los expondrá como contenido para el live tile de una app que para este ejemplo, es una app vacía.

    Un tema importante es declarar un objeto deferral para que Windows no termine nuestra tarea en segundo plano cuando ésta se encuentre ejecutando operaciones asíncronas. Muchas de las fallas que he visto en los updates de los tiles con Background Tasks, obedecen a la falta de declaración de este objeto.

    Luego, basta con referenciar el assembly de nuestra tarea dentro de la app en la que deseamos los live tiles. Ajustamos el manifest declarando que usaremos una Background Task, y especificamos las imágenes para los tiles.

    Se registra la tarea en el inicio de la app y listos para el debugging.

    El debugging de tiles es especial porque éstos corren en un assembly distinto al de la app. Por lo que es necesario usar Location Debugging. Esto lo vemos de manera más precisa en el video.

    Enjoy!



  • WarNov Developer Evangelist

    LightSwitch: Replicando Cambios de Base Datos a Windows Azure - ERROR: Incorrect syntax near 'MULTI_USER'

    Este vago, vaguísimo error, que se presenta cuando desplegamos una solución de LightSwitch a la nube, es totalmente aterrador y deja inusable nuestra solución.

    image

    Después de experimentar bastante, detecté que sucede cuando hago cambios a la estructura física de la base de datos en desarrollo, sobre objetos ya existentes en el despliegue anterior. Por ejemplo eliminar una columna de una tabla, quitar una relación, cambiar nombres de columnas, etc. Etc.

    En general, cuando se habla de eliminación o actualización de elementos físicos de la DB de LightSwitch en Azure (que obviamente es una SQL Azure), puede ocurrir que el asistente de despliegue no logre hacer esas modificaciones a la DB, y termine arrojando ese abstracto error con el que arranqué el post.

    Es por esto que cuando estemos haciendo desarrollo de mejora continua sobre nuestra solución de LightSwitch, es necesario estar muy pero muy pendiente de cuándo hacemos este tipo de cambios sobre la solución. Recomiendo anotarlos muy detalladamente. Pues si el despliegue falla con el error que les he mencionado, tendremos que usar esa lista para reproducir exactamente los cambios físicos de la DB en producción.

    No habrá otra alternativa que ejecutar estos cambios manualmente y realizarlos con tanto cuidado, que reflejen exactamente lo que se cambió en desarrollo muy probablemente de manera visual a través de los Wizards y Designers de LightSwitch.

    Esto no ocurre siempre. Si por ejemplo los cambios incluyeron la adición de una nueva tabla o una nueva relación, en general esto no presenta problemas. La adición es manejada con más efectividad. Sin embargo siempre es bueno llevar un log de los cambios físicos de la base de datos, por si algún cambio no es realizado correctamente en producción, poder ir a ejecutarlo manualmente.

    Una vez ejecutamos esos cambios y dejamos la DB en el estado esperado, el deployment funcionará correctamente y podremos volver a respirar tranquilos.

  • WarNov Developer Evangelist

    Debugging de Windows Phone Apps con Fiddler

    • 0 Comments

    Para quienes no lo conocen, Fiddler es un impresionante aplicativo gratuito creado por un colega de Microsoft: Eric Lawrence. Es usado básicamente para capturar tráfico HTTP y si lo deseas, modificarlo. Sin embargo, posee decenas de utilidades más relacionadas con el tráfico HTTP; esto es útil para hacer depuración de aplicaciones que se conectan a servicios web, o aplicaciones web como tal.

    He encontrado supremamente útil por ejemplo, usar Fiddler para hacer depuración de un par de Apps que estaba construyendo y que consumían servicios de Windows Azure, pues Fiddler se puede configurar también para que escuche las transmisiones HTTP originadas por el emulador de Windows Phone. De esta manera, puedo ver claramente cuáles son los requests que está haciendo mi app, y qué es lo que se está retornando desde la Web. Por ejemplo aquí pude ver que el servicio de Windows Azure al que estaba accediendo la app ya no existía:

    image


    Para configurar Fiddler para el emulador de Windows Phone, has de tener la última versión y luego configurarle de esta manera:


    1. Tools->Fiddler Options
    2. Connections tab -> Allow remote computers to connect -> OK
    3. Escribir este comando en la caja de QuickExec (Cuadro de texto en la esquina inferior izquierda de Fiddler):
    prefs set fiddler.network.proxy.registrationhostname NOMBREDETUMAQUINA
    4. Cerrar y reiniciar Fiddler
    5. Reinicia el emulador y ya podrás hacer análisis de las comunicaciones HTTP que se originan desde el mismo Smile

  • WarNov Developer Evangelist

    Windows Apps: Para qué países debería publicarlas?

    • 2 Comments

    El Windows Store y el Windows Phone Store, nos permiten escoger los países en los que nuestras apps estarán disponibles. Podemos escoger uno o varios. Esta segmentación de países existe porque a veces queremos que nuestras apps estén en un solo país o en determinados países y además porque las leyes y costumbres de diversos países pueden provocar que el contenido de ciertas apps sea inaceptable.

    Esto nos lleva a que en general, cuando publicamos nuestra app, escojamos solo publicarla para el país objetivo, que la mayoría de las veces es el país del Desarrollo. Por decir algo, un desarrollador Colombiano, escoge publicar su app en Colombia únicamente.

    Esto no está mal, pero podría estar mejor… por qué?

    La mayoría de las apps están creadas en EEUU. Y los desarrolladores de allí, las han puesto solo disponibles para ese país. De manera que usuarios del resto del mundo que tengan configurado su store para sus países de origen (con un procedimiento como el descrito aquí), no las podrán ver. Es así como varios usuarios optarán por cambiar la región de su store a EEUU y de esa manera poder acceder a esas apps. Esto implica obviamente, que dejarán de ver las apps que solo estén creadas para el país de origen y no estén validadas para estar en EEUU.

    Entonces es aquí donde debemos tener en cuenta que si queremos que esos usuarios también encuentren nuestras apps, deberemos publicar nuestra app en EEUU también, aparte de haber seleccionado también nuestro país de origen. De esta manera aseguramos que tanto usuarios que tengan sus máquinas configuradas con nuestro país de origen, como aquellos que la hayan cambiado a EEUU, puedan encontrar la app.

    mapapp

    Desventajas? Ninguna. Podría pensarse que al poner la app en EEUU tendríamos crear una versión en Inglés para la misma. Pero este no es el caso. Podemos poner apps en cualquier idioma sobre cualquier país.

    En conclusión, si quieres que tus apps sean más visibles, aparte de ponerlas disponibles para los países target, piensa la posibilidad de ponerla disponible también para EEUU.

  • WarNov Developer Evangelist

    Windows Azure: Migrando desde V1.2 a la V1.3 de Noviembre

    • 0 Comments

    Fácilmente podría decir que esta actualización es la más drástica de todas las ocurridas a Windows Azure desde su lanzamiento. Si no la más drástica, es la que más novedades nos ha traído en una sola entrega.


    Coincidiendo con el PDC10 ocurrido en el campus de Microsoft Corporation en Octubre de este año, numerosos anuncios se hicieron públicos acerca de nuestra plataforma de cloud.


    La aparición de un nuevo rol: El VM Role que le da el sabor de IaaS a Windows Azure, los permisos elevados para los roles, el acceso full para IIS, el nuevo tamaño de máquina XSmall, la evoluación del AppFabric, la puesta en producción del Data Marketplace (antes Dallas) , el advenimiento de un Windows Azure Marketplace, mejoras para SQL Azure como Reporting Services, etc.


    Todo lo anterior sumado al proceso lógico de evolución del código, conllevó a algunos cambios también en las librerías del SDK. Y precisamente de esto estaremos hablando en este artículo.


    Si ud. había venido trabajando con la versión 1.2 de los tools de Windows Azure, lo único que tiene que hacer es desinstalarlos e instalar la versión 1.3. Tenga en cuenta que si instala la 1.3 sobre la 1.2 sin haberla desinstalado manualmente, la anterior no se desinstalará y el sistema no funcionará correctamente.

    Cuáles son las principales diferencias?

    En esencia las de más impacto son dos: 1. La inclusión de manejo de FULL IIS. 2. Cambios en el API de acceso al storage (StorageClient.dll).


    Así que ya instalamos y tenemos andando correctamente la versión 1.3 tanto del SDK como de los tools. En ese caso apenas tomamos una solución 1.2, aparece un asistente de migración de nuestro proyecto.


    Qué cosas hace? Básicamente cambia la versión de producto en el .csproj del proyecto cloud a 1.3.0.0 y agrega la sección de Sites al archivo de configuración de los web roles para indicar que se usará la característica de Full IIS. Esos son los cambios.
    Qué puede fallar?


    Primero puede que obtenga esta excepción: “Could not load file or assembly 'Microsoft.WindowsAzure.StorageClient, Version=1.0.0.0“ . Solución en este post.


    Lo otro que puede pasar, es que obtengamos la excepción: “SetConfigurationSettingPublisher needs to be called before FromConfigurationSetting can be used”; para ver detalles de este error y cómo solucionarlo vea este post.

  • WarNov Developer Evangelist

    Windows 8: Su primer semestre

    Lanzado hace 6 meses y 10 días, Windows 8 en su primer mes vendió 40M de licencias y hoy celebramos más de 100M de licencias vendidas en el mundo. Resultados muy halagadores para un sistema tan revolucionario, dado que esta cifra es del mismo orden que la obtenida por Windows 7 en sus primeros 6 meses, siendo declarado en ese entonces el sistema operativo más veloz en venderse (y funcionar) hasta ese momento.

         

     
    Otras cifras que hemos alcanzado en estos 6 meses:  

    • 739 updates
      • Incluyendo IE10 que ahora reproduce Flash por defecto.
    • +60000 apps (más de las que tuvo iOS en todo su primer año)  
    • +500 updates para las apps desarrolladas por Microsoft como tal
    • +250M de downloads de apps
      • 90% del catálogo se descarga cada mes
    • +2400 dispositivos compatibles con Windows 8
    • +537M de visitas al store
    • Las apps pagas con trials, se venden 6 veces más que las pagas sin trials
    • 35294 actualizaciones a apps de terceros.
      • 30% de las apps en el store han sido actualizadas
    • Apps con más de un millón de downloads:
      • Twitter
      • Netflix
      • eBay
      • Amazon

       
      Todo esto sumado a un bello ecosistema en el que por ejemplo ajustamos 400 millones de personas usando el nuevo Outlook.com y 250 millones de personas con Skydrive.
       
      Obviamente, esto está enmarcado en los 700 millones de personas que tienen una Microsoft Account con la cual pueden acceder a todos estos servicios, aún desde otros dispositivos.
       
      Brillante el futuro que le espera a la plataforma y a todos nosotros desarrolladores que le estamos apostando.

    Page 12 of 14 (336 items) «1011121314