Que Voy a necesitar para el Workshop ASP.Net Core?

El Sabado 13 de julio estare impartiendo un taller sobre ASP.NET Core en la ciudad de Santiago, estas son las herramientas que van a necesitar para seguir el paso en el taller.

Prerequisitos :

  • Version minima de Visual Estudio 2017.
  • Llevar Laptop.

Como instalar aspnet core?

Si necesitas instalar aspnet core sigue esta guia de como hacerlo –>
https://docs.microsoft.com/es-es/dotnet/core/windows-prerequisites?tabs=netcore2x

Gracias espero verlos en le taller el cual constara de 8 clases.

Keep Coding.

Asistiendo al Global MVP Summit 2019

A finales del a√Īo pasado me inscrib√≠ para asistir al Global MVP Summit 2019. El Global MVP Summit es un evento MVP exclusivo de varios d√≠as que se realiza en Bellevue y en la sede de Microsoft en Redmond, Washington. La Cumbre Mundial de MVP contar√° con un amplio cat√°logo de discusiones t√©cnicas y sesiones de comentarios (que se ofrecen solo en espa√Īol) combinadas con oportunidades de creaci√≥n de redes entre sus compa√Īeros MVP y los grupos de productos de Microsoft.

Un poco sobre el viaje pasado Global MVP Summit 2018

Usualmente recibo un¬†mont√≥n¬†de preguntas de¬†c√≥mo¬†es ser MVP, como es la experiencia, es por esto que¬†he¬†decidido escribir esta entrada en mi blog, el estilo de este escrito¬†ser√°¬†muy informal ya que lo estoy relatando a modo de¬†an√©cdota¬†as√≠¬†que no se sorprendan por el estilo usado¬†aqu√≠.¬†¬†Espero que este sea un recurso √ļtil para aquellas personas que si se atrevieron a preguntarme y para las que de¬†alg√ļn¬†modo¬†¬†sienten curiosidad pero no se animan a preguntar.

El viaje da inicio 3 mar. 2018 recuerdo que mi vuelo partia a las 8 pm desde Santo Domingo hacia New York donde hacia escala para luego tomar otro hacia Seattle.

Pero para mi desgracia por alguna falla en la logistica de la aerolinea mi vuelo se cancelo y fue asi como quede por 5 horas varado en el aeropuerto tratando de conseguir otro vuelo que me llevara a mi destino.

Pero luego de varias horas presionando y la buena disposicion de la aerolinea pude colarme en otro vuelo que salia mas tarde.

Ya en el avion habia gente que estaba igual de cansada que yo, pero como saben un developer no duerme. Finalmente llegue a New York pero como saben si perdi mi vuelo en Santo Domingo eso significa que tambien perdi el de New York hacia Seattle, asi que luego de explicar lo sucedido a la aerolinea y resolver mi abordaje me dispuse a tener un autentico desayuno Norte Americano.

Luego de tener mi desayuno me dispongo a descansar un poco y esperar la hora de abordar pero oh ! sorpresa me toco viajar hasta el final del avion en un vuelo de 6 hrs. de duracion y esta fue mi cara de felicidad.

Finalmente llegue a Seattle una ciudad hermosa eran las 11 pm y mi primera vez en aquel lugar asi que trataba de reconocer otros MVPs en la terminal que se estuvieran dirigiendo al hotel y por suerte encontre un colega de Chile, luego se nos unieron de Taiwan y Filipinas.

Yo me hospede en el Hotel Sheraton, hay mas hoteles pero yo me registre en ese, asi es como lucia desde fuera.

Me dispuse a descansar para disfrutar de los dias cargados de mucho contenido y actividades que me esperaban. A la ma√Īana siguiente me dirigi a mi respectivo edificio donde se estarian corriendo las actividades a mi respectiva categoria, pero no sin antes recargar energias con un buen cafe.

Y tener un desayuno digno de un MVP (chiste)

Y el contenido ?

Pues tengo para contarles que no se es permitido hablar sobre ningun tema tratado en esta actividad pues se violaria un acuerdo de NDA, pero si les puedo contar que es una actividad cargada de alto conocimiento tecnico y se crea una amplia red de contactos que tienen una gran pasion por la tecnologia al igual que tu.

Esta entrada en mi blog se basa √ļnicamente en mi propia experiencia, por lo que puede diferir de otra persona. Tambi√©n estoy activo en Twitter si quieres saludar¬†@yhorbymatias.

ASP.NET resolver URL relativas con Razor || MVC 5

A menudo necesitamos resolver una URL relativa a la URL absoluta correcta cuando usamos plataformas de programación del lado del servidor. Las diferencias entre entornos de desarrollo, prueba y producción a menudo significan que la configuración del servidor web para la aplicación cambia de un entorno a otro.

En ASP.NET tenemos el  práctico método Url.Content () en la clase System.Web.Mvc.UrlHelper el cual nos  permite convertir fácilmente una ruta relativa de raíz virtual ( la que comienza con un carácter de tilde (~)) a una URL absoluta. Esto funciona de maravilla en los proyectos MVC Razor y el motor Razor view hace que sea muy fácil mostrar el método en un href como link.

Ejemplo:

<p> <a href=”@Url.Content(“~/Controller/Action”)”> este link da url relativa </p>

Aplicaciones bonitas con Xamarin Forms | Pt. 1

Aplicaciones bonitas con Xamarin Forms

Hace algunos días un developer me escribió y me contaba que Xamarin forms era asombroso que para el las aplicaciones era algo feas en cuanto a la UI, yo le respondí y le dije que si se puede solo que se necesita un poquito más de esfuerzo. Pues en la play store o en cualquiera de las tiendas se engancha mucho mas rápido al futuro usuario de nuestra app si tiene una interfaz atractiva y amigable.

Que necesito para comenzar ?

1) Visual Studio 2015 Community (gratis  o una version superior ) o Visual Studio for MAC.

Vamos a hablar de interfaces bonitas

 

XFParallax by DevsDNA

Super pero que es XFParallax by DevsDNA, pues XFParallax by DevsDNA busca implementar el muy popular efecto efecto Parallax muy famoso en la plataforma ios.

Pero Yhorby que te digo que quiero hacer apps bonitas en Xamarin Forms, calma colega que se puede implementar en Xamarin forms.

Como lo hago?

Pues puedes encontrar un proyecto de ejemplo en su repositorio de Github aquí. 

Con esta librer√≠a podemos crear el efecto¬†parallax en las tres plataformas : Android, iOS and Windows ‚Äď con ¬†Xamarin Forms

Pasamos a explicar como funciona la librería.

1. Primero debemos crear ¬†el codigo responsable para crear¬†¬†la vista efecto parallax . Creamos un¬†nuevo ‚ÄúContentView‚ÄĚ llamado ‚ÄúParallaxView‚ÄĚ:

<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="DevsDNA.XFParallax.ParallaxView">
  <ContentView.Content>
    <Grid>
      <ContentView x:Name="Header" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" BackgroundColor="Blue"/>
      <ScrollView x:Name="ParentScroll" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
        <ContentView x:Name="Body"/>
      </ScrollView>
    </Grid>
  </ContentView.Content>
</ContentView>

2. EL Code behind para ‚ÄúParallaxView.xaml.cs‚ÄĚ deberia lucir como este :

namespace DevsDNA.XFParallax
{
    using Xamarin.Forms;
 
    public partial class ParallaxView : ContentView
    {
        private double lastScroll = 0;
 
        public static readonly BindableProperty HeaderContentProperty = BindableProperty.Create(nameof(HeaderContent), typeof(ContentView), typeof(ParallaxView), coerceValue: HeaderContentCoerceValue);
        public static readonly BindableProperty HeaderScrollSpeedProperty = BindableProperty.Create(nameof(HeaderScrollSpeed), typeof(int), typeof(ParallaxView), 2);
        public static readonly BindableProperty BodyContentProperty = BindableProperty.Create(nameof(BodyContent), typeof(ContentView), typeof(ParallaxView), coerceValue: BodyContentCoerceValue);
        public static readonly BindableProperty BodyMarginProperty = BindableProperty.Create(nameof(BodyMargin), typeof(Thickness), typeof(ParallaxView), new Thickness(0), coerceValue: BodyMarginCoerceValue);
 
        public ParallaxView()
        {
            InitializeComponent();
            ParentScroll.Scrolled += ParentScroll_Scrolled;
        }
 
        public ContentView HeaderContent
        {
            get { return (ContentView)GetValue(HeaderContentProperty); }
            set { SetValue(HeaderContentProperty, value); }
        }
 
        public int HeaderScrollSpeed
        {
            get { return (int)GetValue(HeaderScrollSpeedProperty); }
            set { SetValue(HeaderScrollSpeedProperty, value); }
        }
 
        public ContentView BodyContent
        {
            get { return (ContentView)GetValue(BodyContentProperty); }
            set { SetValue(BodyContentProperty, value); }
        }
 
        public Thickness BodyMargin
        {
            get { return (Thickness)GetValue(BodyMarginProperty); }
            set { SetValue(BodyMarginProperty, value); }
        }
        /// 
        <summary>
        /// Important to call this method from Page OnDissapearing to remove event handlers and avoid memory leaks.
        /// </summary>
 
        public void DestroyParallaxView()
        {
            ParentScroll.Scrolled -= ParentScroll_Scrolled;
        }
 
        private static object HeaderContentCoerceValue(BindableObject bindableObject, object value)
        {
            if (bindableObject != null && value != null && value is ContentView)
            {
                ParallaxView instance = (ParallaxView)bindableObject;
 
                instance.Header.Content = (ContentView)value;
            }
            return value;
        }
 
        private static object BodyContentCoerceValue(BindableObject bindableObject, object value)
        {
            if (bindableObject != null && value != null && value is ContentView)
            {
                ParallaxView instance = (ParallaxView)bindableObject;
 
                instance.Body.Content = (ContentView)value;
 
                if (instance.BodyMargin != null)
                {
                    instance.Body.Margin = instance.BodyMargin;
                }
            }
            return value;
        }
 
        private static object BodyMarginCoerceValue(BindableObject bindableObject, object value)
        {
            if (bindableObject != null && value != null && value is Thickness)
            {
                ParallaxView instance = (ParallaxView)bindableObject;
 
                if (instance.Body != null)
                {
                    instance.Body.Margin = instance.BodyMargin;
                }
            }
            return value;
        }
 
        private void ParentScroll_Scrolled(object sender, ScrolledEventArgs e)
        {
            if (lastScroll == 0)
                lastScroll = e.ScrollY;
            else
            {
                CalculateHeaderTranslation(e);
            }
        }
 
        private void CalculateHeaderTranslation(ScrolledEventArgs e)
        {
            double translation = 0;
 
            if (lastScroll < e.ScrollY) { translation = 0 - ((e.ScrollY / HeaderScrollSpeed)); if (translation > 0)
                    translation = 0;
            }
            else
            {
                translation = 0 + ((e.ScrollY / HeaderScrollSpeed));
                if (translation > 0)
                    translation = 0;
            }
            Header.TranslateTo(Header.TranslationX, translation);
            lastScroll = e.ScrollY;
        }
    }
}

3. Ahora podemos usar Parallax en una de nuestras  Content Pages, como se muestra a  continuación:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:DevsDNA.XFParallax.Sample" xmlns:parallax="clr-namespace:DevsDNA.XFParallax;assembly=DevsDNA.XFParallax" x:Class="DevsDNA.XFParallax.Sample.MainPage">
 
  <parallax:ParallaxView x:Name="MainParallax" BodyMargin="0,180,0,0" HeaderScrollSpeed="4">
    <parallax:ParallaxView.HeaderContent>
      <ContentView HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" BackgroundColor="Blue">
        <Image Source="https://www.windowscentral.com/sites/wpcentral.com/files/styles/large/public/field/image/2016/02/microsoft-xamirin.jpg?itok=M_JRL3qE" Aspect="AspectFill" VerticalOptions="Start"/>
      </ContentView>
    </parallax:ParallaxView.HeaderContent> 
    <parallax:ParallaxView.BodyContent>
      <ContentView HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" BackgroundColor="White" HeightRequest="500">
        <ContentView.Margin>
          <!-- need to add specific margin to Windows to show header.-->
          <OnPlatform x:TypeArguments="Thickness" WinPhone="0,180,0,0"/>
        </ContentView.Margin>
        <Grid BackgroundColor="White">
                    <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition />
                </Grid.RowDefinitions>
                     
                <Image HorizontalOptions="Center" VerticalOptions="Start" Margin="0,-50,0,0" HeightRequest="100" WidthRequest="100" Grid.Row="0" Source="http://students.stmaryschs.org.uk/Y9_Scratch_To_VB/images/VS_Logo.png" Aspect="AspectFit"/>
                <Label Text="Xamarin Parallax Effect!" Grid.Row="1" HorizontalOptions="Center"/>
                     
        </Grid>
      </ContentView>
    </parallax:ParallaxView.BodyContent>
  </parallax:ParallaxView>
 
</ContentPage>

4. Ahora en el ¬†code behind invocamos¬†‚ÄúDestroyParallaxView‚ÄĚ en el m√©todo llamado ¬†MainParallax¬†en el metodo ‚ÄúOnDisappearing‚ÄĚ :

public partial class MainPage : ContentPage
  {
      public MainPage()
      {
          InitializeComponent();
      }
 
      protected override void OnDisappearing()
      {
          base.OnDisappearing();
          // To avoid memory leak:
          MainParallax.DestroyParallaxView();
      }
  }

Y así es como tenemos el hermoso efecto Parrallax en nuestra aplicacion Xamarin Forms.

Quieres verlo funcionando ?

Ejecuta tu codigo y dejame saber que tal !!

Cualquier duda o comentario puedes escribirme o dejar un comentario en la entrada !

Team Foundation Server 15

team

Team Foundation Server ayuda a  disminuir la repetición del trabajo, aumenta la transparencia en nuestra aplicación y aumenta la velocidad a la que se puede entregar un software de alta calidad en todo el ciclo de vida de aplicaciones.

Microsoft a¬†¬†lanzado el primer adelanto de Team Foundation Server “15”, su¬†pr√≥xima gran versi√≥n de TFS. Esta vista previa no es la entrada en funcionamiento, lo que significa que no tiene licencia para ser instalado en los sistemas de producci√≥n. Las actualizaci√≥nes a partir de esta versi√≥n para las versiones futuras ser√°n bloqueadas y sin soporte.

A Microsoft le encantaría que usted pueda probar esta vista previa.

sobre las nuevas características están:

  • B√ļsqueda de c√≥digo:¬†La b√ļsqueda de c√≥digos proporciona una b√ļsqueda r√°pida, flexible y precisa a trav√©s de todo el c√≥digo.¬†Para maximizar la colaboraci√≥n entre equipos y compartir c√≥digo, la b√ļsqueda de c√≥digos es r√°pida y eficiente puede localizar la informaci√≥n relevante a trav√©s de todos sus proyectos.
  • Servicio de gesti√≥n de paquetes:¬†El¬†nuevo servicio de administraci√≥n de paquetes le permite crear y compartir sin problemas, es similar a NuGet.
  • Tokens de acceso personal:¬†Tokens de acceso personal han sido una petici√≥n de los usuarios¬†que buscan una opci√≥n m√°s segura para las credenciales de autenticaci√≥n alternativa. Con esta¬†actualizaci√≥n ahora podemos crear tokens de acceso personales que limitan el tiempo de vida, cuenta, y el alcance de las actividades que est√° autorizado a acceder.
  • Mejoras de desarrollo √Āgil:¬†En TFS “15” Vista previa, han a√Īadido nuevas caracter√≠sticas y funcionalidad a elementos de trabajo y tableros Kanban.

    Nueva forma de elemento de trabajo

    La nueva forma de elemento de trabajo tiene un nuevo aspecto y tacto. Tambi√©n a√Īade algunas nuevas caracter√≠sticas:

    Una rica experiencia de discusión de elementos de trabajo.
    Experiencia de la historia mejorada.
    Mejora de código y construir la integración.

  • Mejoras de Paneles y widgets:¬†El¬†TFS “15”¬† ha llevado a cabo mejoras en varios widgets, como el azulejo de consulta y Pull Request widgets.¬†Se¬†a redise√Īado el cat√°logo de widgets para dar cabida a la creciente conjunto de widgets y entregar una mejor experiencia en general.¬†El nuevo dise√Īo incluye una experiencia de b√ļsqueda mejorada y se ha redise√Īado para que coincida con el dise√Īo de los¬†paneles de configuraci√≥n del widget.
  • Mejoras de Git: Algunos de los cambios m√°s importantes se han hecho en Git para el TFS “15” . Se incluyen un redise√Īo de la¬†Branches page y una nueva opci√≥n de¬†‚Äúsquash merge‚ÄĚ.Branches page¬†redise√Īada

    La Branches page¬†ha sido completamente redise√Īada. Tiene un pivote “mine” que muestra las ramas que ha creado, empujado, o favorita. Cada rama muestra su acumulaci√≥n y el tir√≥n solicitudes de estado, as√≠ como otros comandos como Delete.

  • Mejoras en el Build:¬†En esta versi√≥n, han aumentado el tama√Īo de los registros, agregaron Java¬†build templates y mejoras al soporte Xamarin para nombrar unos pocos cambios.
  • Mejoras en la Administraci√≥n: ¬†¬†Mejoras de correo electr√≥nico

    Han mejorado significativamente el formato y la facilidad de uso de correos electrónicos enviados por los servicios del equipo.

    Equipo de autorización de cambio de nombre del proyecto

    El control permiso que los usuarios pueden cambiar el nombre de un proyecto de equipo ha cambiado. Anteriormente, los usuarios con permiso de Edición de la información a nivel de proyecto para un proyecto de equipo podrían cambiar su nombre.

Esta versión es sólo en Inglés. Se puede descargar desde los siguientes enlaces:

 

Fuente|Microsoft