Visual Studio Online early adoption… se acaba

Si te creaste una cuenta de ‘Team Foundation Service’ antes de que éste pasara a ser parte de Visual Studio Online, entonces te consideramos un early adopter, alguien que apostó por el servicio antes de que estuviese ‘certificado’ para trabajo en producción.  Posiblemente hayas recibido algún que otro mail sobre el período de early adoption, cuando empezó, que lo extendimos, que se acerca a su fin, etcétera… Hemos creado algunos post en inglés (VS Blog, Brian Harry’s blog) explicando el proceso, pero quería hacerlo tb en castellano en un tono más informal.

 

Beneficios de Early Adopter

Como early adopter tienes una serie de beneficios sobre los usuarios que empezaron más tarde, estos beneficios vienen por 2 sitios diferentes, a nivel de cuenta y a nivel de usuario.

A nivel de cuenta,

Las cuentas ‘early adopter’ tienen un número ilimitado de minutos para cloud build y cloud load testing. Las normales tienen 60min y 15.000min respectivamente.

Las cuentas ‘early adopter’ pueden tener un número infinito ( o más! ) de usuarios con plan/licencia ‘early adopter’. Las cuentas normales no pueden añadir ese tipo de usuarios.

A nivel de usuario

Los planes/licencia del tipo ‘early adopter’ dan acceso a todas las features de VSOnline. Normalmente los usuarios tendrán o bien un user plan o bien una suscripción MSDN, diferentes tipos tienen diferentes funcionalidades. En esta página puedes comprar las funcionalidades por tipo de plan o suscripción MSDN.

Que va a pasar el 7 de Mayo

El 7 de mayo se acaba el periodo de early adoption, todas las cuentas pasarán a ser normales y el plan de usuario ‘early adopter’ dejará de ser válido. Cuando un usuario con plan ‘early adopter’ intente acceder a la cuenta, si hay un plan disponible se lo asignaremos (por ejemplo uno de los 5 planes gratuitos que vienen por defecto) y si no verá un error 403 donde le avisamos de que no tiene una licencia válida.

Recomendamos que vayas a tu cuenta https://<tualias>.visualstudio.com/_user (ojo al guión bajo _user) para ver cuál es el estado y evitar sorpresas.

clip_image002

Aprovecha a asignar los 5 planes gratuitos a tu equipo y si alguno de ellos es suscriptor MSDN asígnale el plan ‘elegible MSDN’ para que podamos reconocerlo la próxima vez que acceda a la cuenta.

clip_image004

Entonces… Toca pagar?

NO, NO y NO =) todas las cuentas de Visual Studio Online incluyen 5 planes de usuario basic, 60 mins de build y 15k mins de cloud load testing, estas cantidades cubren la mayoría de las necesidades de los equipos. Además de que los suscriptores MSDN no cuentan como usuarios.

Si necesitas más recursos que los que vienen por defecto

Quien tenga un equipo más grande y no este cubierto por MSDN, quien quiera otro tipo de planes de usuario o quien quiera más minutos para los servicios de testing y compilación… tiene que pasar por caja O=) En estos casos tendrán que enlazar la cuenta de VSOnline con una suscripción de Microsoft Azure para poder adquirir planes de usuario o minutos.

 

Espero que esto ayude un poco a aclarar la situación. Si tienes cualquier puedes postear en los comentarios del blog, también estamos atentos al hashtag #VSOnline en twitter (puedes mencionarme a mi @davidsb ) y tenemos un foro en MSDN con varios compañeros respondiendo dudas.

 

Happy hacking!

ds

De objetivos e indicadores

Ahora que vamos a empezar el año, posiblemente te plantees los objetivos del año que entra, pues además de plantearte objetivos, tanto a nivel personal como profesional, te animo a que les sigas la pista, a que determines unos indicadores de éxito.

Hay infinidad de lecturas y herramientas sobre este tema… qué atributos deberían tener los objetivos que te marques, cómo han de ser los identificadores (KPIs), cómo crear un cuadro de mandos, etcétera. Este post no pretende ser una uber-recopilación de recursos relacionados, tan solo dar mi opinión y y algunos ejemplos por si alguien se anima a definirse no solo objetivos, si no también indicadores para 2014 😉

Aunque también aplica al terreno personal, voy a centrarme en el terreno profesional, y me da igual que tu empresa no te ponga objetivos e indicadores… te los puedes poner tu mismo 😉  Decide cómo vas a medir tu contribución y a mantener tus acciones alineadas con el negocio. Además, posiblemente, cuando socialices los objetivos con tu equipo alguien más se suba al carro 😉


Cuando hablo con amigos del mundillo sobre indicadores, encuentro opiniones que se mueven en torno a estos temas:

     No sabe no contesta
     Sensación de ‘tufillo’ a multinacional
     Sensación de que los indicadores creados por negocio no van a reflejar adecuadamente el trabajo en desarrollo

Tengo la impresión de que sobre métricas e indicadores se ha hablado mucho más de las perversiones que de los éxitos y personalmente creo que es una pena. Para poder comentar sobre algo en concreto, pongamos un o unos??? ejemplo:

     Objetivo: Que los desarrolladores que utilicen un determinado servicio permanezcan activos. Entendiendo por ‘activos’ que tengan una frecuencia relativa de uso del servicio. Vamos… que lo usen para algo más que darlo de alta y ocupar una línea en la tabla de usuarios.

     Indicador: Vamos a tener un reporte  que muestre el % de usuarios que acceden al menos 3 veces por semana a hacer una transacción.
Y al rededor de este ejemplo concreto vamos a ver algunos de los que, en mi opinión, son los principales inconvenientes y beneficios.

Principales inconvenientes 

     – Perder el norte y dedicar más tiempo a crear el modelo y las herramientas de seguimiento que a trabajar.
          Ej. Invertir más tiempo en el trabajo de BI para generar el reporte que en crear iniciativas que mantengan a los usuarios interesados.
          Consecuencia… el indicador va a salir con números nefastos en un reporte precioso.

     – Confundir el medio con el fin y convertir los indicadores en los objetivos del negocio.
          Ej. Olvidarnos de que el usuario este interesado y en tener información de calidad y centrarnos en buscar que realicen las transacciones que nos cuentan a toda costa. 
          Consecuencia… si eres bueno, posiblemente acabarás con un buen número, pero no será sostenible pq no has ‘cultivado’ un acceso orgánico motivado por el interés en el servicio.

Principales beneficios 

     – Predictibilidad a.k.a las ves venir, una vez tengas el patrón del indicador vas a poder anticipar comportamiento. 
          Ej. Ves que durante las últimas 2 semanas tus usuarios activos decrecen en número.
          Conclusión: qué esta pasando? tal vez sea el momento de preguntarles que ha cambiado, de cambiar el modelo de negocio… sabes que ha llegado el momento de hacer algo más de lo que tenías en mente.

     – Saber dónde reforzar la inversión, porque al medir el impacto, vemos lo que funciona y lo que no.
          Ej. Sacamos una nueva aplicación móvil para acceder al servicio que reduce la necesidad de estar delante del PC y vemos que la frecuencia de uso                aumenta.
          Conclusión. Genial! tenemos una nueva linea de trabajo que incorporar.
          
     – Nos mantiene enfocados en las áreas clave 
          Ej. Al pensar y hablar sobre los mejores indicadores y objetivos vamos a descubrir nuevas formas de mejorar el servicio. 
          Si uno de tus pilares es la ‘actividad’ vas a tener a los equipos pensando en cómo mejorar el servicio para impactar.


Algunos ejemplos de Malos vs Buenos indicadores

Si te vas a animar a probar, es importante que tengas una buena definición de indicadores-objetivos, porque en esta definición estamos marcando el ámbito de trabajo y estamos abriendo la puerta a la posibilidad de pervertir el modelo. Por ejemplo (intento hacer ejemplos genéricos para que se vea la idea)
     

Indicador Perversión Indicador mejorado
Número total de usuarios en el servicio Como no pedimos usuarios cualificados podemos hacer campañas a través de canales con gran número de audiencia y obtener un montón de nuevos usuarios…que no van a hacer nada. Número total de usuarios activos en el servicio
Facturación media por usuario Entonces tu numero puede ser alto porque tengas una serie de cuentas ‘premium’ que suben la media… pero si unas cuantas de esas cuentas se van? Qué pasa con el resto de segmentos, los tienes controlados? Facturación media por tipo de cliente
Facturación en ventas Vender esta muy bien, es genial, pero si luego el cliente no usa lo que le has vendido, no consume las funcionalidades, no despliega… pues va a ser difícil fidelizarle o hacerle crecer como cliente Facturación (hay que medirla) pero también hay que perseguir el despliegue
Seguidores en twitter Esta me crispa enormemente… QUE MÁS TE DA!?!?! los usuarios que tengas en twitter-facebook-su-red-social-aqui dan igual si no van a enriquecer el ecosistema o adquirir el servicio. Es como si hace unos años te valorasen mejor por tener más amigos en messenger.  Medir el rendimiento de twitter como canal y ver para que merece la pena utilizarlo ( soporte?, branded content?, presencia?) así le dedicarás la inversión adecuada



La perversion es mala… pero no malvada

Solo los malvados hacen las cosas mal a posta =) La perversión ocurre por dos tres grandes razones… la primera y más importante es el desconocimiento, no sabemos que lo estamos haciendo mal porque no nos hemos planteado a fondo la situación. Porque estamos corriendo, porque tenemos entregas, por lo que sea… La segunda razón es derivada de confundir el indicador con el objetivo, si como jefe de equipo estás midiendo e incentivando al equipo por el número de líneas cubiertas por tests…. pues…. tendrás un montón de ellas, aunque igual no reducen el número de bugs en los 3 primeros meses tras el despliegue x) Y la tercera razón… los malvados, que haberlos, haylos.


A si que personalmente te animo a que te marques una serie de indicadores para tus objetivos, y que los revises frecuentemente!  Feliz año nuevo / Urte Berri On! 😉

Si tienes alguna sugerencia sobre mejores ejemplos o algo que añadir al post coméntala aquí o mencióname en twitter (@davidsb) para que la incluya 😉 


Happy hacking!

PS -> Aunque para mi esto es fundamental y necesario, hay empresas que no lo hacen y les va de perlas =) Todo depende del modelo de trabajo que se siga.

Sprints de Marketing

Es frecuente oir a desarrolladores y a teóricos 😉 hablar de las bondades de las metodologías ágiles, pero no he encontrado muchas referencias de otros roles en una organización que den fé de que las utilizan y les funciona, así que me he animado a contar nuestra experiencia desde el punto de vista de un equipo de Marketing en una multinacional.

En mi división hacemos product marketing management, estamos en un punto intermedio entre desarrollo, marketing y negocio.

Para hacernos una idea de donde estamos dejadme que os cuente las interesecciones que tenemos con otros equipos. Con ingeniería compartimos algunos de los escenarios que van a implementarse, mercado y competencia ó BI. Con business planning tratamos temas relacionados con modelos de negocio, precios, cogs… y con marketing outbound colaboramos en programas de relationship marketing, posicionamiento, menajes, audiencias, canales o ventas. La mayoría de personas de mi división tenemos background técnico, damos charlas, hacemos demos…. pero no somos desarrolladores, nuestro día a día está centrado en documentos de word, powerpoint, reuniones y excel. Nuestras horas de desarrollo a la semana son reducidas así que aunque me duela mi corazoncito… no soy un developer, pero aun así os quiero contar como las parácticas ágiles nos aportan beneficios a nivel de equipo y organización.

En el equipo de product management somos unas 15 personas y llevamos diferentes productos relacionados con el stack de desarrollo de Microsoft, las más destacadas son: la plataforma .NET, las herramientas de la familia de Visual Studio, el programa de partners VSIP, la historia de ALM, devops y cómo no, mi ojito derecho, Visual Studio Online.

Más allá del equipo, a nivel de organización, Marketing Outbound, Product Marketing y Business Planning son equipos que están dentro de la división de Marketing (en la jerarquía de Tami Reller) e ingeniería (varios productos, decenas de feature teams, centenas de desarrolladores y testers) cae dentro de la organización de Satya. Diferentes equipos, diferentes edificios, diferentes organizaciones pero con objetivos en común.

Con tantos equipos diferentes en áreas diferentes esta claro que necesitamos una buena forma de organizarnos y colaborar sin perdernos en los procesos. Obviamente estamos alineados en la ‘visión’, en los ‘milestones’ en dónde queremos estar en 1 año, 6 meses… el gran reto es mantenerse alineado en las necesidades inmediatas, en estar seguro que si alguien tiene una dependencia en otro equipo, en otro edificio, este equipo es conscientes, tiene a un owner y la dependencia priorizada adecuadamente para no impactar negativamente en el otro equipo.

Lógicamente cada maestrillo tiene su librillo y cada equipo tiene sus trucos para mantenerse productivo, pero a nivel global optamos por alinearnos a nivel de sprints, así reducimos la mayoría de puntos de fricción (que no todos) derivado de diferentes organizaciones con diferente velocidad y necesidades. Compartimos sprints de 3 semanas y tenemos identificador único intra-organización (95% de los equipos).

Como es de esperar el backlog que tenemos en el área de Marketing no tiene que ver con lo que pueda tener un feature team de ingeniería, ellos tienen historias de usuario, bugs… en nuestro caso, la mayoría de items estan relacionados con generar drafts de documentos, llegar a acuerdos con proveedores, ejecutar determinadas iniciativas, user research o discutir escenarios. El hecho de tener un modelo de trabajo basado en backlogs, sprints, ecétera tra beneficios inmediatos al equipo, pero compartir el ritmo y backlogs nos ayuda a nivel de organización. Es tremendamente últil saber que todos estamos en el sprint 60, saber las fechas de los compromisos, compartir prioridades en el sprint y a 3 sprints, revisar escenarios juntos, etcétera…

Por ejemplo, en mi área en concreto hacemos product marketing de un servicio, hay muchas iniciativas de marketing que van dentro de código fuente (a/b testing, nurture, telemetría, contactabilidad, surveys, BI research…) y que han de estar reflejadas en los sprints de ingeniería, si no estas alineado adecuadamente o no hay acuerdo en las prioridades a nivel de organizaciones… tienes un problema.

¿Cómo lo hacemos?

Lo primero es compartir objetivos a nivel de organización (que los VPs, GMs y directories de las diferentes organizaciones tengan objetivos comunes y priorizados en el mismo orden) y ganas de trabajar juntos. Además, tenemos una serie de procesos y de herramientas compartidas.

Por la parte táctica de los procesos, a nivel inter-organización tenemos alineamientos a 3 meses, sincronización bimensuales y mail al final del sprint con historias resueltas y backlog (a grandes rasgos) del siguiente sprint.

A nivel intra-organización tenemos daily meeting en los equipos, sprint meetings y varios encuentros semanales para revisar el sprint backlog de los equipos virtuales.

En cuanto a las herramientas, intentamos mantenerlo sencillo:

    Tableros kanban (powered by Visual Studio Online) con diferentes areas de trabajo

    Un sharepoint de office 365 online para alojar los documentos

    Un One Note donde guardamos notas de las diferentes reuniones

    Lync para trabajar en remoto

    Mail para discusiones

Espero que sirva como ejemplo de que las metodologías ágiles no son sólo para equipos de 5 geeks. Nosotros las estamos utilizando en una multinacional para mantener alineadas y sincronizadas a cientos de personas distribuidas en equipos multidisciplinares en diferentes organizaciones … y funciona   😉

¿Preguntas? =)

Happy hacking!

ds

Marketing de producto, ola ke ase?

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.

 

image

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)

Tareas, proyectos, planes, imprevistos…Hay que organizarse!

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 😛

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)

image

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:

image 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 ^^).

image

 

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)

Cuando el software retrasa la investigación

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…

Cómo crear una VM en Azure con script Powershell

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.

image

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

image

 

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

image

Y la prueba en el portal de administración 😉

image

y conectado a la  máquina por terminal remoto

image

 

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)

Publicar website en Azure desde Visual Studio

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.

image image

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

image

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)

image

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

image

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

image

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

image

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

image

En la ventana que aparece buscamos el archivo que nos hemos descargado previamente con el perfil de publicación

image image

 

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

image
Vemos que se suben todos los archivos, y cómo finalmente nos dice que está todo listo

image

Y abre un navegador para que podamos navegar por la aplicación
image

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

image

image

 

 

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

Probar gratis Windows Azure

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

ASP.NET SignalR

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

image

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

image

  • 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

image

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 😉

image

Ahora solo queda la parte del código cliente.

Primero ponemos algunos controles HTML con los que trabajar…

image

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

image

  • $.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

image

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)