Entrega contínua, desarrollo iterativo, loquesea como servicio… desarrollo y negocio pueden aprovechar estas prácticas que sabemos que ayudan a una organización a mantenerse competitiva en un entorno cambiante, pero, qué pasa con el marketing? con el Marketing de producto en concreto? dónde se ha quedado? ola, ke ase? O_o
Las grandes milestones
Hasta hace bien poco, a todos nos resultaba natural que una construcción de producto tuviese unas fases bien definidas, que se daban en secuencia y que resultaban en un producto acabado
Envisioning, toma de requisitos, desarrollo, Q&A, beta1, ……… Release to Market
A la par que este producto se iba desarrollando, los equipos de marketing y comunicación iban ejecutando una serie de iniciativas para asegurar que el público objetivo estaba enterado, e idealmente, deseoso del producto
Awareness, Posicionamiento, feedback, early adopters, trials, conversiones, plan de lanzamiento, etcétera
Y con público objetivo, me refiero a todos los involucrados, a todas las diferentes audiencias audiencias a través de sus respectivos canales
Newsletters con una determinada frecuencia, la página web del producto, bases de datos perfiladas, contenido de formación, programas localizados para decisores de negocio, ecosistema de partners a formar, analistas, fuerza de ventas, prensa, etcétera
Como el desarrollo de producto era relativamente lento, tampoco había demasiado problema en que una iniciativa específica tardase 5 ó 6 meses en tener un resultado, entraba dentro de los tiempos aceptables. De hecho, es muy normal tener planes marco ó frameworks en las diferentes fases que aseguran el grado de automatización y cierta calidad en la ejecución
Hasta aquí, bien, the old good days =)
La entrega contínua
Pero, de un tiempo a esta parte, estamos sintiendo como las organizaciones tradicionales están girando hacia modelos de negocio orientados a servicios y metodologías de ingeniería donde prima el desarrollo iterativo y la entrega continua de valor.
Dentro del mundo Microsoft, que es el que más conozco, podríamos hablar de la nueva política de actualizaciones frecuentes de visual Studio o Windows Azure, de la aparición de nuevos servicios con identidad propia como Team Foundation Service, XBOX Live, etcétera… al igual que Microsoft, la mayoría de las organizaciones, ven valor a estos modelos y los adoptan con más o menos éxito.
Pero este cambio de ritmo que implica novedades mucho más frecuentes, choca con los marcos de trabajo establecidos en las áreas de marketing y comunicación. Son diferentes velocidades, la estrategia de lanzamiento de un producto que antes podía llevar varios meses, ahora hay que ejecutarlas en semanas, y en lugar de pensar en nuevos modelos, se intenta comprimir en el tiempo lo que se hacía hasta ahora. Y obviamente, no funciona todo lo bien que debería. Si además, es una compañía con un portfolio variado, es fácil que cada servicio cobre identidad propia y se separe de la marca principal, con todos los problemas que implica ( volver a pegarse con el posicionamiento, generar una identidad de marca,…) Pero ser una spinoff e ir de startup esta tan de moda que quién podría resistirse, no? =P
Siguiendo con el ejemplo anterior, ayer el equipo de Windows Azure pasó a producción la parte de infraestructura, hace poco Team Foundation Service añadía tablero Kanban y otras mejoras al servicio, casi a la vez Visual Studio lanzó el Update 2… toma ya.
Un montón de novedades interesantes que puede que no puedas predecir por embargos de información, porque se separan en el tiempo en varias semanas ó porque que te pillan en un momento donde no hay una comunicación planificada o presupuesto dedicado.
Y en este momento… ¿Qué puede hacer Marketing? Se me ocurren algunas ideas
- Haces una comunicación semanal de lanzamientos? (perderían todos relevancia)
- Lo anuncias únicamente para interesados en el portal de cada servicio? (perdes audiencia y pierdes oportunidades sobre la audiencia)
- Retrasas comunicaciones (paren las máquinas!) para agrupar lanzamientos (entonces rompes el ritmo del consumidor)
- Lo priorizas por impacto en tu audiencia y lanzas unas cosas y dejas pasar otras (bueno… más o menos es lo que se intenta, parece razonable)
Ninguna de estas soluciones me parece que encaje del todo.
A falta de una aproximación mejor, a día de hoy, muchos departamentos de Marketing están condenados a verlas venir, obligados a jugar al tetris… esperando que el equipo de producto saque una funcionalidad X para ver cómo encajarla en el plan e intentar que tenga éxito.

Marketing de producto, ola ke ase?
No es suficiente asumir el tetris y quedarse esperando, hace falta un enfoque que se adapte a las nuevas reglas. Porque obviamente la entrega continua, las iteraciones, el modelo de servicios… han demostrado que son deseables para el negocio y se quedan.
Creo que muchas organizaciones y responsables de Marketing son conscientes de que hay un problema, aunque algunos no entiendan aun a qué se debe este cambio de ritmo. Y es que hasta hace poco tiempo el marco de comunicación o los planes de lanzamiento funcionaban perfectamente!!!
Pero, en lugar de comprimir las recetas del éxito pasado, deberíamos estar discutiendo cuáles son las nuevas necesidades, cuáles son las nuevas reglas del juego y cómo vamos a adaptarnos cada uno.
Por si estáis enfrentando alguno estos problemas, os planteo algunos de los debates de los que creo que puede salir información valiosa
Sincronizar la velocidad de Marketing y comunicación a ingeniería o llegar a un pacto? – Por ejemplo, liberar y comunicar nueva funcionalidad dad de forma frecuente pero marcada?.
Es consciente ingeniería del impacto que causa el cambio de ritmo en el negocio? – Creo que a veces puede dar impresión de descontrol en la marca. Igual que negocio tiene que ser consciente de las peticiones que hace a ingeniería, ésta debería ser consciente del impacto de sus actos.
Resegmentar audiencias y crear nuevos canales? – Dejar el denominador común a un lado y crear un canal especializado por servicio? Por ejemplo, en Microsoft, dejamos de hablar a ‘desarrolladores’ e ‘ITPros’ y que cada persona se de de alta en la newsletter del producto que consume?
Desistir de alinear novedades entre servicios y que cada uno tenga su propia identidad y marca? UF! Para marcas con peso, bien posicionadas y bien percibidas creo que puede ser un tremendo error, pero para el resto… por qué no probar?
Asignar la responsabilidad de comunicación a cada servicio? Si tienen un presupuesto específico para comunicación, iniciativas y demás, tal vez se vean en la necesidad de alinear ritmos.
En una multinacional, sería deseable un modelo centralizado en lugar de delegado? – Perderíamos el sabor local de los países y el conocimiento sobre el canal de ventas
Buena parte de mi rol actual es realizar tareas de Marketing y por la parte que me toca, diré que poco a poco estamos aprendiendo a ser más efectivos con estas nuevas reglas, pero también reconozco que necesitamos adaptarnos más rápido. Hay que cambiar procesos, modelos y sobre todo…mentalidades.
Por ahora es cuestión de ir probando y aprendiendo por el camino, es muy pronto para una metodología bala de plata así que veremos qué aprendemos con la experiencia, además de lo qué nos vende el próximo gurú en su libro , predeciblemente titulado ‘Marketing Ágil’ o ‘Lean Marketing’ o algo así =P
Happy hacking!
David Salgado (@davidsb)
PD –> Luego, cuando lleguen las balas de plata para práctica el marketing de producto, empezaremos a pensar en qué hacemos con el marketing de audiencias o de segmento… #maremia
PD2 –> A la forma de trabajo de jugar al tetris también se la conoce como metodología ASM (A Salto de Mata)
Hace poco prometía por twitter que comentaría como me organizo para trabajar e intentar ser lo más productivo posible dentro de un entorno de sobreinformación como el que tenemos… así que ahí va!
Metodologías de productividad personal
Por un lado he leído sobre metodologías (GTD, ZTD, Pomodoro, Agile) y por otro he probado con herramientas (OneNote, Outlook, Evernote, FocusBooster,TFS, Excel, Project, YouTrack, Jira…) Creo que leer y probar son ejercicios muy recomendables, porque gracias a conocer diferentes técnicas de organización personal/productividad/gestión del tiempo te puedes aventurar a probar e incluso acertar de vez en cuando e incorporar algo nuevo a tu forma de organizarte.
En este post cuento algunas cosas que me ayudan a organizarme a mi, a David Salgado, con mi forma de pensar y mi forma de afrontar mi trabajo… no pretende ser una receta de éxito en la organización. A mi no ve van mal y puede que te apetezca probar alguna =)
Los retos
Cada uno tendremos unos, aunque coincidiremos en varios… en mi caso, mis principales causantes de descontrol son:
El correo electrónico: Tengo unos 70 mails al día, con el tiempo aprendí que el correo NO es mi lista de tareas, es una fuente más de información como lo puedan ser las reuniones o el twitter. En esta fuente identifico tareas para trabajar e intento llevarla al día dentro de lo que puedo. Si no tienes cuidado puedes dedicarte a leer el mail y responder 8 horas al día. Procuro abrirlo un tiempo limitado cada varias horas por si hay algo urgente o alguna posible tarea.
Las redes sociales/blogs: Las utilizo sobre todo para estar informado de lo que pasa y poder comunicarme de forma fácil y rápida. Al igual que con el mail, procuro tener cuidado y no tenerlas abiertas. Guardo tiempo para consultarlas cada x horas.
Las reuniones: Procuro tener las justas y rechazar las que no tienen que ver con mis objetivos directos (a no ser que me pida algún compañero que asista para echar un cable). No soy anti-reuniones… me parecen una buena forma de estar sincronizados y de afrontar retos…el problema de las reuniones es la gente ^^ Los que no tienen nada mejor que hacer que pasarse hora y media de reunión y no sacar resultados. Procuro que las reuniones a las que asisto sean efectivas, con agenda, que llevan poco tiempo y que ayudan a avanzar o alinearse. Odio las pérdidas de tiempo, las reuniones sin agenda o sin call to action… en esos casos pido permiso para contar lo que tenga que contar y sacar las acciones y después, si nadie necesita nada de mi… me voy a seguir trabajando ^^
Grupos virtuales Nosotros a principio de año fiscal (Junio/Julio) acordamos con los equipos de managers y en base a las necesidades de la compañía los objetivos para el año que entra… bueno acordar queda muy bonito… el 90% de las cosas no se acuerdan…se reciben y se aceptan :P
En base a los objetivos, creamos grupos virtuales de trabajo, proponemos un plan, seguimos y ejecutamos acciones, medimos el resultado, adaptamos el plan, informamos de los resultados y de cambios… en fin… seguimos un proceso iterativo para intentar llegar a nuestros objetivos de la mejor manera posible.
Estos grupos plantean los retos de trabajar con personas de otros perfiles (y a veces con otros objetivos), herramientas de reporting y reuniones cada poco tiempo para revisar el plan, alineamientos con otros países,… en fin….procesos, procesos, procesos… en mi caso procuro mantener siempre actualizados portales y excels con la información de los objetivos, estado de ejecución de los planes y próximos pasos. Así te ahorras mucho tiempo de preparación de presentaciones internas.
Fuegos varios La prevención en mi caso consiste en llevar los deberes al día, tener las prioridades claras y anticipar las fechas clave (cierres fiscales, revisiones, reuniones ). La prevención me ayuda muchísimo a absorber el impacto, pero siempre planifico las semanas de forma pesimista por si aparece algo. Me explico…me planifico 5 tareas al día en lugar de 10, y si acabo las 5 planificadas pues voy a por más, si no, no me quedaré con mal sabor de boca por no haber acabado.
Cómo me organizo
Sé en qué trabajo, cual es el estado actual, cual será previsiblemente el siguiente y cual es la siguiente acción
Tienes que tomar las riendas de a lo que te dedicas, a mi me da por mantener portales internos donde actualizo casi diariamente el estado de los objetivos, el estado de la ejecución del plan, los retornos de las acciones y las notas de las reuniones. Eso me mantiene enfocado y en la dirección correcta. Además… me encanta la transparencia en el trabajo, cualquiera de dentro de la empresa puede ir al portal y cotillear lo que quiera.
Mantengo una lista de iniciativas en las que trabajo (incluida mi vida personal)
Tengo en OneNote una página donde tengo todas las iniciativas y luego una pestaña por semana de trabajo. Ese OneNote lo tengo subido a un skydrive para poder tenerlo en todos mis equipos (incluido phone y ipad…si, tengo un ipad)
 | En DOs son las tareas de esta semana planificadas para cada día
En Initiatives voy volcando los siguientes pasos de cada iniciativa y semanalmente los reviso
En cada Week XX guardo lo que he hecho al acabar la semana. Para mi es importante que guarde histórico especialmente para poder echar la vista atrás y ver que voy avanzando y que no pasan los días sin más. Muchas veces te pierdes en minitareas y si no registras lo que has hecho te vas a casa con la impresión de que has tirado el día. Read cuando alguien me sugiere un libro, una canción, un post… se va a read y en viajes o fines de semana le echo un ojo y me entretengo
|
No tengo una página aparte para temas personales… son iniciativas también y van a la misma página
Por cada iniciativa tengo tareas
Todos los domingos hago una lista las tareas que me gustaría avanzar esa semana. Quitando las tareas que tengan que ser en un día concreto…el resto las vuelco al lunes y las priorizo (en negrita las más importantes).
Solo las vuelco al lunes porque si te pones a repartir tareas entre los días de la semana, al final te llenas todos los días y no dejas margen de maniobra ni para imprevistos. Así que cuando acaba el lunes… las tareas que no he acabado las paso al martes o al día que crea que voy a tener hueco.
Así que la hoja DOs, tengo una tabla por cada día de la semana de este estilo:
 | No quiere decir que no haga más cosas… si no que esas son las principales por las que empezar… y de esas, las que están en negrita tienen prioridad. Y si se acaba el día y me quedan cosas in hacer… las distribuyo entre el resto de días que quedan en la semana |
Algún comentario:
- No tengo enlazado OneNote con las tareas de Outlook, lo hice una temporada y no me funcionó
- De hecho las tareas en outlook me parecen muy potentes pero no me funcionan en el puesto que desempeño ahora, tal vez en el futuro
- Las tareas cambian diariamente. Entran nuevas, otras pierden prioridad, otras se van a otra semana… es una lista dinámica que cambia constantemente, es su naturaleza y no hay porque intentar limitarla, vale con repriorizarla =P
Uso el calendario corporativo para bloquear tiempo para trabajar y para avisos
Para que no llegue una propuesta de reunión inoportuna, para ver de un vistazo los deadlines de este mes, o para que quién me busca sepa dónde estoy, procuro tener siempre actualizado el calendario. No tengo las tareas, solo bloqueos de tiempo para cuando no quiero/puedo tener una reunión porque estoy liado. También incluyo bloqueos de tiempo para cosas personales como comer, quedar con amigos, ir al gimnasio, estudiar… (en verde ^^).

Corto con las notificaciones
Mail, twitter, Lync, gtalk… todo tiene las notificaciones deshabilitadas por defecto, así no me distraigo cuando estoy trabajando, ni veo que hay X mensajes sin leer. De hecho mi Outlook se abre en el calendario, para que no tenga que pasar por el mail y me tiente. Como poco 3 veces al día consulto estas fuentes de información y si surge algo importante creo una tarea en el onenote.
El dichoso mail
…esto da para un post completo, pero a grandes rasgos uso pocas reglas:
- la regla del To: si voy en el To: se queda en el inbox, si no… se va a otra donde lo miraré menos frecuentemente.
- La regla de donde manda capitan… todos los correos de managers/directores/gerifaltes… van a una carpeta
- Cada X semanas repaso uno a uno los mails organizando en carpetas los interesantes y borrando los que ya hayan ‘caducado’
- Alias de listas de correos a una carpeta específica
- Carpetas por iniciativas para agrupar los mails
No me gustan las reglas tipo GTD en el mail porque creo que se pierde la perspectiva. El mail no es *la* fuente de tareas, es *otra* fuente de tareas y prefiero que la organización de mis tareas esté asilada de una posible fuente para no tener debilidad y marcar mails como tareas, por eso me lo llevé al excel primero y luego al onenote.
El móvil
Procuro ponerlo en silencio cuando estoy concentrado o reunido y luego devolver las llamadas que me hayan hecho. Por otro lado, cuando creo que ya vale por hoy, o llega el fin de semana, paso la sincronización del correo de automática a manual, así solo veo los mails cuando realmente quiero.
Y a grandes rasgos así es como me organizo, pero para llegar a este estado en el que me encuentro cómodo he pasado por 2 fases
Investigar: He leído mucho, probado mucho y preguntado mucho a las personas que creo que se organizan bien.
Crear el hábito: Nada de esto es natural… tienes que forzarte durante una temporada para crear el hábito y que salga solo, pero si es verdad que algunas herramientas o metodologías nos resultan más naturales a unos que a otros.
Happy hacking!
David Salgado (@davidsb)
Las ciencias de la salud siempre han atraído mi atención, de hecho todos los años de un tiempo a esta parte paso por la fase de ver si empiezo una carrera relacionada o no. Hace unos meses me surgió la posibilidad de meter poco a poco la cabeza en temas de investigación relacionados con la biología, así que aproveché la oportunidad y procuro aprender todo lo que pueda y aportar todo lo que sé de otros campos, especialmente en el área de software.
Estoy muy sorprendido de los entornos que tienen que utilizar los investigadores y más sorprendido aun de que obtengan algún resultado con todo el tiempo que tienen que invertir en las herramientas:
Páginas web con decenas de opciones y campos
Herramientas de línea de comandos que no funcionan los días de luna llena ( a no ser que toques los fuentes o tengas la versión 10.5.3.2.6.7b)
Combinaciones de herramientas que solo funcionan en versiones específicas
APIs hechas sin conocimiento
y un largo etcétera de despropósitos….
Desde la óptica de una persona que viene del mundo del software y que es novel en el área de investigación, todo esto me parecía absurdo!!… sobre todo teniendo en cuenta que el software de simulación, de análisis… es la base fundamental para la investigación!! aun teniendo profesionales excelentes en un área determinada, si las herramientas les fallan es como mandarles a la guerra con una pistola de hace 50 años… no quiero pensar cuántos descubrimientos se nos han escapado (y se nos escaparán) por una deficiencia en los paquetes de software =(
Personalmente he visto algunas tendencias que creo que provocan estas deficiencias.
Los investigadores son los que se desarrollan su propio software. Por un lado admiro que aprendan por su cuenta e incluso que lleguen a una aplicación funcional… por otro… os diría que dejéis las manitas quietas y os dediquéis a lo vuestro O=) Hay miles de desarrolladores, product managers…que os darían una solución más óptima, más fácil de mantener, con menos errores, mejor usabilidad,… y un largo etcétera, porque es su especialidad, hacer producto que va a ser usado, que hay que mantener, que hay que corregir y que hay que modernizar . Una cosa es que alguien se haga una página web para su grupo de fans de pepito grillo o para una porra con los amigos. Otra muy diferente es que un proceso de investigación quede comprometido por la falta de calidad del software que se utiliza.
Un matiz… no digo que un investigador no tenga que tirar sus scripts o hacerse alguna herramientilla personal… me refiero al desarrollo de las herramientas fundamentales.
Herramientas de cuando matusalén hizo la comunión. Me resulta simpático cuando alguien afirma ‘XXX es el lenguaje para entornos de investigación YYY’ ¿Por qué¿ ¿Por qué hay que usar XXX?… si no tiene un API específica, ni fue diseñado para eso… ¿por qué ‘es el lenguaje’ o ‘la herramienta’? … En mi opinión es porque es el que usaron inicialmente los que se han metido en ese campo, porque posiblemente fue el primer libro que cayó en sus manos o el lenguaje que estudiaron en la carrera… nada más. En una organización que tiene que vivir de sus productos, éstos se actualizan, se utilizan herramientas más nuevas, se cambia el desarrollo a otra plataforma para modernizarlo. Esto a penas pasa en el software de investigación porque no se piensa en el software como producto.
Poco aprecio por los productos ‘comerciales’ Lo he notado en las conversaciones y en los foros… hay preferencia por la herramienta gratuita de comunidad antes que el paquete de software del proveedor X que esta especializado en eso. No he tenido la oportunidad de valorar la calidad de los paquetes comerciales, pero cualquier descarte irracional me parece un error. Estoy seguro de que habrá productos excesivamente caros… pero también los habrá que valen hasta el último céntimo de lo que se paga por ellos.
Desarrolladores sin experiencia en desarrollo de producto. Si vas a hacer algo que va a utilizar alguien que no eres tu y que tiene que mantenerse en el tiempo, vas a hacer un producto. Y si vas a hacer un producto y no tienes experiencia en ese campo… asume que tienes que aprender algo e infórmate!! No lo veas como una pérdida de tiempo, es una inversión que va a hacer que tu futuro producto sea mucho mejor para el propósito que tenías en mente…y eso es deseable, no?. En mi opinión, la opción de hacer un ejecutable regulero o una página que tiene un manual de instalación de 10 páginas… me parece bastante poco profesional. Aunque estamos en una realidad donde el desarrollo de software se ha pervertido bastante y muchos se consideran (y se promocionan) como desarrolladores, cuando todo lo que tienen a la espalda es el desarrollo de una app o una página web con una base de datos (yo he curado alguno que otro corte y no pongo q soy médico junior en mi currículum ;).
OJO…. que si eres investigador en lenguajes de programación o en big data o en un área específica (de nicho) del mundo del software… desengáñate… tu no eres desarrollador de producto y también deberías recurrir a especialistas (o formarte). Dañará tu ego pero mejorará tu resultado ;)
Obviamente nadie hace las cosas de forma regular a posta (excepto los poco profesionales) y estos problemas que comento se basan en el desconocimiento de cómo hacerlas mejor. Pero me preocupa que las investigaciones no tengan el software adecuado simple y llanamente por inercia y porque ‘esto es así’ :/
De todos modos, estos problemas, son problemas que no sólo afectan a los investigadores, en cierta forma todas las áreas lo sufren (solo tienes que pensar en el último TPV que hayas visto ó en el último cajero que hayas sacado dinero…), podríamos decir que quitando algunas contadas excepciones… el software está envejeciendo a la misma velocidad a la que avanza la tecnología y a penas hay tiempo de reacción para evaluar cambios deseables o plantearse una migración. Todo es para ayer, no? =_)
Ojalá pudiese terminar el post con una brillante idea de cómo solucionarlo todo de un plumazo, pero no soy tan visionario! X)
Lo qu si sé es que todo cambio debe empezar por uno mismo, así que empecemos plateándonos cómo lo estamos haciendo y cómo nos gustaría hacerlo ;)
Personalmente creo en la autocrítica responsable casi como una religión. Una buena autocrítica (de esa que construye y te ayuda a mejorar para el próximo día/proyecto/iteración)… de ahí surgen muchas buenas ideas y necesidades que nos ayudan a evolucionar.
Happy hacking!!
David Salgado (@davidsb)
PD –> Por ejemplo: Pruebas, desde test unitarios a pruebas automatizadas, de carga, etcétera…. acostumbrarse a empaquetar la información en librerías en lugar de liberar ejecutables como si no hubiera un mañana, control de código, algo de usabilidad en el caso de web, pensar en arquitecturas distribuidas / entornos paralelos…
Para que todo sea un poco más fácil, el equipo de Windows Azure nos da un paquete que contiene cmdlets de administración de Windows Azure, lo primero que tenemos que hacer es descargarlo, instalarlo y ejecutarlo como administrador.

En la página de información de los cmdlets, podemos ver un listado de comandos, veremos rápidamente que New-AzureQuickVM tiene muchas papeletas de ser el que nos ayuda a crear una máquina virtual =) Si miramos los parámetros con Get-Help New-AzureQuickVM y los ejemplos con Get-Help New-AzureQuickVM –examples nos hacemos una idea de los parámetros que nos van a hacer falta para ejecutar el comando, pero antes de que nos pongamos a teclear como locos hay algo que tenemos que configurar… la suscripción sobre la que queremos realizar la operación.
Estableciendo la suscripción
(Partimos de que tenemos una suscripción activa con Windows Azure y una cuenta de Azure Storage para almacenar las VMs y de que tienes powershel configurado como administrador y con el comando Set-ExecutionPolicy RemoteSigned ejecutado)
Tenemos que decir contra qué suscripción queremos trabajar, hay diferentes formas, pero la más fácil y rápida es que ejecutemos el comando
Get-AzurePublishSettingsFile Este comando nos abrirá una sesión de navegador para que hagamos logIn con nuestro LiveId y descargará la configuración de la cuenta a un archivo .publishsettings, guardamos este archivo y nos volvemos a la consola de powershell para ejecutar el siguiente comando…
Import-AzurePublishSettingsFile PathAlArchivo.publishsettings Que importa el archivo y establece la suscripción como ‘por defecto’
Si ahora ejecutamos el comando Get-AzureSubscription, veremos toda la configuración sobre la que vamos a trabajar, hemos de guardar la información de los apartados SubscriptionName y CurrentStorageAccount

Ahora sí, estamos preparados para ponernos a trastear con los parámetros. Para que lo tengas en cuenta, esta información se guarda en C:\Users\<user>\AppData\Roaming\Windows Azure Powershell
Revisión de los parámetros
Sistema Operativo: -Windows o –Linux … no hace falta explicarlo, no? =)
-ServiceName: Nombre del servicio, cómo lo vamos a exponer. Para probar diferentes nombres hasta que demos con uno, podemos ejecutar Test-AzureName -Service 'nombreAProbar' hasta que obtengamos false
-Name: Nombre que le damos a la máquina virtual
-ImageName: Tipo de máquina virtual que queremos desplegar. Podemos verlas fácilmente con Get-AzureVMImage | select ImageName Nos mostrará las opciones que podemos escoger
ImageName
---------
CANONICAL__Canonical-Ubuntu-12-04-amd64-server-20120528.1.3-en-us-30
CANONICAL__Canonical-Ubuntu-12.04-amd64-server-20120924-en-us-30GB.v
MSFT__BizTalk-Server-2010R2-CTP-3.10.77.0-07162012-en-us-50GB.vhd
MSFT__Win2K8R2SP1-Datacenter-201210.01-en.us-30GB.vhd
MSFT__Sql-Server-11EVAL-11.0.2215.0-08022012-en-us-30GB.vhd
MSFT__Windows-Server-2012-Datacenter-201210.01-en.us-30GB.vhd
OpenLogic__OpenLogic-CentOS-62-20120531-en-us-30GB.vhd
SUSE__openSUSE-12-1-20120603-en-us-30GB.vhd
SUSE__SUSE-Linux-Enterprise-Server-11SP2-20120601-en-us-30GB.vhd
-Location Aquí especificaremos en qué datacenter queremos almacenar la máquina virtual, para ver las opciones, ejecutamos Get-AzureLocation | select DisplayName y obtenemos
DisplayName
-----------
Southeast Asia
East Asia
North Central US
North Europe
West Europe
West US
East US
-InstanceSize: Tamaño de la instancia… ExtraSmall en mi caso
-Password: La password de administrador para cuando nos queramos conectar
(Puedes obtener información extendida de los parámetros en la página del cmdlet)
Ahora, el script completo…
PS c:\>$vmImage = "MSFT__Windows-Server-2012-Datacenter-201210.01-en.us-30GB.vhd"
PS c:\>$location = "North Europe"
PS c:\>$adminpwd = "Passw0rd1" …no, no se me ha escapado es un pass típico de laboratorio práctico ^^
PS c:\>New-AzureQuickVM -Windows -ServiceName "dscriptSvc4" -Name "dscriptwin3" -ImageName $vmimage -Password $adminpwd -InstanceSize ExtraSmall -Location $location

Y la prueba en el portal de administración ;)

y conectado a la máquina por terminal remoto

Scripts de Powershell…
…son todo un juguete y puedes hacer de todo con ellos, solo tienes que mirar la lista. Así que si vas a trabajar de forma intensa con algún servicio de Windows Azure, te recomiendo que inviertas algo de tiempo y te crees tus scripts de administración personalizados, te aviso de que no te fíes demasiado de los ejemplos que hay por internet… Windows Azure avanza rápidamente y algunos ejemplos se quedan atrasados rápidamente (no cuentan con tantas imágenes por ejemplo) Así que verifica los valores de los comandos ANTES de ejecutarlos
Happy Hacking
David Salgado (@davidsb)
En este post voy a reproducir el paso a paso de la demo de publicación en Windows Azure que hice en el #estechday. En la demo publicaba un sitio web que había desarrollado desde 0 a un website en un datacenter de Microsoft (Windows Azure). Inténtalo que no es difícil!
Desarrollar el sitio web
…porque algo tendremos que publicar, no? De todos modos nos vale con cualquier cosa, así que por ejemplo, desde Visual Studio, crea un nuevo proyecto, selecciona ASP.NET MVC y luego Internet Application.
Compila para asegurar que no hay sorpresas y que tenemos un sitio web funcional
Activar una suscripción de prueba en Windows Azure
Sin una suscripción de prueba va a ser difícil que podamos subir la aplicación ^^’ así que nos activamos una. He escrito un minipost con los tipos de cuentas gratuitas: http://geeks.ms/blogs/dsalgado/archive/2012/11/27/probar-gratis-windows-azure.aspx
Crear el espacio para el Website en Windows Azure
Una vez tenemos la suscripción activada, tenemos que ir al portal de administración para crear el espacio donde alojaremos nuestro sitio web.
Navegamos a http://windows.azure.com
En el panel de la izquierda hacemos click en New > Compute > WebSite > Quick Create

Con Quick Create nos permite crear algo similar a un directorio Virtual en un servidor web compartido, nos da la opción de asignar el nombre al sitio web, escoger en qué datacenter queremos que se ejecute y asociarlo a una suscripción (si es que somos administradores de varias)

En unos segundos se creará el sitio y podremos verlo en el panel de administración de WebSites

Si hacemos click sobre el nombre, iremos al panel de administración del servicio, donde podremos ver el consumo de recursos, acceder a las opciones de escalado para asignarle más recursos, configurar la publicación… etcétera A nosotros para esta demo nos interesa ir al menú de navegación de la derecha y hacer click en Download Publish Profile

Esta operación nos descarga un archivo q guardaremos (en mi caso en el escritorio) y que nos va a valer para que Visual Studio sepa conectarse al servidor (url, usuario, contraseña, protocolos disponibles…) para subir nuestra aplicación web

Una vez lo tengamos descargado estamos listos para publicar! (puedes abrirlo con el block de notas si tienes curiosidad)
Publicar desde Visual Studio
Vamos al Explorador de Soluciones (Ctrl + Alt + L), hacemos click con el botón derecho sobre el Proyecto MVC y escogemos Publish

En la ventana que aparece buscamos el archivo que nos hemos descargado previamente con el perfil de publicación
Vemos en la segunda pantalla todos los datos para publicar y que por defecto lo hace por WebDeploy, si hacemos click en el botón Publish…
Vamos viendo como se copia la información al servidor en el datacenter de Microsoft
Vemos que se suben todos los archivos, y cómo finalmente nos dice que está todo listo
 |
Y abre un navegador para que podamos navegar por la aplicación
 |
A partir de ahora, cuando estemos desarrollando y queramos subir un cambio nuevo, seguiremos los mismos pasos, sólo tenemos que ir al proyecto MVC y hacer click en Publish, para que se suban los nuevos cambios. Yo por ejemplo he cambiado algo de texto y al dar a publicar me detecta cambios en los siguientes archivos, de modo que sólo subira los cambios


Recursos adicionales
Continuous Delivery desde TFS
Cómo publicar en WebSites desde TFS (Service)
Cómo publicar en WebSites desde Git
Desplegar un WebSite con una Base de Datos
Happy Hacking!
David Salgado
Las suscripciones de prueba son gratis eso es, no hay coste, así q no le tengas miedo ;)
Estas suscripciones tienen una bolsa de horas gratuita, cuando la bolsa de horas se acaba, por defecto, el servicio se acaba, de modo que no incurres en gasto. Además, hay servicios, como el de WebSites que te deja tener hasta 10 sitios web gratis.
Estas son las cuentas que se pueden activar de forma gratuita:
- La free trial de propósito general, es la más reducida de todas, pero para trastear nos vale
- La asociada a una suscripción MSDN, valorada en hasta 3700$. Si trabajas con Visual Studio en tu empresa, posiblemente lo hayan adquirido junto con una suscripción MSDN, infórmate y pídeles tu número de suscripción!
- La asociada a un partner MPN, valorada en 1500$. Si, los partners de Microsoft tienen derecho a un paquete que se llama Cloud Essentials y que entre otras cosas incluye una bolsa de recursos de Windows Azure
- Para empresas dadas de alta en WebsiteSpark, valorada en 1500$. El programa para agencias web de Microsoft
- Para emprendedores dados de alta en Bizspark, valorada en 3700$
Happy Hacking!
David Salgado (@davidsb)
PD: Esta información era parte de otro post, pero la he refactorizado y colocado en un post dedicado…
PD2: Lo que me hace pensar que al Live Writer le falta un botón como el de Visual Studio de ‘extract method’, pero que sea ‘extract post’ =P
Fácil…SignalR es un API para facilitar la comunicación en tiempo real en aplicaciones web
¿Tiempo Real? ¿bidireccional? ¿Web?
Si, como sabes, HTTP es un protocolo de petición respuesta, donde la comunicación se inicia en el lado del cliente cuando hace una petición al servidor. Si en algún momento queremos saber si ha habido cambios en la información que se nos ha mostrado, tenemos que volver a pedir la misma página (recargarla / hacer F5).
Para que el usuario no tenga que refrescar a mano la información y para minimizar la cantidad de información que viaja a través de la red ý tiene que ser interpretada por el navegador, comento brevemente diferentes técnicas
AJAX. Nos permite hacer peticiones al servidor sin tener que pedir la página completa. Podemos pedir la información desde un script Javascript en la página y añadir la información que nos devuelva el servidor dinámicamente. Mejora mucho la experiencia pero sigue necesitando de iniciativa del cliente para consultar la última información. Hay numerosas librerías que hacen muy sencillas estas peticiones desde Javascript, por ej: JQuery
HTTP Streaming / Reverse AJAX / COMET. Tras una petición del cliente al servidor, aprovechamos y no cerramos la respuesta para poder seguir inyectando información cuando queramos. Funciona, pero no deja de ser una forma de trampear el HTTP tradicional para lograr lo que queremos. y como todo hack conlleva cierta complejidad, tanto para hacerlo como para mantenerlo.
Web Sockets Una especificación bajo el paraguas de HTML5 que permite tener comunicación full duplex entre el servidor y el navegador, de modo que una vez establecida la comunicación, el servidor puede enviar información a los navegadores conectados sin que estos la hayan solicitado.
Entonces SignalR…
SignalR hace 2 cosas.
Por un lado utiliza WebSockets para hacer comunicaciones push del servidor al cliente y habilitar un escenario de web en tiempo real.
Por otro, si por configuración de clientes/servidor websockets no es una opción… el API de SignalR hace fallback a otras tecnologías sin que tengamos que adaptar el código. Ya no será real time web, pero nos abstrae de crear los patrones para otros tipos de comunicación Servidor->Browser
Esta es la cadena de fallback: websockets –> Server Sent Events –> Forever Frame –> Ajax Long Pooling (xhr)
El API de SignalR está dividida en 2 partes Persistent Connections y Hubs, trabajan a diferente nivel de profundidad, siendo Hubs el que trabaja a un mayor nivel de abstracción. Por ejemplo, en Hubs puedes pasar tipos de datos complejos y funcionar de un modo RPC en las llamadas.
Demo de SignalR Hubs paso a paso
En El TechDay (#estechday) vimos una demo sencilla de cómo montar un Chat en SignalR partiendo de una aplicación MVC sencilla (un controlador y una vista). Os detallo el paso a paso por si queréis probarlo vosotros mismos:
Herramientas
Visual Studio 2012
ASP.NET 2012 Fall Update (incluye plantillas de SignalR, si no quieres instalarlo, hay q instalar SignalR con nuget “Install-Package Microsoft.AspNet.SignalR -pre”)
Proyecto base
Crea un proyecto ASP.NET MVC sencillo, vale con que tenga un controlador y una vista, que compile y ya.
Creando la parte del servidor
Lo primero que hacemos es ponernos sobre el proyecto y botón derecho New Item, añadimos una clase de tipo Hub

Esta clase (MyHub1.cs si no has cambiado el nombre) es nuestra parte del servidor, la que se va a encargar de recibir los mensajes y distribuirlos entre todos los clientes conectados al chat. EL código es muy sencillo

- Hub. La magia. Es la clase encargada en el servidor de abstraernos de todo, si miras su definición (F12 sobre la clase) verás que hay una serie de métodos a los que te puedes suscribir (OnConnected, OnDisconnected, OnReconnected), la posibilidad de trabajar con grupos (IGroupManager)… vamos… cositas divertidas para jugar ^^
- HubName Determina el nombre que utilizaremos para referenciar al proxy cliente que se conecta con el servidor.
- EnviarAlChat Es el evento al que llamaremos desde la parte cliente para distribuir el mensaje
- mostrarMensaje Aquí asumimos el compromiso de implementar este método en la parte cliente. Será el responsable de que el cliente de chat refleje en pantalla el mensaje que recibe del servidor ( con una actualización de otro usuario por ejemplo)
Y ya está el servidor! difícil verdad? ;)
Creando la parte cliente
Para crear el cliente vamos a editar la vista existente en la aplicación MVC, lo primero que vamos a hacer es añadir un par de referencias a scripts en la vista, tras la etiqueta <h2> por ejemplo

Importante: El primero de los scripts necesita que JQuery haya sido referenciado previamente. En un proyecto MVC por defecto, JQuery se referencia en la plantilla Shared\_layout.cshtml así que la abrimos y nos aseguramos que JQuery se referencia ANTES del @RenderBody pq si no no encontrará la referencia ;)

Ahora solo queda la parte del código cliente.
Primero ponemos algunos controles HTML con los que trabajar…

Y añadimos la parte de Javascript para crear el proxy, hacer las llamadas e interactuar con los controles

- $.connection.miChat Es el proxy que va a gestionar la comunicación con el servidor. Es el HubName que hemos dado anteriormente
- michat.client.mostrarMensaje Es la función que nos habíamos comprometido a implementar para que pueda ser llamada desde el servidor. Únicamente añade un List Item a una lista HTML y le incluye el mensaje que venga del servidor
- $(’#bEnviar’).Click Definimos un gestor para el evento click del botón de la página, de modo que regoja el valor de la caja de texto $(‘#tbMensaje’).val() y lo envíe al servidor para que éste lo distribuya entre los clientes conectados michat.server.enviarAlChat(…)
- enviarAlChat Fíjate que aqui utilizamos notación camelCase aunque en el servidor lo hayamos definido como PascalCase ;)
- $.connectio.hub.Start() Llamada para que comience la conexión
Probándolo todo
Sólo tenemos que dar a F5 y abrir un par de instancias de navegador para que se comuniquen entre ellas y ver cómo todo funciona

Problemas frecuentes:
- No definir previamente JQuery
- Confusiones en la notación de JQuery al referenciar los elementos del DOM
- Confusión en la nomenclatura del hub de servidor y de los métodos
- Si falla algo vete mirando a ver qué objeto JS esta ‘undefined’ para ver en qué parte puede haberse cometido el error =)
Recursos
Página del API http://signalr.net/
Video de intro a SignalR en el BUILD - Building Real-time Web Apps with ASP.NET SignalR
Happy hacking!
David Salgado (@davidsb)
…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.
 | 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 :P |
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
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!!
 | 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)
 | 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!)

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

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 )

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.
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…
 | 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

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

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

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


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

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

y la instalación de las dependencias

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

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.

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

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

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

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

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)

Finalmente llegarás a algo parecido a esto

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

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

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

y ver vervisitas.jade para que muestre los mensajes

probando, probando
Desarrollo… listo! Ahora al arrancar a aplicación podremos navegar y ver el funcionamiento completo
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

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

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

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 =)

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

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

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/
¡¡¡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
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” … ¿?

… 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)

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?

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’

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

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

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

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

Y compilo
 | … y al hacer click… |  |
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!
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.

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

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)

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

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

¿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=)

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.

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? :P

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…

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

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

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

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
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 Service… que 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 :P 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


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.

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

e introducimos un nombre único que se nos ocurra

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

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

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.

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)

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

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

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

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

sin cifrado…

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

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

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
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 :P
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 :)
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.
 |
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 …
|
 |
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) |
 |
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. |
 |
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
…y si además de ser gratis hace que estés en el candelero, que tengas unos followers extra en twitter, o unos cientos más de visitas en el blog… pues habrá que opinar, ¿no? ¿no es lo que hace todo el mundo? si no lo haces te quedas atrás… no estás en “la ola del software”!!!
Personalmente, hasta hace poco no he tenido tiempo de meterme un poco con todo este tema de HTML5 como para tener una opinión que defender. Hasta ahora había asistido a charlas de diferentes proveedores, había leído algún documento del W3C, he visto algún video, he probado algunas demos… pero no estaba cómodo defendiendo una opinión propia aun. Es sorprendente como tanta gente pasa a tener una opinión del mundillo de HTML5 tan rápidamente, suena a que más de uno está comulgando con opinión prefabricada }=) vade retro tecnicoless!!
De todos modos, como opinar es gratis y en internet publicamos cualquiera, pues ahí va mi opinión sobre toda esta historia…
En realidad, de qué se habla cuando se habla de HTML 5?
En los foros en los que yo he estado y en los recursos que he consumido, cuando se habla de HTML5, realmente se habla de HTML5 como leguaje de marcas, de CSS3 y de las nuevas APIs que deberían exponer los navegadores. Estos bloques se corresponden cuasi perfectamente con los working groups dentro de HTML 5, que son:
w3c HTML. Lenguaje de marcas
w3c Web Apps. API
w3c CSS. Estilo
w3c SVG. SVG ;)
ecma ECMAScript. Lenguaje para manipular el DOM
Y estos grupos, aproximadamente trabajan sobre 100 especificaciones diferentes que tienen interdependencias… sencillito ¿no? :)
Diferencias de implementaciones de HTML 5 entre navegadores
Resulta muy curioso ver como en las web de demos de HTML 5 de algunos proveedores se pide su navegador para ver la demo… pero si es un estándar… no debería poder verse cualquiera de las demos con cualquiera de los navegadores que dicen que lo soportan??
( por ejemplo…)

Si haces un bypass de la petición e intentas ver la demo en tu navegador, supuestamente compatible con HTML5 te llevas la sorpresa de que no funciona!! Pero… ¿no funciona porque tu navegador no es compatible? o ¿no funciona porque el sitio web no es HTML5?
Espera…debe ser nuestro navegador… porque en la web que visitamos pone que es HTML5, y porqué no fiarnos, no? <modoPardillo/>
En las sesiones de Google he visto como los websockets son parte del estándar, la geolocalizacion es parte del estándar, los web workers son parte del estándar, los sensores son parte del estándar, la base de datos SQL en cliente es parte del estándar, lo que empieza con –webkit es parte del estándar… eso si… “use it ar your own risk” Que yo sepa, los elementos que están 100% seguros en la especificación de HTML 5 del w3c con el canvas, svg, audio, video y algunos elementos de markup (article, section, nav…) y poco más.
Entonces… web workers, sql en cliente, sensores…
Web SQL Database… http://dev.w3.org/html5/webdatabase/ “Beware. This specification is no longer in active mantenance”
Web Workers. No son una especificación w3c, son una especificación de whatwg. Un grupo fundado en el 2004 por Mozilla, Opera y Apple que tiene como objetivo introducir cambios más agresivos en la web. No es una especificación w3c. http://www.whatwg.org/specs/web-workers/current-work/
Web Sockets. Especificación draft en Nov 2010. http://dev.w3.org/html5/websockets/
Sensores. Que tengamos acceso a través de ECMAScript a información de los sensores/gps… presentes en el dispositivo. Ni siquiera he encontrado el spec. Si alguno lo tenéis os agradecería el enlace, solo he encontrado una discusión en un foro de whatwg.
etcétera… No digo que sean malas ideas, ni mucho menos, pero tenemos que tener en cuenta que NO son parte del estándar w3c, ni tienen porqué estar soportadas en el futuro por todos los navegadores. A todos los efectos sería como hacerte un plugin especifico para tu navegador y esperar que tu web se vea igual en todas partes.
y es que….el estándar no esta listo!!!
Obviamente los aprox 100 documentos de los diferentes working groups no están en el mismo estado, algunos están acabados, otros en proceso y otros con mucho trabajo pendiente. El estándar… HTML5 como gran paraguas, no esta acabado, pero ¿hasta qué punto está usable? ¿puedo empezar a trabajar basandome en el? ¿cuánto le importa a un fabricante de navegadores? y ¿ cuánto nos importa como desarrolladores? :)
Mientras se va cerrando el estándar y los diferentes navegadores compiten para tener una implementación que respete los estándares, pienso que también se hace una carrera paralela por hacerse con el estándar de mercado / estandar de uso. Imaginemos que un navegador YYY implementa alguna funcionalidad de HTML5 sin que esté cerrada, en un momento en el que aún se está discutiendo en el w3c. Imaginemos que a facebook ( como uno de los sitios más importantes) le encanta esa funcionalidad y decide sacarle partido. Aunque no estuviese en el estándar
¿a alguien le cabe la duda de que no lo van a implementar todos los navegadores? No, ¿verdad?
y ¿qué ha pasado entre que el resto de navegadores lo han implementado?
Que la mayoría de usuarios de facebook han descargado el navegador YYY y lo han colocado en posición dominante respecto a cuota de mercado…. y eso por tirarse a la piscina con el estándar. Premio!!
En este momento casi todos los proveedores están jugando la baza de SU implementación del estándar para que se adopte cuanto antes y el resto vayan detrás. Y digo casi todos porque creo que desde Microsoft estamos siendo bastante estrictos con la implementación (aunque no sé como… acabaremos siendo los malos)… cosa que a estas alturas del negocio, personalmente no sé si es buena idea o es pecar de pescadilla en aguas de tiburones. Remitimos más tests que nadie para asegurarnos que todos implementamos el estándar del mismo modo, estamos en todos los foros donde se están definiendo las especificaciones, intentamos dar transparencia en el proceso de w3c, llevamos la implementación de forma muy cautelosa… a ver cómo acaba :)
Me recuerda a la imagen de un duelo… donde los participantes muy respetuosamente cogen el arma y se alejan 10 pasos de espaldas… pero al segundo paso se oye un ¡bang!
Mi recomendación personal e intransferible
Audio, video, canvas, css3, nav y demás… si a día de hoy quiero hacer algo que salga de ahí y que no se pueda hacer con JQuery. Lo hago con Silverlight.
Pero entonces… si HTML 5 es TAN, TAN, TAN genial… ¿qué pasa con Silverlight?
esto lo dejamos para otro día… ;-)
happy hacking!
~ds
PD1 –> Estoy algo cansado de oír que HTML 5 es el futuro de la web. Si lo es o no lo es… lo decidirá el tiempo. Hemos oido tantas veces que X o Y es el futuro de la web…
PD2 –> los principales sitios de prueba de HTML5
Microsoft –> http://ie.microsoft.com/testdrive/
Google –> http://www.html5rocks.com/
Apple –> http://www.apple.com/html5/
La semana pasada tuvimos un mini-taller donde había que resolver el problema de los números perfectos con un enfoque TDD.
y por enfoque TDD, acordamos:
loop {
Crear prueba de cómo queremos que el código se comporte
Crear código de infraestructura para que la prueba compile pero falle
Crear código para que la prueba pase
Refactorizar
}
Por si alguien se anima a hacer el ejercicio, éstas son las historias que hubo que ir resolviendo… Vete haciendo una por una, así tendrás que ir refactorizando y el ejercicio será más útil.
h1 - Dado un número, saber si es un número perfecto o no. Es perfecto, si la suma de sus divisores ( excluido el mismo ) es igual a él mismo. Por ejemplo:
6 tiene como divisores: 1 2 3 (y 6). Si los sumamos 1 + 2 + 3 == 6. 6 Es perfecto
h2 – Dada una serie de números, identificar los perfectos { 1, 6, 78, 344 } –> { 6 }
h3 – Dado un número, además de si es perfecto, queremos saber si es abundante ( suma de divisores > num ), deficiente ( suma de divisores < num ) o primo ( divisible entre sí mismo y la unidad )
h4 – Dada una serie de números, identificar los perfectos, abundantes, deficientes y primos.
Podemos enfocar la solución de diferentes formas, agrupar los tests de diferentes maneras, nombrarlos de diferente forma, invocar a uno u otro autor a la hora de refactorizar… pero creo que no hay una verdad única. Yo os planteo una posible solución, sobre todo para que las personas que nunca han hecho nada de TDD, vean la idea.
Happy hacking!
~ds
PD –> Gracias a Hadi Hariri ( @hhariri, blog ) por la sugerencia. En principio íbamos a hacer un ejercicio diferente, pero tras su experiencia en la devcon London, me sugirió que este podía ser interesante :)
PD2 –> Si bien los métodos en .NET son PascalCase, para los tests pongo guiones bajos porque es más cómodo de leer en la ventana de resultados
PD2 –> :O has usado youtube!!! si, tb lo subiré a channel9 para que esté accesible desde los dos sitios. Y no.. no me estoy consumiendo entre llamas por haberlo hecho :)
Los practicantes de kungfu, y los de cualquier actividad física, tienen que entrenar, tienen que repetir las acciones hasta que les salen naturales, sin pensar.
La repetición es uno de los procesos de aprendizaje reconocidos, en base a repetir cierta actividad, el cerebro pasa a responder a la orden de ejecutar esa actividad desde una zona diferente. Es el momento en el que hemos ‘interiorizado’ la actividad y ya no es necesaria una actuación tan consciente para llevarla a cabo.
Este mecanismo de aprendizaje no es exclusivo de las actividades físicas. ¿cómo nos aprendimos las tablas de multiplicar? ¿los axiomas matemáticos? ¿la tabla periódica? ¿las valencias?… diciéndolo en voz alta, copiándolo en un papel n-veces… en definitiva, repitiéndolo.
Y qué pasa cuando acabamos de repetirlo… que lo olvidamos. Tardamos más, incluso años, para olvidarlo completamente y que el cerebro sobreescriba esa zona. Durante ese tiempo sin práctica, vamos perdiendo fluidez en la actividad. Frases como “el que tuvo retuvo” “vivir de las rentas”… muestran esa misma idea… hay un camino en el monte, pero poco a poco se va tapando y cuanto más tardemos en volver a pasar…más nos costará la vuelta.
¿Recuerdas cuando aprendiste a programar?
Hacíamos itoa y atoi sin inmutarnos, reordenar arrays, fibonacci, las torres de hanoi, algoritmos de ordenación… ¿y ahora? Ahora nos sonreimos porque no nos acordamos y lo buscamos en internet. Porque “ya no hace falta saberse las cosas de memoria” ¿verdad? ]:)
Pero, a que es satisfactorio cuando haces las cosas a la primera? a que cuándo haces una algoritmo algo complicado de los que antes ‘te salian solos’? sonries… Y nada que decir de esa persona a la que admiramos en este contexto, le salen las líneas solas, ´fluido y encima le compila a la primera.
Todos estamos de acuerdo en que desarrollar tiene su punto de arte, un espacio de creatividad dentro de la ingeniería.
Además de por trabajo, los pintores pintan por hobby, practican sus trazos. Los deportistas también practican, y los cirujanos, los pilotos,… muchos profesionales practican para su profesion. Bien porque la profesión se presta o bien porque les gusta su trabajo ;)
¿Tu practicas tu código?
No me refiero a formar parte de un proyecto Open Source, eso puede indicar un nivel de compromiso que no estamos dispuestos a asumir. Me refiero a practicar por nuestra cuenta, a hacer un fibonacci de vez en cuando…
La mayoría no lo hacemos.
En las artes marciales, para facilitar el aprendizaje y perfeccionamiento los movimientos se agrupan en secuencias. El practicante, en lugar de hacer movimientos aislados, repite las secuencias. Ésto le ayuda a mantener su nivel, perfeccionar y reforzar las conexiones en el cerebro. Dependiendo del arte marcial, estas secuencias tienen un nombre: Katas (Karate), Pumses(Tae-Kwon-do), formas (Kung-fu), etcétera…
Pues bien, hace años (personalmente lo descubrí hace poco) se creo la figura de los CodeKatas. Ejercicios de complejidad creciente donde podemos practicar nuestro código.
Original. http://codekata.pragprog.com/ Tiene publicados 21 CodeKatas.
Referencia y enlaces extra. http://en.wikipedia.org/wiki/Code_Kata
Siendo una persona a la que me encantan los típicos puzles para programadores, os podéis imaginar que me encantó la idea. De vez en cuando me hacía un puzle, algo reactivo, normalmente no lo buscaba, me lo encontraba y lo hacía.
Pero la idea de resolver un problema cada cierto tiempo, de practicarlo… nunca lo había contemplado. De hecho, en algunos CodeKatas el reto está en resolverlos de diferentes formas (por ejemplo… nada de if’s) y así darle otra vuelta a la tuerca.
Los codekatas me parecen una muy buena forma tanto de aprender como de perfeccionar y entretenerse. Desde que lo conocí procuro hacer alguno de vez en cuando.
También descubrí que alrededor de los codeKatas se había creado un ecosistema de entusiastas, y algunas actividades/agrupaciones específicas ( con unos nombres horribles ]:) )
CodingDojos: Los dojos son los lugares de aprendizaje en las artes marciales, de modo que el CodingDojo se convierte en el lugar donde se practica en grupo los codekatas. Llamémoslo grupo de usuarios.
Coderetreats: Eventos prácticos. Tienen unas reglas determinadas, como trabajar en parejas, 0 slides, una experiencia inmersiva (varias horas).
Seguro que me dejo algún otro…
Llámalo kata, dojo, retreat o como te de la gana, pero las ideas que hay detrás son interesantes. Algunas son nuevas, algunas no, pero todas interesantes :)
Empezando a terminar, señalar que la repetición ayuda a aprender/mejorar, pero sobre todo si se acompaña de motivación. La motivación es clave para anclar cuanto antes los movimientos en el cerebro. Pero entiendo que si hacemos un codekata a las tantas al volver de trabajar… será porque estamos motivados, no? porque a nuestra edad …ya es difícil que nos obliguen :)
happy hacking
~ds
PD 01–> Los nombres me parecen una aberración porque he practicado artes marciales y deportes de contacto durante más de 20 años… no me gusta que se reutilicen conceptos, para mi es un mundo muy especial. Pero queése le va a hacer.. codekata… pues codekata :_)
PD10-> oxigeno, azufre, selenio, teluro. Fluor cloro bromo yodo
PD11-> 12 * 12 144 13*13 169 14*14 196 …
PD100-> post 2 días seguidos… estoy in flames! ^^
Más artículos
Página siguiente >