Charla de Web & Cloud en VSLaunch

…estoy evaluando worpress como plataforma de blogging… de modo que poco a poco iré posteando más aquí y menos en este blog que estas leyendo =)

 

El 2 de Octubre en Madrid y el 4 en Barcelona mis compañeros del equipo de ventas de Visual Studio celebraron un evento de lanzamiento de Visual Studio 2012 orientado a jefes de proyecto y directores. Tuve la suerte de que me invitasen a participar con una sesión donde comentaba las principales mejoras relacionadas con el mundo Web y Cloud.

image

Tenía que dejar claro desde el minuto 0 que esta iba a ser una charla más técnica y más informal que las demás 😛

 

Son muchas novedades que trae el producto y la plataforma para una sesión de 40 minutos, donde además tenía que hacer una breve introducción al mundo del cloud en entorno Microsoft, de modo que se quedaron muchas cosas en el tintero, pero creo que supimos destacar las principales.

Agrupé las novedades en torno a 4 tendencias del mercado: Apertura, Movilidad, Orientación a Servicios y Cloud como plataforma

Apertura

Por la parte de apertura, principalmente vimos cómo Visual Studio 2012 integra lenguajes de la web ampliamente adoptados como lenguajes de primer nivel. En las demos vimos como HTML5, Javascript y CSS tenían nuevas funcionalidades en el editor para darles un mejor soporte. Intellisense, wizards, detección de errores…En este enlace podéis encontrar el video de una demo similar a la que hicimos

También descubrimos Page Inspector. Una nueva funcionalidad que actúa como un depurador de la parte cliente. Este depurador detecta los ficheros que forman parte de la página que estamos viendo de modo que si seleccionamos un texto, sabemos:

    • En qué parte del DOM se está generando
    • Que reglas CSS se le aplican de qué archivos
    • Y ojo al dato… desde que porción de código del servidor se está generando
    • Además de que nos permite editar el código de cualquiera de las vistas para hacer cambios en el momento
    • Aquí tenéis una demo específica de PageInspector

Ni que decir tiene que esto es tremendamente útil para detectar y corregir errores en interfaces web.

Por la parte de apertura tb comentamos brevemente nuget (package maanger) y cómo nos permite incorporar proyectos de la comunidad en nuestras soluciones.

Movilidad

España esta entre los primeros países en adopción de smartphones entre la población. Cada uno de nosotros y el uso que hacemos de nuestros móviles es un ejemplo de ello. También reflexionamos sobre el hecho de que hay muchos usuarios (sobre todo en economías emergentes) donde su único acceso a internet es a través del móvil. ¿Cómo tenemos este escenario cubierto en nuestras aplicaciones?

Además de la opción obvia de desarrollar una app y estar en el marketplace de turno, está la opción de que el servicio se consuma a través de una web móvil, además…como la sesión se llama “web y cloud” es el escenario que abordamos 😉

Vimos que tenemos diferentes opciones a la hora de exponer un desarrollo web al mercado móvil:

  • No hacer nada ^^ Si, así, con 2 narices. No hacemos nada… el usuario accede a nuestra web tradicional y se verá más o menos, además, como los navegadores móviles cada vez son mejores, pues hala. (En este escenario recomendamos al menos el uso de viewports)
  • Adaptative/Response UI. trabajar con media queries para que la interfaz se adapte a los tamaños de pantalla. Visita www.mediaqueri.es para hacerte una idea 😉
  • Un desarrollo móvil específico… donde utilicemos librerías como JQuery mobile  (incluida ahora en VS) para desarrollar el sitio

Aquí tenéis otro video con los ejemplos

Orientación a Servicios

En este apartado hice una introducción a un par de novedades de ASP.NET … WebAPI y SignalR.

WebAPI es una capa de abstracción sobre MVC y que permite exponer servicios REST que adaptan el formato de retorno al cliente que hace la petición. Por ejemplo… una petición que soporte JSON recibirá JSON como respuesta y otra que soporte XML, pues recibirá XML… esto es perfectamente extensible para nuestros propios formatos y cuenta con toda la fontanería necesaria para dar soporte a los métodos HTTP.  Vídeo con ejemplo de WebAPI

SignalR es una capa de abstracción (esto va de hacerlo más fácil) sobre WebSockets. Esto permite que haya comunicación FullDuplex y permite comunicación en tiempo real en aplicaciones web. Con este modelo, una vez establecido el canal, el servidor puede abrir comunicación con el cliente sin que éste haya hecho una petición (oh yeah!). Aquí os dejo algunos vídeos

Cloud como plataforma

Un servicio cloud tiene que cumplir 4 características: Virtualmente ilimitado, pago por uso, autoservicio y elástico. Vimos que casi cualquier aplicación tiene picos o estacionalidad (dia/noche… fines de semana…vacaciones…cierres de mes…) y cómo en estos momentos un servicio cloud nos ayuda a ser más eficientes en el gasto y más ágiles a la hora de afrontar un cambio.

Cuándo quedarse en un entorno de cloud privada y cuál es la diferencia entre virtualización y cloud privado (la virtualización sólo es un paso hacia el cloud privado)… diferencia entre iaas, paas y saas (creo que era la vez un millón que lo contaba ^^) y cómo Windows Azure cubre diferentes partes del espectro.

Visual Studio fue protagonista por la parte de integración con Windwos Azure… si bien podemos desarrollar con el block de notas y herramientas de línea de comandos para empaquetado y despliegue… Visual Studio incluye consolas de gestión para desplegar, gestionar certificados, simuladores, etcétera… para eliminar trabas en el desarrollo

Aquí también tenemos un par de videos….Desarrollando servicios cloud con visual studio y publicando servicios cloud con visual studio

En resumen…

…espero que estas notas os valgan de referencia para los que no pudisteis pasaros por el evento. Estaba pensada como una sesión introductoria y más orientada a jefes de proyecto que a desarrolladores, de modo que no hubo demos con profundidad técnica… de todos modos si tenéis ganas de código… id reservándoos el 22 de Noviembre, que estamos cociendo un evento para desquitarnos y tirar líneas a go-go 🙂

Aun no se puede contar nada porque lo estamos definiendo, pero si queréis dar feedback estáis a tiempo… estamos leyendo el hashtag #estechday de twitter.

Happy Hacking!

~@davidsb

[Offtopic] Encuentro Reebok Crossfit

Si eres asiduo a este blog… te advierto de que esto es un offtopic como una catedral =) Además del software y los animales… mi otra gran pasión es el deporte, he practicado bastantes, pero de un tiempo a esta parte he encontrado una disciplina que combina diferentes áreas y que me encantó desde el primer día… el crossfit. Para los no iniciados… son circuitos de alta intensidad con ejercicios de todo tipo (subir cuerdas, correr, ejercicios de fuerza, strongman, olímpico… ) no sabes lo que te vas a encontrar cada día en el gimnasio… pero sabes que te va a doler todo el cuerpo 🙂

Prometo abrir un blog específico y no spammear más en geeks.ms ^^

 

Encuentro Reebok Crossfit

El domingo 1 de Abril, se organizó (de la mano de Reebok y mundocrossfit si no me equivoco) un evento en la plaza de Felipe II en Madrid donde se hizo una exhibición de crossfit desde diferentes ángulos.

Primero tuvimos el momento famoseo =) Disfrutamos de ver a caras públicas enfrentándose a un WOD (un entrenamiento) sencillito para quedar bien en las cámaras y que los de Reebok puedan grabar un spot. Aquí tengo que decir… que tener a Jorge Lorenzo allí currándoselo fue todo un lujazo, se nota cuando a una le gusta competir, y no digamos a un deportista de su talla.

Luego llegó la competición femenina individual de boxes de crossfit. Aquí empezó el espectáculo. Los famosos quedan bien en cámara… pero las chicas de los boxes (gimnasios) de crossfit demostraron que hay que sudar todos los días. Se enfrentaron a 12 minutos en los que tenían que hacer máximas vueltas de 10 thrusters y 10 saltos al cajón.

Tuvimos gritos de los compañeros, ánimos…  en alguna cobertura del evento se critica que la afición gritase NOREPs (cuando un competidor tiene un fallo de forma y no se debe contar la repetición para el cómputo total)

Para gustos los colores, en mi opinión, una competición es una competición… y si en el box entre nosotros no nos pasamos una… tampoco se lo vamos a pasar a alguien que está compitiendo para un campeonato puntuable. Hay que ganar con la forma correcta, punto.

En este individual de chicas, ganó la máquina competidora de Crossfit Zaragoza, no recuerdo el nombre, pero todos comentamos que tenía una técnica brutal tanto en thrusters como en saltos… viéndola parecía fácil!. Destacar también la determinación de la competidora de mundocrossfit, que tras sufrir un golpe con la barra continuó sin inmutarse. Ole!!

image   Aquí vemos a nuestra compañera Mari Carmen de tracius y a su juez, Nacho, de mundocrossfit.

El juez ha de controlar que todos los movimientos sean correctos y contar únicamente las repeticiones válidas.

No dejamos pasar ni UNA, y cuanto más cariño nos tenemos más exigentes somos con los compañeros =)

 

Luego pasamos a la competición masculina individual, mismo WOD que las chicas… máximas vueltas de thrusters y saltos al cajón en 12 minutos… En esta competición se impuso Aaron Cordero de Crossfit Tracius (dos días después del evento sigo con la garganta mal de los gritos de ánimo) EN este vídeo podéis ver los últimos momentos de la competición.

Además de para animarle… al contarle las repeticiones nos aseguramos de que no se le escape NI UNA!! 😉

Tras la competición masculina, hubo un ejercicio de exhibición donde participaba de nuevo Jorge Lorenzo. 3 vueltas de saltos de comba, burpees con saltos al cajón, flexiones haciendo el pino y no se qué mas x)

image Aqui si que llovieron unos cuantos gritos de NOREP … por mucho que sea una exhibición, los que SI se supone que saben de crossfit tienen que hacerlo bien.

no excuses 😉

Por cierto… 100 saltos de comba son demasiado fáciles para estos figuras… tenían que haber sido dobles

Luego tuvo lugar competición por equipos de crossfit,  se enfrentaban 3 miembros de cada box a un wod donde había que acumular en el menor tiempo posible un número de repeticiones determinado de zancadas con peso, burpees, pesos muertos y volteretas con pìno. Se impusieron Miguel, Iván y Sara de Crossfit Tracius (wooohoooo!!! La armada naranja!)

 

image

Por último, en la competición de gimnasios comerciales… sinceramente…hubo poca calidad… qué puedo decir, lo siento pero no me gustó. Salvo excepciones contadas, hubo muchos fallos de forma (pesos muertos con las piernas rectas, burpees lanzándose al suelo como si fuese una piscina, zancadas sin rango…) y muchos fallos de matemáticas (como esta era una exhibición y no había jueces, álgun@s contaron como les vino bien). Espero que si estos van a ser los instructores que van a asesorar a socios en reebok crossfit reciban una formación adecuada.

Gracias!

a la organización por vuestro tiempo, inversión y por hacerlo posible… estos eventos llevan muchísimo trabajo hasta que tienen lugar (feedback para la próxima: más control en los ejercicios y zapatillas o regalo para TODOS los competifores).

a los competidores… MUY bien, MUCHO nivel, estoy deseando que tengamos una competición de crossfit algo más underground y conocer a los compañeros de los demás boxes

image

A mis compañeros de sufrimiento de crossfit tracius… tanto la hinchada, como los competidores… qué bien lo pasamos!! Con vosotros al fin del mundo! (eso si… sin correr que ya sabéis que no es lo mio =P )

image

 

Es lo mismo Reebok crossfit que Crossfit?

En mi opinión… no. He visto en mi BOX como TODO el mundo puede hacer crossfit, todo el mundo puede hacer dominadas, ejercicios de halterofilia, sentadillas, anillas… nada es imposible, el secreto es tener un grupo reducido de gente y unos entrenadores preparados que te lleven al dedillo, sepan hacerte progresar y te asesoren adecuadamente. Lo he vivido.

Una marca como Reebok ha visto el filón del crossfit y quiere liderar el movimiento, lo entiendo. Sabemos que no hay mejor manera de liderar algo que ponerte delante de una manifestación existente con tu bandera, no? pues eso, así ha nacido el reebok crossfit =)

Mi opinión: El reebok crossfit es una versión descafeinada para gimnasios “comerciales”.

Los gimnasios comerciales no pueden permitirse tener personal especializado en crossfit para asesorar a sus socios, y no les sería rentable comprar el material necesario para clases de 10 personas. Así que quitan todo lo técnicamente complicado para no complicar la calse (la parte de halterofilia, cuerdas, ejercicios de fuerza, sprints, ruedas, strongman)… y se quedan con el resto.

Personalmente, te recomiendo que te pases por uno de los boxes oficiales a probar lo que es el crossfit de verdad… si no puedes, el crossfit comercial o reebok crossfit no está nada mal para condicionamiento y mejora de estado físico, pruébalo! Es infinitamente mejor opción que atiborrarse a pesas.

 

Boxes oficiales

Ya hay unos cuantos por España, puedes obtener el listado completo de

Crossfit Tracius <- El mío ^^

Crossfit Madrid

Mundo Crossfit

Crossfit Sevilla

Crossfit Zaragoza

Entreno Cruzado

Y si quieres más… mira en la página oficial  Creo que en breve abrirán en Bilbao y Barcelona… atento!

 

y si lo que buscas es el reebok crossfit… llegará pronto a tu sala de clases colectivas 😉

 

Happy hacking!

 

PD –> Repito… es MUY cutre que los de Reebok no regalasen las zapatillas que promocionaban a todos los competidores que invirtieron allí la mañana.

Ejemplo de NodeJS, Express y Azure en el codemotion

El sábado 24/3 tendré el placer de presentar un taller en codemotion, este post pretende ser una guía para los que no podáis venir al evento O=) o para que podáis seguirla paso a paso tras el taller.

En cualquier caso, si vienes a codemotion y no vienes al taller porque ya he publicado este post… te vas a perder unas cuantas explicaciones extra, a sí que ven!! 😉

Para poder seguir los pasos del taller, es necesario que descargues e instales un par de cosas:

Herramientas de Windows Azure para Node

Emulador de Windows Azure

Y para poder hacer el despliegue en Windows Azure puedes dar de alta una cuenta de evaluación gratuita

Como entorno de desarrollo puedes utilizar el que quieras (VS incluido), personalmente he optado por WebStorm de JetBrains, que trae soporte directo para node

Y por último, comentaros que aplicación que vamos a crear es un libro de visitas (original, eh?)

Empecemos a ver las diferentes piezas…

 

Node.js

Según sus creadores, node.js es una plataforma construida sobre el runtime javascript de Chrome para crear aplicaciones de red de forma fácil y escalable. Nodejs utiliza un modelo de Entrada/Salida sin bloqueos basada en eventos que lo hace ligero y eficiente, perfecto para aplicaciones en tiempo real con gran consumo de datos que corren en dispositivos distribuidos.

Ahí queda eso. algunas notas más

El Javascript que utilizamos para desarrollar en node es compatible hasta ECMAScript 3

El modelo asíncrono / orientación a eventos viene facilitado por la forma de trabajo en javascript donde estamos acostumbrados a pasar un callback y trabajar de forma asíncrona

 

Ejemplo de crear el servidor

El típico hola mundo de node pasa por crear un pequeño servidor escuchando en un puerto y atendiendo las diferentes peticiones. Me niego rotundamente a llamar a eso un servidor web, porque no es más que un socket y un proceso asíncrono de los clientes, pero ahí va…

 

image Vemos cómo se importan módulos, q es sintaxis puramente javascript, cómo se pasa una función como parámetro,…

Para ejecutarlo tendremos que escribir node.exe miarchivo.js en la consola (suponiendo q tengamos node.exe en el path del sistema)

Si accedemos desde un navegador a http://localhost:3000 veremos la respuesta

image

En node por defecto tenemos algunos módulos para trabajar, además de los que podemos descargar de la comunidad con el gestor de paquetes o los que podamos desarrollar nosotros mismos para nuestra aplicación.

Habilitando node en Windows Azure

Windows Azure es una plataforma como servicio, uno de los posibilidades que ofrece es que alojemos nuestras aplicaciones en datacenters de Microsoft para que puedan contar con los recursos del datacenter si fuese necesario.

Ese servicio de alojamiento en Azure nos ofrece una capa de gestión que se encarga de monitorizar la salud de nuestras aplicaciones y de subir y bajar el numero de instancias que necesitemos, reciclarlas si fuese necesario, actualizar el sistema operativo, etcétera… todo de forma transparente para el desarrollador.

Windows Azure esta basado en Windows Server 2008 R2 X64… y a diferencia de lo que algunos desarrolladores piensan, NO es una plataforma para aplicaciones .NET. Todo lo que puede correr sobre Windows Server 2008 puede correr sobre Windows Azure, como por ejemplo NodeJS, java, php o … .NET =)

A Azure tenemos que darle nuestra aplicación empaquetada y en caso de que fuese necesario, los intérpretes y librerías para poder ejecutar nuestra aplicación. En el caso de node, tendríamos que crear un paquete donde configurásemos una serie de comandos (una startup task) que instalen nodejs y un addin para el IIS al arrancarse la máquina virtual para nuestra aplicación.

Esta es una tarea trivial, de modo que está automatizada, solo tenemos que arrancar la consola de powershell de Windows Azure para nodeJS en nuestra máquina y ejecutar los siguientes comandos

image

Con este primer comando New-AzureService nodemotionweb hemos creado un servicio y las configuraciones para el cloud, ejecutando ahora Add-AzureWebRole añadiremos un rol de máquina Virtual para que actúe como frontal web

image

Cotilleando los archivos vemos lo siguiente

bin Contiene una serie de paquetes y un comando para que arranque las instalaciones al arrancarse la aplicación en el servidor en la nube… cotillead 🙂

server.js Es el punto de arranque de nuestra aplicación, Cuando arranque la aplicación en el cloud, va a ejecutar este archivo. (viene determinado en el web.config)

web.cloud.config y web.config son archivos de configuración. Aqui por ejemplo tenemos determinado que cuando despleguemos en el datacenter vamos a querer una instancia extrasmall compartida. Podemos cambiarlo para tener otros perfiles de máquinas dedicadas, diferente número de instancias, etcétera…

 

Vamos a probar a ver qué es lo que se ha generado, ejecutamos la aplicación en el simulador con el siguiente comando

image

image

PERFECTO! un hola mundo del que empezar a rascar! Tenemos la infraestructura básica montada y funcionando, ahora vamos a ir construyendo la aplicación

 

Express

Express es un framework MVC para nodeJS, permite construir aplicaciones web de una forma rápida, sencilla  y de forma estructurada. Vamos a instalar el módulo de Express y sus dependencias para nuestro proyecto. Para la instalación vamos a utilizar npm, el node package manager

Instalación de Express

image

Express va a ayudarnos a construir el andamiaje de nuestra aplicación, una vez instalado, tenemos que ejecutarlo para que nos cree la estructura básica de la aplicación. OJO una vez lo ejecutemos y se genere la aplicación base, tendremos que instalar algunas dependencias. Express utiliza algunos otros módulos de node para funcionar y tenemos q asegurarnos de que están presentes en nuestra aplicación

image

y la instalación de las dependencias

image

De entre las dependencias, cabe destacar Jade. Jade es un módulo para escribir las vistas en Express, si vienes del mundo .NET, esto podría ser equivalente a usar Razor en las vistas de ASP.NET MVC, un lenguaje que facilita el trabajo de la generación de las vistas, más adelante veremos cómo se utiliza

 

Flujo en una aplicación Express

Antes de ponernos a tocar código, vamos a invertir un momento en entender la estructura y el propósito de los archivos más importantes que nos ha generado Express

app.js  Punto de entrada de la aplicación, si lo abrimos, veremos que se registran rutas para las diferentes peticiones que se vayan a realizar en la aplicación web y que tras configuraciones y registros, se arranca el servicio. OJO vamos a desarrollar la aplicación sobre este app.js, pero antes de subirla a la nube, tendremos que renombrarlo a server.js o cambiar la configuración para que el que arranca sea este 😉

/routes A mi personalmente me gusta utilizar esta carpeta para guardar los controllers 🙂

/views Las vistas en JADE, cuando nuestros controladores hayan llegado al punto en el que tengan la respuesta para el cliente, apuntarán a la vista adecuada para mostrar esa información. Si abrimos alguno de los archivos JADE, vamos la sintaxis de la vista… en breve nos tendremos que crear un par de ellas. Layout es la master page

Empecemos!!

Nuestra aplicación va a ser un sencillo libro de visitas, donde los visitantes, podrán dejar su nombre y un mensaje para que se registre en el muro.

Necesitaremos:

tres vistas (un formulario de recogida de información en una, un gracias y el muro con los saludos en la otra)

una ruta nueva para la operación de recibir los datos

un controlador que se encargue de almacenar la información y de recuperarla, podríamos hacerlo en dos, pero hay muchas coas en el taller para mostrar y en el evento solo tenemos 45 minutos! 😉

 

Creando la aplicación…vistas

Para ir pudiendo probar lo que vamos haciendo, vamos a empezar por construir un par de vistas sencillo, ya lo iremos complicando cuando veamos que todo funciona. Vamos a la carpeta views y creamos dos archivos

inicio.jade   -   guardado.jade

(aun no vamos a hacer nada con ellos, pero los dejamos creado)

vervisitas.jade

image

 

Creando la aplicación…controlador

creamos un nuevo archivo visitas.js dentro de la carpeta routes y le añadimos un par de métodos que exportamos del módulo. Por ahora nos conformamos con que redirijan a la vista correcta, luego volveremos a ellos.

image

Creando la aplicación…rutas

Abrimos app.js, referenciamos nuestro recién creado controlador y registramos un par de rutas nuevas para ver que todas las piezas encajan

image

Probamos

Para probar, solo tenemos que ejecutar el app.js con node, por ahora no estamos metiendo azure en la ecuación, solo estamos probando una aplicación web en local, de modo que aun no nos preocupamos de los simuladores y demás.

Trabajando con WebStorm, podemos ejecutar desde el IDE, pero como estamos haciéndolo con powershell, pues vamos a nuestra consola y lo arrancamos.

Tras arrancarlo tenemos que hacer 2 peticiones desde el navegador:

   http://localhost:3000/visita No pasará nada porque no hemos redirigido a una vista, pero veremos el mensaje registrado en la consola

image

   http://localhost:3000/visitas En este caso tenemos que ver una página como la siguiente

image

Perfecto!! El monstruo esta vivo!!!  Ahora solo tenemos que complicar un poco la aplicación para que tenga un poco más de sentido 🙂

 

Complicando la aplicación… el formulario

Ahora si entramos con inicio.jade, para poder ir viendo el resultado según vas haciendo el formulario tendrás que editar la ruta por defecto en app.js y cambiarla a lo siguiente

image

y ahora te recomiendo que vayas generando el formulario poco a poco y viendo el resultado en el navegador. En JADE es importante la indentación y da lugar a una estructura jerárquica de etiquetas en el HTML. vete escribiendo tag y probando y experimentando con y sin jerarquía (siiiii, podríamos haber posicionado con css… pero entonces no se vería tan bien lo que pretendo que se vea de las jerarquías)

image

Finalmente llegarás a algo parecido a esto

image

Este formulario que hemos incluido en inicio.jade hace referencia a la ruta visita pero con un método POST. Nosotros lo teníamos con un método GET. Tenemos que editar el app.js para hacer este pequeño cambio

image

Complicando la aplicación…el almacenamiento

Ahora lo ideal sería recoger la información y guardarla en una BBDD y luego al consultar, recuperarla de la BBDD… si hacemos esto, me va a salir el taller más largo del mundo y no es la idea O=) Voy a utilizar un archivo de texto como almacén de los mensajes. ESTO NO DEBE HACERSE EN LA VIDA REAL, principalmente por 2 razones

  Es un cuello de botella, el acceso a disco es muy costoso

  No puedo compartir la información entre diferentes servidores de frontal

Pero esto es una demo, y para que se vea node funcionando con express en Azure…me vale, así que

image

por cierto, editamos guardado.jade para que haga algo ^^

image

y ver vervisitas.jade para que muestre los mensajes

image

 

probando, probando

Desarrollo… listo! Ahora al arrancar a aplicación podremos navegar y ver el funcionamiento completo

image image image

 

Publicación en el cloud

Prueba en el simulador

Antes de lanzarnos a publicar en el cloud, vamos a verificar que funciona localmente, para ello tenemos que hacer un par de cambios. El primero pasa por renombrar nuestro archivo de inicio app.js a server.js que es el que está esperando el rol para arrancar el servicio.

El segundo es establecer un número de puerto adecuado, vamos a dejar que la plataforma asigne, de modo que cambiamos en el server.js el puerto 3000 por process.env.port

image

Tras esos cambios, nos aseguramos que estamos en el directorio del web rol y lanzamos el emulador

image

Se nos abrirá una ventana de navegador (y si no, la abrimos nosotros) donde verificaremos que nuestra aplicación funciona. Una vez lo hayamos hecho y funcione… detenemos la simulación y nos preparamos poara subir a producción a un datacenter de azure!! =D

image

Importación de perfil cloud

OK! Para estos pasos es necesario que tengas activada una suscripción de indows azure. Si eres suscriptor MSDN, o emprendedor o partner de microsoft, tienes una cuenta con recursos mensuales gratuitos. Si no caes en esos grupos, tienes la opción de activar sin coste una cuenta de evaluación

Cuando tenemos la cuenta, hemos de importar a nuestro proyecto los detalles de la suscripción, así podremos subir la aplicaicón directamente desde la línea de comandos. Ejecutamos:

Get-AzurePublishSettings.  Esto nos llevará al portal de azure, donde haremos login y nos descargará un archivo con la configuración

Import-AzurePublishSettings <direccion del archivo> Este comando hará que la configuración de nuestra cuenta en la nube que acabamos de descargar esté disponible para el despliegue

Publish-AzureService -name nodemotion -location "North Europe" –launch  wooohoooo!! este es el comando del despliegue, le estamos diciendo que nos cree un nuevo servicio nodemotion en un datacenter al norte de europa y que lo arranque

El despliegue puede tardar unos minutos, tened en cuenta que se está aprovisionando la máquina, subiendo la aplicación, arrancando, etcétera…puede tardar unos 10 min en una conexión lenta, así que paciencia y un cafelito)

Además del feedback que veremos desde la consola, si queremos podemos conectarnos al portal de administración de azure para ir viéndolo de forma más gráfica =)

 

image

Y cuando acaba la publicación… podemos probar el servicio desde la URL de producción

image

y dejar nuestro mensaje desde producción!!!!!

image

 

Ahora podemos jugar todo el tiempo que queramos.. y cuando nos cansemos… para quitar el servicio de producción, ejecutaremos

Stop-AzureService y

Remove-AzureService

 

Si tienes cualquier duda, añade un comentario e intentaremos resolverla. Es una artículo largo y puede que me haya saltado alguna explicación importante… decídmelo!

Por lo demás, espero que os pueda servir de ayuda para empezar con alguno de todos los temas que tocamos en el taller

 

Happy hacking!!

 

PD: sisi, ha quedado larguito, pero es que son muchas cosas y no me gustaba partirlo en piezas 😉

PD2: recursos! aqui hay más laboratorios de node y azure… http://www.windowsazure.com/en-us/develop/nodejs/

Codemotion, windows 8 tour, windows 8 camps…

¡¡¡Eventosssss!!!

En Sevilla, Barcelona, Madrid, Bilbao y Valencia estaremos mis compañeros, algunos partners destacados en Windows 8 y yo con los eventos de Windows 8 Tour y Windows 8 Camps.

Registro: http://msdn.microsoft.com/es-es/hh854952?ocid=eml-n-es-loc-W8-Q3

En los Windows 8 Tour tendremos varias sesiones donde mostraremos Windows 8 y cómo es el desarrollo de aplicaciones y las herramientas. La agenda:

10-11. Intro a la plataforma

11-12. Desarrollo de aplicaciones

12-12:15 Café para ir asimilando lo que hemos visto

12:15-13:15 Experiencias Enriquecidas (tiles, notificaciones, contratos…)

13:15-14:15 Monetización de aplicaciones

 

En los Windows 8 Camps, el contenido será eminentemente práctico y será recomendable que te traigas tu portátil. Si tenías pensado NO asistir para hacer los laboratorios por tu cuenta… me temo que no hay planes a corto plazo de colgar los laboratorio… así que vente!!! sin excusas! =)

Te lo tienes que traer con Windows 8 consumer preview, Visual Studio 11… te lo contamos todo en la página de registro =)

Por otro lado, este sábado 24/3/12 estaremos en el codemotion en Madrid, personalmente tengo un taller para geeks el sábado a las 10:30. Veremos cómo hacer una aplicación node… luego le añadiremos el framework MVC Express y tocaremos un par de plantillas para finalmente subirlo al cloud en Windows Azure.

Tras el evento subiré una guía de cómo se hizo, pero si asistes al codemotion te recomiendo que te traigas un portátil para ir haciendo el laboratorio. Aunque haya muchos conceptos que ir aclarando… es MUY fácil de hacer y de un plumazo vas a poder trastear con varias tecnologías.

Si vienes, trae el SDK de Azure para node instalado y los emuladores de Windows Azure, lo puedes encontrar todo en la página del producto. Y si traes una suscripción de prueba de Windows Azure activada, mejor que mejor, así despliegas en el cloud 😉

Si no vienes… lo publicaré tras el taller para que puedas trastear desde casa

 

Happy Hacking!

PD -> Los chicos de Plain estarán con nosotros en algunas ciudades =) http://geeks.ms/blogs/ilanda/archive/2012/03/21/windows-tour-y-windows-camps.aspx

Hola Metro en JavaScript para Windows 8

Puedes descargar las herramientas, la versión consumer preview del sistema operativo y ejemplos desde la página de windows 8 para desarrolladores

 

Let’s Go!!

Arrancamos Visual Studio 11 y empezamos con una plantilla de proyecto en blanco para JS. Nos va a pedir una licencia de desarrollador, cuando le confirmamos que queremos una e introducimos nuestros datos, nos abre la plantilla del proyecto.

Empezamos con la plantilla en blanco, como al abrirla no tenemos ni idea de lo que significa, de cuál es el punto de entrada, de que significa ese “use strict” … ¿?

 

image

… pues sin que sirva de precedente me leo la documentación de la plantilla que referencia en el archivo ^^

http://msdn.microsoft.com/en-us/library/windows/apps/hh758331.aspx 

Y a grandes rasgos, lo que explica es esto:

Archivos del proyecto

default.html

  La página principal de la aplicación. Un HTML5 con referencias a las librerías de WinJS y a las librerías por defecto de la aplicación (default.css y default.js)

image

default.js

Es el code behind, donde tenemos el código que va a ser ejecutado al arrancar la aplicación. Es el punto de entrada de la aplicación, al referenciarlo solo tiene una llamada a función anónima que se ejecuta sola.

Me explico… cuando en Javascript declaramos una llamada anónima, normalmente va como parámetro en una función, para que se ejecute automáticamente, como por ejemplo actuando de callback

   function miFuncion (1,2, function() { ….. } );

Pero si la declaramos entre paréntesis, estamos declarándola y ejecutándola en la misma sentencia.

    ( function ( ) { console.log(‘hola’); } ) ( );

Y podríamos incluirle otras funciones dentro, propiedades, asignar valores de retorno… y en definitiva construir un objeto/módulo… ¿no?

image

Pues esta es la estructura aproximada que vamos a utilizar en Windows8 con Javascript, ahora con el ejemplo veremos los cambios, pero no tiene mucho misterio =) Si quieres leer sobre el tema, busca sobre el module pattern en JavaScript

En esa función que vemos, se obtiene una referencia a la propia aplicación   var app = WinJS.Application, se hacen un par de tareas relacionadas con la gestión de eventos de la aplicación (onactivated, oncheckpoint), se gestiona cómo se ha activado la aplicación (launch) y se arranca con app.start()

Podríamos decir que el default.js, es el main de nuestra aplicación metro en JS

default.css

  La plantilla de estilos. prácticamente vacía con 4 media queries predefinidas para que pongamos nuestros estilos

 

Entonces… ¿el ciclo de eventos?

Con la estructura de la aplicación definida tenemos que ver dónde meter nuestro mensaje de hola mundo y cómo mostrarlo en el HTML, hay otra página que nos cuenta cómo funciona el ciclo de eventos, pero a grandes rasgos, lo que nos viene a decir es:

activated. WINRT activado

loaded. Se ha cargado el DOM

ready. … pues eso… ready

checkpoint… pasamos a suspendido

unload… a punto de ser descargada

 

Hola Metro

En base a lo que hemos comentado, para hacer el Hola Metro se me ocurren varias opciones

Capturar el evento onReady para que llame a una función que meta en alguna “clase” /módulo y que se muestre el hola mundo en algún elemento del DOM… pero realmente no quiero que sea automático, quiero que el usuario pulse… así que lo descarto.

En lugar de capturar un evento de la aplicación, capturar alguno de un evento del DOM y que llame a una función JS y ponerla en línea en el HTML… ok… pero el código en línea s para gente triste y yo soy un espíritu alegre

En lugar de capturar un evento de la aplicación, capturar alguno de un evento del DOM y que llame a una función JS definida en un módulo… oh yeah!  ESTA es la opción que escojo.

 

Tras trastear en diferentes aplicaciones de ejemplo, me crezco y me decido a intentarlo. Lo primero es aplicar crear una función que se ejecute automáticamente. Me creo saludos.js y empiezo. El “use strict” es una funcionalidad de ECMAScript 5 que hace más “estricto” el Javascript, por ejemplo no permitiéndonos declarar variables sin ‘var

image

Luego vamos a registrar el contenido de esa función en la aplicación. Según la ayuda en MSDN El primer parámetro es el nombre del namespace… escojo Saludetes

image

y el segundo parámetro una colección de miembros en formato JSON, en nuestro caso, solo hace falta uno, el método saludar

image

y dentro de la función… una implementación de DOM y JavaScript de las de toda la vida

image

Bien… ahora me voy al .html e incluyo varias cosas. Una referencia a saludos.js que acabo de crear, un botón para iniciar la acción y un span que actuará de label

 

image

Y compilo

 

image

… y al hacer click…

image

 

funciona! ^^

 

Para cerrar la aplicación:

pulso la tecla de inicio y vuelvo al visual studio para parar la depuración

la cierro arrastrando hacia abajo desde el margen superior

la cierro desde el menú izquierdo

 

No ha sido tan difícil como parecía, verdad? Espero que haya podido servir como referencia para ese primer ‘hola metro’ que tengáis que hacer en Win8 con JS

 

Happy Hacking!

Windows Azure Appfabric Access Control Service ACS (3/3)

 

Este es el tercer y último post de una serie relacionada con un evento que tuvimos con el Grupo de usuarios de Valencia, puedes encontrar el primero en Windows Azure AppFabric Access Control Service ACS (1/3) y el segundo en Windows Azure AppFabric Access Control Service (2/3)

 

En este post vamos a ver cómo personalizar la experiencia de login para los visitantes del sitio web y cómo gestionar los errores que puedan producirse durante la autenticación en el servicio de Access Control.

 

Personalizar la página de login

 

Al arrancar nuestra aplicación vemos que la página inicial a la que se accede no pertenece a nuestra aplicación, por defecto se está mostrando un formulario alojado en nuestro namespace de Access Control Service.

image

 

Si preferimos personalizar la experiencia de logIn (imagen, logos, apariencia corporativa…) es muy sencillo. Empezaremos por volver al portal de administración de nuestra suscripción de Windows Azure, en concreto a la configuración del namespace que hemos creado para servicio de Access Control. Hacemos click en Application Integration y exacto!! click en Login Pages

image

Dentro del apartado de login pages tendremos solo nuestra aplicación de ejemplo, hacemos click sobre ella y vemos que se nos presentan dos opciones.

Option 1 – Link to an ACS-hosted page. Básicamente, nos dan el enlace donde reside el formulario de login para que lo incorporemos en la parte que queramos de nuestra web. Cuando se haga click en ese enlace, el usuario será redirigido a la página que ya conocemos.

Option 2 – Host the login page as part of your application Esta es la opción que nos interesa, nos permite descargarnos una página de ejemplo que podremos editar y que se encarga de la parte de autenticación.

Nos descargamos la página de ejemplo, la situamos en el directorio de nuestra aplicación (la renombramos a algo más intuitivo, por ejemplo LoginPage) y nos aseguramos de incluirla en el Proyecto de Visual Studio (Add Existing Item)

 

image

 

Ahora está en nuestro poder, de modo que podemos editarla al gusto… en mi caso, me voy a conformar con cambiar un par de textos para que se vea que la página que se ejecuta es la que tengo en local, dejo los cambios de estilos y logos a los que sepan, o se atrevan con esas cosas 🙂

 

Una vez editada, tenemos que modificar un par de secciones en el web.config para estar listos. Primero la autorización, añadimos el bloque location relativo al LoginPage.html recién añadido

 

image

y segundo, el apartado microsoft.identitymodel/service/federatedAuthentication/wsFederation para que apunte a la página recién añadida al proyecto como issuer

image

¿Fácil verdad?

Ejecutamos la aplicación para verificar que no nos hemos confundido y ahora tenemos control sobre la página de login, como no he cambiado el diseño, simplemente resalto la URL O=)

image

 

 

Gestión de… ¿Errores?

 

Para finalizar, vamos a añadir una página para gestionar los posibles errores encontrados en el servicio de ACS. ¿Recordáis cuando dimos d e alta la aplicación en el primer post? Había un campo para registrar una URL en caso de error =)

Vamos al portal de administración de windows azure, entramos en app Fabric y entramos en la configuración del namespace que hemos dado de alta para el ejemplo de ACS.

En la sección de Relaying Party Applications, hacemos click sobre nuestra aplicación, buscamos en el formulario la entrada de Error URL y damos de alta una URL de nuestra aplicación apuntando a una página de error (que crearemos en el siguiente paso) y guardamos la modificación.

image

ACS le va a enviar a la página que hemos indicado un código de error y unos detalles sobre el mismo a través de la URL, la forma más fácil para capturarlo es crearnos un par de clases que encapsulen la información al serializarla:

public class ErrorDetails
{
     public string context { get; set; }
     public int httpReturnCode { get; set; }
     public string identityProvider { get; set; }
     public Error [ ] errors { get; set; }
}

public class Error
{
     public string errorCode { get; set; }
     public string errorMessage { get; set; }
}

Como supuestamente esta página sólo se va a llamar en caso de error, podemos directamente añadir el código para interceptar y deserializar el mensaje en el Page_Load. En el código estamos deserializando el mensaje a una estructura de clases ErrorDetails y Errors y concatenándolas para mostrarlas en una label que hemos añadido a la página (lblErrorMessage)

protected void Page_Load (object sender, EventArgs e)
{
   JavaScriptSerializer serializer = new JavaScriptSerializer();
   ErrorDetails errors = serializer.Deserialize<ErrorDetails>( Request["ErrorDetails"] );

   var messages = from e in errors.errors
   select string.Format("Error Code {0}: {1}", e.errorCode, e.errorMessage);

   lblErrorMessage.Text = string.Join("<br/>",messages.ToArray<string>());

}

 

Una vez tenemos la página, tenemos que modificar el web.config para permitir el acceso anónimo y que todo el mundo pueda acceder a ella. Porque, imaginad… si solo pudiesen entrar los usuarios autenticados… y es una página para mostrar los errores de autenticación… vamos listos, no? 😛

image

Ahora.. estamos listos para probar. Pero para que el servicio de Access Control devuelva un error, tiene que producirse un error dentro del mismo servicio, como por ejemplo… que no haya reglas con las que contrastar la autenticación una vez esta se produzca. De modo que la forma más rápida de probar si nuestro código funciona es ir al portal de Windows Azure y borrar las reglas de la aplicación de la configuración de Access Control.

Si lo hacemos…

image

Vemos como la página de intercepción se comporta de la forma que esperábamos 🙂

 

 

Conclusión

A lo largo de estos tres posts hemos experimentado lo sencillo que resulta externalizar la autenticación de la aplicación mediante el servicio de Access Control de AppFabric y cómo nos permite incorporar de forma sencilla otros proveedores, también hemos visto que podemos definir nuestras propias reglas, trabajar con los tokens que nos envía el servicio, e incluso personalizar la experiencia, espero que estos posts puedan resultar de ayuda a l@s que empiecen a trastear con Access Control. Sé que hay un par de libros en castellano cociéndose sobre el tema y en cuanto estén acabados editaré el post para agregarlos.

 

Por el momento, os dejo con este sitio web, que es el mejor repositorio de recursos que he encontrado sobre ACS

Access Control Service 2.0 – http://msdn.microsoft.com/en-us/library/gg429786.aspx

 

 

 

Happy Hacking!!

 

David Salgado ( @davidsb )

Windows Azure Appfabric Access Control Service ACS (2/3)

 

Este post es el segundo de una serie relacionada con un evento que tuvimos con el Grupo de usuarios de Valencia, puedes encontrar el primero en Windows Azure AppFabric Access Control Service ACS (1/3)

En el primer post vimos como realizar una autenticación básica en ACS con los proveedores de Google y Live ID, en este post vamos a ver cómo complementar la aplicación utilizando el API de Winfdows Identity Foundation para explorar la información que nos envía el servicio de ACS.

 

Ver información extendida de los claims

Llegados a este punto, ya hemos conseguido tener un sitio web con la autenticación delegada, no hay que preocuparse de validar, de que se creen usuario y contraseña nuevo, recordar contraseñas, políticas, blah blah blah… pero… tampoco tenemos ningún dato de los usuarios que pasan por nuestra web.

En esta segunda parte del ejercicio, vamos a mostrar la información que nos devuelve el servicio de ACS en el ticket que nos envía una vez el usuario se ha autenticado contra el Identity Provider (IP) preferido.

Podemos extraer información relativa a la autenticación del perfil que se ha cargado en el proceso.

var claimsppal = (Microsoft.IdentityModel.Claims.IClaimsPrincipal) HttpContext.Current.User;

var identity = (Microsoft.IdentityModel.Claims.IClaimsIdentity)claimsPpal.Identity;

y una vez tenemos la interfaz (como he echado de menos Razor en estas líneas) podemos obtener la información que nos envían fácilmente

%>
        
        <p>Authentication type: <%:identity.AuthenticationType %></p>
        <p>Name: <%:identity.Name %></p>

        <%   
       
        var claims = identity.Claims;
        gv.DataSource = claims;
        gv.DataBind();      
        
    %>   

<asp:GridView ID="gv" runat="server" />

Por ejemplo, con éste código, hemos obtenido 4 tipos de Claims diferentes

claims/nameidentifier: El ID único de cuenta

claims/name: El nombre de usuario (David Salgado)

claims/emailaddress: El mail  (XXXX@gmail.com )

claims/identityprovider: Cómo se ha autenticado. Google, Live…

Con estos datos ya podemos empezar a construir Base de Datos de nuestros usuarios… o al menos a saludarles cuando entren al sitio!!

 

Creando una regla sencilla

Determinados usuarios pueden tener un rol específico dentro de la aplicación, por ejemplo administradores, redactores, editores,… con las reglas de Access Control Service podemos, por ejemplo, incluir un claim role en la respuesta. Vamos a quedarnos con el nameidentifier de un usuario autenticado en el paso anterior, por ejemplo… (obviamente lo he editado, pero será algo parecido)

Value: https://www.google.com/accounts/o8/id?id=WEWEEWEWEWEWEWEWEWEWE

Volvemos al portal de Access Control, a la parte de los namespaces y entramos en la configuración del namespace que habíamos creado anteriormente SitioACS.

Hacemos click en la opción Rule Groups del menú de navegación

image

Y entramos en la configuración específica. Además de las que se habían creado automáticamente, vamos a crear (Add) una nueva regla

IF  Identity Provider: Google

AND Input Claim Type : (Select) nameidentifier

AND Input Claim Value: (Enter) https://www.google.com/accounts/o8/id?id=WEWEEWEWEWEWEWEWEWEWE

THEN Output Claim Type: (Select)  role

Output Claim Value Enter: Editores

Rule Information. Regla de editor

Con lo que tenemos lo siguiente

image

Ahora vamos a modificar la aplicación, para que si se conecta un usuario que forme parte del rol Editores, muestre información diferente

if (claimsPpal.IsInRole("Editores"))
{
    %> <h2>Información importante para Editores </h2><%
}

Para probarlo, no tenemos más que volver a entrar a la aplicación con esa identidad

image

 

Próximo post

Para el tercer y último post de la serie, dejaremos la explicación de cómo personalizar la experiencia de logIn.

 

 

Happy Hacking!

 

David Salgado – @davidsb

Windows Azure Appfabric Access Control Service ACS (1/3)

 

Por lo que veo en eventos, artículos y lo que me charlamos , he visto que algunos de los servicios de Azure, aun no son demasiado conocidos, específicamente los de AppFabric. Es verdad que tal vez sean los más complicados de entender sin un buen ejemplo, de modo que voy a intentar hacer una pequeña introducción con algunos ejercicios prácticos :)  Primero tengo una serie de 4 posts de ACS, luego pasaremos al resto. Espero que os resulte de interés

 

Herramientas

Para poder seguir el paso a paso, vamos a necesitar unas cuantas descargas

Windows Identity Foundation WIF SDK

Windows Azure AppFabric SDK

Visual Studio Tools for Windows Azure & SDK

…además de una suscripción de Windows Azure

Intro para cualquier persona

Para suscriptores MSDN

Miembros de la red de Partners

y ofertas para Emprendedores

Bloques de la Plataforma Windows Azure

Situemos AppFabric dentor de la plataforma. Sabeís que la plataforma Windows Azure esta formada por diferentes bloques de servicios.

Tenemos el bloque de Windows Azure donde están los servicios de alojamiento de aplicaciones (Compute), almacenamiento no relacional (Storage) y la red de distribución de contenidos (CDN).

SQL Azure, como servicio de almacenamiento relacional. Y no nos confundamos, SQL Azure NO es SQL Server, podríamos considerarlo equivalente en funcionalidad a una parte de SQL server, en concreto… el motor relacional. Aunque SQL Azure esta preparado para ofrecer alta disponibilidad en un entorno cloud.

AppFabric es conjunto de servicios de infraestructura para aplicaciones (servicios Middleware). A día de este post tiene 3 grandes servicios. Access Control, Service Bus y Caching

Los servicios que componen estos tres grandes bloques se pueden usar tanto de forma conjunta como por separado, y son accesibles desde diferentes tecnologías. La Plataforma Windows Azure no es sólo para .NET ;)  En la página oficial de Windows Azure hay una buena descripción de cada uno de los servicios y herramientas.

Breve explicación de AppFabric Access Control Service

Los servicios que se encuentran bajo el paraguas de AppFabric (Service Bus, Access Control y Caching) podemos decir que son servicios de infraestructura para aplicaciones (mensajería, workflow, autenticación, autorización y cache) vamos a poder externalizar ciertas responsabilidades que hasta ahora formaban parte de la aplicación a estos servicios.

El servicio de Access Control ACS pone a disposición de los desarrolladores un sistema de identidad y control de acceso a las aplicaciones y servicios. Esta integrado con los proveedores de identidad estándares, tanto a nivel enterprise (directorio activo), así como web (Yahoo, Live Id, Google, facebook)

En pocas palabras… permite sacar de la aplicación las decisiones de autorización y basarlas en reglas declarativas. ACS actuará como una capa de abstración para lidiar con los diferentes Identity Providers y ofrecer a la aplicación un único formato de intercambio de tokens.

Por mi experiencia dando sesiones, cada vez que llegamos a un tema de identidad/autorización, la cosa se pone, digamos… tensa. Ya hace años cuando contábamos temas de membership, roles… en ASP.NET podía haber cierto lenguaje de nicho que hacía que el tema fuese duro.

Ni que decir tiene que cuando empezamos con ADFS, WS-Trust y la historia de la federación.. se volvió tan de nicho que a penas se comentaba fuera de los círculos de expertos en el área de seguridad.

Pues hay una buena noticia. Si bien ACS hace uso de todas estas especificaciones, APIs, herramientas… No es necesario que el desarrollador se vuelva un experto en seguridad para entender y utilizar el Access Control Serviceque no haya miedo!! No hay que aprender WS-Federation, WS-Trust, …. para el 90% de escenarios de uso de Access Control Service no será necesario bucear en estas especificaciones/herramientas/SDKs, simplemente consumiremos una serie de servicios.

 

Crear el sitio web base

Bien, soy adorador declarado de ASP.NET MVC, pero soy consciente de que todavía no todo el mundo ha visto la luz 😛 Como el lab tiene ya la complejidad de Azure y ACS no quiero incluir la de MVC, así que las demos las vamos a basar en un esqueleto de webforms para que no haya complicaciones añadidas.

Creando el esqueleto

Arrancamos Visual Studio como administradores y creamos un nuevo sitio web ASP.NET vacío en en http://localhost/siteACS. Le añadimos un web form default.aspx e introducimos algún texto para que se vea cuando se cargue la página

imageimage

 

Access Control Service Namespace

Una vez tenemos un sitio web listo, tenemos que hacer ciertas tareas de configuración en el portal de Windows Azure. Entramos en el portal con las credenciales de nuestra suscripción y nos dirigimos a la sección de AppFabric en el menú lateral.

image

Tenemos que crear un nuevo namespace para la aplicación, el namespace funciona como url de referencia donde tendremos disponible el servicio de ACS para nuestra aplicación, así que creamos uno nuevo

image

e introducimos un nombre único que se nos ocurra

image

Tendremos que esperar unos minutos hasta que pase de Activating… a Active

image

Cuando este activo, podemos pasar a configurarlo, encontraremos el acceso a la configuración del namespace en la parte superior de la pantalla

image

 

Configurando los Identity Providers

Dentro de la configuración del namespace, tenemos que dar de alta los proveedores con los que queremos trabajar, en nuestro caso, daremos de alta (Add)… LiveID y Google, por ejemplo. Al añadirlos nos pedirá si queremos un logo o texto descriptivo, como es opcional, el que quiera que lo especifique.

image

También tendremos que ir a la parte de Relying Party Applications, para incluir la información de la aplicación que hemos desarrollado y que va a hacer uso del servicio de autenticación 

Name Ejemplo ACS
Mode Enter Setting Manually
Realm http://localhost/siteacs
Return URL http://localhost/siteacs/default.aspx
Error URL (optional) en blanco
Token Format SAML 1.1
Token Encryption Policy None
Token Lifetime 600
Identity Providers Google y Windows Live Id
Rule groups Create New
Token Signing Service Namespace Certificate
   

Una vez configurado, vamos a Rule Groups para autogenerar las reglas de transformación de los tokens de los proveedores, a los tokens para la aplicación. Aunque en el paso previo hemos especificado que queremos un nuevo Rule Group, si no generamos las reglas no nos habrá valido para nada 😉

Entramos en la aplicación específica y hacemos click en Generate (asegurarnos de que tenemos seleccionados los 2 proveedores)

image

y guardamos.

Ya solo nos falta obtener en el apartado de Application integration la URL que especifica los metadatos de Federación, el WS-Federation metadata, en mi caso:

https://sitioacs.accesscontrol.windows.net/FederationMetadata/2007-06/FederationMetadata.xml

 

Integrando la aplicación web con ACS

 

Ahora volvemos a Visual Studio y si tenemos correctamente instaladas todas las herramientas que indicábamos al principio del post, tendremos una opción Add STS Reference en el menú de contexto del proyecto en el Explorador de Soluciones

image

Al hacer click nos va a aparecer un Wizard donde ir introduciendo información. En la primera pantalla no tenemos nada que modificar

image

En la segunda tenemos que indicar que vamos a utilizar un STS (Security Token Service) existente y damos la url que hemos copiado anteriormente del portal de administración de appfabric

image

En la siguiente aceptamos sin más (no nos hace falta entrar en asuntos de CAs)

image

sin cifrado…

image

… en la siguiente nos muestra los claims que nos va a ofrecer el servicio

image

con lo que solo nos queda revisar la información y aceptar en la pantalla final. Al aceptar, se nos generarán una serie de elementos en el proyecto y se modificará el archivo de configuración.

Probando, ¿problemas?

 

¡ya está! A que no ha sido tan dificil?, dependiendo la configuración de los IIS puede ser que ya hayamos acabado, así que vamos a probarlo… pulsamos F5 y ¿?

Opcion A: Error!?

This may have been caused by not having the user profile loaded for the current thread’s user context, which may be the case when the thread is impersonating.

Por defecto en IIS7 (en otros no lo sé ni lo puedo verificar fácilmente) el application Pool bajo el que corre las aplicaciones no carga la información del perfil del usuario en el proceso. Aquí tenéis una respuesta de los foros con el paso a paso para cambiarlo

image

 

Opción B: Error!?

HTTP Error 500.22 – Internal Server Error. An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode

Se resuelve con un un poco de trabajo de web.config. Aquí tenéis como solventarlo, en el blog en geeks de Sergio Tarrillo 🙂

 

Opcion C: Funciona!!

El navegador arranca pidiendo al usuario que se autentique en uno de los servicios que hemos especificado, al registrarse nos deja pasar al default.aspx

image image

 

Próximo post

 

En el próximo post veremos cómo sacar información de los claims que envía ACS a la aplicación y cómo poder asociar usuarios a grupos.

 

Happy Hacking!

David Salgado ( @davidsb )

PD 1- Durante este post he recordado cómo me gustaba trastear con las cabeceras SOAP cuando salieron los servicios web y los cabezazos contra el Web Services Enhancements para trabajar con seguridad (WS-Security. WS-Routing, DIME…) q tiempos aquellos, eh?

PD 2 – Si te acuerdas de lo que pone en PD1… para un rato y tómate una cerveza (o lo que quieras), eres de la vieja guardia de .NET.. has pasado por asp.net 1.0, por los datasets, J#, la soluciones con vb.net y C# mezclado, cotillear el IL… te lo mereces 😉

PD3 – Azure Fabric Controller, Windows Azure AppFabric, y Windows Server AppFabric son 3 cosas diferentes. Parece que hacían descuento por nombre si lo usábamos en 3 productos 😛

todo pasa… conclusiones del remix 2010

Asistentes!! espero que a los que asistísteis al Remix Madrid 2010 ( bien online u offline ) os haya merecido la pena el tiempo invertido, los viajes, las esperas,… Confío en que las sillas y la tortilla de patata de la comida fuesen lo mejorable del evento y que estéis satisfechos con las sesiones.

Aún no tenemos el informe definitivo, pero os puedo adelantar que nos juntamos unas 400 personas en el auditorio y casi 4000 más nos acompañaron gracias al streaming de GlobbTv 🙂

Nuestro equipo aborda cada evento como una oportunidad única de que coincidamos y podamos avanzar juntos, aunque sólo sea durante unas horas. Ya que no podemos vernos más a menudo, en estas pocas ocasiones nos cuesta mucho decidir qué temas y ponentes son los más adecuados. Intentamos contemplar el momento en el mercado, la tendencia esperada, las necesidades no cubiertas, las horas que os tenemos sentados, los descansos… 

Para este espacio/tiempo en particular decidimos que apostabamos por un evento donde los protagonistas fuesen:

El “dichoso” Windows Phone 7. Ojo…dichoso por “dicha”, su entrada en el mercado ha sido un auténtico boom y pensamos que puede ser una gran oportunidad de negocio para los desarrolladores familiarizados con el Stack de Microsoft. Tuvimos la suerte de además poder contar con Alfred Astort, Experience Designer en el equipo de WP7 en MS Corporación.

El estado de Silverlight tras los últimos anuncios. Este año, unos comentarios malinterpretados o poco afortunados por parte de Microsoft pusieron la continuidad de Silverlight en entredicho, como quedó aclarado al poco tiempo y más que demostrado en el Silverlight Firestarter, nada más lejos de la realidad. Y en el remix,el encargado de enseñarnos el estado actual y futuro de Silverlight fue  Luis Guerrero, development advisor en Plain Concepts.

Productos de código abierto que puedan facilitar el trabajo. Joomla, Drupal, Umbraco, ScrewTurnWiki… son productos de código abierto que podemos utilizar como base para nuestras páginas, sitios y aplicaciones. Su uso está bastante extendido pero creemos que podría estarlo aun más, de modo que decidimos que ver en directo como un CMS como umbraco puede reducir el tiempo entre tener una idea y desarrollarla podía resultaros de interés. Gracias por su sesión a Miguel Jimenez.

El estado real de HTML 5 según W3C. Hay demasiadas versiones de lo que es y no es HTML5, todo depende de dónde lo leas y quién te lo cuente. Alejandro Martín de Informática 64 nos hizo un excelente resumen del estándar W3C y de qué podemos hacer con el.

Problemática de trabajar para diferentes navegadores. Creemos que este es un problema real en el día a día de un profesional web. Hay una serie de prácticas recomendadas recogidas de la experiencia del sector de profesionales web que pueden ayudarnos, aunque como muy bien resumió Alejandro Hidalgo, podemos decir que lo recomendable es reconocer características y no versiones.

JQuery como framework Javascript. Muchos de los problemas planteados por los navegadores, hojas de estilo… se resuelven utilizando un framework como Javascript, donde subimos el nivel de abstracción y nos acercamos un poco más a nuestro valor de negocio. JQuery no solo nos ayuda por esa parte, también nos permite disponer de funcionalidad rica en el cliente, ahora que cada vez va creciendo más esa parte. Marc Rubiño nos hizo una primera aproximación al trabajo con plantillas en JQuery.

El hecho de que la web según MS no tiene porqué ser complicada ni a través de Visual Studio. Por su naturaleza, a web es algo sencillo. A lo largo del tiempo, con el objetivo de facilitar aun más el desarrollo de páginas y sitios web, desde Microsoft,  hemos creado diferentes frameworks y herramientas para diferentes escenarios y perfiles de profesional web. Pero con tanta ayuda, tal vez hemos abrumado un poco. En esta sesión intenté transmitiros que, con WebMatrix, Microsoft reclama de nuevo la sencillez de la web. Una única herramienta, gratuita que vale tanto para aprender como para abarcar gran número de proyectos donde no es necesaria la funcionalidad que ofrece Visual Studio y la solución ALM.

Lo sé, soy consciente, se nos quedaron muchos temas en el tintero, muchísimos… MVC, razor en detalle, Web Forms, profundizar en la realidad tras CSS3, Mejoras en Entity Framework… pero el tiempo es limitado y hay que decidirse por un conjunto de temas.

En cualquier caso, sabéis que nos encanta recibir el feedback constructivo, si piensas que nos hemos dejado algo fundamental, o tienes cualquier aportación para mejorar el evento estaremos más que encantados de oirte.

Blog del equipo de  MSDN España – http://blogs.msdn.com/esmsdn

Nuestro usuario de Twitter – www.twitter.com/esmsdn

El grupo de Facebook – www.facebook.com/msdnspain

 

Voy a acabar con una reflexión que nos planteó Joe Wilson durante la apertura del evento, cuando hacía referencia a la capacidad de emprender, las posibilidades que nos brinda la tecnología actual y las ideas para mejorar que nos rondan la cabeza.

“If is not you, who then? If is not now, when?”

Happy Hacking

~ds

PD –> En cuanto tenga fotos, videos del evento y demás, editaré este post para añadir los contenidos.

PD2 –> for feedback constructivo me refiero a: “creo que X no estuvo del todo acertado por Y”  “Me gustaría ver en futuros contenidos de MSDN X o Z por esta razón” y no a cosas del tipo “estuvo bien”, “no me gustó” …   Con éstas últimas afirmaciones no podemos tomar acciones 😉

PD3 –> Tengo unos cuantos mail de asistentes al remix que me han preguntado cosas, no me he olvidado!! Dadme un poco más de tiempo por favor 🙂

La plataforma como servicio no es para todos los escenarios

Independientemente de el entorno en el que trabajemos, hay ofertas derivadas de la nube que nos son interesantes de forma inmediata. El hecho de poder consumir un software como servicio  (saas) o consumir infraestructura como servicio (iaas), resultan rentables casi desde el minuto 0 a una empresa de cualquier tamaño.

obviamente… siempre y cuando tengan amortizado los bienes o se lancen a algo nuevo

Pero con las plataformas como servicio (Windows Azure Platform, Amazon AWS, Force.com … )** creo que es diferente, no creo que resulte atractivo para todos los públicos. Al fin de al cabo, una plataforma como servicio nos ofrece es una serie de APIs que nos dan acceso a los recursos de un datacenter, ya sea por el número de máquinas corriendo la aplicación, el número de gigas o teras disponibles, la alta disponibilidad…  pero siendo realistas, no todas las aplicaciones necesitan un datacenter para funcionar.

 

¿Qué aplicación podría sacarle partido a un API con acceso a un datacenter?

Hay curvas de las diferentes aplicaciones tipo en muchas charlas y artículos, pero vamos a intentar ponerle nombre a estas curvas, a ver si alguien se siente identificado.

 

image Campañas de marketing, pruebas de concepto, cubrir un evento por un espacio de tiempo (elecciones, foros, convenciones… ), una tarea limitada (convertir videos, fotos…), un render de una pelicula 3d …

image Una campaña de marketing, donde los primeros días necesitas más servidores, algo viral,  un negocio nuevo en internet (fail fast & cheap), un producto como servicio que triunfa, una nueva red social  una web de gatitos y perritos,… Y no tiene porque implicar solo potencia de computación, puede ser una curva de necesidad de almacenamiento, como un lugar donde cada vez necesites más almacenamiento (videos, documentos)
image No hay un perfil tipo ya que  cualquier aplicación puede tener un pico impredecible, la cuestión es… ¿nos importa cubrir esa necesidad extra? ¿podemos asumir no dar servicio a nuestros clientes si lo solicitan todos a la vez?
Puede que hasta ahora no nos saliese rentable, pero el modelo que proponen las plataformas como servicio pueden haberle dado la vuelta a la toritlla.

 

image Aplicaciones con unas necesidades muy cambiantes, como el mundial de fútbol que hizo telecinco en internet, donde los días pico necesitaba 142 servidores de media, y los días valle 4.

OJO que no tiene porque necesitar más de 100 servidores para ser rentable, con que puedas cambiar de 4 a 1 deberías planteártelo 🙂

 

Además de estos perfiles tipo, tenemos que tener otros factores en cuenta, como que queramos tener presencia en diferentes mercados con un único proveedor (despliegas en diferentes datacenters y listo), o que la plataforma nos ofrezca un servicio que no podemos / queremos implementar localmente (como los servicios de AppFabric en Windows Azure) o el tiempo de respuesta en casos de necesitar escalabilidad cuasi inmediata, puede que un hoster ‘tradicional’ no pueda aprovisionar y desplegar nuestra aplicación en 100 servidores en 40 minutos…

 

Pero entonces, ¿en qué aplicaciones no serian rentables el uso de una plataforma como servicio?

Solo tenemos que invertir los escenarios anteriores

Aplicaciones de uso constante, con usuarios conocidos y estables donde la caída circunstancial no es crítica.

Y no pequemos de enterados, éste perfil es el de muchas aplicaciones en internet. Los blogs, las páginas de presencia corporativa, las páginas de marketing 1.0, las extranets, comercio electrónico de nicho,… En los precios que se barajan hoy en las plataformas como servicio, en estos casos será más rentable quedarnos con nuestro hoster o con ese espacio compartido en el servidor web en el que ya estamos. En caso de utilizar una plataforma como servicio, estaríamos desaprovechando los recursos por los que estamos pagando ese extra al mes.

¡Es como pagar el gimnasio para no ir!… pero eso no lo hace nadie ¿no?

 

si desarrollas producto, adaptate o muere

Claro y conciso ¿no? Tú, yo, tus clientes, nuestros conocidos,… y en definitiva, todo el mundo, se está acostumbrando a marchas agigantadas al consumo de valor como servicio. Si construyes producto, debes adaptarlo cuanto antes para poder exponerlo como servicio. Esta adaptación debe ser tanto técnica, como de negocio, y no que decir tiene que a poco bien que se venda tu producto como servicio, te vendría muy bien exponerlo sobre una plataforma como Windows Azure, donde tienes todo un datacenter detrás para ayudarte a no morir de éxito y a reducir los costes de los recursos necesarios para el alojamiento y buen funcionamiento del producto 🙂

 

vale por hoy…Happy hacking!!

~ds

 

* Seguro que se me olvida algún escenario, si me lo indicáis lo añado. thanks.

** No pongo a Google porque todavía no tiene la oferta empresarial madura, aunque según vi en un evento hace poco la tendrán… en algún momento.

*** Tengas o no alguno de los escenarios, las plataformas como servicio son un nuevo reto para los desarrolladores y es recomendable que estemos familiarizados con el tipo de apis, que hagamos nuestro ‘Hola Mundo’ para perderle el miedo. En el caso de la plataforma Windows Azure hay recursos gratuitos suficientes para probar y familiarizarse con la plataforma para el futuro http://msdn.microsoft.com/es-es/azure  ó http://www.twitter.com/esazure