Sin categoría

Compilando SASS en Visual Studio con GULP y automatizando tareas

Hasta ahora en Visual Studio disponíamos de una herramienta que nos hacía prácticamente todo el trabajo «engorroso» a la hora de trabajar en el frontend de una aplicación, Web Essentials, pero en la versión para Visual Studio 2015 han anunciado que no incluirían la característica que más uso yo hoy en día de esta herramienta y no es otra que el compilador de SASS
así que, nos va a tocar hacerlo a mano haciendo uso de
Gulp o Grunt
.

No trataré la diferencia entre ambos en este artículo, así que iré directamente al ejemplo que quiero mostrar, compilar SASS con Gulp dentro de Visual Studio 2015.

 

Preparar la solución

Lo primero será instalar las herramientas necesarias en nuestro entorno:

  • Node: Viene integrado con Visual Studio 2015 si lo hemos seleccionado durante la instalación, en caso contrario podéis descargar el instalador desde este enlace
  • Gulp: También viene integrado si lo hemos seleccionado, en caso contrario:
    • npm install gulp -g
    • npm install gulp-sass –g

La opción –g indica que se instale globalmente para poder usar los paquetes desde cualquier lugar.


  • Cread un fichero package.json en la raíz del proyecto y añadid las siguientes líneas.
{
    "name": "Project Name",
    "version": "1.0.0",
    "description": "Project Description",
    "devDependencies": {
        "gulp": "3.8.11",
        "gulp-sass": "1.3.2"
    }
}

 

Si estáis usando la plantilla de Sitio Web de ASP.NET 5 (vNext) ya tendréis ese archivo.

No olvidéis comprobar que la versión de los paquetes Gulp se corresponde con la que tenéis instalada.

 

Creando las tareas Gulp

Una vez tenemos el entorno preparado, ya podemos comenzar a ejecutar tareas de Gulp. Para ello, creamos el fichero gulpfile.js con el siguiente código

var gulp = require('gulp');
var sass = require('gulp-sass');
gulp.task('sass-compiler, function () {
    gulp.src('/css/*.scss')
        .pipe(sass())
        .pipe(gulp.dest('/css/dist'));
});
gulp.task('sass-watcher', function () {
    gulp.watch('./css/*.scss', ['sass-compiler]);
});

 

  • Con esto estamos creando las variables Gulp y Sass necesarias para hacer referencia a las librerías, requeridas.
  • Creamos una tarea Gulp, que llamamos «sass-compiler» en la que especificamos que compile los ficheros sass en la carpeta «css» y que ubique el resultado en la carpeta «css/dist».
  • Por último, tenemos otra tarea Gulp «sass-watcher» que queremos que esté a la espera de cualquier cambio en ficheros «scss» y que cuando se produzca alguno los compile todos. ¿Por qué todos? Pues porque el que estamos modificando puedes ser por ejemplo un fichero con las variables correspondientes a la paleta de colores del sitio web y el resto de ficheros sea dependiente.

     

Ejecutando las tareas

Llegados a este punto, ya estamos en disposición de poder compilar nuestras hojas de estilo hechas con Sass, así que abrimos el explorador de tareas «Task Runner Explorer» que trae Visual Studio y podremos ver un árbol con nuestro fichero gulpfile.js y las tareas que contiene.

Si ejecutamos la tarea «sass-compiler» (doble click o botón derecho -> Run), podremos comprobar cómo se nos crea una carpeta «dist» dentro de «css» y se despliega el fichero «.css» resultante de la compilación en caso de que haya sido exitosa claro está.

Al ejecutar la tarea «sass-watcher», se estará a la espera de que haya un cambio en algún fichero y, automáticamente se ejecutará el código que contiene y que hace una llamada a la tarea «sass-compiler».

 

Automatizando la ejecución de las tareas

Si queremos automatizar el momento del lanzamiento de las tareas, podemos establecer «bindings» con 4 eventos de Visual Studio:

  • Before Build
  • After Build
  • Clean
  • Solution Open

Para ello, con el botón derecho del ratón hacemos click en el nombre de la tarea desde el «Task Runner Explorer» y desplegamos la opción Bindings para seleccionar la que se adapte a nuestras necesidades, como por ejemplo, que se compilen los ficheros Sass antes de la construcción de la solución y que el «watcher» esté activo al abrir la solución. De esta forma, no tendremos que preocuparnos más por lanzar las tareas puesto que será Visual Studio el que se encargue de hacerlo por nosotros cuando ocurran estos eventos.

¿Necesitas más sobre Gulp?

Con Gulp por ejemplo podemos minificar (minimizar) nuestros ficheros Sass, scripts, etc y realizar otras tareas que podrían resultar interesantes que podréis encontrar en su documentación

 

Enjoy coding! 🙂

 

 

Fantasmas del código | jQuery en SharePoint 2013 en modo edición

Llega una nueva entrega de «Fantasmas del código» y, en esta ocasión le toca a SharePoint 2013 y los problemas con jQuery.

Escenario

Cuando tenemos que personalizar un sitio de SharePoint 2013 es muy probable que hagamos uso de jQuery, plugins, etc… y así dotarlo de «vida» y de nuevas funcionalidades que no vienen por defecto y que queremos añadir en nuestros Web Parts, User Controls, Display Templates, Page Layouts,… y, como todo el mundo sabe, la mejor forma realizar llamadas jQuery es usando el alias «$» como por ejemplo cuando queremos que nuestro código se ejecute cuando la página esté lista.

 

$(document).ready(function() {
// código a ejecutar cuando la página esté lista
});

 

$(function() {
// código a ejecutar cuando la página esté lista

  });

Hasta aquí todo perfecto, nada que no hayamos visto y, lo mejor es que nuestro código funcionará correctamente… o no.

Problema

Ahora comienza la pequeña broma de los becarios
que tocan el código de los productos. Si editamos nuestra página, es bastante probable que todo siga funcionando a las mil maravillas hasta que, de repente, editando una página nos damos cuenta que nuestro código ha dejado de funcionar sin previo aviso, con nocturnidad y alevosía y nos quedamos con cara de Carlo Ancelotti (la ceja hasta el cielo). ¡Pero si esto funcionaba perfecto! O más conocido como «En mi casa funcionaba». Y aquí podemos tracear y tracear usando el depurador que más nos guste, comprobaremos que el error se debe a que jQuery no está cargado, pero… el fichero aparece en la pila de carga como OK, es decir, ¡que sí que está cargado! ¿Y por qué me dice que no lo está cuando estamos viendo lo contrario?

Solución

La solución es simple y llanamente cambiar «$» por «jQuery» en nuestro código. Como podéis ver es muy simple y a la vez muy engorrosa si hemos avanzado bastante en el desarrollo, además que para los que estamos acostumbrados a usar jQuery va a ser un poco duro adaptarse.

Explicación

Algún becario
(y no quiero señalar…) tuvo la brillante idea de que SharePoint en algunos de sus scripts haga uso de «$» como alias con lo que si SharePoint necesita hacer uso de la funcionalidad que contiene el fichero assetpicker.js o alguno otro más con ese mismo problema, nuestro «$» queridos developers no se referirá a jQuery porque los scripts estarán en modo «battle» y ninguno nos va a responder como debería.

Desde mi punto de vista, que otro script haga uso de «$» como alias es un error de guardería, básicamente por lo extendido que está esta gran librería de JavaScript y que hace muy probable o casi seguro que cualquier desarrollo que incluya JavaScript tendrá una referencia a jQuery, así que mi postura se acerca mucho a la de «Becarios para aprender y no para producir» por favor.

Global Azure Bootcamp | El mayor evento de Azure a nivel mundial

El pasado 25 de abril tuvimos la oportunidad de disfrutar en Madrid del mayor evento de Microsoft Azure a nivel mundial de la mano de los mejores profesionales en España, además de tener un marcado acento canario 😛 . Dado que es una de las tecnologías que más evolucionan día a día, las novedades se encontraban en prácticamente todas las sesiones que se impartieron y, para mejorar aún más el nivel, algunos ponentes montaron su propio «teatro» convirtiendo la sesión en una reunión de estilo medieval. Grande David Nudelman! También pudimos participar en la lucha contra el cáncer, levantando máquinas en nuestras sucripciones donde desplegábamos un proyecto de cálculo de datos y así poder ayudar a recavar información sobre este enemigo del ser humano y poder combatirlo en el futuro. 

Como viene siendo costumbre no falté a mi cita, esta vez acompañando al maese Adrián Díaz (MVP de SharePoint Server) para hablar sobre casos prácticos de Machine Learning y mostrar una demo en la que convertíamos LinkedIn en un buscador de perfiles de usuario mediante el procesamiento de nuestros contactos con Machine Learning y una Web App que, dependiendo de los valores de entrada nos mostraba los perfiles que buscábamos… atentos recruiters que el buscador que necesitabais ha llegado 😛

La guinda de la tarta la pusimos en el sorteo final que contó con la presencia del ya conocido «Preguntón» y que supuso el cierre del evento entre risas y sorpresas ante algunas de las preguntas 😛

Cómo no, el próximo año más y mejor J

Windows 10 | ¿Error al ejecutar el emulador de Windows Phone?

Failed to load SKU «WP»

Ya hace algunas semanas que Microsoft lanzó públicamente las herramientas de desarrollo para Windows 10 pero aún están en preview y, como toda preview, podemos tener bastantes problemas a la hora de ejecutar acciones comunes. Entre ellas, uno de los problemas más comunes es que al intentar desplegar nuestra aplicación en un emulador de Windows 10 Mobile, nos aparezca un popup de error en Visual Studio con el mensaje «Failed to load SKU «WP»: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information» como muestro en la imagen más abajo.

¿A qué se debe este error?

Parece que hay algún conflicto con el emulador de Android que se instala con «Apache Cordova Tools» y que responde a la denominación «Microsoft Visual Studio Emulator for Android». Este conflicto se debe a una incompatibilidad entre las versiones de XDE que se instala con «Windows 10 Technical Preview Tools«.

Solución

La solución es ir al panel de control à Programas y características y desinstalar «Microsoft Visual Studio Emulator for Android». Sé que esto no es muy bonito que digamos, pero de momento es lo poco que podemos hacer.

 

Unable to start the the emulator – ¿Problemas con Hyper-V?

Otro error que incluso a mí me ha sucedido después de resolver el problema es que Visual Studio me indique que Hyper-V está desactivado.

Solución

Comprobar que tenemos se nos ha desactivado en la BIOS Nuevamente hay que ir al panel de control à Programas y características y aquí ir a «Activar/Desactivar características de Windows». Es posible que aparezca activado Hyper-V pero, aún así, parece que el sistema no esté bien configurado, así que desactivamos si lo está (reiniciar) y volvemos a activar (reiniciar de nuevo).

Tras activar y reiniciar, iniciad Visual Studio en modo administrador para que pueda generar la máquina virtual correspondiente al emulador y ya podremos desplegar nuestra aplicación en el emulador de Windows Phone. 

 

Espero que estas soluciones os ayuden a poder crear aplicaciones para Windows 10 y que disfrutéis de la experiencia.

 

Enjoy coding! J

Evento TenerifeDev | Azure Mobile Engagement

Esta tarde tendremos un nuevo evento en TenerifeDev y, sorpresa, el ponente será un asistente a otras sesiones que hemos realizado que quiere contarnos su caso de éxito y nosotros queremos que lo cuente porque nos parece muy muy interesante lo que tiene que mostrarnos.

No os perdáis hoy a las 17.00 en el salón de grados de la ETSII a Andreas Wendl.

Más información y confirmación de asistencia en el Meetup de TenerifeDev

 

Azure Mobile Engagement

Lugar: Salón de grados de la ETSII (ULL)

Hora: 17.00 – 19.00

Ponentes: Andreas Wendl

Descripción: Después de haber publicado varias aplicaciones en la Tienda de Microsoft con más o menos éxito, en esta sesión Andreas quiere compartir sus experiencias en el desarrollo de apps para Windows Phone, desde la adaptación del uso de GPS a controles de Telerik, hasta el uso de Azure Mobile Engagement en el último proyecto, pasando por captura de pantalla en vídeo en tiempo real. No se quedarán fuera las herramientas de monitorización utilizadas ni el aspecto de monetización de las Apps.

Windows 10 | ¿Han dejado de funcionar tus Apps?

Todos sabemos que Windows 10 está en Preview y que esto conlleva que las releases que se han publicado contengan N bugs, algunos más molestos o importantes que otros. El problema se agrava si se activa la opción de «Fast Updates» que permitirá que se nuestro sistema reciba actualizaciones mucho más a menudo pero también menos probadas.

Uno de los errores detectados y de fácil solución es que las Apps dejen de funcionar, como por ejemplo Spartan, la App de Fotos, la App de la Store,…

Para solucionarlo, tan sólo tienes que abrir Windows PowerShell
con permisos de Administrador
y ejecutar la siguiente instrucción. (visto en Microsoft Answers)

Get-AppXPackage -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register «$($_.InstallLocation)AppXManifest.xml»}

 

Espero que os ayude

Enjoy coding! J

SharePoint 2013 | Obtener imagen del usuario actual con JavaScript

poster

Escenario

Uno de los fuertes de SharePoint en ambientes de intranet son los perfiles de usuario que permiten no sólo mostrar información importante de un usuario, sino también obtener datos adicionales como por ejemplo el estado en Lync. Es por ello que cuando realizamos desarrollos para SharePoint, a menudo nos encontramos con que podemos o debemos añadir información del usuario conectado en alguna zona de la página.

Para exponer el caso, el escenario consiste en poner la foto del perfil del usuario al lado de su nombre en la ribbon.

Solución 1

Una de las soluciones que he encontrado es usar una URL directa a la imagen del usuario y que nos valdría para obtener la de cualquier otro usuario

http://SERVIDOR/_layouts/15/userphoto.aspx?size=M&accountname=ACCOUNTNAME

Esta URL nos permite, entre otras cosas obtener la imagen en función del tamaño (S, M, L)

 

table

userpicture-size-l userpicture-size-muserpicture-size-s

 

Además, si no pasamos el parámetro “AccountName”, obtendremos la imagen por defecto.

 userpicture-default

Solución 2

Otra posible solución es realizar una llamada a la Api REST para obtener del usuario actual y asignar la URL a una imagen del DOM tal y como muestro en el siguiente código.

function setUserPicture() {

    var urlDefaultPicture = "/_layouts/15/userphoto.aspx?size=M";

 

    $.ajax({

        url: '/_api/SP.UserProfiles.PeopleManager/GetMyProperties/PictureUrl',

        headers: { "Accept": "application/json; odata=verbose" },

        dataType: 'json'

    }).done(function (data) {

        if (data.d.PictureUrl)

            $('img.user-picture').attr('src', data.d.PictureUrl);

        else

            $('img.user-picture').attr('src', urlDefaultPicture);

        console.log('done');

    }).fail(function (jqXHR, textStatus, errorThrown) {

        console.log('fail');

    });

    

}

 

Como se puede ver en el código, he hecho un mix con la primera solución, de forma que si la solicitud a la Api REST no nos devuelve el valor deseado, mostraremos la imagen por defecto; en otro caso, asignaremos la ruta de la foto del perfil del usuario a un elemento del DOM que en mi código identifico como un <img> que tiene una clase “user-picture”.

 

Hay otras posibles soluciones como por ejemplo hacer uso de SP.Web.get_currentUser() como se explica en una parte de este artículo de la MSDN y a partir de ahí elaborarnos un código mediante llamadas a la Api REST que nos devuelvan la imagen, pero el camino me parece un poco más largo además de que hay quer realizar la instancia del Contexto y el objeto SPWeb.

 

Hasta aquí este nuevo artículo que espero que os sea útil.

Enjoy coding! 🙂

WPSUG | Por qué no has terminado cuando has terminado

poster En WPSUG volvemos a preparar un nuevo hangout para mostraros cosas interesantes a la hora de crear vuestras aplicationes para la plataforma Windows. En esta ocasión, contaremos con la presencia de Vanessa Estorach de e-growing, experta en ASO y “Mobile Sensei” (Esto suena muy molón) para hablaros sobre “App Store Optimization” y que consigáis que vuestras aplicaciones alcancen un nuevo nivel. Además, como siempre andaremos por allí Rafa Serna, Javier Suarez, Josué Yeray y yo mismamente.

Este hangout va a estar centrado en el trabajo que viene cuando hemos terminado de desarrollar nuestra app. Promoción en las store, optimización de los resultados… como hacerla destacar y obtener de ella el mayor beneficio posible.

Datos del evento

EL evento tendrá lugar el Jueves 26 de Marzo, a las 19:00 hora peninsular de España (GMT+1):

Además, para los que llevéis vuestra agenda al día, el gran Yeray nos ha creado una cita de calendario que podéis descargar aquí

Enjoy y recordad que podéis acceder a la página de la comunidad para consultar/proponer/compartir lo que queráis!

 

 

Microsoft Web & Cloud Tour 2015 pasa por Tenerife

cloud-and-web-tour

Microsoft va a realizar un tour por diversas ciudades para contarnos a todos las novedades y cómo sacar buen provecho de Microsoft Azure y las herramientas y tecnologías de desarrollo web actuales. Para nuestra fortuna en Tenerife, han decidido hacernos una visita y, junto a TenerifeDev estará uno de los miembros del equipo de DX (Alejandro Campos Magencio) en una jornada de manañana y tarde en la que podremos compartir conocimientos e impresiones.

La jornada será GRATUITA y habrá comida y regalos para todos y por ello será importante que os registréis para que no falte nada 🙂

Registro

Registro para sesiones Cloud

Registro para sesiones Web

Más información aquí

¡¡No lo dejes pasar y regístrate ya!!

Información

Lugar: Aula magna de la facultad de Física

Día: 25 de marzo

Hora de inicio: 09:00

Hora de fin: 19:30

Programa:

Horario

Sesión Cloud

Ponente

09.00 – 09.30 Registro TenerifeDev
09:30 – 10:30 Introducción a Microsoft Azure David Rodríguez – MVP Microsoft Azure
10:30 – 11:30 Soluciones PaaS con servicios en el Cloud y Azure WebSites Alberto Díaz – MVP SharePoint Server
11:30 – 12:00 Descanso
12:00 – 13:00 Datos, SQL Azure y Azure Storage César Abreu – Microsoft Azure Customer Advisor
13:00 – 14:00 Gestión masiva de datos en la era IoT Alberto Díaz – MVP SharePoint Server

Horario

Sesión Web

Ponente

15:00 – 16:00 Introducción a ASP.NET y Visual Studio Web Tooling Santiago Porras – MVP Windows Platform Development
David Rodríguez – MVP Microsoft Azure
16:00 – 17:00 Construyendo aplicaciones web con ASP.NET MVC Alejandro Campos Magencio – Microsoft DX
17:00 – 17:30 Descanso  
17:30 – 18:30 Creación de API REST con WebAPI Santiago Porras – MVP Windows Platform Development
18:30 – 19:30 Aplicaciones en tiempo real con SignalR Alejandro Campos Magencio – Microsoft DX

DotNetConference 2015 : Tips & Tricks de diseño de Apps móviles

Los pasados 27 y 28 de febrero, fueron los días elegidos para celebrar en la Universidad de Alcalá de Henares la “DotNetConference Spain” el mayor evento sobre .NET en España, organizado por el equipo de DX de Microsoft Ibérica. El evento contó con varios tracks en paralelo y grandes ponentes en cada uno de ellos.

Yo tuve la suerte de poder compartir el evento como speaker en una sesión sobre diseño de aplicaciones móviles que llamé “Tips&Tricks en diseño de aplicaciones móviles” y en el que os conté, no sin algún contratiempo, cómo realizar algunos trucos para dar otro aire a vuestras aplicaciones.

Aquí os comparto la presentación

Enjoy coding! 🙂