jueves, 28 de enero de 2016

Asp.net Web Api en Mac - VsCode - DNX - net Core

Hace unas semanas estuve probando a ver si se ya podía crear una web api con asp.net y Visual Studio Code alias VsCode en un mac y tras un rato de ponerme al día comparto las conclusiones.

¿Qué es VsCode?


IDE open source enfocado aplicaciones web y cloud disponible para Mac, Windows y Linux. Producto de la familia de Visual Studio. Soporta gran variedad de lenguajes, permite depurar javascript, intelisense.. Hay un set de extensiones y plugins considerable y a día de hoy ya es un producto interesante aunque el soporte concreto que yo busco en asp.net core todavía está en fase beta (ha cambiado el nombre de asp.net hace poco días de asp.net 5 a asp.net core).

Puedes desarrollar una web o web api y subirla a Azure con asp.net y net core pero están en modo preview y todavía no soporta depuración de asp.net. Sin embargo ya podrías depurar una aplicación de consola con net core y vscode. No creo que tarden demasiado dado que voy siguiendo las novedades y esto va como un tiro. También puedes hacer correr la web en local con kestrel. Si quieres montar el proyecto asp.net en Visual Studio Code y la instalación de Yeoman da problemas prueba a lanzar el comando con privilegios.
sudo npm install -g yo --allow-root
A raíz de esta incursión comparto algunas lecturas que me han ayudado a aclarar algunos conceptos y dudas sobre el futuro que nos depara a los desarrolladores que usamos frameworks de Microsoft.

¿Que es net core?


Es una versión “ligera”, basada en el .net framework de tipo open source promocionado por Microsoft.

¿Está net core basado en mono?


No, mono es una implementación también basada en .net framework, también open source pero promocionado por Xamarin. Por decirlo de algun modo vendrían a ser competencia (sana y colaborativa…)

¿Entonces para desarrollar proyectos c# en un mac con visual studio code tengo que usar Net Core?


No, también podrías usar mono con Visual Studio Code para desarrollar un proyecto C# en un mac o linux.

¿asp.net pasa a ser cross platform?


Sí, Microsoft abre net core y asp.net core como proyectos open source pero mantiene el framework nativo .net (el de toda la vida). Un proyecto asp.net core soporta o soportará ambos (y también mono). No tengo claro si .net core se alineará con el framework nativo, es decir, si podrás usar todas las clases y utilidades que dispones en nativo en multiplataforma o dependiendo del dispositivo donde corra no podrás usar según qué características (a día de hoy en mutiplataforma encontrarás limitaciones respecto a nativo). Entiendo que hay partes del .net framework que no se pasarán a core aunque no lo sé seguro. De echo tengo que confesar que este articulo lo escribí hace tres semanas y desde entonces han cambiado el nombre del producto asp.net 5 asp.net core así que hay que ver como evoluciona, lo mejor es seguir el github del proyecto.

¿Cómo es posible que un proyecto asp.net core pueda correr en nativo .net y en core (cross platform)?


Aquí entra en juego DNX. Resumiendo mucho, DNX es el nuevo entorno de ejecución de .net. El futuro enfoque del .net framework (tanto net core como “el clásico”) es que sea modular. En un fichero Project.json especificaremos los frameworks sobre los que puede correr la aplicación (dnxcore50, dnx451, …), las librerías que usamos de cada plataforma y sus dependencias. DNX tiene mecanismos para restaurar los paquetes vía nuget, gestionar sus dependencias y hacer la build del proyecto. (Dnu restore, dnx web..). Con esto se podrán hacer aplicaciones portables ya que DNX contiene el CLR. También resumiendo mucho, no será necesario instalar el framework en la máquina.

En estas páginas puedes encontrar más información sobre DNX, DNX Core…
Asp.net - choosing the right dot net
Asp.net - dnx overview
Simple Talk: What is DNX

¿Dónde podría obtener más info sobre la evolución de core y asp.net?


Puedes seguir el GitHub oficial de net core y asp.net.

¿Hay alguna página oficial donde se resuma todo de forma clara en una especie de tabla donde digan que características soportará cada framework, y sobre que plataformas puede correr?


No la he encontrado, posiblemente esté al caer. De momento si te has quedado con más ganas de leer te recomiendo echar un ojo a estos posts:

Oren Codes: Pcls net core dnx and uwp
Oren Codes: Desmitifying pcls net core dnx and uwp redux
Oren Codes: Targeting net core

Si aún tienes más ganas de leer, en msdn encontrarás información sobre uwp el cual no he mencionado en el post y ya es una realidad en Windows 10.

Hasta aquí el artículo de hoy, más y mejor en breve en areaTIC. Recuerda que puedes seguirnos en las redes sociales y participar en la medida que te apetezca (comentarios, propuesta de post, contenido..., etc). Que vaya bien!

martes, 5 de enero de 2016

iOS Journey, breve introducción a Swift

Hasta ahora en areaTIC hemos tocado muchos “palos”, desde consejos SEO, bases de datos, javascript, post relacionados con tecnologías Microsoft, algo de app’s crossplatfform con Phonegap, etc. Hace unos días que me he metido en desarrollo para IOS nativo, un tema que hasta ahora no habíamos tratado. El lenguaje de programación que sigue predominando es Objective-C, pero desde IOS 7 aparece Swift y apple lo está impulsando. En mi caso domino lenguajes de programación como C#, javascript, java y me cuesta acostumbrarme a la sintaxi de Objective-C sin embargo con Swift la cosa cambia.

Comentar que he quedado gratamente sorprendido con el desarrollo en IOS en general. A día de hoy se podría decir que no hay demasiada diferencia a nivel conceptual en como desarrollarías una aplicación para otras plataformas, verás que se tiende a usar el pattern MVC que es ampliamente conocido por la mayoría de desarrolladores.

Esta es una serie de artículos que hago para consolidar lo que he ido practicando estos días, que opino puede ser interesante y evitar algunas horas a aquellos que quieren iniciarse a desarrollar en esta plataforma. Iremos viendo lo típico… como es el lenguaje, como moverse por XCode, como trabajar con la UI, como navegar entre pantallas, como enlazar los controladores, como acceder a una api remota, algo de controles específicos que me llamen la atención de UI…

Introducción a Swift

Swift es un lenguaje de programación creado por apple que puede combinarse en un mismo proyecto con Objective-C. Hace pocos días apple ha anunciado que Swift pasa a ser open source. A continuación veremos muy por encima como realizar lo básico con Swift para hacernos una ligera idea de la sintaxi.

Constantes, Variables, Tipos

let constante:String = “A”
var variable:String = “B”
Usa constantes cuando no vayas a modificar el valor.

Funciones y Closures

Esta es la pinta que tienen las funciones.
func nombreFuncion()->Void{
      //haz algo…
}
func diHola(nombrePersona: String)-> String{
          return “Hola” + nombrePersona
}
Los closures vendrían a ser el simil de las expresiones lampdba en C#. Más info en apple developer

Protocol

Protocol vendría a ser una mezcla de lo que llamamos interface y clase abstracta en otros lenguajes de programación. Es importante dominarlo si quieres hacer un código decente.
protocol IBookingService{
   func Book()
}

class MyBookingService:IBookingService{

}
Este código no compila, recibiremos el siguiente mensaje: 'MyBookingService' does not conform to protocol 'IBookingService'. Para que compile necesitaríamos implementar la función Book() en MyBookingService. A diferencia de las interfaces en java o .net, los protocols permiten definir propiedades que están obligadas a implementar las clases que implementan el protocol. Otra diferencia es que los protocols no son instanciables en Swift.

Herencia, Polimorfismo y Casteos

Al igual que en otros lenguajes de programación puedes implementar herencias y poliformismo. Ahí un va un ejemplo:
class Vehiculo{
//…
 var color:String
 init(color: String){
   self.color = color
 }
}
    
class Coche{
 var diametroVolante:Int
 init(color: String, diametroVolante:Int){
     super.init(color)
     self. diametroVolante = diametroVolante
 }
}

class Moto{
 var medidaManillar:Int
 init(color: String, medidaManillar:Int){
     super.init(color)
     self.medidaManillar = medidaManillar
 }
}

var vehiculos [Vehiculo] = [Coche("Rojo",50),Coche("Azul",60),Moto("Verde",80)]
var coche = vehiculos[0] as Coche
print(coche.medidaManillar)
print(vehiculos[0].color)

Singleton

También puedes aplicar patterns populares, hay varios modos de crear un singleton, este valdría por ejemplo:
class SomeManager {
    static let sharedInstance = SomeManager()
}

//uso
SomeManager.sharedInstance
Bueno, creo que con este post os podéis hacer una ligera idea de la sintaxi de Swift y ya veis que tampoco es Klingon jajaja más o menos se entiende de un vistazo. Si dispones de un Mac con Xcode puedes abrir un proyecto de tipo PlayGround y como ya indica su nombre jugar un poco. Si no dispones de mac o quieres hacer alguna prueba rápida desde Windows podrías jugar online en este site.

El siguiente post empezaremos a ver como usar Swift en un Xcode para un proyecto IOS 9. Hasta la próxima, recordad que podéis seguir areaTIC en las redes sociales, no os cortéis a opinar!