MSDN Blogs
  • WarNov Developer Evangelist

    INotifyPropertyChanged sin quemar nombre de propiedad

    • 0 Comments

    Aunque la información del caller demuestra ser muy útil para la depuración, existe un uso colateral muy interesante sobretodo para el mundo de las apps, donde el binding es muy usado.

    En las apps es muy frecuente enlazar datos a vistas a través de paradigmas como MVVM. Y este enlace de datos requiere de clases que soporten notificación de cambios en las propiedades, de manera que la interfaz siempre permanezca sincronizada con los valores a los que está ligada y que se encuentra mostrando.

    Es así como si tenemos una clase del Modelo, destinada a ligarse a una vista bien sea a través de un controlador o de una clase VistaModelo, lo más común es que queramos que implemente  INotifyPropertyChanged con el fin de que se incluya el evento de tipo PropertyChangedEventHandler que se dispara cada vez que una propiedad cambia.

    Esto se logra de la siguiente manera:

    class Person:INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
    
        string _name;
        public string Name
        {
            get { return _name; }
            set 
            {
                _name = value;
                NotifyPropertyChanged("Name");
            }
        }
    
        int _age;
        public int Age
        {
            get { return _age; }
            set 
            { 
                _age = value;
                NotifyPropertyChanged("Age");
            }
        }
    
        private void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, 
    new PropertyChangedEventArgs(propertyName)); } } }

    Como observamos, siempre nos toca poner como parámetro de NotifyPropertyChanged el nombre de la propiedad en un string. Esto puede generar algunos problemas sobretodo a la hora del refactoring tras cambiar el nombre de alguna propiedad, pues dado que estos parámetros son strings, el refactoring no cambiará automáticamente estos valores y además no podríamos detectar el error en tiempo de compilación, sino que obtendríamos una excepción difícil de descifrar en tiempo de ejecución si cambiamos por ejemplo Name por SecondName.

    Para evitar hacer estas referencias quemadas como strings, podemos aprovechar el hecho de que el Framework 4.5 incluye información del caller. Así pues, lo único que hacemos es citar el nombre del miembro que hizo el llamado que provocó el cambio en la propiedad. En este caso, ese nombre, es precisamente el nombre de la propiedad que se está modificando, así que independientemente de que cambie, siempre se referenciará la propiedad adecuada:

    class Person:INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
    
            string _name;
            public string Name
            {
                get { return _name; }
                set 
                {
                    _name = value;
                    NotifyPropertyChanged();
                }
            }
    
            int _age;
            public int Age
            {
                get { return _age; }
                set 
                { 
                    _age = value;
                    NotifyPropertyChanged();
                }
            }
    
            private void NotifyPropertyChanged(
    [
    CallerMemberName] string propertyName="") { if (PropertyChanged != null) { PropertyChanged(this,
    new PropertyChangedEventArgs(propertyName)); } } }

    Como se observa, ya no es necesario quemar el nombre de la propiedad, dado que CallerMemberName representará ese nombre en el parámetro propertyName que al ser opcional, no requiere ser llamado por nosotros, sino que es llenado por el servicio de compilación. Esta es una práctica que espero tendrá una amplia difusión en las apps de Windows 8 y de Windows Phone 8.

  • WarNov Developer Evangelist

    Precisión con tipos de Datos .NET

    • 0 Comments

    Por qué en el Framework .NET puede pasar que:
    0.2 + 0.1 = 0.3000000000000000000004 ?

    Algunas veces, escoger el tipo de datos apropiado para nuestra aplicación puede no ser trivial. Aquí muestro un caso en el que se marca la diferencia entre una aplicación errónea y una correcta, solo mediante un cambio de tipo desde double a decimal.
    También hablo de errores de precisión y cómo evitarlos con el uso de deltas de error. Finalmente muestro un tip de Visual Studio 2010 para escribir código más claro.

     

    En el video menciono las Visual Studio 2010 Pro Power Tools. Un conjunto de extensiones para Visual Studio Professional (y superiores) que mejoran la productividad del desarrollador. Estas tools, las pueden descargar de MSDN de manera gratuita.

    Este post fue originado por una pregunta de Juan David

  • WarNov Developer Evangelist

    Crea tu Angry Birds en WP7 y sin código!

    • 0 Comments

    ABSTRACT: Para la programación de animaciones en Silverlight y Windows Phone 7 existen un conjunto de librerías Open Source que contienen funcionalidades físicas (comportamientos y efectos especiales predefinidos) que nos permiten agregar efectos muy realísticos a las animaciones usadas en este tipo de aplicaciones, basándonos en leyes físicas de gravedad, colisiones, aceleraciones y demás. Estas librerías están en el portal Open Source de .net: Codeplex. Y solo descargándolas, ya podemos crear aplicaciones muy impactantes sin una sola línea de código. En este post observaremos cómo se pueden usar, a través de Expression Blend.


    Content:
    Dentro de nuestro programa de MCS una de las actividades que he venido ejecutando es proponiéndole a nuestros entusiastas que creen publicaciones de alto valor para nuestra audiencia, suministrándoles el material requerido para que lo hagan.

    Aquí tenemos la primera muestra. Se trata de un blog post de Carlos Rojas (@carojaspaz), quien es un candidato a convertirse en uno de nuestros nuevos MCS.

    Descarga: Proyecto Angry Birds Clone
    Recursos: Physics Helper 4.2.0.0

    En este post, vamos a mostrar cómo crear un pequeño clone de Angry Birds para Windows Phone 7 en 5 minutos usando Expression Blend y ninguna línea de código (si ninguna), por supuesta el juega que crearemos está lejos del completo, pero puede servir como un inicio de un nuevo y sorprendente juego.

    Usaremos las Herramientas de desarrollo para Windows Phone (están incluidas en el Expression Blend para Windows Phone 7) las cuales se pueden descargar del sitio http://create.msdn.com y además utilizaremos las bibliotecas de clases que se encuentran en CODEPLEX, la Physics Helper que es una biblioteca muy utilizada para recrear fenómenos físicos y Farseer Physics, que básicamente adiciona algunos comportamientos dentro de Expression Blend con el fin de ser usados en nuestra máquina sin utilizar ni una sola línea de código.

    Como primer paso descarga las bibliotecas de clases, extrae las DLL y crea una aplicación Windows Phone 7 pero recuerda usar la versión 7, (Aún no se ha probado la aplicación con la versión 7.1 aunque podría funcionar perfectamente).

    Eliminamos todo el contenido dentro de la página y cambiamos el tipo del elemento LayoutRoot por un elemento Canvas, con el fin de poder trabajar con la Biblioteca Farseer.

    Definimos la propiedad SupportedOrientations en Landscape de PhoneApplicationPage, si no podemos encontrar la propiedad se puede ubicar escribiendo su nombre en la caja de búsqueda de propiedades.

    Cambiamos también orientación del dispositivo, la pestaña Device sino esta visible la puedes activar en el menú Window y cambias la orientación del dispositivo.

    Agrega como referencia al proyecto las bibliotecas descargadas con anterioridad, las DLL que debes agregar son: Farseer Physics 3.0 WinPhone.dll, Spritehand.FarseerHelper.dll, Spritehand.PhysicsBehaviors.dll y FarseerPhysics.dll.

    Reconstruye la aplicación (Ctrl + Shift + B) para que los comportamientos aparezcan en la lista de de Assets.

    Ahora agregamos el control PhysicsControllerBehavior a nuestro objeto LayoutRoot, este control identificara al objeto como el objeto donde suceden los fenómenos físicos.

    Seleccionamos el nuevo control agregado y modificamos la propiedad MousePickEnabled a activa.

    Ahora vamos a dibujar algo sobre el LayoutRoot, usaremos un camino cerrado para crear una forma para jugar, siéntete libre de dibujar lo que prefieras.

    Agregamos al objeto que acabamos de dibujar un PhysicsObjectBehavior y activamos la propiedad IsStatic esta propiedad permite referenciar este objeto como si fuera la tierra y las leyes de gravitación se aplican a él.

    Ahora dibujamos unos rectángulos que será donde los puerquitos se posaran para ser derribados por el pajarito, a cada rectángulo le agregamos un PhysicsObjectBehavior y puede ponerlos en la posición que desee.

    Ahora agregaremos a los puerquitos y los pajaritos, para ello agregaremos las imágenes, en el proyecto daremos click en agregar ítems existentes y agregaremos las imágenes de los puerquitos y el pajarito, estos objetos deben recibir también el PhysicsObjectBehavior.

    Ahora que tenemos los objetos dentro de nuestro escenario vamos a agregar un nuevo comportamiento a los puerquitos, agregamos PhysicsExplodeBehavior este comportamiento permite que el puerco explote al chocar con el pájaro furioso, para esto, agregamos el comportamiento a todos los puercos, después configuramos unas propiedades, el disparador (Trigger) escogemos uno nuevo y le asignamos PhysicalCollisionTrigger, seleccionamos los objetos que van a colisionar el BodyOne será el pajarito y el BodyTwo será el puerquito para ello usaras una mira que está en la caja de texto y la arrastras hasta el objeto seleccionado, así para los puercos que tengas en tu tablero después de esto listo podemos probar nuestra aplicación.

    Y ASI SE VERA NUESTRA APLICACIÓN

    Este post lo pueden encontrar en el blog de Carlos Rojas: http://carojaspaz.wordpress.com/

  • WarNov Developer Evangelist

    Programar en Windows Phone 7 es cosa de niños

    • 2 Comments

    En este video vemos como un niño de 12 años ya ha creado un par de aplicaciones para Windows Phone 7 y las ha puesto en el marketplace para comenzar a ganar dinero a través de ellas.

    Windows Phone 7 es la nueva alternativa en experiencias de usuario que a nosotros los desarrolladores nos brinda muchas ayudas para poder ser productivos en muy poco tiempo, aprovechando los conocimientos de desarrollo que tenemos en .NET, Silverlight y XNA.

  • WarNov Developer Evangelist

    Sql Server 2008 R2 Training Kit Versión de Enero Disponible

    • 0 Comments

     

    image

    Hoy me complace anunciar la disponibilidad de la actualización del kit de entrenamiento para desarrolladores en SQL Server 2008 R2 versión enero de 2011. Se trata de un gran recurso para los desarrolladores, instructores, y consultores que requieren comprender las mejoras clave introducidas en SQL Server 2008 y SQL Server 2008 R2 desde un punto de vista del desarrollador. Contiene un amplio conjunto de presentaciones, demostraciones, prácticas de laboratorio y videos que son perfectas para aprendizaje personalizado o para llevar a cabo su propia formación. La actualización de enero de 2011 incluye gran cantidad de gran contenido nuevo y varias mejoras de usabilidad.

    La manera más fácil para empezar a trabajar con el kit de capacitación es descargarlo, instalarlo, abrir el default.htm y examinar el kit para usar el contenido que más le interese. Muchas de las presentaciones y demostraciones en el kit de capacitación incluyen videos para familiarizarse con el contenido. Cuando esté listo para entrar manos a la obra, intente instalar una de las demostraciones o prácticas de laboratorio. Cada una de ellas incluye un asistente de configuración que simplifica la instalación.

    Novedades:

    image

    Esta actualización incluye un nuevo y completo conjunto de contenido diseñado para los desarrolladores que deseen aprender a crear su primera solución de Microsoft Business Intelligence con SQL Server 2008 R2. Estas soluciones de BI de Microsoft aprovechan sus inversiones en tecnología en .NET, SQL Server y Office para desarrollar experiencias enriquecidas e integradas de reportes y análisis que permiten a los usuarios tener acceso a información precisa y actualizada para una mejor y más relevante toma de decisiones. Este contenido es un curso de formación completa que contiene once unidades que cubren todos los aspectos claves del desarrollo de soluciones de BI de Microsoft.

    Este es un resumen de lo que incluye:

    • 31 presentaciones (diapositivas PowerPoint, videos y transcripciones incluidos)

    • 27 demos (secuencias de comandos de instalador, videos y transcripciones incluidos)

    • 12 laboratorios (instalador de scripts incluido)

    Si está buscando volverse un experto en las últimas adiciones tecnológicas de nuestra excelente plataforma de Bases de Datos, e seguro este Kit le será de gran ayuda y le permitirá despegar muy rápido con estas nuevas características!

  • WarNov Developer Evangelist

    Addin de Proyectos de Web Deployment disponibles para Visual Studio 2010

    • 0 Comments

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

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

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

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

    Pueden descargarlo de MSDN

  • WarNov Developer Evangelist

    iOS Native Development: Con Visual Studio en Windows gracias a Xamarin

    Por primera vez en la historia, gracias al brillante trabajo de Xamarin, hoy podemos escribir aplicaciones nativas de iOS en Visual Studio y Windows usando C#! Todo lo bueno que se nos ofrece en el IDE más poderoso del mundo (Resharper, TFS, addons, y demás) ahora incluye además soporte para iOS!


    Xamarin iOS for Visual Studio nos permite escribir, depurar y probar aplicaciones iOS desde máquinas Windows, siempre y cuando se cuente con al menos una Mac conectada en red que provea los servicios de build y despliegue.

    Las ventajas que ofrece este acercamiento es que podemos crear una sola solución para desarrollar cross platform apps, mientras se usan herramientas poderosas solo disponibles en VS, como TFS o Resharper, usando la experiencia familiar que nosotros developers Windows ya tenemos dentro de nuestra casa VS.

    De hecho, si lo único que tienen son MACs, pero igual quieren las ventajas de tener el IDE más poderoso del mundo para hacer desarrollos sobre iOS, la solución de Xamarin permite correrlo sobre un Windows en Parallels.

    Por qué se requiere un MAC?
    Las apps iOS no pueden ser creadas sin el compilador de Apple, y no puedes ser desplegadas sin los certificados de Apple y sus herramientas de firmado de código, que obviamente no están disponibles a terceros.

    Lo bueno, es que una vez se configura, Xamarin hace toda la conexión sin que uno se de cuenta como developer.

    Así que los requerimientos serían:
    Windows 7 u 8.
    VS2010 o VS2012.
    Plugin de Xamarin para VS

    Y en la MAC:
    OS X Lion o Mountain Lion
    Xamarin iOS SDK
    El Xcode IDE y el iOS SDK

    De acuerdo a la gente de Xamarin, la arquitectura de esta solución es:

     
    image


    Un detalle importante sin embargo, es que el emulador de iOS no corre en Windows, así que en este paso hay que ir a la MAC para ver la ejecución. Sin embargo el resto de ventajas, valen la pena.

    Este producto se puede adquirir desde USD$1000= 

  • WarNov Developer Evangelist

    Será Mono tan bueno como lo pintan?

    • 7 Comments

    Artículo Mono

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

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

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

     

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

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

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

    F-Spot

    image

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

    Banshee

    image

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

    Pinta

    image

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

    Deki

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

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

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

    Conclusión

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

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

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

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



  • WarNov Developer Evangelist

    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!

  • WarNov Developer Evangelist

    Yo de ti, comenzaría a aprender a programar Windows Phone 7

    • 0 Comments

    Siendo toda una revolución en el enfoque que Microsoft le había dado a los móviles en cuanto a sistema operativo, como ya sabemos Windows Phone 7 (WP7) ofrecerá de las mejores experiencias de usuario final a sus compradores. Pero WP7 no solo son juegos, música, video y aplicaciones, los usuarios corporativos siguen obteniendo el gran poder que tenían en otras versiones móviles, a través de las versiones más avanzadas de Office Mobile y la mejor integración con el correo corporativo sin mencionar que es la única plataforma de teléfonos que se integra con Microsoft SharePoint Server.

    El mundo y la comunidad desarrolladora de aplicaciones para móviles ya han entendido la relevancia de esta nueva plataforma. Es así como justo hoy, el marketplace ha llegado a la cifra de 8000 aplicaciones listas para sus consumidores.

    Por si fuera poco, completando un día de noticias muy buenas para WP7, hoy Nokia anunció oficialmente: “Nuestro principal sistema operativo para Smartphones, será Windows Phone 7”

    image

    Este es un gran espaldarazo de uno de los gigantes en la industria de la telefonía móvil que hoy día tiene un market share de más del 40% en el mundo (las ventas del último año superaron los 100 millones de unidades) con unos teléfonos cuya calidad es incuestionable.

    Habiendo tenido siempre sus propios sistemas operativos, Nokia escogió de entre todas las alternativas de OS para sumarte pones a WP7.

    Nokia no solo implementará WP7 en sus teléfonos sino que de la mano con Microsoft, ayudará a hacer el OS cada vez mejor. Sobre todo con la gran experiencia que tiene en hardware, soporte a idiomas y sobre todo distribución alrededor del mundo, por ejemplo en países donde el uso de tarjetas de crédito es bajo y por ende se requiera el uso de la extensa red de operadores con los que Nokia trabaja, quienes pueden establecer un mecanismo de facturación apropiado en cada ubicación geográfica.

    Por otro lado Bing estará detrás de todas las búsquedas que haga Nokia a través de sus dispositivos y servicios, brindándoles a los usuarios capacidades de búsqueda decisivas en lo que respecta a la nueva generación en técnicas de búsqueda así como los servicios de Microsoft adCenter en cuanto a publicidad para búsquedas se refiere.

    Obviamente todas las herramientas, tecnologías y lenguajes de programación de Microsoft estarán disponibles para programar sobre WP7 y por ende sobre smartphones Nokia, lo que naturalmente le permitirá a los desarrolladores obtener un alcance GLOBAL para sus aplicaciones.

    Por si fuera poco, la tienda de Nokia se integrará con el Microsoft Marketplace para ofrecer una mejor experiencia a los usuarios!

    “Hoy, desarrolladores, operadores y consumidores quieren productos móviles realmente buenos, lo cual no solo hace referencia al dispositivo, sino también al software, servicios, aplicaciones y soporte al cliente; lo que otorga una gran experiencia de uso… Nokia y Microsoft, combinaran sus fortalezas para liberar un ecosistema de alcance global inigualable” Dijo Stephen Elop. Presidente y CEO de Nokia.

    Nokia y Microsoft hoy día tienen un gran conjunto de marcas muy apreciadas en el mundo: Windows, Office, Bing, XBOX Live, Nokia y NAVTEQ que brinda unos servicios de mapas y localización que no tienen precedentes, vendiendo más de 100 millones de smartphones en el último año. Por esto los mapas de Nokia serán parte del core de los servicios de mapeo de Microsoft!

    Hace exactamente un año, mostramos WP7 al mundo en el Congreso Mundial de Móviles en Barcelona, describiendo que todo nuestro músculo como compañía tecnológica sería puesto tras WP7 incluyendo: Windows, Windows Live, Bing, Zune, Xbox Live, Office, SharePoint, Exchange y por supuesto nuestras herramientas de desarrollo. Hasta ahora hemos tenido una reacción fantástica por parte de nuestros consumidores, con una tasa de satisfacción del 93% y una calificación de 9 sobre 10 por parte de consumidores quienes afirman que le recomendarían el producto a alguien más.

    Dado el siguiente panorama, si eres desarrollador de software, es una gran oportunidad para entrar en este mercado y Microsoft te brinda gratuitamente todas las herramientas para lograrlo.

     

    Cómo aprendo a programar WP7?

    Es muy sencillo. Encuentra en este post, una guía detallada de los recursos disponibles.

    Más información de Windows Phone 7 aquí.

  • WarNov Developer Evangelist

    Web Designers vs. Web Developers

    • 2 Comments

    free website builder


  • WarNov Developer Evangelist

    Instalando Orchard en IIS 7.5 y SQL Server 2008R2

    • 2 Comments

    Abstract: En este video describo como instalar el CMS Orchard en la siguiente configuración: Windows 7 Ultimate + IIS 7.5 + SQL Server 2008 R2.
    Nivel: Básico

    Este es el segundo en una serie de posts acerca de el CMS Open Source basado en ASP.NET MVC 3, llamado Orchard. Si desea una introducción a los CMS y en especial a Orchard le recomiendo: Teoría de CMSs con Orchard y luego leer este post.

    Posts de esta serie:

     

    Contenido:

    Las instalaciones del CMS Orchard son muy pero muy sencillas. Sobretodo si se usa el Web Platform Installer WebPI (Un wizard que nos lo deja instalado automáticamente solo dando Next, Next, Next…). Es por eso que el video a continuación no se enfoca en este tipo de instalación sino en lo que yo llamaría instalación cruda de Orchard. Es decir, descargar la carpeta del aplicativo, instalarla en IIS y configurar una DB en SQL Server para su uso.

    Orchard puede ejecutarse bien sea en el IIS Express (Servidor web gratuito que viene en el WebPI), o en el ASP.NET Development Server de Visual Studio o en el IIS full (6, 7, 7.5), tal como lo veremos en este ejemplo.

  • 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

      ALM con Team Foundation Suite 2010

      • 3 Comments

      Hace una semana, me reuní con el grupo de Entusiastas de Microsoft que logré unificar, con el fin de hacer actividades para reconocer su interés en nuestras tecnologías y además potencializarlo en beneficio de la comunidad de desarrolladores que es mi audiencia como Developer Evangelist.

      En esta reunión en las oficinas de Microsoft Colombia, hicimos una Clínica de Oradores para incrementar los niveles de cada uno de nosotros en cuanto a charlas al público se refiere. Dirigiendo esta charla se encontraba con nosotros Willy Marroquin. Un excelente orador que por años nos ayudó con la labor de evangelización y quien además posee grandes conocimientos técnicos y hoy se desempeña como consultor en Arquitectura y Estabilización de Aplicaciones Críticas.

      Luego de esta clínica, Sebastián Rincón especialista de Visual Studio Team Suite para preventa técnica en Microsoft Colombia nos estuvo exponiendo la cantidad de nuevas características que nos trae la Suite para la administración de proyectos o ALM.

      Decidí grabar un video de la charla que nos impartió Sebastián, pues consideré muy importante publicar con un punto de vista bastante informal (tal como se llevó a cabo su exposición) toda la discusión que tuvimos sobre el producto. Aquí encuentran apuntes hechos por nuestros entusiastas (claros representantes de la comunidad de desarrolladores) y en general información útil para tener un overview de la suite antes de entrar a trabajar con ella directamente.

      Para finalizar, quisiera agradecer la asistencia de nuestros siguientes entusiastas, de quienes dejo sus contactos, dado que estarán gustosos de entrar en contacto con ustedes para tratar temas de desarrollo de acuerdo a sus especialidades:

      Willy Marroquin Arquitectura de Soluciones/Aplicaciones  
      Sebastián Rincón  Especialista TFS/BizTalk  
      Pablo Cepeda Workflow Foundation (WF), WCF  
      Edinson Carreño Team Foundation Suite  
      Frank Silva Windows Azure – Emprendimiento con Microsoft  
      Benjamin Perdomo Tecnologías de Punta Microsoft  
      Gerardo Ramos SWAT Desarrollo Microsoft  
      Manuel Camarón Especialista Silverlight – Windows Live Services  
      Andrés Ortiz Especialista Sharepoint – Desarrollo Sobre Office  

      Estos no son todos nuestros entusiastas. Posteriormente estaré haciendo un post donde estén todos con mayor información acerca de ellos!



    2. WarNov Developer Evangelist

      Teoría de CMSs con Orchard

      • 0 Comments

      Esta es la primera entrega en una serie de posts acerca de este moderno sistema de manejo de contenidos basado en ASP.NET MVC. Aquí explicaré conceptos básicos de los CMS y de la plataforma como tal. Orchard es un CMS de última generación creado por la comunidad con alto apoyo de Microsoft. Es gratuito y Open Source.

      Nivel: Básico.
      Advertencia: Uso sustantivos técnicos en inglés y en español indistintamente.

      Posts de esta serie:

      Conceptos de CMS

      Un CMS esencialmente apunta a ayudarnos a construir sitios web usando piezas pre construidas que vienen en diferentes formas y tamaños para nuestros fines.

      C

      La C de CMS significa contenido y hace referencia a todo aquello en el sitio que tiene información. Por ejemplo un post de un blog, un comentario, un producto y hasta un menú de navegación o un logo.

      M

      Management o administración. Es el conjunto de herramientas que nos permite administrar el sistema. Se conoce como Admin Panel, Dashboard o back-end. Como se indica el acceso es restringido a administradores.

      clip_image001

      S

      De sistema que indica que todo lo anterior está completamente integrado para brindar una experiencia consistente durante la administración de nuestro sitio.

      Front End

      Es la parte visible de nuestro sitio.

      clip_image002

      Setup

      En general, todo CMS requiere de un Setup y es el proceso requerido para tener el sitio corriendo. Después de esto habrá que trabajar mucho en el contenido.

      clip_image003

       

       

      Conceptos de Orchard

      Content Item: Pieza de contenido que a menudo tiene una url asociada. Por ejemplo, páginas, posts o productos.

      Content Type

      Determinan la clase de contenido relativa a un Item. Por ejemplo un blog post es un ítem de tipo blog post.

      Content Part

      En Orchard los tipos de contenido están formados de pequeñas partes llamadas content parts. Son unidades atómicas de contenido que definen un comportamiento específico y que son reusables en muchos tipos de contenido.

      clip_image004

      Por ejemplo los comentarios, los tags o los ratings son Content Parts porque definen un comportamiento que puede ser reusado. Como regla se tiene que solo puede haber una parte de cada tipo en cada tipo de contenido. Por ejemplo, no encontraremos en un blog post dos secciones de comentarios distintas.

      Content Field

      Campos de contenido que pueden ser agregados a un tipo de contenido. Tienen un nombre y un tipo y pertenecen a un Content Type específico. Por ejemplo un producto puede tener un campo de texto representando su nombre, un campo numérico representando su precio y otro representando su peso. Como vemos, estos campos probablemente sólo tienen sentido hablando de un producto.

      Module

      Los módulos son las extensiones que se construyen para enriquecer la funcionalidad de Orchard. Estos módulos se organizan dentro de un sub directorio que puede ser encontrado en la carpeta Modules dentro del sitio web de Orchard. Estos módulos se pueden encontrar en la galería de Orchard.

      clip_image005

      Feature

      Un módulo puede contener una o más características que son un agrupamiento lógico de funcionalidades que pueden ser habilitadas o deshabilitadas individualmente. Por ejemplo, un módulo de autenticación personalizada puede tener diversas características (features) para OpenId, Facebook, LiveID, Twitter, etc. que pueden ser activadas o desactivadas.

      Hay que tener en cuenta sin embargo que una característica puede depender de otra que puede existir en el mismo o en otro módulo.

      clip_image006

      Manifest

      El manifiesto es un pequeño archivo de texto que describe un módulo o un tema en el sistema:

      clip_image008

      Interfaz Gráfica (UI Composition)

      Dado que Orchard maneja contenido com´puesto de partes, se necesita un mecanismo que orqueste la parte visual de la aplicación teniendo en cuenta la naturaleza del contenido que hace la composición. Por esto es importante hablar de la UI:

      Theme

      Al diseñar un sitio web es muy importante que seamos capaces de modificar su apariencia visual en cada sencillo aspecto. Orchard provee una clara y limpia separación entre la administración del contenido y del despliegue visual de dichos contenidos.

      Un tema es un paquete que contiene todo el look and feel de un sitio Orchard. Puede consistir de una combinación de hojas de estilo, imágenes, distribuciones, plantillas y hasta código personalizado. Los temas se pueden crear heredando de otros; cosa muy útil si se trata de hacer solo pequeñas modificaciones sobre un tema existente.

      clip_image009

      Layout

      Es un archivo dentro de un tema que define la organización generar de las páginas que lo usan. Un layout típicamente define un conjunto de zonas donde los contenidos o widget pueden ser insertados.

      clip_image010

      Template

      Cada parte de contenido, cada campo y cada widget necesita ser gráficamente representado en el front-end transformando los datos que representa en un elemento que pueda ser leído por los usuarios del sitio. Un template o plantilla es la “receta” que formatea esos datos y los transforma en HTML para que el browser los despliegue. Se puede pensar en un template como en HTML plano con “campos” bien definidos en los que los datos se insertan.

      Shape

      Antes de que algo pueda ser mostrado usando una plantilla, ese algo debe ser transformado en una forma o shape, que no es más que un objeto bastante versátil que contiene toda la información requerida para poder mostrarlo. Antes de que pueda ser renderizado por las plantillas, todo debe ser mapeado en un árbol de formas que es una especie de representación abstracta de los contenidos de la página final. La ventaja de estos árboles de formas, es que cualquier módulo puede modificarlas o crear unas nuevas.

      Los layout, zinas, widgets y content parts todos se representan como shapes en el proceso de renderizado.

      Placement

      Cuando se renderizan los elementos de la página, Orchard requiere saber en qué orden hacerlo. Para esto existen los archivos Placement.info que son XML que describen reglas usadas para determinar qué shapes van en qué zonas y en qué orden. Esto posibilita no solo que pueda ser personalizado el renderizado de cada shape, sino que también se pueda personalizar el orden en que se ejecuta este renderizado.

      clip_image013

      Zone

      Las zonas son partes específicas de un layout que pueden ser personalizadas insertando en ellas Widgets. En algunos temas, las zonas son colapsibles lo que significa que pueden desaparecer si no tienen widgets activos.

      clip_image014

      Widget

      Un Widget es un pequeño fragmento de interfaz de usuario que puede ser añadido a algunas o a todas las páginas del sitio. Por ejemplo tag clouds, mapas, formulario de búsqueda, etc.

      Layer (Capa)

      Una capa es un grupo de widgets (con su posicionamiento y orden) que es activada por una regla específica.

      Por ejemplo podríamos armar una capa llamada HomePage que se activara solo al llegar a esta página. También podríamos tener por ejemplo una capa por defecto que siempre estuviese activa y otra capa solo para usuarios autenticados.

      Cuando más de una capa está activa en una página, todos los widgets de esas capas se muestran al mismo tiempo. Orchard los ordena basándose en sus posiciones.

       

      Seguridad

      Usuarios y Roles

      En Orchard los usuarios pueden tener roles que pueden ser vistos como estereotipos de usuarios que tienen un conjunto común de permisos que definen quién puede hacer qué en el sitio. Cualquier usuario puede tener varios roles.

      Los dueños de los sitios pueden crear sus propios roles, pero Orchard viene con un conjunto de roles predefinidos que deberían cumplir la mayoría de los requerimientos de los sitios.

      · Administrador: Todos los permisos

      · Editor: No crea contenido pero edita y publica contenido creado por autores

      · Moderador: Valida contenido creado por usuarios como los comentarios

      · Autor: Escribe y publica su propio contenido

      · Contribuidor: Escribe contenido pero no necesariamente tiene derecho a publicarlo

      · Anónimo: usuario desconocido. Alguien que no se ha logueado.

      · Autenticado: Cualquier usuario logueado

      Los roles autenticados o anónimo no se pueden asignar manualmente sino que han de ser determinados dinámicamente en tiempo de ejecución.

      Privilegios y Permisos

      En Orchard los permisos son asignados a los roles, pero no son explícitamente denegados. En otras palabras si un usuario pertenece a cualquier role con algún permiso, éste tiene ese permiso. Para revocar este permiso es necesario bien sea retirar al usuario del role que tiene este permiso o revocar el permiso de dicho rol.

      Algunos permisos son garantizados efectivamente. Esto significa que no han sido explícitamente permitidos, pero que se adquieren de manera implícita a través de otro permiso. Por ejemplo, si se otorga el permiso de “Site Owner”, implícitamente se garantizan el resto de permisos.

      clip_image015

      Tanto los permisos como sus ajustes aplican por módulo. Esto significa que si usted construye su propio módulo, a éste habrá de especificársele los permisos que lo acompañan.

      Site Owner

      También conocido como el súper usuario, es un usuario especial definido en tiempo de instalación que tiene todos los derechos sobre el sitio. Puede ser modificado desde la pantalla de administración del sitio si se tiene permiso para hacerlo.

      De esta forma hay un tipo de permiso llamado “Site Owners Permission” que garantiza todos los derechos sobre el sitio y que por defecto se asigna al rol de Administrador. Es altamente recomendado que este grupo de permisos no se asigne a ningún otro rol.

       

       

      Desarrollo

      Cuando se van a crear nuevos módulos para Orchard (Esto no es requerido para operar el sitio), se requiere:

      ASP.NET MVC

      El framework web sobre el que se construyó Orchard.

      Handler

      Es similar a un filtro en MVC dado que contiene código que ejecuta eventos específicos en el ciclo de vida del request. Son usados para ajustar repositorios de datos o para ejecutar operaciones adicionales cuando algún contenido se carga.

      Driver

      Similares a los controladores de MVC pero actuando a nivel de contenido en vez de a un nivel de el request completo. Típicamente preparan las shapes para ser renderizadas y manejan postbacks desde los editores de administración.

      Record

      Es una clase que modela la representación de una content part en la base de datos. Son clases POCO donde cada propiedad es virtual.

      Migration

      Una migración es una descripción de las operaciones que se deben ejecutar cuando se instala por primera vez una característica en un módulo o cuando se actualiza de una versión a la siguiente. Esto permitirá actualizaciones sencillas sin pérdida de datos. Orchard incluye un framework de migración de datos.

      Injection

      La IoC, Inversion of Control o sencillamente inyección se usa ampliamente en Orchard. Cuando una pieza de código requiere una dependencia, esto típicamente requerirá la inyección de una o más instancias de una interface específica. El framework se encargará de seleccionar, instanciar e inyectar las implementaciones adecuadas en tiempo de ejecución.

      Llamado a la Acción!

      Si desea ir trabajando con este CMS, puede descargarlo gratuitamente de http://www.orchardproject.net/  Y espere en mi próxima entrega un video de los diversos tipos de instalación que podemos hacer de este CMS.

    3. WarNov Developer Evangelist

      SharePoint 2010 MySite en Windows 8

      Presentación

      Hoy, en mi post invitado del mes, les presento a Andrés Ortiz. Lo he invitado porque desarrolló una interesante manera de generar clientes WindowsRT para aplicaciones de SharePoint. En este interesante artículo, nos cuenta su experiencia su experiencia:

      Contenido

      Desde hace ya unos meses que Windows 8 viene cobrando mucha fuerza en diferentes campos: usuarios finales (portátiles, tablets, teléfonos), desarrolladores, diseñadores y más. Esto ha sido definitivamente un cambio de paradigma total de Microsoft de cara a su ya famoso sistema operativo, que básicamente no había tenido una evolución trascendental hasta que apareció Windows 7. Pero con Windows 8, se cambió definitivamente de página.

      Por esta razón, hemos decido explorar lo que ofrece Windows 8 en el campo de los desarrolladores, específicamente para los que desarrollamos sobre la plataforma SharePoint, y definitivamente ha sido una experiencia muy gratificante. Nuestro resultado actual y el motivo de esta entrada, es una aplicación que corre en Windows 8, despliega Tiles en vivo con ítems de una lista de noticias (Thumbnail + Título de la noticia), y cuando se ingresa a la aplicación, se conecta a MySite de una granja de SharePoint y despliega la información de las personas que tengan su sitio personal creado. A continuación vamos a comentar los aspectos más importantes del desarrollo de esta aplicación.

      Capa de Servicios: Cuando comenzamos a implementar la solución, lo primero que se nos vino a la mente es cómo íbamos a conectar la aplicación Windows 8 con la información almacenada en el servidor SharePoint. Como ya sabemos, SharePoint ofrece servicios Web, a través de los cuales se puede consumir la información almacenada en sus listas, y también la información de los perfiles, lo cual es necesario para obtener información de MySite. Por tal razón lo primero que debíamos implementar era la capa de servicios, a través de un proyecto .NET de tipo Windows Communication Foundation. En este sentido, tendríamos toda nuestra lógica de negocio, y temas de consumo de datos bien separados y aislados en un proyecto WCF totalmente dedicado a esa parte.
      La Interfaz del servicio WCF es similar a la siguiente y resume los métodos utilizados que se deberán implementar para consumir la información:

      [ServiceContract]
      public interface IService1
      {
          [OperationContract]
          List<TGNews> GetNewsTile();
          [OperationContract]
          List<TGUsers> GetUserInfo();
          [OperationContract]
          TGUsers GetUserInfoDetails(string loginName);
          [OperationContract]
          CompositeType GetDataUsingDataContract(CompositeType composite);
      }  
      

      Los servicios Web que estamos consumiendo en nuestra solución cuando se implementan los métodos descritos en la interfaz, son los siguientes: El consumo de la información de la lista de Noticias se realiza a través del consumo del servicio REST que ofrece SharePoint 2010, similar al siguiente ejemplo:
      public List<TGNews> GetNewsTile()  
      {        
         TGNews item = null;  
         List<TGNews> items = new List<TGNews>();  
         try  
         {  
              HomeDataContext dataContext = new HomeDataContext(new Uri("http:
              //server/_vti_bin/listdata.svc"));  
              dataContext.Credentials = new System.Net.NetworkCredential("user"
              , "password", "dominio");  
              var news = from temp in dataContext.Noticias  
                            select temp;  
              foreach (NoticiasItem temp in news)  
              {  
                   item = new TGNews();  
                   item.Title = temp.Título;  
                   item.Thumbnail = temp.Thumbnail;  
                   if (!string.IsNullOrEmpty(item.Thumbnail))  
                   {  
                        GetImageNews("http://server" + item.Thumbnail, 
                        item.Title);  
                        item.Thumbnail = "ms-appx:///Assets/" + item.Title +
                        ".png";  
                   }  
                   items.Add(item);  
              }       
         }  
         catch (Exception ex)  
         {  
              //Log de la excepción  
              throw;  
         }  
         return items;  
      }
      El método anterior muestra claramente que se obtiene una referencia al servicio REST, luego a través de LINQ se consulta la información de la lista específica llamada Noticias y finalmente se itera por los resultados obtenidos, dando como resultado el listado genérico de tipo TGNews. Esta clase TGNews es la clase entidad encargada de transportar los datos entre las capas, específicamente título y thumbnail de la noticia. Posteriormente esa es la información que sirve de fuente para el Tile en la aplicación Windows 8.
      Seguidamente el método encargado de consumir la información de los perfiles es similar a lo siguiente.
      public List<TGUsers> GetUserInfo()  
      {  
         UserGroup userGroup = new UserGroup();  
         userGroup.Credentials = new System.Net.NetworkCredential("user",
         "password", "dominio");  
         XmlNode allUsers = userGroup.GetAllUserCollectionFromWeb();  
         XNode xNode = XDocument.Parse(allUsers.OuterXml);  
         return (from root in xNode.Document.Elements()  
          from users in root.Elements()  
          from user in users.Elements()  
          let loginName = (string)user.Attribute("LoginName")  
          let userInfo = GetUserInfoDetails(loginName)  
          //Filter out admin accounts.  
          //Strangely enough I couldn’t find a consistent  
          //correlating property.  
          where loginName != "SHAREPOINT\\system" &&  
            loginName != "NT AUTHORITY\\LOCAL SERVICE" &&  
            loginName != "NT AUTHORITY\\SERVICIO LOCAL" &&  
            loginName != "NT AUTHORITY\\usuarios autentificados"  
          select new TGUsers()  
          {  
            Title = userInfo.Title,  
            Image = userInfo.Image,  
            Id = loginName,  
            Phonenumber = userInfo.Phonenumber,  
            Manager = userInfo.Manager,  
            Cellphone = userInfo.Cellphone,  
            Birthay = userInfo.Birthay,  
            Department = userInfo.Department,  
            HireDate = userInfo.HireDate,  
            JobTitle = userInfo.JobTitle,  
            Localitationoffice = userInfo.Localitationoffice,  
            Titulo = userInfo.Titulo,  
            Workemail = userInfo.Workemail  
          }).ToList();  
       }  
      
       public TGUsers GetUserInfoDetails(string loginName)  
       {  
          TGUsers userInfo = new TGUsers();  
          if (loginName != "SHAREPOINT\\system" && loginName != 
           "NT AUTHORITY\\LOCAL SERVICE")  
          {  
            //Set the default picture URL. Silverlight can't use the
            //default GIF  
            //provided by SharePoint.  
            userInfo.Image = "ms-appx:///Assets/usuario.jpg";  
            try  
            {  
              UserProfileService userProfileService = 
               new UserProfileService();  
              userProfileService.Credentials =
               new System.Net.NetworkCredential("user", "password", "dominio");  
              PropertyData[] data = userProfileService.
               GetUserProfileByName(loginName);  
              string pictureUrl = GetPropertyData(data, "PictureURL");  
              if (!string.IsNullOrEmpty(pictureUrl))  
              {   
                GetImage(pictureUrl, loginName.Split('\\')[1]);  
                userInfo.Image = "ms-appx:///Assets/"+ 
               loginName.Split('\\')[1] + ".png";  
              }  
              userInfo.Title = GetPropertyData(data, "FirstName") + 
               " " + GetPropertyData(data, "LastName");  
              if (string.IsNullOrWhiteSpace(userInfo.Title))  
              {  
                userInfo.Title = GetPropertyData(data, "AccountName");  
              }  
                userInfo.Phonenumber = GetPropertyData(data, "WorkPhone");  
                userInfo.Cellphone = GetPropertyData(data, "CellPhone");  
                userInfo.Manager = GetPropertyData(data, "Manager");  
                userInfo.Department = GetPropertyData(data, "Department");  
                userInfo.Birthay = GetPropertyData(data, "SPS-Birthday");  
                userInfo.HireDate = GetPropertyData(data, "SPS-HireDate");  
                userInfo.JobTitle = GetPropertyData(data, "SPS-JobTitle");  
                userInfo.Localitationoffice = 
               GetPropertyData(data, "SPS-Location");  
                userInfo.Titulo = GetPropertyData(data, "Title");  
                userInfo.Workemail = GetPropertyData(data, "WorkEmail");  
            }  
            catch (System.Web.Services.Protocols.SoapException ex)  
            {  
              if (!ex.Message.Contains("A user with the account name"))  
              {  
                //throw;  
              }  
            }  
            catch (Exception ex)  
            {  
                 throw;  
            }  
          }  
          return userInfo;  
        }      

      Los métodos anteriores se encargan principalmente de obtener diferentes propiedades del perfil de un usuario específico, a través de su Login,  y retornar esa información como una lista genérica de tipo TGUser. De ese modo la primera pantalla de la aplicación Windows 8 se encarga de listar a todas las personas, y luego podremos navegar al detalle de la información de cada uno de esos contactos. Vale la pena destacar del método anterior y también del método que trae la información de la noticia, la manera de manipular las imágenes. Aunque para el caso del Tile se pueden consumir imágenes a través de una URL, en este caso específico, dichas imágenes se encuentran en una biblioteca de SharePoint. Al momento de querer consumirlas a través de su URL obteníamos un error de permisos y no fue posible. Por tal razón la solución fue, descargarlas primero a la carpeta Assets de la aplicación Windows 8, y desde ahí, si darle la ruta a la aplicación para que las cargue. Esa fue la solución que le dimos a esa parte para poder que las imágenes se desplegaran, tanto las fotos de las noticias, como las fotos del perfil de cada usuario.
      Hasta este punto ya teníamos listas genéricas, con información de la lista de Noticias y de los Perfiles. Era el momento de sentarnos a escribir la capa Cliente, donde básicamente lo que se hace, es en Visual Studio 2012 crear un proyecto de tipo Windows 8.
      Con el proyecto de Windows 8 creado, lo primero era referenciar el proyecto WCF a través de una referencia de servicio. Con esto tendríamos acceso a los métodos expuestos por el servicio.

      Tile en Vivo: Los tiles son una de las características interesantes de Windows 8, y quizá lo que le da vida a la interfaz del usuario final. Es muy llamativo ingresar al escritorio del Sistema Operativo en la interfaz estilo “Metro” y ver toda esa información en vivo, por cada una de las aplicaciones instaladas: lectores RSS, correo, mensajería, juegos, entre otros. En nuestro caso la idea era desplegar el thumbnail y título de las Noticias almacenadas en una lista de SharePoint, y dicha información ya estaba lista en el método respectivo ofrecido por el servicio WCF. El tile luce similar a la siguiente imagen enmarcada en rojo, cuando la aplicación es desplegada en Windows 8:

      Tile

      El código encargado de obtener la información de las noticias y la creación del tile es el siguiente:

      public void Actualizartile()  
       {  
         var tileUpdateManager = TileUpdateManager.
          CreateTileUpdaterForApplication();  
         tileUpdateManager.EnableNotificationQueue(true);  
         ServiceReference.Service1Client client = 
          new ServiceReference.Service1Client();  
         Task<List<TGNews>> news = client.GetNewsTileAsync();  
         List<TGNews> items = news.Result;  
         foreach (TGNews temp in items)  
         {  
           if (!string.IsNullOrEmpty(temp.Thumbnail))  
           {  
             tileUpdateManager.Update(new TileNotification(  
              CrearIconoCuadradoYLargo(temp.Title, 
              "ms-appx:///Assets/" + temp.Title + ".png"))  
             {  
               ExpirationTime = DateTime.UtcNow.AddMinutes(60) 
             });  
           }  
           else  
           {  
             tileUpdateManager.Update(new TileNotification(  
              CrearIconoCuadradoYLargo(temp.Title, 
              "ms-appx:///Assets/default.png"))  
             {  
               ExpirationTime = DateTime.UtcNow.AddMinutes(60) 
             });  
           }  
         }  
       }  

      Del método anterior lo primero que debemos observar es el uso de la clase TileUpdateManager, que será la encargada de permitirnos manipular la funcionalidad de Tiles de Windows 8. Luego de definirla, encontramos que debido que en nuestro caso debemos cargar más de un Tile, y que se repita durante una cantidad de tiempo, es indispensable activar la Cola de Notificaciones del Tile:
      var tileUpdateManager = TileUpdateManager.CreateTileUpdaterForApplication();
      tileUpdateManager.EnableNotificationQueue(true);
      Luego de eso, se puede observar cómo se instancia la referencia del servicio y con eso poder consumir los métodos que ya hemos explicado, en este caso el método GetNewsTileAsync().
      Nuevamente volviendo al objeto de tipo TileUpdateManager, podemos observar que se crea una plantilla para desplegar los Tiles amplios, y otra para desplegar los Tiles cuadrados. Esto es muy importante porque es una característica de Windows 8, que el usuario puede activar cuando desee, y si esto no se implementa, la experiencia de usuario se desmejora. Esto se hace en la llamada al método CrearIconoCuadradoYLargo() cuya implementación es similar a lo siguiente:  
      private XmlDocument CrearIconoCuadradoYLargo(string texto,
              string rutaimagen)  
           {  
             //obtenemos el xml del del icono largo  
             var larga = CrearIconoLargoTextoImagen(texto, 
              rutaimagen);  
             //obtenemos el xml del icono cuadrado y extraemos su
              etiqueta binding  
             var cuadrada = larga.ImportNode(CrearIconoCuadradoTexto(texto).
              GetElementsByTagName("binding")[0], true);  
             // insertamos en el xml del icono largo el binding del icono 
              //cuadrado y hacemos que sean hermanos ambos tienen a visual como padre  
             larga.GetElementsByTagName("visual")[0].AppendChild(cuadrada);  
             return larga;  
           }  
      
           private XmlDocument CrearIconoCuadradoTexto(string texto)  
           {  
             var tilexml = TileUpdateManager.GetTemplateContent(
              TileTemplateType.TileSquareText04);  
             tilexml.GetElementsByTagName("text")[0].AppendChild(
              tilexml.CreateTextNode(texto));  
             return tilexml;  
           }  
      
           private XmlDocument CrearIconoLargoTextoImagen(string texto,
               string rutaimagen)  
           {  
             var tilexml = TileUpdateManager.GetTemplateContent(
              TileTemplateType.TileWideImageAndText02);  
             //añadimos nuestro texto  
             tilexml.GetElementsByTagName("text")[0].InnerText = texto;  
             //obtenemos la etiqueta image  
             dynamic imagen = tilexml.GetElementsByTagName("image");  
             //añadimos la ruta de la imagen dentro del atributo "src"  
             imagen[0].SetAttribute("src", rutaimagen);  
             return tilexml;  
          }  

      El método CrearIconoCuadradoTexto() se encarga de retornar la plantilla de tipo TileTemplateType.TileSquareText04, la cual básicamente nos permite desplegar un mensaje de texto cuando se despliega el Tile en formato cuadrado o pequeño. El método CrearIconoLargoTextoImagen() se encargará a través de la plantilla TileTemplateType.TileWideImageAndText02 de desplegar la imagen y el título de la noticia cuando el Tile se despliega más grande.

      Página de Items Agrupados: En el instante que el usuario hace clic en la aplicación lo primero que verá será el grupo de perfiles que se consultan a través del servicio Web de SharePoint 2010 ya  explicado. Básicamente el grupo de perfiles mostrará por cada persona su foto y su nombre, luciendo similar a lo siguiente:

      Principal

      La imagen anterior es el consumo de los perfiles de un sitio Demo de SharePoint 2010, por lo cual se ven algunas fotos repetidas, pero esto no sucederá consumiendo los servicios de un sitio SharePoint donde ya se tengan datos de perfiles de usuarios reales. Lo importante es que observemos entonces lo interesante de la solución, y es que desde una interfaz de Windows 8 muy amigable, podamos consultar la información de nuestros compañeros en la organización, sin tener que navegar a la interfaz Web del sitio en SharePoint. Esto significa un acceso rápido a información de compañeros de trabajo que podamos requerir consultar rápidamente.

      Luego que se han cargado todos los perfiles, se puede hacer clic en alguno de ellos, y posteriormente se desplegará una ventana donde se muestra el detalle de las propiedades de dicho perfil, similar a la siguiente imagen:

      informacion

      Bien, hasta este punto hemos mostrado lo interesante que es implementar soluciones en Windows 8, porque definitivamente las plantillas que ofrece para carga de información y su consecuente navegación, el modelo de objetos, y todas las facilidades para implementar interfaces WOW para el usuario final, ya están listas, es solo comenzar a utilizarlo. Y por otro lado toda la riqueza que SharePoint 2010 ofrece para consumir su información, esta vez desde una aplicación cliente como Windows 8, son definitivamente una reunión de tecnologías muy interesantes para crear soluciones mucho más avanzadas y con mayor funcionalidad. Todo esto ha sido construido en una máquina con Windows 8 instalado y Visual Studio .NET 2012 Ultimate. La granja SharePoint 2010 está totalmente aislada de todo esto y gracias a los servicios Web y REST se puede consumir su información sin requerir mucho más de eso.

       Andres Ortiz Es Ingeniero de Sistemas de la Universidad del Cauca, con más de 10 años de experiencia en el desarrollo de soluciones de Software y actualmente apasionado y especializado en la plataforma Microsoft SharePoint. Con más de 4 años de experiencia en SharePoint, trabajo en la compañía TopGroup, como Líder de Proyectos del área SharePoint, diseñando la arquitectura e implementando soluciones sobre esta plataforma para una gran variedad de clientes. Puede contactarlo en aortiz@topgroup.com.ar si está interesado en crear soluciones SharePoint de alto impacto en su compañía.

    4. WarNov Developer Evangelist

      Usando Windows Live Writer para bloggear

      • 4 Comments

      El día a día generalmente lo aparta a uno de probar nuevas alternativas. (La primera ventaja vista: Es un editor enriquecido, que me permite por ejemplo escribir justificado; esto no es posible con el editor nativo de mi sitio de blogs) Afortunadamente hoy pude sacar tiempo para por fin poder probar Live Writer y usarlo en mi blog de MSDN. Antes de continuar, les cuento que es un cliente de escritura de “blogs” que viene en la suite de Microsoft Windows Live Essentials. Se puede descargar de aquí: http://download.live.com/ Sin embargo, si queremos sólo descargar el Writer, también se nos da esa opción: http://download.live.com/writer . Y lo mejor de todo, absolutamente gratuito!!!

      Acabo de detectar un par de cosas excelentes de este editor. Tiene un buen manejo de operaciones de deshacer y rehacer. Y el preview es sencillamente impresionante, ya que muestra rápidamente cómo se vería el artículo dentro del blog! Es excelente. Lastimosamente no tiene una forma para ajustar con el cuadro de herramientas el interlineado de los párrafos. Sin embargo, tiene una ventana de código fuente, donde se podría entrar a especificar esto:

      style='line-height:150%'

      Más adelante, explicaré cómo incluí este código.

      Por otro lado, se conectó de inmediato a mi blog, solo pasando la url, el usuario y la contraseña. Y no solo trabaja con este, sino con Blogger, LiveJournal, TypePad, WordPress y un montón más. Sinceramente al principio creí que no sería capaz de trabajar con los blogs de MSDN, pero como ven, sí se pudo. LiveWriter trabaja con APIs como RSD (Really Simple Discoverability), the Metaweblog API, and the Movable Type API. De hecho estoy pensando en crear mi blog personal (no técnico) en Silverlight, que se ajuste a estas APIs para poder luego llenarlo con Writer.

      Tiene corrector de ortografía. Si pasa que bajan el Writer en Inglés u otro idioma distinto a Español; pero igual necesitan corregir en Español, en este link les tengo los diccionarios para que los incluyan en la ruta: C:\Program Files\Windows Live\Writer\.

      Es genial, porque a diferencia de Word, no me llena con una cantidad gigantesca de estilos el html generado. Todo queda perfectamente plano. De hecho, es tan inteligente, que cuando copio algo de otro lado y lo pego, le quita todo el formato, excepto cuando se trata de un link, el cual lo deja funcionando perfectamente.

      Además, tiene un sin número de plugins que permiten desde publicar un twit automáticamente apenas se publica un nuevo post, hasta insertar la información del tema que en este momento estoy oyendo.

      Ahora haré un conjunto de acciones para probar los insert nativos que trae la herramienta y aquellos que me bajé como plug-ins:

      Una Imágen:

      vs2010

      La traje desde mi disco duro. En dónde se hospedará?

      Una imagen tipo polaroid (esto fue un add-on):

      Es excelente ese Add-On! Solo puse mi foto de Nerd y el Add-On me depliega un menú en donde puedo ponerle el título de la misma, la fuente, los bordes, girarla, cambiarle tamaño, etc.!

      Ahora una tabla (viene nativo o como addon mejorado: )

      Hola  
         

      Pude escoger hasta la imagen de fondo! Escoge uno también el número de filas y de columnas

      Código de programación. Es un addon que permite escoger el lenguaje para detectar la sintaxis, y permite poner números de líneas e intercalamiento de colores:

         1:  public static class Program
         2:  {
         3:      public static void main()
         4:      {
         5:          Console.WriteLine("Hello World!");
         6:      }
         7:  }
       
       

      Hay muchos otros inserts disponibles; parece que funcionan correctamente. Ahora, voy a almorzar y no me preocupo, pues Writer graba automáticamente cada intervalo de tiempo específicado. Así que ya no corro el riesgo de que por X o Y motivos se bloquee el explorador y pierda toda mi escritura. (Debería tener más sortcuts de teclado al estilo Word). Antes de irme a almorzar, trazaré una línea horizontal, usando otro plugin. Los plugin se consiguen haciendo click en el botón de add plugin que queda en el panel de plugins a la derecha:

      image

      Esta imagen la pegué del clipboard luego de usar la fabulosa Snipping Tool de Windows 7 que me permite extraer pantallazos en una forma avanzada pero sencilla. Ahora sí la línea y a almorzar:


      Bueno; luego de regresar de almorzar,  me resta mencionar que ví que uno puede manejar varios blogs a la vez y es muy fácil pasar de uno a otro.

      Y para finalizar probemos la utilidad de tags.

      Technorati Tags: ,

      Luego de probarlo, observé que solo hay integración con algunos tipos de tags y no con los tags incluidos de los blogs de MSDN que están basados en Community Server, tal como se aprecia en mi anterior intento.

      Sin embargo, para mi caso particular no lo considero un issue muy importante, dado que escribir los tags directamente en la herramienta estándar no es para nada complicado ni riesgoso. Sin embargo, seguiré averiguando a ver si encuentro la forma de hacerlo todo desde aquí (Windows Live Writer).

      En conclusión, a pesar de tener un par de falencias para mi gusto que no fueron muy difíciles de solucionar y resultan insignificantes comparadas con todas las ventajas que me da Windows Live Writer, lo aconsejo enormemente y no hallo la hora de poder crear mi propio blog compatible con ésta herramienta.

      Ahora me dispongo a dar click en Publish. Espero que todo funcione correctamente. Cualquier resultado, lo anotaré como un comentario propio a este post. smile_regular (Ese emoticon es gracias a otro plugin adicionado smile_tongue )

      UPDATE 02/28/2010

      Hoy tuve una grata sorpresa al publicar un post. Descubrí en el Writer este botoncito:

      Setcategories

      Set Categories!!

      Recuerdan lo que mencioné acerca de tags? Que no había podido ponerlos para los blogs de MSDN o de Blogger?

      Pues sucede que estos dos blogs como algunos otros tienen un mecanismo no de tags, sino de categorías. Así que de una sencilla manera, oprimiendo el botón Set Categories me aparece el listado de las categorías que ya he usado en el blog y también se me permitió agregar nuevas categorías. Luego publiqué y voilá apareció de una vez mi post con las categorías adecuadas.

      Bueno; también acabe de descubrir que sí hay shorcuts. ctrl+i me da itálicas. ctrl+b me da bold y así sucesivamente.

      Para terminar este update, quisiera mencionar el plugin de Video. Tiene un buen manejo para videos de YouTube. Con la cuenta que uno tiene, puede subir un video y luego referenciarlo en el post, de manera que queda embebido. O referenciar uno de los videos ya subidos y todo de una manera bastante automatizada. Sin embargo, si YouTube no es suficiente (como en la mayoría de los casos dado su escaso límite de tiempo –10 minutos –) una buena alternativa gratuita es www.vimeo.com que actualmente uso en este blog. Allí, luego de subir un video, uno puede obtener el código para embeberlo en el blog. Ese código se pega en el plug-in de video y el resto lo hace por nosotros.

      En síntesis, lo descrito en este update, hace que me sienta muy contento usando Live Writer. Un producto gratuito de Microsoft.



    5. WarNov Developer Evangelist

      Windows Azure Websites: Dominios Personalizados

      En general los sitios de Azure Websites vienen con nombres del estilo: http://warnov.azurewebsites.net.

      Afortunadamente Windows Azure ofrece una metodología muy sencilla para asignar un nombre de dominio personalizado para que tu sitio tenga por ejemplo el nombre: http://warnov.com.

      Básicamente lo que tenemos que hacer:

      1. Verificar que nuestro Azure WebSite esté en Shared o Reserved (los free no pueden tener dominio propio)

        image
      2. Configurar en el proveedor de dominio los nombre tipo A.
        1. Uno para el @ y otro para el *
          1. Ambos van con la ip que ofrece Windows Azure:
            image

            image
      3. Configurar en el proveedor de dominio los CNAMEs:

         

        Los detalles de esta operación los podemos ver en este video de solo 6 minutos, usando como ejemplo a GoDaddy

        Las instrucciones mostradas en este video, podrían aplicarse fácilmente a la configuración en cualquier otro proveedor de dominios:

      4. WarNov Developer Evangelist

        Cómo hacer que tu app sea promovida en el Windows Phone Store

        El Windows Phone Store tiene un equipo encargado específicamente de seleccionar apps que se promueven todos los días en los stores de Windows Phone de cada país.

        Por ejemplo el día de hoy mi app: “Split my Bill” fue destacada en el store de Colombia y con esto claramente estaré notando un aumento sustancial en las descargas de mi app, pues esta aparece en el home del store cuando a éste entran los usuarios desde su Windows Phone.

        split

        Descárgala con tu Windows Phone.

        Split My BillQRCode

        Cómo logré que esto sucediera?

        El equipo que les mencioné básicamente revisa tres aspectos: Funcionalidad, Utilidad y Enjoynment.

        Funcionalidad:

        Hay algo más frustrante que una app que no haga lo que dice? Yo personal y despiadadamente he desintalado apps solo con el primer error que muestran.

        El equipo en este caso lo que evalúa es que tu app tenga un alto performance y estabilidad. Que se ejecute velozmente y responda bien a las interacciones con el usuario.

        Las apps deberían ser intuitivas y fáciles de manejar y navegar sin instrucciones. Los manuales son cosas del pasado. Quizá algunos tutoriales bien pequeños dentro de la app estén bien sin embargo. Pero estos deberían ser muy simples y no emplear más que un par de minutos de atención del usuario.

        En este apartado también se revisa la conceptualización y descripción que hayas usado para tu publicación en el store.

        clip_image002

        Esta descripción debería enganchar a tus usuarios y darles detalles de lo que la app (o su último update) es capaz de hacer. Aunque suene obvio, esmérense en escribir párrafos gramaticalmente correctos, claros y precisos de acuerdo con la realidad de la app. Y obviamente incluir screenshots de la app ayuda a los usuarios a tomar una decisión de descarga bien informada.

        clip_image003

        Utilidad:

        Acá se evalúa la calidad de experiencia móvil que brinda la app. Para tener una buena calificación en este aspecto tienen un conjunto de características muy útiles que habilitan al usuario a crear y compartir contenido nuevo. No solo a consumirlo. Otras veces permiten hacer tareas cotidianas de una manera más sencilla, haciéndole la vida más fácil al usuario, así sea resolviendo pequeños problemas. Si la naturaleza de tu app provoca que los usuarios la usen repetida y consistentemente de manera que se convierten en parte de la vida diaria de éstos, entonces ten seguro que tendrás una gran calificación en esta área. Las apps que toman ventajas de los features especiales de los aparatos también son muy apreciadas ya que proveen una experiencia única optimizada para tomar ventaja de las características del dispositivo (GPS, NFC, sensores, cámara, etc).

        La originalidad e innovación de la app también son evaluadas sobretodo en comparación con otras apps del Windows Store.

        Cosas tan sencillas como en mi app el hecho de no ser otra app más para dividir la cuenta en partes iguales, sino que es una app que permite saber exactamente cuánto consumió cada quien, es un claro ejemplo de este punto.

        clip_image005

        Tu app es diferente? lo hace mejor que otras? Piensa esto muy bien antes de emprender un nuevo proyecto y tendrás parte de la promoción ya ganada.

        Finalmente se observa que la app provea una fuerte impacto visual incorporando elementos visuales de alta calidad.

        Enjoyment:

        No encontré una palabra en español en corto tiempo que me permitiera traducir esta. Agradezco si en los comentarios agregan ideas al respecto.

        En esta área se evalúa la capacidad de la app para hacer que el usuario sonría, se alegre de usarla o diga “WoW” o quizá: “uy juemichica, que machera!”

        Estas apps deben hacer un uso muy concienzudo de características como Tiles, Lenses, Speech integration, Wallet, In-App purchase o Pin-to-Start. De maneras que acerque al usuario a los amigos, la familia, contenido o resolución de problemas de su vida diaria. Que el dispositivo en realidad sea como un control remoto de muchos aspectos de la vida del usuario. La aplicación de los principios de diseño es super importante en esta evaluación, de manera que se chequea la tipografía, iconografía, tiles, panoramas y los conceptos de movimiento que hacen que las apps aparezcan de manera bella y elegante.

        Aquí también se favorece a las apps que generen sinergia entre varios productos. Que se integren por ejemplo con Windows y Xbox para comunicar tofo o parte de la experiencia de un dispositivo a otro, es un gran plus.

      5. WarNov Developer Evangelist

        Mayo en Colombia y LATAM, es de Windows Phone 7

        • 2 Comments

         

        Windows Phone 7

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

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

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

        Por ejemplo, tenemos totalmente gratis:

        Visual Studio 2010 for Windows Phone

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

        Expression Blend

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

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

        Windows Phone Developer Tools CTP - April Refresh

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

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

        Windows Phone Developer Portal

        Pero un momento!

        Es todo para nosotros desarrolladores colombianos y latinos?

        No!

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

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

        La agenda es la siguiente:

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

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

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

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

        Para finalizar, Javier nos comenta:

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

         

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

      6. WarNov Developer Evangelist

        Development Storage en Windows Azure no puede ser accedido

        • 0 Comments

        Sea el siguiente escenario:

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

        image

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

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

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

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

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

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

        Conclusión:

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

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

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

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

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

      7. WarNov Developer Evangelist

        Notificaciones de Consumo para usuarios de Windows Azure

        • 0 Comments

        Para que sea más fácil para los clientes de Windows Azure realizar un seguimiento de su uso de horas de cómputo, ahora estamos enviando a los clientes correos electrónicos con notificaciones, cuando el uso de horas de cómputo excede 75%, 100% y 125% del número de horas incluido en el plan de cómputo.  Los clientes de nuestra oferta de consumo estándar recibirán durante las primeras 13 semanas de su suscripción, alertas por correo electrónico cada semana con el consumo de horas de cómputo de la semana anterior.  Después de este periodo, los clientes recibirán alertas por correo electrónico cuando su cómputo exceda 75%, 100% y 125% de su uso mensual basado en el consumo de los últimos tres meses.  Los clientes también pueden ver su uso actual y el balance no facturado en cualquier momento en el portal de cliente de servicios en línea de Microsoft.  La dirección de correo electrónico que se utiliza para la comunicación es la misma dirección que se utiliza al crear la cuenta de facturación.



      8. WarNov Developer Evangelist

        Windows Azure: El Servicio de Cloud Computing más rápido del mundo

        • 0 Comments

        En la batalla de los proveedores de servicios de Cloud Computing (verdadero cloud computing), Windows Azure de Microsoft ha salido adelante. Azure ofrece los tiempos de respuesta más rápidos a los usuarios finales para una aplicación de comercio electrónico estándar.

        Estos son los primeros resultados acerca de la capacidad de distintos proveedores para ofrecer un resultado de la carga de trabajo. La misma aplicación fue colocada en la nube de cada proveedor y, a continuación, fue golpeada por miles usuarios automatizados a lo largo de 11 meses.

        Google App Engine estuvo de segundo, seguido por GoGrid, Amazon EC2 y Rackspace, según pruebas realizadas por el servicio de CloudSleuth de Compuware.

        clip_image001

        Funcionalidades de la prueba incluían la capacidad para ofrecer una página Web con información de catálogo de muchas imágenes pequeñas y detalles de texto, seguidas por una segunda página que consiste en una imagen grande y etiquetas. Windows Azure con su centro de datos en Chicago fue capaz de ejecutar los pasos necesarios en 10.142 segundos.

        Como pueden apreciar, es sorprendente, dada la variedad de arquitecturas y técnicas de gestión de los participantes, los primeros cinco contendores muestren resultados tan sorprendentes. Aquí aparte del primer puesto de Azure, la diferencia la marcan los servicios de valor agregado que en nuestra estrategia Microsoft son inmensos ya que Azure se puede integrar transparentemente a todos los otros productos y servicios que manejamos en un amplio e inigualable rango en el área tecnológica.

        Los tiempos de respuesta pueden parecer mucho en comparación con, digamos, los motores de búsqueda que solo tardan un segundo en responder. Pero la aplicación de prueba está diseñada para requerir una transacción de varios pasos que está siendo solicitada por los usuarios de una variedad de lugares del mundo.

        Es la mayor red de robots en el mundo, dijo el proveedor independiente que ejecutó el análisis. A continuación, se corrigió: "Es la mayor red de bot legal," ya que hay redes de bots de malware de tamaño considerable surgen de vez en cuando.

      9. WarNov Developer Evangelist

        Gobierno 2.0 Camp Colombia 2010

        • 0 Comments

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

        image

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

        • Transparencia
        • Colaboración
        • Participación ciudadana

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

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

        image

        Entre otros, veremos temas muy interesantes como:

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

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

      10. WarNov Developer Evangelist

        SetConfigurationSettingPublisher needs to be called before FromConfigurationSetting can be used

        • 2 Comments

        Este error de Windows Azure nos indica que el método FromConfigurationSetting no puede usarse para obtener el valor de una variable de configuración del servicio cloud, pues para poderse usar, es necesario haber establecido un publicador de ajustes de configuración.

        clip_image002

        Se soluciona sencillamente inicializando el publicador con éste código estándar:

        CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
        {
            configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
        });

        Aquí vemos como Windows Azure es muy flexible pues no nos limita a extraer las variables de configuración de un único archivo (como en el Web.config en el caso de ASP.NET) sino de donde queramos a través de un delegado anónimo.

        Este código se puede poner por ejemplo en el inicializador del WebRole, para que quede disponible durante el resto del ciclo del vida del servicio.

        Pero en este momento algunos de ustedes deben estarle gritando a la pantalla: “Pero si yo ya hice eso!!!”

        No se preocupen… en este caso lo que sucede es que puede que ya estén usando el modo Full IIS propio de la versión 1.3 de las herramientas y SDK de Azure. Esto implica que a pesar de que ya escribieron el inicializador del Publisher, este no se ejecutó en el IIS (w3wp.exe). El inicializador del publicador de configuraciones (aquel que nos permite leer programáticamente las variables que ponemos en los archivos de configuración de los roles) no se inicializará en el sitio Web (que corre en el IIS) pues el código de inicialización que teníamos antes, solo funciona en el entorno de ejecución del WebRole (WaWebHost.exe) pero cuando usamos Full IIS lo que pasa es que el sitio web se ejecuta en el IIS (w3wp.exe) mientras el inicializador del WebRole lo hace en el WaIISHost.exe. Por ende cualquier llamado al archivo de configuraciones desde el sitio Web fallará pues el publicador no se inicializó allí.

        Entonces hay tres opciones de solución.

        1. Elimine la sección de Sites para indicar que todo correrá en HWC (Esto en el caso en que no requiera múltiples sitios en el mismo web role.

        2. Ejecute la inicialización del Publisher en el Application_Start del Global.asax

        3. No use el Publisher para obtener los valores de los setting, sino un código similar a:
        var storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("ConnectionString")); (Esta sería la opción menos clara y menos recomendada, a menos de que solo necesite llamar un par de variables).

      Page 4 of 14 (334 items) «23456»