MSDN Blogs
  • WarNov Developer Evangelist

    URLs Limpias de MVC no funcionan en producción!

    • 2 Comments

     

    Hoy desplegué un sitio con ASP.NET MVC 2.0 en mi hosting, pero no funcionó bien. Me arrojó un 404 tratando de acceder http://warnov.com/MSBlog . Como puedes ver es una URL especial basada en el ruteo de MVC.

    clip_image001

    Para que este ruteo funcione, es necesario que IIS esté configurado para correr en Integrated Mode en mi aplicación. Yo creo que en vez de estar en Modo Integrado, ahora allá en mi proveedor de hosting, está en Modo Clásico.

    Por qué sucede esto?

    IIS 7.0 puede procesar las peticiones usando dos modos de proceso: integrado y clásico. El modo integrado provee más performance y características. El modo clásico está incluido para ofrecer compatibilidad hacia atrás.

    Les escribí a los operadores del hosting, que me gustaría saber si es posible que me puedan ayudar ajustando el IIS para mi aplicación en modo Integrado (DefaultAppPool) para que pueda correr mi aplicación con MVC2.

    Sé que esto podría acarrear problemas de compatibilidad con sitios viejos, pero lo bueno es que es un cambio a nivel de ApplicationPool, así que si mi aplicación no comparte el pool, será un cambio muy sencillo.

    Por el contrario, si el AppPool es compartido, les sugería que crearan un AppPool aparte, especial para todos los que queramos poner aplicaciones de avanzada que aprovechen todo el poder del Framework.NET

    Esperemos que me responden…

    Al final, les adicioné unas instrucciones de IIS 7.0 para que las ejecuten en caso de que me puedan colaborar… estas instrucciones deberían servirte si estás pasando por el mismo problema:

    1. Abrir el administrador de IIS

    2. Seleccionar la aplicación en el menú de Conexiones

    3. En el menú de acciones dar click en Basic Settings para abrir al diálogo “Edit Application”

    4. Seleccionar el tipo de ApplicationPool requerido:

    clip_image002

    En IIS 7.5 (el de Windows 7) es mucho más fácil; les dejo un cortísimo video:

  • WarNov Developer Evangelist

    Desarrollo sin código? En Windows Phone 7 se puede… y gratis!

    • 2 Comments

    Para algunos puede ser el sueño del desarrollo de aplicaciones… que se generen sin escribir ni una línea de código y súmenle que se pueda hacer gratuitamente!

    Así es; si necesitas hacer una aplicación para Windows Phone 7 en menos de 20 minutos y gratis, http://appmakr.com es la solución.

    Allí se ofrece la posibilidad de hacer aplicaciones obviamente enfocadas a un aspecto único, con el fin de poderlas hacer de una manera tan automatizada; en este caso, las aplicaciones que podemos desarrollar allí, son aquellas orientadas a mostrar información de feeds que vienen en RSS o ATOM.

    Podemos modificar la fuente del feed, poner varios tabs con distintos feeds, escoger los íconos e imágenes de cabecera de nuestra aplicación y además monetizarla a través de Adds!

    Como siempre un video vale más que una giga de palabras y aquí se los dejo para que vean todo el proceso:

    Para desplegar tu aplicación con appmakr, solo se necesita tener instalados los tools de Windows Phone 7.
    Si deseas hacer aplicaciones más complejas y no sabes cómo comenzar, te recomiendo este post.
     
    Quieres además ganar un Windows Phone 7, pues con tu aplicación hecha en appmakr puedes participar. Detalles aquí.
  • WarNov Developer Evangelist

    Por qué Windows Phone no transmite Archivos por Bluetooth?

    • 2 Comments

    La tecnología de Bluetooth está basada en algo conocido como perfiles. Cada perfil sirve para desempeñar una función de Bluetooth. Por ejemplo hay un perfil llamado A2DP que permite emitir Audio a través del bluetooth y además controlar la reproducción del mismo: Siguiente Canción, Anterior, Pausar, stop, Volumen. Este perfil viene en Windows Phone y por eso es posible por ejemplo conectarlo al radio de mi auto y controlar toda la reproducción de la música que tengo allí a través de Bluetoothpor medio de la pantalla de mi estéreo.

    El perfil de transferencia de archivos no está presente en Windows Phone y esto principalmente obedece a que de esta manera se protege al usuario de que le transfieran programas dañinos a través de este medio, porque este perfil no permite limitar el tipo de archivos transmitidos. Es por eso que la única forma de transferir archivos permitidos es a través de Zune (fotos, videos, música) y descargados de internet: (documentos de office, PDFs, además de los ya mencionados).

  • WarNov Developer Evangelist

    WindowsRT + Telerik

    • 2 Comments

    En mi experiencia de evangelización muy pero muy temprana en Windows 8, he visto que una de las principales falencias de la plataforma WindowsRT, es la inexistencia de controles para presentar información estadística tales como pie, scatt, lines, así como controles avanzados con autocomplete y en general todos esos a los que ya estamos acostumbrados en Web, Silverlight y Phone, gracias a los trabajos de terceros como Infragistics y Telerik entre muchos otros.

    Es una gran falencia, pues muchas apps quieren presentar a los usuarios información tipo Dash Board y requieren de este conjunto de controles para funcionar más adecuadamente liberando de trabajo muy pesado al desarrollador.

    Afortunadamente, Telerik anunció y efectívamente liberó en Beta los controles para Metro Style Apps. Estos están disponibles tanto para XAML como para HTML5+JS (Aunque a hoy algunos tienen ambas versiones, otros solo están disponibles para uno u otro enfoque, encontrándose más en este momento para HTML5).

    El instalador de estos controles se puede bajar a modo de evaluación desde aquí. Y una vez instalados en sus máquinas con Windows 8 y Visual Studio 2012 RC, se pueden hacer desarrollos como el que les muestro a continuación en el siguiente video, usando XAML.

    Como lo mencioné en el video, en el Framework 4.5 hay una interesante nueva característica llamada Caller Information que nos ha servido para construir este ejemplo. Si desea saber más de ella, visite este post donde la explico mejor, y luego este otro donde la implemento.

    Espero en un siguiente post mostrar un ejercicio similar, pero con HTML5.

  • WarNov Developer Evangelist

    This is for Developers…

    • 2 Comments

    Esto es para los developers...
    los geeks,
    los nerds,
    los hackers...

    Aquellos que ven las cosas,
    de manera diferente.

    Ellos no tienen reglas que los aten.
    Y no tienen respeto por los estados establecidos.

    Trabajan en las noches,
    inician compañías,
    se sientan solos...
    con sus audífonos... porque están ocupados
    porque están ocupados...
    cambiando
    el mundo...

    Ellos inventan

    Codifican,
    exploran,
    inspiran


    Empujan la internet hacia adelante

    Depronto esllos estén,
    locos...
    de lo contrario como podrían estar al frente de una pantalla vacía
    y ver una obra de arte....
    o al frente de miles de líneas de código,
    y ver el futuro

    Mientras unos los ven como geeks,
    en realidad son genios...


    Porque aquellos que pueden crear magia...
    con código,
    son quellos que algún día,
    dominarán el mundo.

    Wistia
  • WarNov Developer Evangelist

    Windows 8 RTM Dev Machine

    • 2 Comments

    Tal vez ustedes ya hayan leído un post parecido a este aquí en mi blog, en el que enseñaba a dejar lista una máquina con Windows 8 RP para desarrollar todo lo que tradicionalmente se desarrolla con Visual Studio mas Windows Phone, Windows Azure y WinRT Apps.

    Pues bien, consideren este post como una actualización del mismo, para aquellos que ya tienen la última versión de Windows 8 (RTM) y la última de Visual Studio 2012, dado que el hecho de que tengamos las versiones finales, no significa que los tools que añadimos a Visual Studio para desarrollar para Azure o para Phone estén listos. La idea, es que estos últimos estén listos no más tarde que el día de GA (Disponibilidad General) de Windows 8 que es el 26 de octubre.

    Efectivamente, si instalamos Windows 8 RTM y luego VS2012, ya tendremos listo el ambiente para Desarrollo WinForms, Web WinRT y otros. Pero ni Phone ni Azure estarán listos. Es preferible preparar la máquina primero para Azure antes de Phone.

    La forma para poder continuar desarrollando para Azure y Phone es la siguiente:

    Azure

    1. Instalar Win8 RTM
    2. Instalar VS2012 RTM
    3. Abriendo un nuevo proyecto de tipo Cloud en VS2012 como ya es costumbre cuando no tenemos Azure, nos aparecerá un link para ir a descargar lo necesario a través del WebPI (Web Platform Instaler). Pero aquí puede pasar que nos ocurre un error que nos dice que se deben desinstalar todas las versiones previas al RTM de VS2012. Cuando cerramos este mensaje de error nos aparece la ventana que vemos a continuación:

    azureen8

    Esto no es el acabose sin embargo…. solo basta con seguir los “Direct Download Link”. Uno por uno y en orden. Al final, ya podremos desarrollar en Azure. Recuerden que por ahora solo está disponible el framework 4.0 para Azure. Así que Deben seleccionarlo en la lista cuando vayan a crear un Nuevo proyecto.

     

    Phone

    Tengan en cuenta que el SDK 7.1 solo está disponible con Visual Studio 2010.

    Así que pueden instalar todo el VS2010 o la versión express para Phone. Yo recomiendo lo segundo, pues se instala automáticamente con el SDK y no ocupa tanto espacio solo para Phone, pues el resto de funcionalidades andan correctamente en VS2012.     

     

    1. Instalar Win8 RTM
    2. Instalar VS2012 RTM
    3. Instalar la última versión de Games for Windows – LIVE. Esto es requerido para poder desarrollar juegos con XNA para WP7, dado que Windows 8 requiere archivos más nuevos que los que vienen con el SDK 7.1
    4. Instalar Windows Phone SDK 7.1 (Incluye gratuitamente Visual Studio Express for Windows Phone 7)
      1. En este paso, puede que el sistema pida instalar antes el Service Pack 1 de VS2010. Luego de esto ya se podrá instalar el SDK 7.1 Sí: Se puede instalar el service pack de VS2010 sin tener el VS2010 instalado.
    5. Instalar el patch 7.1.1
    6. Instalar Zune
    7. Desarrollar en WP7!!!
  • WarNov Developer Evangelist

    La “Asincronía” y su evolución en pro de la UX

    • 2 Comments

    Hace ya varios años, los primeros servicios Web que usábamos eran síncronos. Hacíamos un llamado a la web y nos quedábamos esperando muy pacientemente a que el servidor nos respondiera y la respuesta bajara.

    Para nosotros era suficiente con obtener la respuesta!

    Nos nos importaba cuánto se demorara... el hecho que después de un tiempo llegara esa información que necesitábamos ya era suficiente para sentir la magia de la web!!! El resto era irrelevante! Aún el hecho de que la interfaz de usuario se congelara no nos importaba. Finalmente, teníamos nuestro mensaje... valía la pena esperar.

    Pero humanos somos y cada vez queremos más. Cada vez queremos mejores opciones y mejores comportamientos. Más comodidad!!!
    Nos comenzó a parecer un fastidio que la interfaz se congelara y que ni siquiera pudiéramos mover la ventana de la aplicación... De ahí en adelante comenzó la evolución que hoy en .net se conoce como: async.

    En este video daremos un recorrido por las soluciones que se le han dado a este problema a través del tiempo. Desde los simples llamados síncronos a WebServices por ejemplo, pasando por el manejo de threads distintos para la comunicación junto con el uso de Invoke para evitar desactivar el CheckForIllegalCrossThreadCalls de los forms, siguiendo con el versátil BackgroundWorker y luego explorando los clientes web asíncronos obtenidos con WebClient en Silverlight y Windows Phone 7 y HttpClient en Windows 8, que al implementar el Framework 4.5 nos ofrece el maravilloso async que nos abstrae de todas esas operaciones que algún día fueron un dolor de cabeza para nosotros:

    Puntos Clave:

    1. async ha sido creado solo para manejar operaciones que al tardar, podrían bloquear la interfaz de usuario. En ningún momento ha de ser usado para ejecutar tareas en paralelo o procesos en Background.
    2. En WP7 aún no hay soporte para async. Así que hay que usar un WebClient y ejecutar sus métodos asíncronos asociando un manejador al evento de completitud del request. Esto es similar a las llamadas asíncronas a proxies de servicios WSDL o WCF tradicionales.
    3. La forma de manejar async difiere levemente desde WindowsRT (metro style) al resto del framework. Cuando no estamos en WindowsRT se usa el método que referencia a TaskAsync. Por ejemplo en vez de DownloadStringAsync, en un WebClient, llamamos el método DownloadStringTaskAsync
    1. WarNov Developer Evangelist

      Apps de Windows Phone no disponibles en tu región cuando las vas a bajar?

      • 2 Comments

       

      El Marketplace de Windows Phone está segmentado por países, porque en cada país las normas son distintas y por ende no se puede generalizar la distribución de Apps.

      Así que los desarrolladores de apps, ya sea por este motivo u otros distintos, en ocasiones no ponen sus apps disponibles a ciertos países (esto no tiene que ver con el costo de publicación que siempre es el mismo).

      Es así que si al momento de configurar tu cuenta por ejemplo estableciste que ibas a trabajar con el Marketplace Colombiano, solo las apps disponibles para Colombia te aparecerán.

      Las apps más populares del mundo ya están disponibles para Colombia. Pero otras puede que no. El mercado por defecto es Estados Unidos. Por ende, casi todas las apps se encuentran allí. Así que podemos configurar nuestro teléfono con el marketplace de Estados Unidos y tener acceso a más apps.

      Desventaja frente a escoger el mercado del país en el que vivimos? Que a la hora de comprar apps, vas a tener que usar una tarjeta de crédito oriunda de ese país. Así que si no tienes una tarjeta de crédito internacional, tendrás algunas dificultades. Afortunadamente la gran mayoría de apps más usadas son free.

      Suponiendo que ya arreglaste este problema de la tarjeta de crédito y te inscribiste al marketplace estadounidense, puede pasar que aun así no veas ciertas apps como el mismísimo Adobe PDF Reader!!! A mí me pasó y formateé el teléfono varias veces sin éxito. No la podía bajar.

      Por qué sucedía esto? Sencillamente, porque configuraba el teléfono para una amiga que no es muy buena con el Inglés, así que le puse como idioma por defecto Español.

      Cuando los desarrolladores de Apps suben sus apps al mercado, también eligen el idioma en el que la ponen disponible. Adobe no puso su app en idioma Español. Así que si se detecta que el teléfono está en un idioma no disponible, la app no se dejará descargar.

      Solución: Poner el teléfono en inglés (requerirá reiniciarlo). Descargar todas las apps necesarias y luego si lo deseas, volver al español. Las apps seguirán allí listas para usarse; pero obviamente aparecerán solo en inglés.

      Si eres desarrollador de apps en español, ten esto muy en cuenta a la hora de publicarla; si quisieras por ejemplo alcanzar el gran mercado estadounidense, mejor que le pongas tu versión en inglés a la app, porque de lo contrario ellos no podrán descargarla por más que tu la hayas distribuido en ese país, si no tienen su aparato configurado en español.

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

    3. WarNov Developer Evangelist

      Problemas de Modificación de Tooltip en Silverlight?

      • 2 Comments

      Estaba escribiendo una aplicación en Silverlight que tenía que cambiar el Tooltip de acuerdo al idioma escogido. Obviamente esto se hace programáticamente, pero observé que en ocasiones los cambios no se ejecutaban de acuerdo a lo que decía el código. Después del tradicional “cacharreo” observé que el Tooltip no  se actualiza, si al control en tiempo de diseño se le fue asignado un Tooltip en particular. Así que si desea que el tooltip siempre se actualice, asegúrese  de que el control en tiempo de diseño tiene el tooltip en Nulo. Ojo: Nulo. No se vale que luego de haberlo inicializado en tiempo de diseño, use por ejemplo Blend para modificar el tooltip borrando el que ya había, pues esto nos deja un tooltip con cadena vacía, que tampoco dejará actualizarlo con código.



    4. WarNov Developer Evangelist

      Windows Azure Interoperable

      • 2 Comments

      Windows Azure, la plataforma de Cloud Computing de Microsoft, esta diseñada para permitir interactuar con plataformas y lenguajes que no tienen que ser siempre Microsoft. Veamos de que se trata en este corto video.

      Script del Video:

      Microsoft provee la tecnología más actualizada que ayuda a las empresas del mundo a mejorar sus negocios. Así como Windows ofrece una plataforma que permite desplegar tecnologías Microsoft y No Microsoft, la plataforma de Windows Azure provee un ambiente flexible para desarrollar aplicaciones y servicios en la nube.

      Como sabemos, Windows Azure es un sistema operativo que facilita el desarrollo, y de aplicaciones basadas en Cloud Computing. De esta manera, nos permite desarrollar, hostear y administrar servicios y aplicaciones en la nube.

      Esta plataforma de cloud está diseñada para maximizar la interoperabilidad

      Usando herramientas de Windows Azure y ambientes de desarrollo como Visual Studio, Framework .net, Eclipse, PHP y Java, se pueden crear aplicaciones portables que corren en Windows Azure.

      Windows Azure soporta protocolos de internet muy usados tales como HTTP, REST, SOAP y XML. Así aseguramos portabilidad de datos desde ambientes de desarrollo externos.

      Microsoft ofrece recursos de Windows Azure que son OSS útiles por ejemplo para hacer integración de ambientes de desarrollo como Eclipse de manera tal que se ofrecen una serie de wizards y utilidades para escribir, depurar. configurar y desplegar aplicaciones PHP a Windows Azure.

      En cuanto a lenguajes de programación el Windows Azure SDK para  PHP ayuda a los desarrolladores PHP a crear aplicaciones web basadas en PHP que pueden correr en Windows Azure y los desarrolladores JAVA pueden usar el SDK para JAVA, y usar los servicios de almacenamiento de Windows Azure para almacenar datos de sus aplicaciones.

      Adicionalmente, Windows Azure también ofrece el Windows Azure Tomcat Accelerator para desplegar soluciones Java basadas en Tomcat en Windows Azure. Esto comprende básicamente subir los ejecutables del servidor de Tomcat a la nube para poder desde Windows Azure ejecutar aplicaciones Java.



    5. WarNov Developer Evangelist

      Simulando carpetas en los blobs de Windows Azure

      • 2 Comments

      En los blobs de Azure no tenemos un manejo de carpetas como en el sistema de archivos al cual estamos acostumbrados. Solo tenemos contenedores y dentro de estos contenedores tenemos múltiples blobs; no más contenedores. Así que para imitar una estructura de carpetas, podemos nombrar los blobs imitando una estructura de carpetas.

      Por ejemplo; si tenemos:

      clip_image002

      Donde cada carpeta contiene un grupo de imágenes que nos servirán como fuente para un sitio web, entonces tendríamos que simular dentro del contenedor llamado “temp”, que tenemos tres carpetas llamadas pics, pics1 y pics2.

      Esto se logra sencillamente renombrando cada uno de los archivos dentro de las carpetas con la ruta relativa desde temp (que sería el nombre del contenedor). Esto hará que se puedan referenciar luego como si estuviesen en una jerarquía de carpetas.

      Por ejemplo si dentro de cada folder tenemos los archivos 1.jpg, 2.jpg, n.jpg, entonces luego del renombramiento tendríamos:

      Representando a la carpeta pics:

      pics/1.jpg, pics/2.jpg, pics/3.jpg

      Para la carpeta pics1:

      pics1/1.jpg, pics1/2.jpg, pics1/3.jpg

      y así sucesivamente.

      De la misma manera operaríamos en jerarquías más complejas.

      Por ejemplo un blob bien podría llamarse:

      carpeta/subcarpeta/subsubcarpeta/archivo.extensión

      Más detalles en inglés aquí

    6. WarNov Developer Evangelist

      Matemáticas en Azure

      • 2 Comments

      Problema de Aritmética en la migración de un sistema desde un servidor compartido a Azure:

      Si tengo un servidor compartido con las siguientes características: DUAL Nehalem Quad-Core E5530 2.4 Ghz, 16MB Cache, 12 Gb Ram

      Con una aplicación Web que además tiene las siguientes características en su DB

      • Tamaño actual BD 11 GB
      • 180.000 Fotografías que representan el 75% de la BD
      • Crecimiento mensual BD 700 MB
      • Tasa de transferencia 500 GB Mensuales

      Entonces cuánto me cuesta tener esto en Windows Azure?

      Usando Azure storage (BLOBS) para las imágenes (lo más recomendado pues es más barato, escalable y rápido):

      image

      • 75% de 11gb: aprox. 7.5Gb se irían para el storage y quedaríamos con una DB de 2.5 con los datos transaccionales y de referencia de las uris de las imágenes.
      • Entonces necesitamos una DB de hasta 5gb. Lo que nos da 50 dólares por aquí.
      • La transferencia de 500Gb al mes nos da 75 dólares.
      • Las 7.5Gb de storage nos cuestan 0.75 por mes: $1.2 que aumentaría diez centavos cada mes por el crecimiento
      • El cobro de operaciones sobre el storage es de 1 centavo cada 10mil operaciones. Suponiendo que todos los archivos se escriben y luego se leen hasta 10 veces, nos daría 1’800.000 operaciones lo que equivaldría a 1.8 dólares al mes.

      En definitiva tendríamos:

      DB USD$50
      Bandwidth USD$75
      Storage USD$1.2
      Operations USD$1.8
      Total USD$138

      Ahora; usando solo bases de datos y sin storage:

      DB 200GB  (una DB de hasta 20 GB que permite soportar el crecimiento indicado)

      Bandwidth $75

      Total Por Mes: USD$275

      En cuanto a los costos de Hosting del Sitio Web teniendo en cuenta que en Azure el servidor web y el servidor de DB están separados y que los servidores son DEDICADOS, podríamos tener un rendimiento similar al del servidor compartido con una instancia médium de un webrole. Lo que nos da 3.2Ghz de proceso y 3.5Gb de RAM y un performance de I/O alto. Esto puesto las 24 horas nos da:

      0.12x24x30x2=USD$173

      Para disponibilidad del servicio se recomienda tener al menos dos instancias separadas, entonces podrían tenerse dos medium por un valor de USD$346 o dos small en vez de una medium por solo $173. Sin embargo en este último caso, el performance de I/O se ve reducido.

      Estos costos son independientes de la alternativa de almacenamiento escogida.

    7. WarNov Developer Evangelist

      Mi aplicación web no carga imágenes ni estilos cuando publico en IIS7!!!

      • 2 Comments

      Puede que te haya pasado que tienes una aplicación web .NET ya sea MVC o ASP.NET que en modo diseño o publicándola con el servidor Cassini (el incluido en Visual Studio) todo funcione correctamente en cuanto a carga de imágenes y estilos se refiere.

      Pero cuando lo ponen en un IIS7, Naranjas! Ya no hay ni imágenes ni estilos! Sick smile

      Miren el sitio con estilos

      Si esto les ha sucedido alguna vez, el problema puede ser muy sencillo de corregir. Solo tienen que verificar que el IIS tenga activado el módulo de presentación de contenido estático; aquí lo pueden chequear para Windows 7:

      image

      Para otros sistemas con IIS7, sigan estas instrucciones.

      Hope it helps!

    8. WarNov Developer Evangelist

      Efecto Navideño para blogs usando HTML5

      • 2 Comments

      Luego de implementar el citado evento en mi propio blog, he recibido muchas preguntas de cómo lo logré.

      image

      He aquí la respuesta:

      Este trabajo es basado en un algoritmo de Javascript para HTML5 creado por David Flanagan que se basa en generar un elemento canvas por cada copito de nieve bajando en el blog. Entonces cada copo de nieve se agrega al DOM y es animado usando posicionamiento a través de CSS. Sin embargo se puede mejor usar un solo canvas y animar los copos dentro de este tal como lo sugiere Giorgo Sardo, con el fin de ahorrar memoria. Esto sin embargo puede producir que se bloquee la interacción normal con la página… es así que lo mejor es poner el canvas en un background de menor prioridad (atrás del contenido) tal como lo pueden ver en mi blog.    

      Este es el JavaScript requerido:

      (function () {
      
          // Start Animation only if browser support <canvas>
          if (document.createElement('canvas').getContext) {
              if (document.readyState === 'complete')
                  Snow();
              else
                  window.addEventListener('DOMContentLoaded', Snow,
      false); } var deg = Math.PI / 180; //Degrees to radians var sqrt3_2 = Math.sqrt(3) / 2; //Height of an eq triangle var flakes = []; // Things that are dropping var scrollspeed = 64; // How often we animate things var snowspeed = 500; // How often we add a new snowflake var maxflakes = 20;//Max number of flakes to be added var rand = function (n) { return Math.floor(n *
      Math.random()); } var canvas, sky; var snowingTimer; var invalidateMeasure = false; function Snow() { canvas = document.createElement('canvas'); canvas.style.position = 'fixed'; canvas.style.top = '0px'; canvas.style.left = '0px'; canvas.style.zIndex = '0'; document.body.insertBefore(canvas,
      document.body.firstChild); sky = canvas.getContext('2d'); ResetCanvas(); snowingTimer = setInterval(createSnowflake,snowspeed); setInterval(moveSnowflakes, scrollspeed); window.addEventListener('resize', ResetCanvas, false); } function ResetCanvas() { invalidateMeasure = true; canvas.width = document.body.offsetWidth; canvas.height = window.innerHeight; sky.strokeStyle = '#0066CC'; sky.fillStyle = 'white'; } function drawFlake(x, y, size, order) { sky.save(); sky.translate(x, y); snowflake(order, 0, Math.floor(sqrt3_2 * y), size); sky.fill(); sky.stroke(); sky.restore(); } function snowflake(n, x, y, len) { sky.save(); // Save current transformation sky.beginPath(); sky.translate(x, y);
      // Translate to starting point sky.moveTo(0, 0); // Begin a new subpath there leg(n); // Draw the first leg of the fractal sky.rotate(-120 * deg);
      // Rotate 120 degrees anticlockwise leg(n); // Draw the second leg sky.rotate(-120 * deg); // Rotate again. leg(n); // Draw the final leg sky.closePath(); // Close the subpath sky.restore();
      // Restore original transformation // Draw a single leg of a level-n Koch snowflake. // Leaves the current point at the end of // the leg it has drawn and translates the coordinate // system so the current point is (0,0).
      // This means you // can easily call rotate() after drawing a leg.
      function leg(n) { sky.save(); // Save current transform if (n == 0) { // Non-recursive case: sky.lineTo(len, 0);// Just a horizontal line } else { // Recursive case: _ _ // draw 4 sub-legs like: \/ sky.scale(1 / 3, 1 / 3);
      // Sub-legs are 1/3rd size leg(n - 1);
      // Draw the first sub-leg sky.rotate(60 * deg);
      // Turn 60 degrees clockwise leg(n - 1);
      // Draw the second sub-leg sky.rotate(-120 * deg);
      // Rotate 120 degrees back leg(n - 1); // Third sub-leg sky.rotate(60 * deg);
      // Back to original heading leg(n - 1); // Final sub-leg } sky.restore(); // Restore the transform sky.translate(len, 0);// Translate to end of leg } } function createSnowflake() { var order = 2; var size = 10 + rand(90); var t = (document.body.offsetWidth - 964) / 2; var x = (rand(2) == 0) ? rand(t) : t + 964 + rand(t);
      // Make it fit with my blog var y = window.pageYOffset; flakes.push({ x: x, y: y, vx:
      0, vy: 3 + rand(3), size: size, order: order }); if (flakes.length > maxflakes)
      clearInterval(snowingTimer); } function moveSnowflakes() { sky.clearRect(0, 0, canvas.width, canvas.height); var maxy = canvas.height; for (var i = 0; i < flakes.length; i++) { var flake = flakes[i]; flake.y += flake.vy; flake.x += flake.vx; if (flake.y > maxy) flake.y = 0; if (invalidateMeasure) { var t = (canvas.width - 964) / 2; flake.x = (rand(2) == 0) ?
      rand(t) : t + 964 + rand(t); } drawFlake(flake.x,flake.y,flake.size,flake.order); // Sometimes change the sideways velocity if (rand(4) == 1) flake.vx += (rand(11) - 5) / 10; if (flake.vx > 2) flake.vx = 2; if (flake.vx < -2) flake.vx = -2; } if (invalidateMeasure) invalidateMeasure = false; } }());
      Felices fiestas!

      snowflake, snow effect, JavaScript, html5, css, canvas, animation, christmas, blog

    9. WarNov Developer Evangelist

      Aprenda a desarrollar sobre plataformas de Comunicaciones y Correo

      • 2 Comments

      image

      Estoy muy contento de anunciarles el lanzamiento del Curso de Entrenamiento MSDN: Unified Communications “14”!

      Microsoft Lync Server 2010, Microsoft Lync 2010 y Microsoft Exchange Server 2010 proveen la plataforma de comunicaciones para que los desarrolladores puedan construir rápidamente soluciones que integran las comunicaciones dentro de sus procesos de negocio basados en tecnologías y conocimientos familiares.

      Estos cursos: Unified Communications "14" Training Course y Unified Communications “14” Developer Training Kit proveen un entrenamiento profundo sobre todos los aspectos de Lync Server 2010, Lync 2010 y del SDK de Exchange Server 2010 para brindarle a los desarrolladores los skills requeridos para ser productivos desarrollando soluciones orientadas a las comunicaciones.

      Este curso incluye 22 videos y 20 hands on labs:

      • Temas introductorios
      • Cómo integrar Microsoft Lync 2010 dentro de sus aplicaciones WPF y Silverlight al mejor estilo de Office y Sharepoint (presencia, lista de contactos, etc)
      • Conversaciones contextuales y manejo del API Administrada de Lync 2010
      • Integración de sus aplicaciones .NET con servidores de correo Exchange (mail, calendario, tareas) usando el API administrado de Exchange en su versión 1.0
      • UCMA 3.0: Unified Communications Managed API. Es el API para manejar comunicaciones unificadas desde sus aplicaciones. Esencial para manejo de llamadas, transferencias, etc. todo desde su propia aplicación.
      • Creación de Asistentes Virtuales a través de Workflows de comunicación basados en UCMA 3.0.
      • Creación de servicios de conferencias con UCMA 3.0
      • Arquitectura y despliegue de aplicaciones sobre Lync y Exchange Server 2010

      Es una grandiosa oportunidad para aprender y sacar provecho de esta tecnología que tanta productividad puede brindar a nuestros clientes.

    10. WarNov Developer Evangelist

      NESL: Extensiones Nativas para Silverlight

      • 2 Comments

      Para iniciar este mes, y tras el momentum generado en el mundo Silverlight con el Silverlight firestarter, el anuncio de Silverlight 5 y un montón de novedades alrededor de esta tecnología tan cool, quiero contarles acerca de la liberación de NESL.

      Qué NESL ?

      Es un conjunto e librerías para desarrolladores Silverlight que les permite accede a las mejores características de Windows 7 desde sus aplicaciones Silverlight.:

      · Tomar ventaja de sensores como acelerómetros, sensors de luz, compases, GPS, etc.

      · Acceder a contenido desde dispositivos portables conectados como reproductores musicales y cámaras.

      · Capturar y crear video desde cámaras Web y la misma pantalla del equipo.

      · Usar reconocimiento de voz y lectura de texto

      · Integración con el taskbar de Windows 7 (Jump Lists, Icon Overlays, Taskbar Progress etc.)

      · Y mucho más!

      Cómo está conformado NESL ?

      • Un conjunto de librerías nativas acompañadas de sus librerías “colegas” para Silverlight.
      • Un guía para el desarrollador! (coming soon)
      • Aplicaciones de Ejemplo:
      • Video Travel Journal – Aplicación conceptual de grabación de video que ilustra cómo capturar video de la pantalla, dispositivos portátiles, integración con Windows 7, Bing Maps y upload de los videos a Facebook.

        clip_image001
      • Where’s Teddy ? – Un libro de historias animadas para niños que nos muestra las capacidades de reconocimiento de voz, lectura de texto y manejo de sensores como acelerómetro y sensor de luz.

        clip_image002
      • Código Fuente – Todas las librerías de Silverlight y las aplicaciones de ejemplo tienen su código abierto!

      Dónde lo podemos encontrar ?

      Code Gallery – http://code.msdn.microsoft.com/nesl

      Quienes lo están usando ya?

      image

      Está construyendo aplicaciones en Silverlight 4 basadas en NESL para la tablet Inspiron Duo que vendrá en poco tiempo, de manera que se integren estas aplicaciones con el acceso a los sensores.

       

       

       

       

      clip_image004

      Está construyendo un lector basado en Silverlight 4 que aproveche los sensores de las máquinas cliente.

       

       

      Descarguen los bytes y comiencen a experimentar!

    11. WarNov Developer Evangelist

      Windows Azure gratis: 750 horas de instancia XSmall y 25 horas de instancia Small al mes.

      • 2 Comments

      No es ningún secreto que Windows Azure abre nuevas oportunidades para que los desarrolladores creen experiencias de aplicación nunca antes vistas, mejoren las aplicaciones existentes y generen nuevas fuentes de ingresos. La plataforma de Windows Azure se hizo con los desarrolladores en mente. Permite a los desarrolladores utilizar sus conocimientos existentes en .NET, Java y PHP para desarrollar, probar y desplegar aplicaciones innovadoras y atractivas sin preocuparse de la infraestructura de back-end y otras restricciones operacionales.

      Reconociendo todas las puertas que la nube abre para la comunidad de desarrolladores, seguimos buscando formas hacerlo aún más fácil para empezar a trabajar. Para aquellos desarrolladores están experimentando lo que es generar e implementar aplicaciones en la plataforma Windows Azure, me complace revelar una nueva oferta introductoria especial que hacer parte de la campaña Cloud Power

      Ahora, la oferta introductoria especial actualizada incluye 750 horas gratis de la instancia ExtraSmall de Windows Azure, 25 horas de la instancia de Windows Azure Small y más, hasta el 30 de junio de 2011. Esta versión de prueba gratuita extendida permitirá a los desarrolladores a probar la plataforma Windows Azure sin la necesidad de los costos de inversión inicial.

      Para ver todos los detalles de la nueva oferta especial introductoria y para inscribirse, por favor haga clic aquí. Para ver una lista de todas las ofertas, visite la página de ofertas.

    12. WarNov Developer Evangelist

      Transparencia en DIVs HTML (Div Opacity)

      • 2 Comments

      Cada mes acostumbro a cambiar el header de mi Blog usando una fotografía tomada por mí.

      Para este mes quise poner una foto del Palacio de Justicia ubicado en la Plaza de Bolívar en Bogotá.

      En esta foto fue difícil ubicar el título de mi blog, dado los colores de fondo. Así que la alternativa fue ponerle un color de fondo sólido al título.

      Sin embargo, un color sólido arruina la fotografía de fondo, pues no la deja ver para nada. Allí fue donde me nació la duda de cómo hacer un div transparente, para así poder modificar el estilo del blog.

      Investigando un poco, encontré que esto se hace distinto para distintas versiones de navegador. En especial, para Firefox se usa:

      opacity:0.6;

      Luego vi que esto no funcionaba en IE, pues me seguían apareciendo los fondos sólidos.  así que investigando un poco, encontré que esto se hace distinto para IE:

      filter:alpha(opacity=60);

      De esta manera, un estilo escrito así:

      #title {
      opacity:0.6;
      filter:alpha(opacity=60);
      }

      Produce este resultado independientemente del navegador:

      image



    13. WarNov Developer Evangelist

      Diseñando Experiencias con Expression Blend

      • 2 Comments

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

      BlendBanner

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

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

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

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

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

      Designing Windows Experiences with Expression Blend (WPF)

      Entrenamiento

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

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

      Introducción

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

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

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

      Colaboración

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

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

      Extras

      image

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

      El otro curso es:

      .toolbox (Silverlight)

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

      image

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

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

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

      image

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

       

      Get Started!, Today!

      Otros Recursos:

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


    14. WarNov Developer Evangelist

      REST (Representational State Transfer)

      • 2 Comments
      Creado en el 2000 hace referencia a “Representational State Transfer” o transferencia representacional de estados.

      Si uno se deja guiar por el nombre pareciera como si no tuviese nada que ver con lo que medio se ha oído por ahí acerca del tema: “que sirve para acceder a servicios sencillamente a través de URLs”, por ejemplo.

      Pero estudiándolo bien uno nota que al final si hay cierta congruencia.

      En REST participan básicamente dos roles. Un cliente y un servidor. El cliente es el sujeto de los dichosos cambios de estados. Entonces imagine el cliente como su navegador web en un estado específico (una página web). Un cambio de estado obviamente significa la transferencia a otra página web.
       
      Una transferencia representacional en web, no es más que la transferencia lograda sencillamente a través de URLs. Y es precisamente allí donde se encadena todo.

      La idea es que las acciones o verbos que originan los cambios de estado del cliente en REST están completamente definidos. Es decir, REST propone un vocabulario de acciones fijo; que permite obtener recursos del servidor, que una vez interpretados por el cliente, hacen que este cambie de estado.

      Esto último es lo que más diferencia a REST por ejemplo del tradicional SOAP. Ya que en SOAP, se le dice a cada desarrollador que defina un vocabulario nuevo y arbitrario de verbos, de acuerdo a los requerimientos de la aplicación (obtenerUsuarios(), almacenarOrden(…), etc. Todos sobreusando el verbo POST de HTTP). Paradójicamente, esto que siempre se vio como una gran ventaja, va en contravía con muchos de los aspectos inherentes del HTTP que es base de SOAP. Así que aspectos como la autenticación, caching, negociación de contenidos y demás, no se aprovechan.

      Aunque hasta aquí todo lo ejemplifiqué usando HTTP, REST es un mecanismo que no depende de ese protocolo. Las aplicaciones REST pueden basarse en otros protocolos, siempre y cuando éstas provean un vocabulario uniforme preestablecido para las aplicaciones que se construirán sobre ella. Recordemos que la idea principal de REST es maximizar el uso de las capacidades predefinidas de la plataforma que los soporte. HTTP como tal, proporciona un rico vocabulario completamente establecido y estandarizado que se ajusta perfectamente a este objetivo. Es por esto, que hoy en día al hablar de REST uno automáticamente piensa en su implementación sobre HTTP.

      Principios

      REST se fundamenta en seis principios básicos:
      • Cliente y Servidor plenamente identificados y separados
      • No hay almacenamiento de estado en las transiciones (Stateless)
      • Respuestas “cacheables” (Para mejorar las interacciones y el performance)
      • Capas: Pueden haber varias capas de servidores intermedios
      • Código por demanda: La funcionalidad de un cliente se puede extender con código trasmitido por el servidor (por ejemplo con JavaScript). Este es el único requerimiento opcional.
      • Interfaz uniforme: La misma que se discutió anteriormente.

      Objetivos

      Los principios anteriormente mencionados, están diseñados para lograr los siguientes objetivos:
      • Escalabilidad de componentes
      • Generalidad de Interfaces
      • Distribución Independiente de componentes
      • Existencia de componentes intermediaros que reducen latencia, aumentan la seguridad y encapsulan sistemas de legado.

      Recursos

      Los recursos se definen como fuentes de información específica y son muy importantes en REST. Un cliente accede a los recursos que el servidor dispone. Imagine una aplicación empresarial con información de recursos humanos. En este caso, la lista de empleados es un recurso del servidor y para acceder a ellos, se requiere un identificador único (por ejemplo una URI), que es usado por el cliente para referenciarlo y una interfaz de comunicación estandarizada (por ejemplo HTTP). Obviamente, aparte de tener claro el objeto de una acción, se debe tener clara la acción a ejecutar sobre ese objeto. Así pues, una aplicación interactúa con los recursos sabiendo su identificador único y la acción a ejecutar sobre este. Por ejemplo: Recurso: Empleado con Id:3520. Acción: Borrar. Los recursos generalmente son transmitidos entre el servidor y el cliente usando formatos como HTML, XML o JSON. No obstante, los recursos también pueden ser imágenes, texto plano o cualquier otro formato.

      Servicios Web REST

      No son más que servicios WEB implementados usando HTTP y los principios de REST que comprenden una colección de recursos de acuerdo a los siguientes aspectos:

      • Una URI base para el nombre del servicio: http://example.com/miservicio/
      • El tipo MIME de los datos soportados por el servicio
      • El conjunto de operaciones soportadas.
      • En REST sobre HTTP, lo más normal es tener estas operaciones
        • POST: Crea nuevos recursos. Como retorno, se ofrece el ID automáticamente creado
        • GET: Lista un recurso
        • PUT: Reemplaza un recurso con otro (Útil para el update)
        • DELETE: Elimina un recurso

      Entonces por ejemplo si se quisiera eliminar el empleado con ID 3520 se haría un request con DELETE a la siguiente URL desde el cliente:/span>
      http://example.com/miservicio/empleados/3520

      Conclusión

      REST, que es una arquitectura y no un protocolo como SOAP, se basa en acciones sobre recursos, para permitir la interacción de un cliente con un servidor. La implementación sobre HTTP es la más común y ha permitido la creación de otras tecnologías. Por ejemplo Microsoft, que se ha basado en este tipo de implementación REST para generar el estándar OData (Open Data) sobre el cual se construyó WCF Data Services (antes conocido como ADO.NET Data Services), y que permite simplificar el acceso interoperable a las capas de datos en aplicaciones n-tier.



    15. WarNov Developer Evangelist

      Open Data Protocol (OData)

      • 2 Comments

      Si como desarrolladores alguna vez hemos tenido la necesidad de exponer los datos de nuestra aplicación a otras aplicaciones; o lo que es peor, usar datos de otras aplicaciones, deberíamos saber que éstas actividades de compartimiento de información son de las más complicadas en el proceso de desarrollo.

      Es cierto que hoy en día existen los gloriosos Web Services: montados sobre los más aceptados protocolos y estándares: TCP/IP, HTTP, SOAP, XML, XSD, WSDL…

      Pero a pesar de ello, la comunicación sigue siendo complicada. Sobre todo para aquellos que tienen que crear proxies manualmente (Afortunadamente el SDK del Framework.NET ayuda a alivianar estas tareas con herramientas como wsdl.exe y xsd.exe que se integran transparentemente con Visual Studio). Casos por ejemplo en que un cliente java requiere acceder a un Web Service creado con .NET. y viceversa, requieren de mucha mano de obra y configuración por parte del cliente. Y ni se hable cuando de WCF se trata! Es bien sabido que WCF da toda la flexibilidad que requerimos para acceder a cualquier fuente de datos, montados sobre cualquier protocolo de transmisión y con cualquier tipo de mensaje; pero configurar un WCF sin mucha experiencia, puede resultar ciertamente más dispendioso que crear las operaciones en sí.

      Dado que la mayoría de aplicaciones necesitan acceder a los datos a través de HTTP, es justo entonces que se defina un protocolo simplificado que aproveche todas las ventajas de HTTP y que permita a múltiples clientes (esto es: clientes creados con distintas tecnologías) acceder a múltiples fuentes de datos, todo usando el mismo mecanismo.

      El camino ya había estado bastante trabajado con arquitecturas como REST, protocolos como ATOM y lenguajes como JSON.

      Teniendo todas estas bases y las necesidades que ya he descrito, Microsoft decidió crear OData; un protocolo para la consulta y actualización de una variedad de fuentes de datos que incluye pero no se limita a bases de datos relacionales, sistemas de archivos, CMS y sitios web tradicionales.

      OData fue liberado bajo la promesa Open Specification Promise (OSP) para permitir a cualquier persona interoperar libremente con cualquier implementación OData. A futuro, se espera que OData empiece a ser parte de AtomPub.

      Como lo mencioné OData ha sido creado específicamente para trabajar sobre web y es un protocolo centrado en HTTP. Usa las URIs para identificar los recursos con los que se desea trabajar. Los resultados, aunque se pueden trabajar con el formato AtomPub basado en XML, también se pueden trabajan con JSON, para simplificar la integración con clientes HTML y JavaScript.

      Para trabajar con OData hoy en día se ofrecen toolkits gratuitos para .NET (WCF Data Services), JAVA, AJAX y PHP y se aplica no solo en sitios web personalizados, sino en productos como SharePoint, Excel (PowerPivot), SQL Server, Windows Azure Storage, WebSphere eXtreme Scale, etc.

      Más información, en la página oficial del protocolo: http://www.odata.org. Allí encontraremos links de la especificación FORMAL del protocolo. Pero como toda especificación FORMAL, para nosotros desarrolladores que necesitamos agilidad, es poco práctica. De hecho la practicidad que tiene este protocolo para nosotros, es en el uso de WCF Data Services y es por eso, que he dedicado mi próximo post a ese tema. Pero para entenderlo mejor, es necesario comprender que existe OData y que está basado en REST.

    16. WarNov Developer Evangelist

      Programando para Office 2010 usando WPF y Visual Studio 2010

      • 2 Comments

      En este video, observaremos la manera de crear un panel para usar dentro de Word, que contendrá fragmentos de texto a los que luego de hacerles doble click podremos insertar dentro del documento a través de Visual Studio Tools for Office (VSTO)

      El panel fue diseñado usando Blend 3 y aprovechando las características de DataBound de WPF. Se aprovecha la DLL WindowsFormsIntegration para obtener un objeto de tipo ElementHost que permite agregar dentro de Windows Forms tradicional, elementos de WPF. Luego este contenedor se agrega a un UserControl y este UserControl se agrega a Office a través de un Custom Panel.

      El video explica todo el proceso y de aquí se puede descargar la solución finalizada:

       

    17. WarNov Developer Evangelist

      Sistemas POS que piensan en la Nube

      • 2 Comments

      Antes que nada, veamos algunos requerimientos urgentes de los sistemas POS, dadas las condiciones económicas de hoy en día:

      ·         Puntos con funcionalidad extendida, pero con máxima velocidad y disponibilidad

      ·         Conexión directa con un ERP central para permitir decisiones óptimas y oportunas

      ·         Apertura para la colaboración con partners y otros servicios para reducir costos

      ·         Desarrollo y despliegue de software rápido y económico

      ·         Nada de inversiones iniciales en infraestructura

      En primera medida uno pensaría en SaaS como una alternativa. Pero usualmente los thin clients (browsers) no son capaces de trabajar offline. De esta manera se hace obvia la necesidad de un Front Store o repositorio en cada cliente. Además los browsers no pueden garantizar el manejo de periféricos ni pueden garantizar las velocidades requeridas en las cajas.

      Por todo esto, la mejor elección es usar Smart Clients con un caché de datos local usando por ejemplo SQL CE en cada cliente. El deployment se puede implementar usando ClickOnce. Sumado a esto pueden estar los protocolos WS-* que permiten una seguridad máxima sin tener que recurrirse a VPN u otras complicadas configuraciones de Firewall, así que las instalaciones serían muy sencillas.

      BEDIN Shop Systems, un ISV italiano creó la solución aKite enfocada a crear POS usando esta metodología. En un principio toda esta solución era auto hosteada y aunque solucionaba los problemas descritos, presentaba problemas a la hora de manejar picos de consumo y sobretodo de generar un esquema centralizado de integración con otros sistemas como el ERP, CRM, BI, Logística y demás...

      Con la llegada de Azure a producción, este ISV decidió migrar su aplicación y lo logro en solo tres meses sin mayores problemas, según su reporte.

      Esquema de POS comunicado con Azure

      Lograron crear un Hub Inteligente que remueve la complejidad técnica y facilita compartir datos entre los POS y otros sistemas. Por ejemplo en el caso de tarjetas de fidelidad y de regalo, se logró una inmediatez total, un mejor servicio y sobretodo menor riesgo de fraude.

      Además gracias al esquema nativo de Azure, los picos de uso dejaron de ser problema y sobretodo, cuando un cliente va a implementar su sistema POS, el up-front (o inversión inicial) es nulo, pues toda la infraestructura ya existe.

      Las ventas en este sistema pueden efectuarse desde todos los continentes, con distintos lenguajes, monedas e impuestos. Luego de esto, a través de los “Retail Web ServicesaKite RWS-” (creados por el ISV y hospedados en Azure usando SQL Azure) los datos se envían a un ERP central para actualizar el inventario y la contabilidad. Las estadísticas de ventas también se hacen inmediatamente disponibles, pero no solo en el ERP, sino también en los sistemas de Back Store.

      aKite RWS es un conjunto de servicios WCF que explotan muchas características de esta tecnología. De esta manera, solo fue necesario crear un conjunto claro de servicios, cuya configuración se adapta a cualquiera de los puntos de conexión requeridos. Por ejemplo, solo bastó con configurarlos para el uso con Smart Clients, y quedaron listos para usarse en los clientes POS.

      Como si fuera poco, la migración de estos servicios a Azure, generó valores agregados como un balanceo de carga automático (nativo de Azure), asegurando gran escalabilidad y una subdivisión más equitativa de los recursos entre las tareas. Antes eso era manejado por una aplicación bastante compleja y difícil de mantener.

      El proyecto fue dividido en un Web Role y cuatro Worker Roles que se comunican entre ellos usando Queues y Blobs. BEDIN declara que en la migración de datos y código de ORM no tuvo ningún problema, dado que Sql Azure demostró ser completamente compatible con el código de Sql Server que ya se tenía, aun cuando este había sido generado con un ORM de un tercero (LLBL GenPro)

      Como ISV, BEDIN también confirmó los siguientes beneficios:

      ·         Ausencia de costos iniciales en Hardware

      ·         Costos proporcionales en relación al número de usuarios

      ·         Ahorros que se pueden destinar a mercadeo, ampliación de funcionalidad y costos que se transfieren al usuario final en forma clara

      ·         Monitoreo automático

      ·         Auto recuperación de desastres

      En conclusión, Windows Azure permitió a BEDIN Shop Systems concentrarse en su aplicación y habilidades arquitecturales y en ofrecer un valor máximo a sus usuarios. Es una empresa con más de 20 años de experiencia en el desarrollo de POS. Fueron los pioneros en implementar .NET con aplicaciones para el Retail. (: www.bedin.it  www.akite.net )

       

    18. WarNov Developer Evangelist

      Stairway to Azure

      • 2 Comments

       

      El objetivo de esta serie de posts, es tender una escalera a la nube (Azure), de tal manera que nosotros, desarrolladores hispanoparlantes tengamos una manera rápida de comenzar con todo lo relacionado con esta tecnología.

      Para introducirnos rápidamente en el mundo de Azure, primero que todo es necesario que entendamos los conceptos de SOA, SaaS y S+S. Para este fin, he preparado este video que nos dejará muchas cosas claras:

       

      Luego del video, es mucho más fácil entrar en materia:

      GENESIS

      Al principio todo era código estructurado. Y miles de líneas de código se entrecruzaban como espagueti dentro de aterradores GoTo’s y Labels. Y la interoperabilidad de aplicaciones era así:

      Arquitectura Spagueti

       

      Todos los sistemas estaban altamente acoplados y hacer un arreglo o un cambio era toda una pesadilla. Era la época de oscuridad en el desarrollo de software. Se desarrollaba sin ciencia. Se administraba con sufrimiento.

      Servicios y SOA

      Después nació el servicio. Y los programadores se dieron cuenta de que era bueno. No tenían que pasar días tratando de hacer un cambio, porque las funcionalidades estaban bien distribuidas independientemente. Además tampoco se duplicaban. Entonces, nació SOA o Arquitectura Orientada a Servicios. Con la cual se hizo mucho más fácil la administración del software y los procesos más eficientes.

      El milagro de SOA hizo que las empresas progresaran mucho y que cada vez requirieran más servicios; sus sistemas de software crecían y obviamente así el hardware que los soportaban. Y el crecimiento de hardware trajo consigo un purgatorio para el personal de IT. Administrar decenas de servidores y estar pendientes de los nuevos requerimientos de infraestructura para estos grandes sistemas de software se hizo cada vez más doloroso. Los costos también aumentaban exponencialmente cada vez que crecían los sistemas. Además el negocio en crecimiento obligaba a viajar a los empleados de las empresas, quienes en sus viajes de negocio requerían tener acceso al software. Pero el software estaba internado en el centro de datos empresarial. Los empleados estaban atados a la ubicación física de la empresa. Todo fue un caos!

      SaaS

      Entonces apareció el evangelista promulgando el uso de los servicios de Hosting. Empresas encargadas de mantener los centros de datos para otras empresas sumergidas en el caos del manejo de IT. Y aparecieron grandes centros de datos que a pesar de estar fuera de las instalaciones de los clientes, podían albergar todas sus soluciones  de software. Las empresas se ahorraron costos y dolores de cabeza, porque ya no tenían que estar pendientes de la administración de IT. La comunicación entre el servicio de hosting y las empresas fue posible gracias a la explosión de internet y el ancho de banda; así que los empleados ya no estaban atados a la casa matriz; todo mundo se olvidó de los detalles no funcionales y se dedicó más enfocadamente a su negocio… Los gerentes vieron que todo esto era muy bueno! Así que se dedicaron solo a producir servicios para ser hosteados y ese fue el origen del SaaS (Software as a Service) o software como servicio.

      Entonces todo mundo comenzó a adorar al nuevo modelo de conexión al software (la internet). Y nadie volvió a conectarse al interior de la empresa. Siempre era necesario tener internet para poder trabajar. Así que si había un problema de conectividad, se perdía la productividad. Además las aplicaciones tuvieron que estandarizarse para poder visualizarse desde todos los browsers y se perdieron las características especiales y únicas de las aplicaciones de escritorio. Entonces los negocios que un día crecieron vertiginosamente, comenzaron a decaer por la limitante de funcionalidad. Esto sumado a que los proveedores de servicios de hosting también estaban a tope y tardaban mucho en escalarse, empeoró aún más la situación. El oscurantismo cayó de nuevo por el uso excesivo de una novedad.

      S+S

      El desarrollador reflexionó; y se dio cuenta que el modelo de software tradicional instalado al interior de la empresa que había desechado, tenía grandes ventajas sobre el nuevo ídolo. Y que sin embargo SaaS también conservaba características brillantes. Entonces observó que la solución no era irse por un único camino. Sino tomar el mejor camino de acuerdo a cada tipo de aplicación. Así decidió que parte de su software iba a ser software como tal y otra parte iba a ser servicio. Esto dio origen a S+S: Software más Servicios. Desarrolladores y gerentes se dieron cuenta que esto era bueno y se mantiene hasta nuestros días.

      AZURE (PaaS)

      Microsoft también observó que todo esto era bueno. Y decidió hacerlo aún mejor! Así que está poniendo a disposición de sus clientes los servicios de hosting, almacenamiento y procesamiento de datos; tal cual como lo hacen los actuales proveedores; pero esta vez, ofreciendo estadios completos de servidores que hacen más fácil lograr la escalabilidad y disponibilidad que requieren algunas de las aplicaciones de misión crítica de los clientes. En síntesis, Azure cubre la parte de software como servicio; pero como se observa al mirar en detalle la tecnología, se ofrece todo un framework para poder conectarnos con las aplicaciones al interior de la empresa y otras hospedadas por los proveedores de servicios de hosting convencionales que seguirán trabajando con muchas de las aplicaciones que actualmente manejan sin problemas. Concluyendo, la nueva tecnología Azure basa su desarrollo en la interoperabilidad limpia y eficiente con las fuentes de software que han demostrado ser muy adecuadas hasta ahora: al interior de las empresas (Software – On Premises) y hosteadas por terceros (Servicios).

      Una vez recorrido el camino necesario para entender la historia y el porqué de Azure, esperen en próximos blogs una inmersión especial a la plataforma y todas sus características!

    Page 4 of 13 (317 items) «23456»