Una sinfonía en C#

Un pequeño aporte a la comunidad de habla hispana.

Delivery continuo en Azure

Una de las grande características de Azure son las Web Apps, básicamente es la posibilidad de tener un sitio web sin más, desplegar una app ASP.NET (de cualquier tipo) e incluso de otras plataformas como PHP, Tomcat, Node, etc.  y listo, sin configurar IIS, ni nada.

Primero, la forma tradicional

image

Presionamos el signo + abajo a la izquierda, seleccionamos algunas cosas y listo

image

La aplicación ya está creada y corriendo pero no tiene código

image

Subiendo nuestra aplicación como sitio web

La forma más simple es utilizar Visual Studio, una vez creada la aplicación web, en este caso MVC

image

Entre las opciones aparece Azure.

image

Ingresamos nuestras credenciales de Azure

image

Y elegimos la app creada (podríamos haberlo hecho desde Visual Studio también)

Y publicamos.

image

Delivery continuo

Vamos al tema que nos interesa existe otra forma de publicar aplicaciones en Azure sin intervención directa de nuestra parte y es vinculando un origen de código con Azure.

Primero tenemos que indicar el origen del código , por el momento estos son los posibles orígenes del código que vamos a publicar:

  • Github
  • Bitbucket
  • Codeplex
  • Dropbox
  • Visual Studio online
  • Repositorio externo

En nuestro caso vamos a usar Github

Inidicando el origen del código

Buscamos la opción “setup deployment from source control” en el Dashboard de nuestra Web app

 

image

Y elegimos Github

image

Ponemos las credenciales y autorizamos a Azure a leer nuestro repositorio. Vemos que podemos seleccionar el branch con lo cual podemos tener el repositorio organizado para tener un branch de desarrollo otro de demo, otro de RC y controlar qué se despliega automáticamente.

image

Listo, en la solapa “DEPLOYMENTS” vamos a ver cada vez que se publica el sitio, por ahora no hay nada.

image

Haciendo el primer delivery automático

Simplemente tenemos que hacer “push” en el repositorio, Azure va a buscar si existe un archivo .sln o cualquiera que conozca, vamos a clonar el repositorio localmente y a colocar nuestro código ahí, después hacemos un cambio

image

hacemos “commit” y luego “push” y vemos que Azure nos indica que se está ejecutando un deploy

image

Y si todo va bien vemos el resultado

image

Vamos a nuestro sitio y tenemos el cambio desplegado

image

Mágico, a partir de ahora cada vez que hagamos “push” se va a deplegar y ahí tenemos nuestro delivery continuo funcionando en 5 minutos gracias a Azure.

Nos leemos.

Novedades de C# 6: Inicializadores de diccionarios

Esta es simple pero muy práctica, en el pasado para inicializar los valores de un diccionario teníemos que hacer esto:

var capitales = new Dictionary()
{
    { "Argentina", "Buenos Aires" },
    { "Francia", "París" },
    { "España", "Madrid" }
};

Ahora podemos hacer así:

var capitales = new Dictionary()
{
    ["Argentina"] = "Buenos Aires",
    ["Francia"] = "París",
    ["España"] = "Madrid"
};

Podemos señalar como ventaha que es más claro cuál es el nombre y cuál el valor.

Nos leemos.

Novedades de C# 6: Interpolated String

Vamos con otra de las novedades de C# 6, en este caso aquellos que hayan usado Ruby lo conocen bien, básicamente es la posibilidad de declarar un string y que el compilador detecte (por contexto) las variables y sus propiedades para reemplazar dentro del string, por ejemplo.

Cómo se hacía antes?

Antes hacíamos esto:

var leonardo = new Usuario { Apellido = "Micheloni", Nombre = "Leonardo", ID = 123 };

Console.WriteLine("Hola mi nombre es {0}, {1}, y mi ID es {2}", leonardo.Nombre, leonardo.Apellido, leonardo.ID);

Básicamente queremos mostrar el contenido de la variable “leonardo” y usarmos el clásico string.format, bien, eso tiene varios problemas:

  • Es engorroso
  • Es propenso a errroes
  • No es claro
  • Etc.

Con String Interpolation podemos hacer esto:

var leonardo = new Usuario { Apellido = "Micheloni", Nombre = "Leonardo", ID = 123 };

Console.WriteLine($"Hola mi nombre es {leonardo.Nombre}, {leonardo.Apellido}, y mi ID es {leonardo.ID}");

Lo interesante es que el compilador detecta las variables y sus propiedades por contexto (como yo usé esa variable podría haber usado parámetros del método o cualquier cosa en el contexto), además de esto tenemos intellisense

image

Más allá de simples strings

Podemos hacer mucho más que referenciar variables en nuestro scope, por ejemplo:

Console.WriteLine($"El promedio entre 1 y 3 es {new[] { 1, 3 }.Average()}");

Les dejo la referencia completa a esta capacidad de MSDN.

Nos leemos.

Links útiles para desarrollar en Windows 10

Les comparto un conjunto de links a recursos para desarrollar en Windows 10

image

Las herramientas

Desde acá se pueden descargar las herramientas de desarrollo incluídas las versiones gratuítas

Qué hay de nuevo?

En éste link encontramos qué podemos hacer con Windows 10, Universal app, Juegos.

Empezar a desarrollar

Éste link tiene recursos para empezar, qué usar, qué se puede hacer y más.

Diseñar Universal App

Si queremos aprender sobre lineamientos para que nuestra aplicación se vea bien en todas las plataformas éste es el link.

Cómo hago para?

Un listado de artículos y referencias para aprender a usar la API de Universal Apps.

Y cómo publico las aplicaciones?

Una vez que tengamos nuestra app lista para público podemos aprender a publicar desde este link.

Y los IT pro?

También hay recursos para la gente de IT en éste link.

Videos, Channel 9

El recurso principal si nos interesan los webcast y video tutoriales sobre todo lo relacionado con Windows muy recomendable.

Nos leemos.

Novedades de C#6: inicializar propiedaes

Esta versión de C# tiene muchas nuevas características muy interesantes, acá va la primera.

Ejemplo

Ahora podemos asignar un valor a una propiedad sin necesidad de declarar el backing field, o sea, en lugar de hacer esto:

private string name = "pedro";
public string Name
{
    get
    {
        return name;
    }
    set
    {
        name = value;
    }
}

Ahora podemos hacer esto

public string Name { get; set; } = "pedro";

Nos leemos.