Syntax Highlighter

sábado, 12 de agosto de 2017

DNN Application Insights v3.0

Hi all. After a while working with React/Redux and the new DNN PersonaBar model introduced on DNN Platform 9.0, I have started to update all my modules to avoid the use of the disappeared Host menu on DNN.

The first module updated has been the DNN Application Insights now available for download on GitHub. This includes:

  • Previous package updates to support version 2.4.0 of Application Insights, including enhanced live metrics streaming (committed by Mitchel Sellers)
  • New UI on the persona bar to setup the module settings
  • Requiring DNN Platform 9.0.1 or later

AppInsights_InstrumentationKey3

If you have any interesting idea to add on the settings area, please let me know. I have been checking all the configuration settings that can be done through the Application Insights configuration system and I will start adding them for the next release.

Updates for the Redis Caching Provider and Azure AD provider are the next ones.

martes, 1 de agosto de 2017

Providing a GUID function in Azure Resource Manager templates with Azure Functions

arm-functionsSome time back while preparing the Global Azure Bootcamp Science Lab, I face the lack of some functions that are not available when authoring Azure Resource Manager templates. When creating some type of resources such as Batch jobs or RBAC related resources, you need to pass a GUID (Universally unique identifier) but there is no function to create them inside the template, so you need to pass them as template parameters making the result awful.

There is already a Feedback item describing the issue (please vote on https://feedback.azure.com/forums/281804-azure-resource-manager/suggestions/13067952-provide-guid-function-in-azure-resource-manager-te) and there are other similar issues when you need to use more sophisticated functions such as date related values.

When trying to provide a workaround, I finally found that could be solved with nested templates, so I started by building a simple ARM Guid template that could be referenced on your primary one. You can check that repo here https://github.com/davidjrh/azurerm-newguid

But when testing the GAB lab with millions of guids, found that from time to time that template was generating duplicated guids, so finally ended by implementing the lab ARM Guid templates by using a WebAPI. You can check the how the guid template was being used at https://github.com/intelequia/GAB2017ScienceLab/blob/master/lab/assets/GABClient.json#L100 (check lines 100 and 398), and the template API implementation available at https://github.com/intelequia/GAB2017ScienceLab/blob/master/src/GABBatchServer/src/GAB.BatchServer.API/Controllers/TemplatesController.cs

Building a GUID function for ARM templates with Azure Functions

Revisiting this today, I thought that could be more cost effective of having that dynamically generated template by using an Azure Function. Here is the step by step so you can deploy your own, and increase your ARM functions arsenal with the same approach.

Remember that the basic idea is to reference this function in your deployment, that will generate a GUID for later usage on your template.

  1. Create an Azure Function App through the Azure Portal.
  2. Add a function triggered by a HTTP request in C#
  3. Copy and paste the following code in the function body

using System.Net;
using System.Net.Http.Headers;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
     log.Info("C# HTTP trigger function processed a request.");

    // parse query parameter
     string numberOfGuids = req.GetQueryNameValuePairs()
         .FirstOrDefault(q => string.Compare(q.Key, "numberOfGuids", true) == 0)
         .Value;
     if (string.IsNullOrEmpty(numberOfGuids)) {
         numberOfGuids = "1";
     }

    // validate the input
     int guids;
     if (!int.TryParse(numberOfGuids, out guids)) {
         return req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a valid number on the query parameter 'numberOfGuids'");
     }
     if (guids <= 0 || guids > 1000) {
         return req.CreateResponse(HttpStatusCode.BadRequest, $"Invalid number of guids {guids}. Must be a number between 1 and 1000");
     }


     // prepare the template
     var template = @"{
   ""$schema"": ""
https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#"",
   ""contentVersion"": ""1.0.0.0"", ""parameters"": {}, ""variables"": {}, ""resources"": [],
   ""outputs"": {[OUTPUTS]}
}";
     var outputs = await Task.Run<List<string>>(() =>
     {
         var o = new List<string>();
         for (var i = 0; i < guids; i++)
         {
             o.Add(@"""guid" + i + @""": { ""type"": ""string"", ""value"": """ + Guid.NewGuid() + @""" }");
         }
         return o;
     });
     var result = template.Replace("[OUTPUTS]", string.Join(",", outputs.ToArray()));

// return the response
return new HttpResponseMessage() {
     Content = new System.Net.Http.StringContent(
         result,
         System.Text.Encoding.UTF8,
         "application/json"
     )
};


}

AzurePortalFunction


Testing the function

Once you have saved the function, you can test it by doing a webrequest. In my case, when I call the URL https://armtemplates.azurewebsites.net/api/NewGuid?numberOfGuids=3 I get this answer:

NewGuidWebYou can pass the number of guids to generate as parameter.

Consuming the GUID template by using a nested template

As I documented on the initial GitHub repo, you can just follow these examples to consume then in different ways:

Example 1. Getting a GUID and using it later

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "variables": {},
  "resources": [ 
    { 
        "apiVersion": "2015-01-01", 
        "name": "MyGuid", 
        "type": "Microsoft.Resources/deployments", 
        "properties": { 
          "mode": "incremental", 
          "templateLink": {
            "uri": "https://armtemplates.azurewebsites.net/api/NewGuid",
            "contentVersion": "1.0.0.0"
          }
        } 
    } 
  ],
  "outputs": {
    "result": {
      "type": "string",
      "value": "[reference('MyGuid').outputs.guid0.value]"
    }
  }
}


Example 2. Getting 2 guids and using them later

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "variables": {},
  "resources": [ 
    { 
        "apiVersion": "2015-01-01", 
        "name": "MyGuids", 
        "type": "Microsoft.Resources/deployments", 
        "properties": { 
          "mode": "incremental", 
          "templateLink": {
            "uri": https://armtemplates.azurewebsites.net/api/NewGuid?numberOfGuids=2,
            "contentVersion": "1.0.0.0"
          }
        } 
    }  
  ],
  "outputs": {
    "result0": {
      "type": "string",
      "value": "[reference('MyGuids').outputs.guid0.value]"
    },
    "result1": {
      "type": "string",
      "value": "[reference('MyGuids').outputs.guid1.value]"
    }
  }
}

If you still have any doubt on how to consume the outputs, check the GAB Science Lab template on line 398 https://github.com/intelequia/GAB2017ScienceLab/blob/master/lab/assets/GABClient.json#L398

Hope this helps! Un saludo y happy coding!

martes, 25 de julio de 2017

[Video] Introducción a Application Insights

Se me había pasado de publicar en el blog el vídeo sobre Application Insights que edité el pasado mes de Mayo, pero mejor tarde que nunca Smile

Application Insights es un servicio de Application Performance Management (APM) extensible para desarrolladores web en varias plataformas, que sirve para supervisar aplicaciones web en directo. Se pueden detectar automáticamente anomalías de rendimiento además de proveer de herramientas de análisis que ayudan a diagnosticar incidencias comprendiendo lo que los usuarios están haciendo con la aplicación. En esta sesión veremos una introducción rápida al servicio viendo cómo se implementa y configura el servicio, tanto para aplicaciones web nuevas partiendo desde cero, como sitios web basados en CMS.

sábado, 8 de abril de 2017

Global Azure Bootcamp 2017

2017-logo-800x540Y ya estamos otro año más metidos en el jaleo del mayor evento global sobre Microsoft Azure realizado por y para la comunidad técnica. Como cada año, más de 200 ciudades alrededor del globo reunirán el día 22 de abril a más de 10.000 personas unidas con un solo objetivo: aprender sobre la plataforma cloud de Microsoft mientras pasamos un día inolvidable.

Este evento cada año va a más. Desde que comenzamos a realizarlo en España los números no han parado de crecer. Si bien el año pasado en Madrid pasamos de 400 asistentes (tuvimos que parar por problemas de aforo), este año llenamos el cupo tras tres días de apertura del registro. Lo mejor, que más ciudades se han animado y en esta edición tenemos hasta 4 ciudades españolas con el mismo objetivo. Os dejo los enlaces:

Aunque esta edición será inolvidable. El año pasado lo prometimos, y aquí lo tenemos.

Lab Científico “Made in Spain”

Pano-ORM-perfil-Lactea-DLopez-779x389

Foto: Daniel López – www.elcielodecanarias.com

Como cada año, la mejor parte de este evento es la parte del lab científico. Todos los participantes, con el apoyo de los organizadores de cada sede, donan recursos de computación para colaborar en un proyecto de investigación científica en pro de la humanidad. En años anteriores, se han colaborado en proyectos como la investigación de la diabetes o la búsqueda de la cura del cáncer de mama. Este año el evento global girará en torno a la ejecución colaborativa de un algoritmo desarrollado por un astrofísico español que permitirá estudiar con más precisión la formación estelar de las galaxias.

iac-logo-300x300Desarrollado por el investigador del Instituto de Astrofísica de Canarias (IAC), Sebastián Hidalgo, en el Global Azure Bootcamp se ejecutará “The secret life of Galaxies: Unveiling the true nature of their star formation” (La vida secreta de las galaxias: desvelando la naturaleza de su formación estelar)**, el primer algoritmo español que se utiliza en este evento. Los participantes del evento se conectarán a la plataforma Microsoft Azure desde todas las sedes repartidas a lo largo del planeta para aportar su talento y conocimientos de forma desinteresada al proyecto científico. Con él, se pretende ahondar en los efectos que dificultan la interpretación de las observaciones astronómicas sobre el conocimiento actual de la formación estelar en las galaxias. De esta manera, se espera saber mucho más sobre los procesos de formación de estos sistemas y el impacto que sobre ellos tuvieron determinados fenómenos cosmológicos.

El objetivo del algoritmo desarrollado en el IAC y que va a ser probado en el Science Lab es precisamente limitar el impacto de todos estos efectos para poder comparar la predicción de los modelos con las observaciones de forma más directa. Es un proceso que requiere de un número muy elevado de pruebas y que sólo puede ser realizado en un entorno de computación distribuida”, explica Sebastián Hidalgo. Al término del evento, se recopilarán los datos conseguidos con el algoritmo para extraer la información y proceder a su tratamiento.

Más información en:

Arquitectura del lab científico en Azure

Y aquí no solo queda la cosa. Durante estos últimos tres meses he tenido el placer, junto con Adonai Suárez (@adonaisg), Martin Abbot y el mismo Sebastián, la oportunidad de diseñar y adaptar el algoritmo de Sebastián para hacer posible su ejecución en un evento como el Global Azure Bootcamp.

LabDiagram

Figura 1. Arquitectura del Global Azure Bootcamp 2017 Science Lab

Tal y como se ha realizado anteriormente, la idea parte de que cada asistente pueda desplegar su propia instancia del lab para colaborar en la investigación ejecutando el algoritmo aportando recursos propios, a la vez que aprende a usar la tecnología usada en la implementación del mismo.

En la figura 1 podemos ver rápidamente las partes de las que constará el Science Lab. Cada asistente desplegará de forma automatizada a través de plantillas de Azure Resource Manager los recursos siguientes:

  • Cuenta de Azure Automation: contendrá, además de algunos módulos específicos para la implementación del lab, un runbook que será el encargado de “alimentar” el algoritmo con ficheros a procesar. Estos ficheros son servidos por un API implementada para el evento y distribuida globalmente, y que será la encargada de controlar el estado de procesamiento de cada fichero y recibir los resultados;
  • Cuenta de Azure Batch: que contendrá el pool de máquinas que se encargarán de la ejecución del algoritmo, desarrollado en Python3. Una característica interesante es que la implementación se ha realizado con nodos Ubuntu. Ya veremos cuántos pingüinos desplegamos el 22 de Abril.

Después de realizar cada prueba, se envían los resultados a los servidores centrales, que serán los encargados de procesar y almacenar la prueba resultante así como notificar mediante EventHubs a otro site donde podrán observarse el estado global de procesamiento, rankings, etc. 

Ahora mismo estamos probando que todo vaya bien, realizando pruebas de carga, etc. Como datos interesantes:

  • Hemos hecho una estimación de cores que se desplegarían según la experiencia de años anteriores (entre 25K y 30K cores)
  • Se han preparado más de 17 millones de ficheros de entrada, más que suficientes para cubrir la capacidad de cómputo a desplegar
  • Cada fichero contiene unas 80 ejecuciones del algoritmo, lo que resultaría en 1280 millones de ejecuciones
  • Si tuviéramos un solo ordenador con un core, para procesar estos ficheros tardaría 235 años en finalizar la operación. La idea es hacerlo en un sólo día.

GABTeam3

De derecha a izquierda, Adonai Suárez, Sebastián Hidalgo y yo mismo, un día en el Instituto Astrofísico de Canarias mientras trabajábamos en el lab científico

Agenda

La agenda de Madrid estará compuesta por 3 tracks en paralelo con unas sesiones muy variadas y con mucho nivel. La selección fue muy difícil entre todas las propuestas, tanto que finalmente estamos preparando un cuarto track virtual para que las sesiones que no cupieron en la agenda sí lo hagan estrenándose en Channel 9 el mismo día del evento.

Cómo no, durante la apertura del evento tendremos al mismísimo Sebastián Hidalgo para que nos explique en vivo y en directo su algoritmo, algo que nos dejará a todos fuera de órbita Smile. Durante la mañana también estaré personalmente junto a Adonai Suarez y Sebastián en la sesión que muestra cómo se ha realizado la implementación sobre Azure del Global Azure Bootcamp en la sesión “Descubriendo la Historia del Universo con Microsoft Azure”, en la que podréis realizar preguntas adicionales sobre la arquitectura del lab.

Agenda2017

Calentando motores…

Así que prácticamente a dos semanas del gran evento, no me queda más que deciros que disfrutéis de la semana de descanso, porque el 22 de Abril ponemos Warp 9 rumbo a las profundidades del Universo. Atentos a las sorpresas…

warpdrive2

Un saludo, ¡y Happy Coding!

sábado, 18 de marzo de 2017

Visual Studio 2017 Launch Event con TenerifeDev

VS2017Launch

El próximo 23 de abril de 2017 a las 17:30 en el Salón de Grados de la ESIT tenemos un nuevo encuentro con TenerifeDev, dentro de los eventos globales que se están realizando sobre las novedades de Visual Studio 2017. Si quieres conocerlas, no te pierdas este evento en el que hablaremos de ellas y las podremos probar.

Contenidos:

• Novedades en Visual Studio 2017

• Desarrollo con Xamarin en VS 2017

• Data Tools

• Debugging, Unit Testing, Live Code Analysis, Intellisense

• Continuos Delivery and Deployment

Contaremos con:

• Santiago Porras, MVP Windows Platform (@saintwukong)

• Eickhel Mendoza, MCSA Cloud Platform (@eickhel)

• César Abreu, MVP Azure (@cesabreu)

• David Rodríguez, MVP Azure (@davidjrh)

Más información y registro en https://www.meetup.com/es-ES/TenerifeDev/events/237759368

miércoles, 18 de enero de 2017

Microsoft Tour, Workshop de Xamarin, Azure Functions y Machine Learning el 30 de Enero

El próximo 30 de enero, dentro de la gira de Microsoft por las universidades de España, vamos a tener el placer de tener varias sesiones relacionadas con bots, Azure, Machine Learning y Xamarin de mano de los cracks del departamento de DX (Developer Experience) de Microsoft.

Para que los tengas todos a mano:

  • 10:00 – 14:00 Microsoft Tour en la Universidad de la Laguna https://www.meetup.com/es-ES/Clubs-NET-Spain/events/235624825/
    ¿Eres un estudiante técnico? ¿Apasionado de la tecnología? ¿Emprendedor nato?
    Microsoft Academic Tour llega a la Universidad de la Laguna gracias al Club .NET para enseñarte las últimas novedades en herramientas cross-platform, que tienes a tu alcance y que están usando la gran parte de empresas y startups.
    ¿Dónde? Salón de Grados de la ESIT
  • 16:00 – 18:00 Workshop Xamarin is coming en ULL https://www.meetup.com/es-ES/Clubs-NET-Spain/events/235927143/
    El día 30 de enero, en el Aula 2.3 de la Escuela Superior de Ingeniería y Tecnología de la Universidad de la Laguna, podrás aprender a crear tu propia aplicación para Windows, Android e iOS en una tarde. Yo que tú, no me lo pensaba dos veces :) ¿Te imaginas poder crear un Whatsapp 2.0? ¿Y un Pokemon Go 2.0? Es más fácil de lo que te imaginas, y te queremos a enseñar cómo.
    ¿Dónde? Aula 2.3 Escuela Superior de Ingeniería y Tecnología
  • 18:00 – 19:30 Azure Functions y Machine Learning con TenerifeDev y Microsoft https://www.meetup.com/es-ES/TenerifeDev/events/236225160/
    Estamos de suerte. Aprovechando que vienen los compis de Microsoft durante estos días en su gira por España, tendremos una sesión especial en TenerifeDev en el que hablaremos de dos temas de actualidad: Azure Functions y Machine Learning.
    ¿Dónde? CIFP César Manrique

¡Chacho, que te lo pierdes!

Related Posts Plugin for WordPress, Blogger...