Evento TenerifeDev | Introducción a ASP.NET vNext (Materiales)

poster El pasado 11 de diciembre de 2014 tuvo lugar una nueva sesión organizada por TenerifeDev en la que compartí cartel nuevamente con David Rodríguez para hablaros de ASP.NET vNext. La sesión la comencé con una introducción a ASP.NET para después meteros en el mundo de vNext, las novedades que trae, las facilidades y la potencia que aporta, etc. Todo esto lo escenifiqué con un ejemplo que hacía uso de Azure Mobile Services. Finalmente, David os habló de cómo publicar un sitio desarrollado con ASP.NET vNext como Azure Website, lo que sin duda os aportará una gran ventaja sobre el resto de desarrolladores.

Aquí os dejo las slides y las demos. (Recordad que he quitado las credenciales de acceso a mi Azure Mobile Services y que podréis sustituirlo por el vuestro o por otra fuente de datos)

 

download-code

Webcast | Introducción al diseño de aplicaciones móviles

Christmas-Windows-Phone-SessionsEl pasado lunes 15 de diciembre tuve el placer de poder realizar un nuevo webcast sobre aplicaciones móviles gracias a Alejandro Campos Magencio, evangelista de Microsoft, que nos subió al  carro de un nuevo final de año hablando sobre lo que más nos gusta.

En esta ocasión hablé de diseño en aplicaciones móviles en una sesión más teórica que práctica dado que en las cosas del diseño hay mucho de gusto personal y pocas reglas que seguir salvo unas bases en las que asentarse (y de las que no debemos escapar) que nos sirven no sólo para aplicaciones móviles de la plataforma Windows, sino que también nos vale para el resto de plataformas ahora que está tan de moda usar Xamarin (lo mejorcito para cross platform) y Cordova (o PhoneGap) que por fin ha sido integrado con Visual Studio.

El contenido que seguí lo podéis encontrar en las slides que he subido a Slideshare y además podéis descargaros y ver la grabación en este enlace

 

Si necesitáis ayuda sobre diseño de Apps o sobre desarrollo de Apps para la plataforma Windows, como siempre podéis contactarme vía twitter @saintwukong o desde este mismo blog

 

Enjoy coding!

Webcast | Christmas Mobile Apps Sessions

Christmas-Windows-Phone-Sessions Mañana estaré como ponente en una nueva sesión online de “Christmas Mobile Apps Sessions“. Este año una vez más, Alejandro Campos Magencio, evangelista de Microsoft Ibérica, nos ha liado a los MVP Windows Platform Development Josué Yeray, Rafa Serna, Javier Suárez and me, junto con Eduard Tomás (MVP ASP.NET), para acabar el año de la mejor forma posible con una serie de Web Casts con el fin de prepararos y animaros a desarrollar Universal Apps. La serie completa de sesiones la podéis encontrar en este artículo junto con sus enlaces de inscripción.

Así pues, yo os hablaré de diseño una vez más e incluiré algunos truquitos de “perro viejo” que he aprendido con el tiempo

 

Introducción al Diseño, trucos y consejos en Universal Apps

Conoce los conceptos esenciales del diseño de Aplicaciones Universales para poder crear aplicaciones que atraigan a los usuarios. Además, aprenderás algunos trucos y consejos simples para diferenciarte y crear experiencias únicas.

Lunes 15 de diciembre de 20.00 a 21.00 (GMT+1)

Regístrate

Evento TenerifeDev | Introducción a ASP.NET vNext

poster Mañana participaré en una nueva sesión de TenerifeDev en la que os hablaremos David Rodríguez y un servidor sobre ASP.NET vNext, la nueva generación de tecnología web con la que Microsoft quiere seguir creciendo entre la comunidad de desarrolladores acogiendo también a los que crean aplicaciones para Linux y MacOSX. Esta sesión estaba prevista que la diera Tiberiu Covaci que se nos ha venido a vivir a la isla con lo que seguimos concentrando maestros dentro de isla. Entre otras cosas, vamos a hablar de qué es, qué novedades tiene, que ventajas propone y veremos algunos ejemplos de cómo utilizarlo para nuestros proyectos y desplegarlo en Microsoft Azure.

Además, esta sesión coincide dentro de la semana en la que se celebra el evento de aprendizaje más grande de de la historia “The hour of code” en el que se trata de incentivar el aprendizaje a la programación pero no sólo entre los desarrolladores y gente próxima a la tecnología, sino abierto a todo el mundo.

Esperamos que no nos falléis y que participéis de este gran evento durante nuestra sesión 🙂

 

Datos de la sesión

Sesión: Introducción a ASP.NET vNext

Descripción: Ven y conoce de primera mano cómo será la próxima versión de ASP.net, qué cosas cambian, dónde quedan los WebForms, cómo funcionan los controladores y qué le ha pasado al web.config. Santiago Porras, MVP de Windows Platform (@saintwukong) y David Rodriguez, MVP de Azure (@davidjrh) nos harán un recorrido por cada una de las novedades de la nueva plataforma para aplicaciones web y cloud. ASP.net vNext (aka ASP.NET 5), es completamente Open Source y está disponible en GitHub. ASP.NET 5 está actualmente en Preview.

Fecha: 11/12/2014

Horario: 18:00 GMT+0

Lugar: Salón de Grados de la ETSII

Registro: registro gratuito en Eventbrite

Webinar | Soluciones de Movilidad para nuevos entornos empresariales

poster El próximo Jueves 20 de Noviembre a las 16:00 horas de Madrid, tendré el placer de compartir un nuevo Webinar junto a Adrián Díaz en el que hablaremos sobre soluciones de movilidad para entornos empresariales.

La agenda del mismo será la siguiente:

  • Los aspectos de movilidad que trae SharePoint
  • Como introducirnos en el desarrollo de Aplicaciones móviles (nativas, multiplataforma haciendo uso de Apache Cordova y Xamarin)
  • Ver como aprovechar el Cloud dentro de nuestros desarrollos

Si estáis interesado en asistir, podéis registraros desde el siguiente enlace.

Esperamos que no os lo perdáis.

Evento | Azure Mobile Services y Aplicaciones Universales

posterHoy tendrá lugar una nueva sesión de TenerifeDev en la que volveremos contar con dos temáticas relacionadas para aumentar el alcance de los contenidos. En esta ocasión David Rodríguez hablará de Azure Mobile Services y yo haré lo propio sobre Aplicaciones Universales..

 

Azure Mobile Services y Aplicaciones Universales

Lugar: Salón de Grados ETSII

Horario: 18.00 – 19.30

 

Y recuerda que ya tenemos programado el evento de diciembre con la colaboración de un speaker internacional, Tiberiu Covaci (Microsoft MVP ASP.NET) que nos hablará de vNext

 sessions

JavaScript | Usando bPopup para levantar nuestros popups

Es muy común que en nuestras aplicaciones necesitemos abrir popups y, para ello, generalmente se suelen usar plugins JavaScript como jQuery.UI u otros que son algo más pesados de lo que realmente necesitamos. Además, normalmente, los plugins añaden estilos que no nos hacen falta y que debemos sobreescribir con gran esfuerzo para no perder el look&feel de nuestro sitio web.

¿Qué podemos hacer para evitar «problemas» sólo por intentar abrir popups?

Opción 1: Imitar a Chuck Norris y hacerlo por nuestra cuenta

Esta opción me suele gustar pero sólo es aplicable en caso de que seáis buenos programando JavaScript, porque de lo contrario estaréis desaprovechando el tiempo y es posible que acabéis enredados en un código difícil de mantener.

Opción 2: Buscar un plugin simple con pocos o ningún estilo

Esto puede ser realmente lo que necesitamos en la mayoría de los casos y, en la temática de este artículo, os hablaré un poco de bPopup con además una solución de ejemplo.

bPopup es un plugin que nos permite abrir ventanas modales (popups) que aplica muy poco (o nada) de estilos, es ligero y fácil de configurar, con muchas opciones accesibles que nos permitirán rápidamente crear un popup que encaje perfectamente en el look&feel de nuestro sitio web.

La opción más simple es abrir el popup y, para ello, sólo necesitamos ejecutar una pequeña instrucción JavaScript

 

$(‘element_to_pop_up’).bPopup();

 

 

 

Popups infinitos

A priori parece una opción que no tiene mayor complejidad, pero la muchos plugins que implementan la funcionalidad de abrir ventanas modales no permiten la creación de infinitos popups unos sobre otros por problemas a la hora de tratar las clases que aplican. Con bPopup es muy sencillo tener esta funcionalidad que nos permitirá trabajar con popups sobre popups.

 

$(‘element_to_pop_up_1’).bPopup({

closeClass:‘close1’,

follow: [false, false] //x, y

});

$(‘element_to_pop_up_2’).bPopup({

closeClass:‘close2’,

follow: [false, false] //x, y

});

 


 

$(‘element_to_pop_up_N’).bPopup({

closeClass:‘closeN’,

follow: [false, false] //x, y

});

 

 

Control de eventos

bPopup también nos aporta control de eventos para poder realizer tareas en cada instante de la vida del popup.

 

$(‘element_to_pop_up’).bPopup({

onOpen: function() { alert(‘onOpen fired’); },

onClose: function() { alert(‘onClose fired’); }

},


function() {

alert(‘Callback fired’);

});

 

 

Carga de contenido externo

bPopup nos permite realizer la carga de un contenido externo mediante su URL. En el siguiente ejemplo sacado de la página de bPopup, vemos como se carga de forma asíncrona, el contenido del blog del autor.

 

$(‘element_to_pop_up’).bPopup({

content:‘iframe’, //’ajax’, ‘iframe’ or ‘image’

contentContainer:‘.content’,

loadUrl:‘http://dinbror.dk/blog’ //Uses jQuery.load()

}

);

 

Podéis descargaros de aquí un ejemplo muy simple

Eventos | Materiales de mi sesión “Responsive Web Design con Superpoderes”

posterEl pasado, jueves 16 de octubre, volvimos a la acción desde TenerifeDev con dos sesiones creo que bastante interesantes para los desarrolladores y diseñadores web. En esta ocasión, las sesiones las dimos en las instalaciones de la FEULL (Fundación Empresa de la Universidad de La Laguna) que como siempre, colaboraron activamente con nosotros para poder compartir conocimientos con todos los asistentes, entre los que siempre destaca una alta presencia de estudiantes que se pueden enriquecer con la experiencia que podamos aportar sobre la vida laboral. Este es el resumen de las sesiones. Enjoy!

David Rodríguez nos habló de todos los aspectos correspondientes a Azure Web Sites y fue muy interesante ver lo sencillo que es crear sitios web, configurarlos, monitorearlos, escalarlos, etc. teniendo en cuenta las posibilidades que nos da que dichos sitios puedan ser desarrollados no sólo en .NET sino también en Python, Java, Ruby, PHP,… además de que se puedan seleccionar plantillas preinstaladas como WordPress, DotNetNuke, etc. Aquí podéis ver su presentación

 david-rodriguez

  • Responsive Web Design con superpoderes – Santiago Porras (MVP Windows Platform Development)

Tuve el placer de introduciros al mundo del Responsive Web Design y ampliar las posibilidades con SASS. Además, para los profanos en el mundo de la maquetación os dejé soluciones que os pueden ayudar en el desarrollo y maquetación de vuestros sites con Foundation o Bootstrap.

santiago-porras

Las sesiones fueron tan interesantes que incluso se nos fueron un poco de tiempo. Mis disculpas a los asistentes, pero ya sabéis que cuando se disfruta de lo que se está contando… el tiempo se va volando. Espero que el mensaje que queríamos transmitir sobre Azure y Diseño web haya calado entre los que estuvieron escuchándonos

 

No olvidéis que ya tenemos programadas dos nuevas sesiones  para noviembre (Azure Mobile Services con David Rodríguez y Aplicaciones universales conmigo) y diciembre (vNext

Aquí os dejo las slides y la solución de pruebas en que realicé en ASP.NET MVC

download-code

Evento | Sesión sobre entornos híbridos en Microsoft Azure para SharePoint

poster

Retomando las labores de comunidad, vuelvo a vosotros en los albores de la tempestad para tratar de exponer mi visión. En este caso, colaboraré con Alberto Díaz Martín el próximo jueves 23 de octubre en un Webminar de ENCAMINA donde hablaremos de entornos híbridos en Microsoft Azure (Más info) haciendo una orientación hacia SharePoint, aunque todo lo que contemos puede ser aplicable a otras soluciones.

 

Las tres claves sobre entornos híbridos en Microsoft Azure

Fecha: 23-10-2014

Hora de inicio: 16:00 UTC/GMT +1

Hora de finalización: 17:00 UTC/GMT +1

Lugar: Online

Registro: ¡Regístrate aquí!

Descripción

“Las 3 claves sobre entornos híbridos en Azure”

Durante esta conferencia online, vas a descubrir:

  • Clave 1: Cómo aprovechar las infraestructuras en la nube para ahorrar costes y ofrecer un mejor servicio.
  • Clave 2: Cuáles son las mejores opciones para montar una infraestructura híbrida con Azure, SharePoint u Office 365
  • Clave 3 (Clave práctica):  Cómo aprovechar y utilizar estos entornos híbridos (demo)

Más información: Info

SharePoint 2013 | Desplegar página maestra personalizada programáticamente

En este artículo quiero mostrar paso a paso cómo desplegar una página maestra (Masterpage) personalizada en un sitio de SharePoint y aplicarla en el momento del despliegue.poster

Escenario

Tenemos un sitio de SharePoint con sus subsitios etc etc etc y queremos aplicar una página maestra personalizada para, evidentemente, tener nuestra imagen de marca. Las opciones que tenemos son:

  • Hacerlo directamente trabajando sobre el sitio con el administrador de diseños y un editor de HTML como WebMatrix o SharePoint Designer con lo que para replicar en otros sitios tendríamos que hacer una exportación del paquete de diseño, importar en en nuevo sitio e ir configurando manualmente todo lo que corresponda
  • Hacerlo desde una solución de SharePoint creada con Visual Studio con lo que tendríamos la posibilidad de tenerlo en TFS o GIT, control de las versiones, automatización de configuración en el momento de desplegar, …

 

Parece claro que si lo que queremos es tener una solución flexible que podamos replicar en otras colecciones de sitios, granjas, … la opción correcta es crear una solución de SharePoint con Visual Studio

Solución

Crear proyecto

Como he comentado, va a ser paso a paso, así que empezaremos por crear el proyecto de tipo “SharePoint 2013 – Empty project”

01-create-project

 

Esto nos creará un proyecto con la estructura estándar de una solución de SharePoint a la que debemos ir agregando los elementos necesarios.

Crear módulo

El siguiente paso será crear un módulo donde añadir la página maestra para que sea desplegada en SharePoint

02-add-module

Al crear el módulo, Visual Studio también nos creará una característica que se encargará de activarlo en nuestro sitio de SharePoint. Para el ejemplo, a esta característica le he puesto ámbito de Site Collection tal y como muestro en la imagen

feature-scope

 

Añadir página maestra al proyecto

Dentro del módulo, eliminamos el archivo “sample.txt” que nos muestra cómo funciona un módulo y añadimos nuestra página maestra personalizada, quedándonos como en la imagen

image

Especificar ruta de despliegue

Dentro del módulo, tenemos un archivo “Elements.xml” que define cómo se realizará el despliegue de cada uno de los ficheros. Como queremos desplegar nuestra página maestra y, por ser puristas, hacerlo a la carpeta donde está el resto, debemos configurarlo de la siguiente forma:

   1: <?xml version="1.0" encoding="utf-8"?> 

   2: <Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 

   3:     <Module Name="MasterPages" Path="MasterPages" RootWebOnly="TRUE" Url="_catalogs/masterpage"> 

   4:         <File Url="demo.master" Type="GhostableInLibrary" IgnoreIfAlreadyExists="TRUE" /> 

   5:     </Module> 

   6: </Elements> 

 

Como se puede observar, especificamos la url de despliegue de los ficheros contenidos en el módulo como “_catalogs/masterpage” y en el fichero establecemos que sea de tipo GhostableInLibrary. Con esto, ya tendríamos el despliegue de nuestra página maestra, pero… nos falta establecerla como predeterminada en nuestro sitio, así que continuemos.

 

Añadir “Event receiver”

Lo que vamos a hacer ahora es añadir un “Event receiver” que se encargue de establecer nuestra página maestra como la predeterminada de nuestro sitio y todos sus subsitios (contando desde la raíz) y, dado que para establecer nuevas páginas maestras necesitamos tener activadas las características de publicación tanto a nivel de colección de sitios como a nivel de sitio, también nos vamos a atrever a hacerlo desde código.

03-add-event-receiver

Una vez añadido el “Event receiver”, la característica nos quedará de la siguiente forma:

image

 

Editamos el fichero del “Event receiver” y añadimos los eventos “FeatureActivated” y “FeatureDeactivating” con el siguiente código

   1: public override void FeatureActivated(SPFeatureReceiverProperties properties)

   2: {

   3:     SPSite site = properties.Feature.Parent as SPSite;

   4:  

   5:     if (site != null)

   6:     {

   7:         SPWeb rootWeb = site.RootWeb;

   8:  

   9:         // Calcular la ruta relativa desde el sitio raíz.

  10:         string webPath = rootWeb.ServerRelativeUrl;

  11:         if (!webPath.EndsWith("/"))

  12:             webPath += "/";

  13:  

  14:         // Activar la característica de publicación a nivel de colección de sitios

  15:         site.Features.Add(new Guid("f6924d36-2fa8-4f0b-b16d-06b7250180fa"), true);

  16:  

  17:         // Recorrer todos los subsitios 

  18:         foreach (SPWeb web in site.AllWebs)

  19:         {

  20:             // Activar la característica de publicación en todos los sitios de la colección 

  21:             // y asignación de la nueva masterpage además del logo.

  22:             web.Features.Add(new Guid("94c94ca6-b32f-4da9-a9e3-1f3d343d7ecb"), true);

  23:             web.MasterUrl = webPath + "_catalogs/masterpage/demo.master";

  24:             web.CustomMasterUrl = webPath + "_catalogs/masterpage/demo.master";

  25:             web.SiteLogoUrl = "http://sumatutalento.com/wp-content/uploads/2014/07/Profile-Photo-4.png";

  26:             web.Update();

  27:         }

  28:     }

  29: }

  30:  

  31: public override void FeatureDeactivating(SPFeatureReceiverProperties properties)

  32: {

  33:     SPSite site = properties.Feature.Parent as SPSite;

  34:     if (site != null)

  35:     {

  36:         SPWeb rootWeb = site.RootWeb;

  37:  

  38:         // Calcular la ruta relativa desde el sitio raíz.

  39:         string webPath = rootWeb.ServerRelativeUrl;

  40:         if (!webPath.EndsWith("/"))

  41:             webPath += "/";

  42:  

  43:         // Recorrer todos los subsitios 

  44:         foreach (SPWeb web in site.AllWebs)

  45:         {

  46:             // Restaurar la masterpage Seattle 

  47:             web.MasterUrl = webPath + "_catalogs/masterpage/seattle.master";

  48:             web.CustomMasterUrl = webPath + "_catalogs/masterpage/seattle.master";

  49:             web.SiteLogoUrl = string.Empty;

  50:             web.Update();

  51:         }

  52:     }

  53: }

Como se puede observar, ambos métodos hacen algo similar y lo he comentado sobre las líneas de código con lo que hay poco que explicar, salvo la activación de las características de publicación, cuyos códigos podéis sacar de este artículo de technet y que os puede servir para activar la característica que deseéis.

 

Desplegar y probar

Ya hemos terminado de configurar y codificar todo lo necesario, así que, desplegamos el proyecto y comprobamos el sitio que como cabría de esperar, habrá cambiado de aspecto, adquiriendo el asignado en nuestra página maestra, en mi caso he modificado el logotipo, la búsqueda y el menú de navegación, eliminando el quick launch del panel izquierdo.

sharepoint-site-after

Si vais a las características de la colección de sitios podrés comprobar cómo aparece la que acabamos de desplegar activada, porque está puesto como automático aunque podéis cambiar este comportamiento.

site-collection-features

 

También tenéis disponible la selección de la página maestra desde la configuración del sitio –> página maestra puesto que hemos activado la característica de publicación-

masterpage-selection

 

Bueno, esto ha sido todo.

Os dejo el código del proyecto para que lo tengáis como referencia en este enlace

download-code